|
|
|
@ -64,16 +64,17 @@ const ( |
|
|
|
|
POP = 0x50 |
|
|
|
|
//DUP = 0x51
|
|
|
|
|
//SWAP = 0x52
|
|
|
|
|
MLOAD = 0x53 |
|
|
|
|
MSTORE = 0x54 |
|
|
|
|
MSTORE8 = 0x55 |
|
|
|
|
SLOAD = 0x56 |
|
|
|
|
SSTORE = 0x57 |
|
|
|
|
JUMP = 0x58 |
|
|
|
|
JUMPI = 0x59 |
|
|
|
|
PC = 0x5a |
|
|
|
|
MSIZE = 0x5b |
|
|
|
|
GAS = 0x5c |
|
|
|
|
MLOAD = 0x53 |
|
|
|
|
MSTORE = 0x54 |
|
|
|
|
MSTORE8 = 0x55 |
|
|
|
|
SLOAD = 0x56 |
|
|
|
|
SSTORE = 0x57 |
|
|
|
|
JUMP = 0x58 |
|
|
|
|
JUMPI = 0x59 |
|
|
|
|
PC = 0x5a |
|
|
|
|
MSIZE = 0x5b |
|
|
|
|
GAS = 0x5c |
|
|
|
|
JUMPDEST = 0x5d |
|
|
|
|
|
|
|
|
|
// 0x60 range
|
|
|
|
|
PUSH1 = 0x60 |
|
|
|
@ -144,11 +145,10 @@ const ( |
|
|
|
|
SWAP16 = 0x9f |
|
|
|
|
|
|
|
|
|
// 0xf0 range - closures
|
|
|
|
|
CREATE = 0xf0 |
|
|
|
|
CALL = 0xf1 |
|
|
|
|
RETURN = 0xf2 |
|
|
|
|
POST = 0xf3 |
|
|
|
|
CALLSTATELESS = 0xf4 |
|
|
|
|
CREATE = 0xf0 |
|
|
|
|
CALL = 0xf1 |
|
|
|
|
RETURN = 0xf2 |
|
|
|
|
CALLCODE = 0xf3 |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
LOG = 0xfe // XXX Unofficial
|
|
|
|
@ -213,16 +213,17 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
POP: "POP", |
|
|
|
|
//DUP: "DUP",
|
|
|
|
|
//SWAP: "SWAP",
|
|
|
|
|
MLOAD: "MLOAD", |
|
|
|
|
MSTORE: "MSTORE", |
|
|
|
|
MSTORE8: "MSTORE8", |
|
|
|
|
SLOAD: "SLOAD", |
|
|
|
|
SSTORE: "SSTORE", |
|
|
|
|
JUMP: "JUMP", |
|
|
|
|
JUMPI: "JUMPI", |
|
|
|
|
PC: "PC", |
|
|
|
|
MSIZE: "MSIZE", |
|
|
|
|
GAS: "GAS", |
|
|
|
|
MLOAD: "MLOAD", |
|
|
|
|
MSTORE: "MSTORE", |
|
|
|
|
MSTORE8: "MSTORE8", |
|
|
|
|
SLOAD: "SLOAD", |
|
|
|
|
SSTORE: "SSTORE", |
|
|
|
|
JUMP: "JUMP", |
|
|
|
|
JUMPI: "JUMPI", |
|
|
|
|
PC: "PC", |
|
|
|
|
MSIZE: "MSIZE", |
|
|
|
|
GAS: "GAS", |
|
|
|
|
JUMPDEST: "JUMPDEST", |
|
|
|
|
|
|
|
|
|
// 0x60 range - push
|
|
|
|
|
PUSH1: "PUSH1", |
|
|
|
@ -293,11 +294,10 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
SWAP16: "SWAP16", |
|
|
|
|
|
|
|
|
|
// 0xf0 range
|
|
|
|
|
CREATE: "CREATE", |
|
|
|
|
CALL: "CALL", |
|
|
|
|
RETURN: "RETURN", |
|
|
|
|
POST: "POST", |
|
|
|
|
CALLSTATELESS: "CALLSTATELESS", |
|
|
|
|
CREATE: "CREATE", |
|
|
|
|
CALL: "CALL", |
|
|
|
|
RETURN: "RETURN", |
|
|
|
|
CALLCODE: "CALLCODE", |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
LOG: "LOG", |
|
|
|
@ -312,158 +312,3 @@ func (o OpCode) String() string { |
|
|
|
|
|
|
|
|
|
return str |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Op codes for assembling
|
|
|
|
|
var OpCodes = map[string]byte{ |
|
|
|
|
// 0x0 range - arithmetic ops
|
|
|
|
|
"STOP": 0x00, |
|
|
|
|
"ADD": 0x01, |
|
|
|
|
"MUL": 0x02, |
|
|
|
|
"SUB": 0x03, |
|
|
|
|
"DIV": 0x04, |
|
|
|
|
"SDIV": 0x05, |
|
|
|
|
"MOD": 0x06, |
|
|
|
|
"SMOD": 0x07, |
|
|
|
|
"EXP": 0x08, |
|
|
|
|
"NEG": 0x09, |
|
|
|
|
"LT": 0x0a, |
|
|
|
|
"GT": 0x0b, |
|
|
|
|
"EQ": 0x0c, |
|
|
|
|
"NOT": 0x0d, |
|
|
|
|
|
|
|
|
|
// 0x10 range - bit ops
|
|
|
|
|
"AND": 0x10, |
|
|
|
|
"OR": 0x11, |
|
|
|
|
"XOR": 0x12, |
|
|
|
|
"BYTE": 0x13, |
|
|
|
|
"ADDMOD": 0x14, |
|
|
|
|
"MULMOD": 0x15, |
|
|
|
|
|
|
|
|
|
// 0x20 range - crypto
|
|
|
|
|
"SHA3": 0x20, |
|
|
|
|
|
|
|
|
|
// 0x30 range - closure state
|
|
|
|
|
"ADDRESS": 0x30, |
|
|
|
|
"BALANCE": 0x31, |
|
|
|
|
"ORIGIN": 0x32, |
|
|
|
|
"CALLER": 0x33, |
|
|
|
|
"CALLVALUE": 0x34, |
|
|
|
|
"CALLDATALOAD": 0x35, |
|
|
|
|
"CALLDATASIZE": 0x36, |
|
|
|
|
"CALLDATACOPY": 0x37, |
|
|
|
|
"CODESIZE": 0x38, |
|
|
|
|
"CODECOPY": 0x39, |
|
|
|
|
"GASPRICE": 0x3a, |
|
|
|
|
"EXTCODECOPY": 0x3b, |
|
|
|
|
"EXTCODESIZE": 0x3c, |
|
|
|
|
|
|
|
|
|
// 0x40 range - block operations
|
|
|
|
|
"PREVHASH": 0x40, |
|
|
|
|
"COINBASE": 0x41, |
|
|
|
|
"TIMESTAMP": 0x42, |
|
|
|
|
"NUMBER": 0x43, |
|
|
|
|
"DIFFICULTY": 0x44, |
|
|
|
|
"GASLIMIT": 0x45, |
|
|
|
|
|
|
|
|
|
// 0x50 range - 'storage' and execution
|
|
|
|
|
"POP": 0x51, |
|
|
|
|
"DUP": 0x52, |
|
|
|
|
"SWAP": 0x53, |
|
|
|
|
"MLOAD": 0x54, |
|
|
|
|
"MSTORE": 0x55, |
|
|
|
|
"MSTORE8": 0x56, |
|
|
|
|
"SLOAD": 0x57, |
|
|
|
|
"SSTORE": 0x58, |
|
|
|
|
"JUMP": 0x59, |
|
|
|
|
"JUMPI": 0x5a, |
|
|
|
|
"PC": 0x5b, |
|
|
|
|
"MSIZE": 0x5c, |
|
|
|
|
|
|
|
|
|
// 0x70 range - 'push'
|
|
|
|
|
"PUSH1": 0x60, |
|
|
|
|
"PUSH2": 0x61, |
|
|
|
|
"PUSH3": 0x62, |
|
|
|
|
"PUSH4": 0x63, |
|
|
|
|
"PUSH5": 0x64, |
|
|
|
|
"PUSH6": 0x65, |
|
|
|
|
"PUSH7": 0x66, |
|
|
|
|
"PUSH8": 0x67, |
|
|
|
|
"PUSH9": 0x68, |
|
|
|
|
"PUSH10": 0x69, |
|
|
|
|
"PUSH11": 0x6a, |
|
|
|
|
"PUSH12": 0x6b, |
|
|
|
|
"PUSH13": 0x6c, |
|
|
|
|
"PUSH14": 0x6d, |
|
|
|
|
"PUSH15": 0x6e, |
|
|
|
|
"PUSH16": 0x6f, |
|
|
|
|
"PUSH17": 0x70, |
|
|
|
|
"PUSH18": 0x71, |
|
|
|
|
"PUSH19": 0x72, |
|
|
|
|
"PUSH20": 0x73, |
|
|
|
|
"PUSH21": 0x74, |
|
|
|
|
"PUSH22": 0x75, |
|
|
|
|
"PUSH23": 0x76, |
|
|
|
|
"PUSH24": 0x77, |
|
|
|
|
"PUSH25": 0x78, |
|
|
|
|
"PUSH26": 0x70, |
|
|
|
|
"PUSH27": 0x7a, |
|
|
|
|
"PUSH28": 0x7b, |
|
|
|
|
"PUSH29": 0x7c, |
|
|
|
|
"PUSH30": 0x7d, |
|
|
|
|
"PUSH31": 0x7e, |
|
|
|
|
"PUSH32": 0x7f, |
|
|
|
|
|
|
|
|
|
"DUP1": 0x80, |
|
|
|
|
"DUP2": 0x81, |
|
|
|
|
"DUP3": 0x82, |
|
|
|
|
"DUP4": 0x83, |
|
|
|
|
"DUP5": 0x84, |
|
|
|
|
"DUP6": 0x85, |
|
|
|
|
"DUP7": 0x86, |
|
|
|
|
"DUP8": 0x87, |
|
|
|
|
"DUP9": 0x88, |
|
|
|
|
"DUP10": 0x89, |
|
|
|
|
"DUP11": 0x8a, |
|
|
|
|
"DUP12": 0x8b, |
|
|
|
|
"DUP13": 0x8c, |
|
|
|
|
"DUP14": 0x8d, |
|
|
|
|
"DUP15": 0x8e, |
|
|
|
|
"DUP16": 0x8f, |
|
|
|
|
|
|
|
|
|
"SWAP1": 0x90, |
|
|
|
|
"SWAP2": 0x91, |
|
|
|
|
"SWAP3": 0x92, |
|
|
|
|
"SWAP4": 0x93, |
|
|
|
|
"SWAP5": 0x94, |
|
|
|
|
"SWAP6": 0x95, |
|
|
|
|
"SWAP7": 0x96, |
|
|
|
|
"SWAP8": 0x97, |
|
|
|
|
"SWAP9": 0x98, |
|
|
|
|
"SWAP10": 0x99, |
|
|
|
|
"SWAP11": 0x9a, |
|
|
|
|
"SWAP12": 0x9b, |
|
|
|
|
"SWAP13": 0x9c, |
|
|
|
|
"SWAP14": 0x9d, |
|
|
|
|
"SWAP15": 0x9e, |
|
|
|
|
"SWAP16": 0x9f, |
|
|
|
|
|
|
|
|
|
// 0xf0 range - closures
|
|
|
|
|
"CREATE": 0xf0, |
|
|
|
|
"CALL": 0xf1, |
|
|
|
|
"RETURN": 0xf2, |
|
|
|
|
"POST": 0xf3, |
|
|
|
|
"CALLSTATELESS": 0xf4, |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
"LOG": 0xfe, |
|
|
|
|
"SUICIDE": 0x7f, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func IsOpCode(s string) bool { |
|
|
|
|
for key, _ := range OpCodes { |
|
|
|
|
if key == s { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|