|
|
|
@ -82,10 +82,11 @@ const ( |
|
|
|
|
GASPRICE |
|
|
|
|
EXTCODESIZE |
|
|
|
|
EXTCODECOPY |
|
|
|
|
RETURNDATASIZE |
|
|
|
|
RETURNDATACOPY |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const ( |
|
|
|
|
|
|
|
|
|
// 0x40 range - block operations
|
|
|
|
|
BLOCKHASH OpCode = 0x40 + iota |
|
|
|
|
COINBASE |
|
|
|
@ -239,27 +240,29 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
SHA3: "SHA3", |
|
|
|
|
|
|
|
|
|
// 0x30 range - closure state
|
|
|
|
|
ADDRESS: "ADDRESS", |
|
|
|
|
BALANCE: "BALANCE", |
|
|
|
|
ORIGIN: "ORIGIN", |
|
|
|
|
CALLER: "CALLER", |
|
|
|
|
CALLVALUE: "CALLVALUE", |
|
|
|
|
CALLDATALOAD: "CALLDATALOAD", |
|
|
|
|
CALLDATASIZE: "CALLDATASIZE", |
|
|
|
|
CALLDATACOPY: "CALLDATACOPY", |
|
|
|
|
CODESIZE: "CODESIZE", |
|
|
|
|
CODECOPY: "CODECOPY", |
|
|
|
|
GASPRICE: "GASPRICE", |
|
|
|
|
ADDRESS: "ADDRESS", |
|
|
|
|
BALANCE: "BALANCE", |
|
|
|
|
ORIGIN: "ORIGIN", |
|
|
|
|
CALLER: "CALLER", |
|
|
|
|
CALLVALUE: "CALLVALUE", |
|
|
|
|
CALLDATALOAD: "CALLDATALOAD", |
|
|
|
|
CALLDATASIZE: "CALLDATASIZE", |
|
|
|
|
CALLDATACOPY: "CALLDATACOPY", |
|
|
|
|
CODESIZE: "CODESIZE", |
|
|
|
|
CODECOPY: "CODECOPY", |
|
|
|
|
GASPRICE: "GASPRICE", |
|
|
|
|
EXTCODESIZE: "EXTCODESIZE", |
|
|
|
|
EXTCODECOPY: "EXTCODECOPY", |
|
|
|
|
RETURNDATASIZE: "RETURNDATASIZE", |
|
|
|
|
RETURNDATACOPY: "RETURNDATACOPY", |
|
|
|
|
|
|
|
|
|
// 0x40 range - block operations
|
|
|
|
|
BLOCKHASH: "BLOCKHASH", |
|
|
|
|
COINBASE: "COINBASE", |
|
|
|
|
TIMESTAMP: "TIMESTAMP", |
|
|
|
|
NUMBER: "NUMBER", |
|
|
|
|
DIFFICULTY: "DIFFICULTY", |
|
|
|
|
GASLIMIT: "GASLIMIT", |
|
|
|
|
EXTCODESIZE: "EXTCODESIZE", |
|
|
|
|
EXTCODECOPY: "EXTCODECOPY", |
|
|
|
|
BLOCKHASH: "BLOCKHASH", |
|
|
|
|
COINBASE: "COINBASE", |
|
|
|
|
TIMESTAMP: "TIMESTAMP", |
|
|
|
|
NUMBER: "NUMBER", |
|
|
|
|
DIFFICULTY: "DIFFICULTY", |
|
|
|
|
GASLIMIT: "GASLIMIT", |
|
|
|
|
|
|
|
|
|
// 0x50 range - 'storage' and execution
|
|
|
|
|
POP: "POP", |
|
|
|
@ -374,137 +377,139 @@ func (o OpCode) String() string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var stringToOp = map[string]OpCode{ |
|
|
|
|
"STOP": STOP, |
|
|
|
|
"ADD": ADD, |
|
|
|
|
"MUL": MUL, |
|
|
|
|
"SUB": SUB, |
|
|
|
|
"DIV": DIV, |
|
|
|
|
"SDIV": SDIV, |
|
|
|
|
"MOD": MOD, |
|
|
|
|
"SMOD": SMOD, |
|
|
|
|
"EXP": EXP, |
|
|
|
|
"NOT": NOT, |
|
|
|
|
"LT": LT, |
|
|
|
|
"GT": GT, |
|
|
|
|
"SLT": SLT, |
|
|
|
|
"SGT": SGT, |
|
|
|
|
"EQ": EQ, |
|
|
|
|
"ISZERO": ISZERO, |
|
|
|
|
"SIGNEXTEND": SIGNEXTEND, |
|
|
|
|
"AND": AND, |
|
|
|
|
"OR": OR, |
|
|
|
|
"XOR": XOR, |
|
|
|
|
"BYTE": BYTE, |
|
|
|
|
"ADDMOD": ADDMOD, |
|
|
|
|
"MULMOD": MULMOD, |
|
|
|
|
"SHA3": SHA3, |
|
|
|
|
"ADDRESS": ADDRESS, |
|
|
|
|
"BALANCE": BALANCE, |
|
|
|
|
"ORIGIN": ORIGIN, |
|
|
|
|
"CALLER": CALLER, |
|
|
|
|
"CALLVALUE": CALLVALUE, |
|
|
|
|
"CALLDATALOAD": CALLDATALOAD, |
|
|
|
|
"CALLDATASIZE": CALLDATASIZE, |
|
|
|
|
"CALLDATACOPY": CALLDATACOPY, |
|
|
|
|
"DELEGATECALL": DELEGATECALL, |
|
|
|
|
"STATICCALL": STATICCALL, |
|
|
|
|
"CODESIZE": CODESIZE, |
|
|
|
|
"CODECOPY": CODECOPY, |
|
|
|
|
"GASPRICE": GASPRICE, |
|
|
|
|
"BLOCKHASH": BLOCKHASH, |
|
|
|
|
"COINBASE": COINBASE, |
|
|
|
|
"TIMESTAMP": TIMESTAMP, |
|
|
|
|
"NUMBER": NUMBER, |
|
|
|
|
"DIFFICULTY": DIFFICULTY, |
|
|
|
|
"GASLIMIT": GASLIMIT, |
|
|
|
|
"EXTCODESIZE": EXTCODESIZE, |
|
|
|
|
"EXTCODECOPY": EXTCODECOPY, |
|
|
|
|
"POP": POP, |
|
|
|
|
"MLOAD": MLOAD, |
|
|
|
|
"MSTORE": MSTORE, |
|
|
|
|
"MSTORE8": MSTORE8, |
|
|
|
|
"SLOAD": SLOAD, |
|
|
|
|
"SSTORE": SSTORE, |
|
|
|
|
"JUMP": JUMP, |
|
|
|
|
"JUMPI": JUMPI, |
|
|
|
|
"PC": PC, |
|
|
|
|
"MSIZE": MSIZE, |
|
|
|
|
"GAS": GAS, |
|
|
|
|
"JUMPDEST": JUMPDEST, |
|
|
|
|
"PUSH1": PUSH1, |
|
|
|
|
"PUSH2": PUSH2, |
|
|
|
|
"PUSH3": PUSH3, |
|
|
|
|
"PUSH4": PUSH4, |
|
|
|
|
"PUSH5": PUSH5, |
|
|
|
|
"PUSH6": PUSH6, |
|
|
|
|
"PUSH7": PUSH7, |
|
|
|
|
"PUSH8": PUSH8, |
|
|
|
|
"PUSH9": PUSH9, |
|
|
|
|
"PUSH10": PUSH10, |
|
|
|
|
"PUSH11": PUSH11, |
|
|
|
|
"PUSH12": PUSH12, |
|
|
|
|
"PUSH13": PUSH13, |
|
|
|
|
"PUSH14": PUSH14, |
|
|
|
|
"PUSH15": PUSH15, |
|
|
|
|
"PUSH16": PUSH16, |
|
|
|
|
"PUSH17": PUSH17, |
|
|
|
|
"PUSH18": PUSH18, |
|
|
|
|
"PUSH19": PUSH19, |
|
|
|
|
"PUSH20": PUSH20, |
|
|
|
|
"PUSH21": PUSH21, |
|
|
|
|
"PUSH22": PUSH22, |
|
|
|
|
"PUSH23": PUSH23, |
|
|
|
|
"PUSH24": PUSH24, |
|
|
|
|
"PUSH25": PUSH25, |
|
|
|
|
"PUSH26": PUSH26, |
|
|
|
|
"PUSH27": PUSH27, |
|
|
|
|
"PUSH28": PUSH28, |
|
|
|
|
"PUSH29": PUSH29, |
|
|
|
|
"PUSH30": PUSH30, |
|
|
|
|
"PUSH31": PUSH31, |
|
|
|
|
"PUSH32": PUSH32, |
|
|
|
|
"DUP1": DUP1, |
|
|
|
|
"DUP2": DUP2, |
|
|
|
|
"DUP3": DUP3, |
|
|
|
|
"DUP4": DUP4, |
|
|
|
|
"DUP5": DUP5, |
|
|
|
|
"DUP6": DUP6, |
|
|
|
|
"DUP7": DUP7, |
|
|
|
|
"DUP8": DUP8, |
|
|
|
|
"DUP9": DUP9, |
|
|
|
|
"DUP10": DUP10, |
|
|
|
|
"DUP11": DUP11, |
|
|
|
|
"DUP12": DUP12, |
|
|
|
|
"DUP13": DUP13, |
|
|
|
|
"DUP14": DUP14, |
|
|
|
|
"DUP15": DUP15, |
|
|
|
|
"DUP16": DUP16, |
|
|
|
|
"SWAP1": SWAP1, |
|
|
|
|
"SWAP2": SWAP2, |
|
|
|
|
"SWAP3": SWAP3, |
|
|
|
|
"SWAP4": SWAP4, |
|
|
|
|
"SWAP5": SWAP5, |
|
|
|
|
"SWAP6": SWAP6, |
|
|
|
|
"SWAP7": SWAP7, |
|
|
|
|
"SWAP8": SWAP8, |
|
|
|
|
"SWAP9": SWAP9, |
|
|
|
|
"SWAP10": SWAP10, |
|
|
|
|
"SWAP11": SWAP11, |
|
|
|
|
"SWAP12": SWAP12, |
|
|
|
|
"SWAP13": SWAP13, |
|
|
|
|
"SWAP14": SWAP14, |
|
|
|
|
"SWAP15": SWAP15, |
|
|
|
|
"SWAP16": SWAP16, |
|
|
|
|
"LOG0": LOG0, |
|
|
|
|
"LOG1": LOG1, |
|
|
|
|
"LOG2": LOG2, |
|
|
|
|
"LOG3": LOG3, |
|
|
|
|
"LOG4": LOG4, |
|
|
|
|
"CREATE": CREATE, |
|
|
|
|
"CALL": CALL, |
|
|
|
|
"RETURN": RETURN, |
|
|
|
|
"CALLCODE": CALLCODE, |
|
|
|
|
"SELFDESTRUCT": SELFDESTRUCT, |
|
|
|
|
"STOP": STOP, |
|
|
|
|
"ADD": ADD, |
|
|
|
|
"MUL": MUL, |
|
|
|
|
"SUB": SUB, |
|
|
|
|
"DIV": DIV, |
|
|
|
|
"SDIV": SDIV, |
|
|
|
|
"MOD": MOD, |
|
|
|
|
"SMOD": SMOD, |
|
|
|
|
"EXP": EXP, |
|
|
|
|
"NOT": NOT, |
|
|
|
|
"LT": LT, |
|
|
|
|
"GT": GT, |
|
|
|
|
"SLT": SLT, |
|
|
|
|
"SGT": SGT, |
|
|
|
|
"EQ": EQ, |
|
|
|
|
"ISZERO": ISZERO, |
|
|
|
|
"SIGNEXTEND": SIGNEXTEND, |
|
|
|
|
"AND": AND, |
|
|
|
|
"OR": OR, |
|
|
|
|
"XOR": XOR, |
|
|
|
|
"BYTE": BYTE, |
|
|
|
|
"ADDMOD": ADDMOD, |
|
|
|
|
"MULMOD": MULMOD, |
|
|
|
|
"SHA3": SHA3, |
|
|
|
|
"ADDRESS": ADDRESS, |
|
|
|
|
"BALANCE": BALANCE, |
|
|
|
|
"ORIGIN": ORIGIN, |
|
|
|
|
"CALLER": CALLER, |
|
|
|
|
"CALLVALUE": CALLVALUE, |
|
|
|
|
"CALLDATALOAD": CALLDATALOAD, |
|
|
|
|
"CALLDATASIZE": CALLDATASIZE, |
|
|
|
|
"CALLDATACOPY": CALLDATACOPY, |
|
|
|
|
"DELEGATECALL": DELEGATECALL, |
|
|
|
|
"STATICCALL": STATICCALL, |
|
|
|
|
"CODESIZE": CODESIZE, |
|
|
|
|
"CODECOPY": CODECOPY, |
|
|
|
|
"GASPRICE": GASPRICE, |
|
|
|
|
"EXTCODESIZE": EXTCODESIZE, |
|
|
|
|
"EXTCODECOPY": EXTCODECOPY, |
|
|
|
|
"RETURNDATASIZE": RETURNDATASIZE, |
|
|
|
|
"RETURNDATACOPY": RETURNDATACOPY, |
|
|
|
|
"BLOCKHASH": BLOCKHASH, |
|
|
|
|
"COINBASE": COINBASE, |
|
|
|
|
"TIMESTAMP": TIMESTAMP, |
|
|
|
|
"NUMBER": NUMBER, |
|
|
|
|
"DIFFICULTY": DIFFICULTY, |
|
|
|
|
"GASLIMIT": GASLIMIT, |
|
|
|
|
"POP": POP, |
|
|
|
|
"MLOAD": MLOAD, |
|
|
|
|
"MSTORE": MSTORE, |
|
|
|
|
"MSTORE8": MSTORE8, |
|
|
|
|
"SLOAD": SLOAD, |
|
|
|
|
"SSTORE": SSTORE, |
|
|
|
|
"JUMP": JUMP, |
|
|
|
|
"JUMPI": JUMPI, |
|
|
|
|
"PC": PC, |
|
|
|
|
"MSIZE": MSIZE, |
|
|
|
|
"GAS": GAS, |
|
|
|
|
"JUMPDEST": JUMPDEST, |
|
|
|
|
"PUSH1": PUSH1, |
|
|
|
|
"PUSH2": PUSH2, |
|
|
|
|
"PUSH3": PUSH3, |
|
|
|
|
"PUSH4": PUSH4, |
|
|
|
|
"PUSH5": PUSH5, |
|
|
|
|
"PUSH6": PUSH6, |
|
|
|
|
"PUSH7": PUSH7, |
|
|
|
|
"PUSH8": PUSH8, |
|
|
|
|
"PUSH9": PUSH9, |
|
|
|
|
"PUSH10": PUSH10, |
|
|
|
|
"PUSH11": PUSH11, |
|
|
|
|
"PUSH12": PUSH12, |
|
|
|
|
"PUSH13": PUSH13, |
|
|
|
|
"PUSH14": PUSH14, |
|
|
|
|
"PUSH15": PUSH15, |
|
|
|
|
"PUSH16": PUSH16, |
|
|
|
|
"PUSH17": PUSH17, |
|
|
|
|
"PUSH18": PUSH18, |
|
|
|
|
"PUSH19": PUSH19, |
|
|
|
|
"PUSH20": PUSH20, |
|
|
|
|
"PUSH21": PUSH21, |
|
|
|
|
"PUSH22": PUSH22, |
|
|
|
|
"PUSH23": PUSH23, |
|
|
|
|
"PUSH24": PUSH24, |
|
|
|
|
"PUSH25": PUSH25, |
|
|
|
|
"PUSH26": PUSH26, |
|
|
|
|
"PUSH27": PUSH27, |
|
|
|
|
"PUSH28": PUSH28, |
|
|
|
|
"PUSH29": PUSH29, |
|
|
|
|
"PUSH30": PUSH30, |
|
|
|
|
"PUSH31": PUSH31, |
|
|
|
|
"PUSH32": PUSH32, |
|
|
|
|
"DUP1": DUP1, |
|
|
|
|
"DUP2": DUP2, |
|
|
|
|
"DUP3": DUP3, |
|
|
|
|
"DUP4": DUP4, |
|
|
|
|
"DUP5": DUP5, |
|
|
|
|
"DUP6": DUP6, |
|
|
|
|
"DUP7": DUP7, |
|
|
|
|
"DUP8": DUP8, |
|
|
|
|
"DUP9": DUP9, |
|
|
|
|
"DUP10": DUP10, |
|
|
|
|
"DUP11": DUP11, |
|
|
|
|
"DUP12": DUP12, |
|
|
|
|
"DUP13": DUP13, |
|
|
|
|
"DUP14": DUP14, |
|
|
|
|
"DUP15": DUP15, |
|
|
|
|
"DUP16": DUP16, |
|
|
|
|
"SWAP1": SWAP1, |
|
|
|
|
"SWAP2": SWAP2, |
|
|
|
|
"SWAP3": SWAP3, |
|
|
|
|
"SWAP4": SWAP4, |
|
|
|
|
"SWAP5": SWAP5, |
|
|
|
|
"SWAP6": SWAP6, |
|
|
|
|
"SWAP7": SWAP7, |
|
|
|
|
"SWAP8": SWAP8, |
|
|
|
|
"SWAP9": SWAP9, |
|
|
|
|
"SWAP10": SWAP10, |
|
|
|
|
"SWAP11": SWAP11, |
|
|
|
|
"SWAP12": SWAP12, |
|
|
|
|
"SWAP13": SWAP13, |
|
|
|
|
"SWAP14": SWAP14, |
|
|
|
|
"SWAP15": SWAP15, |
|
|
|
|
"SWAP16": SWAP16, |
|
|
|
|
"LOG0": LOG0, |
|
|
|
|
"LOG1": LOG1, |
|
|
|
|
"LOG2": LOG2, |
|
|
|
|
"LOG3": LOG3, |
|
|
|
|
"LOG4": LOG4, |
|
|
|
|
"CREATE": CREATE, |
|
|
|
|
"CALL": CALL, |
|
|
|
|
"RETURN": RETURN, |
|
|
|
|
"CALLCODE": CALLCODE, |
|
|
|
|
"SELFDESTRUCT": SELFDESTRUCT, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func StringToOp(str string) OpCode { |
|
|
|
|