Eip 1344 (ChainID opcode) (#19921)
* core/vm: implement EIP 1344 (ChainID opcode) * core/vm: formatting
This commit is contained in:
		
				
					committed by
					
						 Péter Szilágyi
						Péter Szilágyi
					
				
			
			
				
	
			
			
			
						parent
						
							17589aa75f
						
					
				
				
					commit
					081642ed25
				
			| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -101,6 +101,7 @@ const ( | ||||
| 	NUMBER | ||||
| 	DIFFICULTY | ||||
| 	GASLIMIT | ||||
| 	CHAINID     = 0x46 | ||||
| 	SELFBALANCE = 0x47 | ||||
| ) | ||||
|  | ||||
| @@ -278,6 +279,7 @@ var opCodeToString = map[OpCode]string{ | ||||
| 	NUMBER:      "NUMBER", | ||||
| 	DIFFICULTY:  "DIFFICULTY", | ||||
| 	GASLIMIT:    "GASLIMIT", | ||||
| 	CHAINID:     "CHAINID", | ||||
| 	SELFBALANCE: "SELFBALANCE", | ||||
|  | ||||
| 	// 0x50 range - 'storage' and execution. | ||||
| @@ -430,6 +432,7 @@ var stringToOp = map[string]OpCode{ | ||||
| 	"CALLDATALOAD":   CALLDATALOAD, | ||||
| 	"CALLDATASIZE":   CALLDATASIZE, | ||||
| 	"CALLDATACOPY":   CALLDATACOPY, | ||||
| 	"CHAINID":        CHAINID, | ||||
| 	"DELEGATECALL":   DELEGATECALL, | ||||
| 	"STATICCALL":     STATICCALL, | ||||
| 	"CODESIZE":       CODESIZE, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user