|
|
|
@ -27,10 +27,12 @@ const ( |
|
|
|
|
NOT = 0x0f |
|
|
|
|
|
|
|
|
|
// 0x10 range - bit ops
|
|
|
|
|
AND = 0x10 |
|
|
|
|
OR = 0x11 |
|
|
|
|
XOR = 0x12 |
|
|
|
|
BYTE = 0x13 |
|
|
|
|
AND = 0x10 |
|
|
|
|
OR = 0x11 |
|
|
|
|
XOR = 0x12 |
|
|
|
|
BYTE = 0x13 |
|
|
|
|
ADDMOD = 0x14 |
|
|
|
|
MULMOD = 0x15 |
|
|
|
|
|
|
|
|
|
// 0x20 range - crypto
|
|
|
|
|
SHA3 = 0x20 |
|
|
|
@ -47,6 +49,8 @@ const ( |
|
|
|
|
CODESIZE = 0x38 |
|
|
|
|
CODECOPY = 0x39 |
|
|
|
|
GASPRICE = 0x3a |
|
|
|
|
EXTCODECOPY = 0x3b |
|
|
|
|
EXTCODESIZE = 0x3c |
|
|
|
|
|
|
|
|
|
// 0x40 range - block operations
|
|
|
|
|
PREVHASH = 0x40 |
|
|
|
@ -57,9 +61,9 @@ const ( |
|
|
|
|
GASLIMIT = 0x45 |
|
|
|
|
|
|
|
|
|
// 0x50 range - 'storage' and execution
|
|
|
|
|
POP = 0x50 |
|
|
|
|
DUP = 0x51 |
|
|
|
|
SWAP = 0x52 |
|
|
|
|
POP = 0x50 |
|
|
|
|
//DUP = 0x51
|
|
|
|
|
//SWAP = 0x52
|
|
|
|
|
MLOAD = 0x53 |
|
|
|
|
MSTORE = 0x54 |
|
|
|
|
MSTORE8 = 0x55 |
|
|
|
@ -105,10 +109,46 @@ const ( |
|
|
|
|
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 |
|
|
|
|
CREATE = 0xf0 |
|
|
|
|
CALL = 0xf1 |
|
|
|
|
RETURN = 0xf2 |
|
|
|
|
POST = 0xf3 |
|
|
|
|
CALLSTATELESS = 0xf4 |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
LOG = 0xfe // XXX Unofficial
|
|
|
|
@ -136,10 +176,12 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
NOT: "NOT", |
|
|
|
|
|
|
|
|
|
// 0x10 range - bit ops
|
|
|
|
|
AND: "AND", |
|
|
|
|
OR: "OR", |
|
|
|
|
XOR: "XOR", |
|
|
|
|
BYTE: "BYTE", |
|
|
|
|
AND: "AND", |
|
|
|
|
OR: "OR", |
|
|
|
|
XOR: "XOR", |
|
|
|
|
BYTE: "BYTE", |
|
|
|
|
ADDMOD: "ADDMOD", |
|
|
|
|
MULMOD: "MULMOD", |
|
|
|
|
|
|
|
|
|
// 0x20 range - crypto
|
|
|
|
|
SHA3: "SHA3", |
|
|
|
@ -158,17 +200,19 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
GASPRICE: "TXGASPRICE", |
|
|
|
|
|
|
|
|
|
// 0x40 range - block operations
|
|
|
|
|
PREVHASH: "PREVHASH", |
|
|
|
|
COINBASE: "COINBASE", |
|
|
|
|
TIMESTAMP: "TIMESTAMP", |
|
|
|
|
NUMBER: "NUMBER", |
|
|
|
|
DIFFICULTY: "DIFFICULTY", |
|
|
|
|
GASLIMIT: "GASLIMIT", |
|
|
|
|
PREVHASH: "PREVHASH", |
|
|
|
|
COINBASE: "COINBASE", |
|
|
|
|
TIMESTAMP: "TIMESTAMP", |
|
|
|
|
NUMBER: "NUMBER", |
|
|
|
|
DIFFICULTY: "DIFFICULTY", |
|
|
|
|
GASLIMIT: "GASLIMIT", |
|
|
|
|
EXTCODESIZE: "EXTCODESIZE", |
|
|
|
|
EXTCODECOPY: "EXTCODECOPY", |
|
|
|
|
|
|
|
|
|
// 0x50 range - 'storage' and execution
|
|
|
|
|
POP: "POP", |
|
|
|
|
DUP: "DUP", |
|
|
|
|
SWAP: "SWAP", |
|
|
|
|
POP: "POP", |
|
|
|
|
//DUP: "DUP",
|
|
|
|
|
//SWAP: "SWAP",
|
|
|
|
|
MLOAD: "MLOAD", |
|
|
|
|
MSTORE: "MSTORE", |
|
|
|
|
MSTORE8: "MSTORE8", |
|
|
|
@ -214,10 +258,46 @@ var opCodeToString = map[OpCode]string{ |
|
|
|
|
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", |
|
|
|
|
|
|
|
|
|
// 0xf0 range
|
|
|
|
|
CREATE: "CREATE", |
|
|
|
|
CALL: "CALL", |
|
|
|
|
RETURN: "RETURN", |
|
|
|
|
CREATE: "CREATE", |
|
|
|
|
CALL: "CALL", |
|
|
|
|
RETURN: "RETURN", |
|
|
|
|
POST: "POST", |
|
|
|
|
CALLSTATELESS: "CALLSTATELESS", |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
LOG: "LOG", |
|
|
|
@ -232,115 +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, |
|
|
|
|
|
|
|
|
|
// 0x20 range - crypto
|
|
|
|
|
"SHA3": 0x20, |
|
|
|
|
|
|
|
|
|
// 0x30 range - closure state
|
|
|
|
|
"ADDRESS": 0x30, |
|
|
|
|
"BALANCE": 0x31, |
|
|
|
|
"ORIGIN": 0x32, |
|
|
|
|
"CALLER": 0x33, |
|
|
|
|
"CALLVALUE": 0x34, |
|
|
|
|
"CALLDATALOAD": 0x35, |
|
|
|
|
"CALLDATASIZE": 0x36, |
|
|
|
|
"GASPRICE": 0x38, |
|
|
|
|
|
|
|
|
|
// 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, |
|
|
|
|
|
|
|
|
|
// 0xf0 range - closures
|
|
|
|
|
"CREATE": 0xf0, |
|
|
|
|
"CALL": 0xf1, |
|
|
|
|
"RETURN": 0xf2, |
|
|
|
|
|
|
|
|
|
// 0x70 range - other
|
|
|
|
|
"LOG": 0xfe, |
|
|
|
|
"SUICIDE": 0x7f, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func IsOpCode(s string) bool { |
|
|
|
|
for key, _ := range OpCodes { |
|
|
|
|
if key == s { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|