|
|
@@ -18,7 +18,7 @@ package vm
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
-
|
|
|
+
|
|
|
"github.com/ethereum/go-ethereum/params"
|
|
|
)
|
|
|
|
|
|
@@ -29,6 +29,8 @@ func EnableEIP(eipNum int, jt *JumpTable) error {
|
|
|
switch eipNum {
|
|
|
case 1884:
|
|
|
enable1884(jt)
|
|
|
+ case 1344:
|
|
|
+ enable1344(jt)
|
|
|
default:
|
|
|
return fmt.Errorf("undefined eip %d", eipNum)
|
|
|
}
|
|
|
@@ -61,3 +63,23 @@ func opSelfBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract,
|
|
|
stack.push(balance)
|
|
|
return nil, nil
|
|
|
}
|
|
|
+
|
|
|
+// enable1344 applies EIP-1344 (ChainID Opcode)
|
|
|
+// - Adds an opcode that returns the current chain’s EIP-155 unique identifier
|
|
|
+func enable1344(jt *JumpTable) {
|
|
|
+ // New opcode
|
|
|
+ jt[CHAINID] = operation{
|
|
|
+ execute: opChainID,
|
|
|
+ constantGas: GasQuickStep,
|
|
|
+ minStack: minStack(0, 1),
|
|
|
+ maxStack: maxStack(0, 1),
|
|
|
+ valid: true,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// opChainID implements CHAINID opcode
|
|
|
+func opChainID(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
|
|
|
+ chainId := interpreter.intPool.get().Set(interpreter.evm.chainConfig.ChainID)
|
|
|
+ stack.push(chainId)
|
|
|
+ return nil, nil
|
|
|
+}
|