|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|