Eip 1344 (ChainID opcode) (#19921)

* core/vm: implement EIP 1344 (ChainID opcode)

* core/vm: formatting
This commit is contained in:
Martin Holst Swende 2019-08-08 15:20:28 +02:00 committed by Péter Szilágyi
parent 17589aa75f
commit 081642ed25
2 changed files with 26 additions and 1 deletions

@ -18,7 +18,7 @@ package vm
import ( import (
"fmt" "fmt"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
) )
@ -29,6 +29,8 @@ func EnableEIP(eipNum int, jt *JumpTable) error {
switch eipNum { switch eipNum {
case 1884: case 1884:
enable1884(jt) enable1884(jt)
case 1344:
enable1344(jt)
default: default:
return fmt.Errorf("undefined eip %d", eipNum) return fmt.Errorf("undefined eip %d", eipNum)
} }
@ -61,3 +63,23 @@ func opSelfBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract,
stack.push(balance) stack.push(balance)
return nil, nil return nil, nil
} }
// enable1344 applies EIP-1344 (ChainID Opcode)
// - Adds an opcode that returns the current chains 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
}

@ -101,6 +101,7 @@ const (
NUMBER NUMBER
DIFFICULTY DIFFICULTY
GASLIMIT GASLIMIT
CHAINID = 0x46
SELFBALANCE = 0x47 SELFBALANCE = 0x47
) )
@ -278,6 +279,7 @@ var opCodeToString = map[OpCode]string{
NUMBER: "NUMBER", NUMBER: "NUMBER",
DIFFICULTY: "DIFFICULTY", DIFFICULTY: "DIFFICULTY",
GASLIMIT: "GASLIMIT", GASLIMIT: "GASLIMIT",
CHAINID: "CHAINID",
SELFBALANCE: "SELFBALANCE", SELFBALANCE: "SELFBALANCE",
// 0x50 range - 'storage' and execution. // 0x50 range - 'storage' and execution.
@ -430,6 +432,7 @@ var stringToOp = map[string]OpCode{
"CALLDATALOAD": CALLDATALOAD, "CALLDATALOAD": CALLDATALOAD,
"CALLDATASIZE": CALLDATASIZE, "CALLDATASIZE": CALLDATASIZE,
"CALLDATACOPY": CALLDATACOPY, "CALLDATACOPY": CALLDATACOPY,
"CHAINID": CHAINID,
"DELEGATECALL": DELEGATECALL, "DELEGATECALL": DELEGATECALL,
"STATICCALL": STATICCALL, "STATICCALL": STATICCALL,
"CODESIZE": CODESIZE, "CODESIZE": CODESIZE,