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