00 | 0 | STOP | | | STOP() | | |
01 | 3 | ADD | a, b | a + b | a + b | | |
02 | 5 | MUL | a, b | a * b | a * b | | |
03 | 3 | SUB | a, b | a - b | a - b | | |
04 | 5 | DIV | a, b | a / b | a / b | | |
05 | 5 | SDIV | a, b | a / b | a / b | | |
06 | 5 | MOD | a, b | a % b | a % b | | |
07 | 5 | SMOD | a, b | a % b | a % b | | |
08 | 8 | ADDMOD | a, b, N | (a + b) % N | (a + b) % N | | |
09 | 8 | MULMOD | a, b, N | (a * b) % N | (a * b) % N | | |
0A | 10 | EXP | a, b | a ** b | a ** b | | |
0B | 5 | SIGNEXTEND | b, x | y | y = SIGNEXTEND(x, b) | | |
0C-0F | | | | | | | |
10 | 3 | LT | a, b | a < b | a < b | | |
11 | 3 | GT | a, b | a > b | a > b | | |
12 | 3 | SLT | a, b | a < b | a < b | | |
13 | 3 | SGT | a, b | a > b | a > b | | |
14 | 3 | EQ | a, b | a == b | a == b | | |
15 | 3 | ISZERO | a | a == 0 | a == 0 | | |
16 | 3 | AND | a, b | a & b | a & b | | |
17 | 3 | OR | a, b | a | b | a | b | | |
18 | 3 | XOR | a, b | a ^ b | a ^ b | | |
19 | 3 | NOT | a | ~a | ~a | | |
1A | 3 | BYTE | i, x | y | y = (x >> (248 - i * 8)) & 0xFF | | |
1B | 3 | SHL | i, x | x << i | x << i | | |
1C | 3 | SHR | i, x | x >> i | x >> i | | |
1D | 3 | SAR | i, x | x >> i | x >> i | | |
1E-1F | | | | | | | |
20 | 30 | SHA3 | src, length | hash | hash = keccak256(memory[src:src+length]) | | |
30 | 2 | ADDRESS | | address(this) | address(this) | | |
31 | 400 | BALANCE | addr | address(addr).balance | address(addr).balance | | |
32 | 2 | ORIGIN | | tx.origin | tx.origin | | |
33 | 2 | CALLER | | msg.caller | msg.caller | | |
34 | 2 | CALLVALUE | | msg.value | msg.value | | |
35 | 3 | CALLDATALOAD | i | value | value = uint256(msg.data[i:i+32]) | | |
36 | 2 | CALLDATASIZE | | msg.data.size | msg.data.size | | |
37 | 3 | CALLDATACOPY | dst, src, length | | memory[dst:dst+length] = msg.data[src:src+length] | | |
38 | 2 | CODESIZE | | address(this).code.size | address(this).code.size | | |
39 | 3 | CODECOPY | dst, src, length | | memory[dst:dst+length] = address(this).code[src:src+length] | | |
3A | 2 | GASPRICE | | tx.gasprice | tx.gasprice | | |
3B | 700 | EXTCODESIZE | addr | address(addr).code.size | address(addr).code.size | | |
3C | 700 | EXTCODECOPY | addr, dst, src, length | | memory[dst:dst+length] = address(addr).code[src:src+length] | | |
3D | 2 | RETURNDATASIZE | | RETURNDATASIZE() | RETURNDATASIZE() | | |
3E | 3 | RETURNDATACOPY | dst, src, length | | memory[dst:dst+length] = RETURNDATA[src:src+length] | | |
3F | 400 | EXTCODEHASH | addr | hash | hash = address(addr).exists ? keccak256(address(addr).code) : 0 | | |
40 | 20 | BLOCKHASH | blockNumber | hash | hash = block.blockHash(blockNumber) | | |
41 | 2 | COINBASE | | block.coinbase | block.coinbase | | |
42 | 2 | TIMESTAMP | | block.timestamp | block.timestamp | | |
43 | 2 | NUMBER | | block.number | block.number | | |
44 | 2 | PREVRANDAO | | block.prevrandao | block.prevrandao | | |
45 | 2 | GASLIMIT | | block.gaslimit | block.gaslimit | | |
46 | 2 | CHAINID | | block.chainid | block.chainid | | |
47 | 5 | SELFBALANCE | | address(this).balance | address(this).balance | | |
48 | 2 | BASEFEE | | block.basefee | block.basefee | | |
49 | 3 | BLOBHASH | i | hash | hash = blobhash(i) | | cancun |
4A | 2 | BLOBBASEFEE | | block.blobbasefee | block.blobbasefee | | cancun |
4B-4F | | | | | | | |
50 | 2 | POP | _ | | POP() | | |
51 | 3 | MLOAD | i | value | value = uint256(memory[i:i+32]) | | |
52 | 3 | MSTORE | i, value | | memory[i:i+32] = value | | |
53 | 3 | MSTORE8 | i, value | | memory[i] = value & 0xff | | |
54 | 200 | SLOAD | key | value | value = storage[key] | | |
55 | 20000 | SSTORE | key, value | | storage[key] = value | | |
56 | 8 | JUMP | destination | | PC = destination | | |
57 | 10 | JUMPI | destination, condition | | PC = cond ? destination : PC + 1 | | |
58 | 2 | PC | | PC | PC | | |
59 | 2 | MSIZE | | size | size = MSIZE() | | |
5A | 2 | GAS | | gasRemaining | gasRemaining = GAS() | | |
5B | 1 | JUMPDEST | | | | | |
5C | 100 | TLOAD | key | value | value=transient[key] | | cancun |
5D | 100 | TSTORE | key, value | | transient[key]=value | | cancun |
5E | 3 | MCOPY | dst, src, length | | memory[dst:dst+length] = memory[src:src+length] | | cancun |
5F | 2 | PUSH0 | | 0 | PUSH(0) | | shanghai |
60 | 3 | PUSH1 | | uint8 | PUSH(uint8) | | |
61 | 3 | PUSH2 | | uint16 | PUSH(uint16) | | |
62 | 3 | PUSH3 | | uint24 | PUSH(uint24) | | |
63 | 3 | PUSH4 | | uint32 | PUSH(uint32) | | |
64 | 3 | PUSH5 | | uint40 | PUSH(uint40) | | |
65 | 3 | PUSH6 | | uint48 | PUSH(uint48) | | |
66 | 3 | PUSH7 | | uint56 | PUSH(uint56) | | |
67 | 3 | PUSH8 | | uint64 | PUSH(uint64) | | |
68 | 3 | PUSH9 | | uint72 | PUSH(uint72) | | |
69 | 3 | PUSH10 | | uint80 | PUSH(uint80) | | |
6A | 3 | PUSH11 | | uint88 | PUSH(uint88) | | |
6B | 3 | PUSH12 | | uint96 | PUSH(uint96) | | |
6C | 3 | PUSH13 | | uint104 | PUSH(uint104) | | |
6D | 3 | PUSH14 | | uint112 | PUSH(uint112) | | |
6E | 3 | PUSH15 | | uint120 | PUSH(uint120) | | |
6F | 3 | PUSH16 | | uint128 | PUSH(uint128) | | |
70 | 3 | PUSH17 | | uint136 | PUSH(uint136) | | |
71 | 3 | PUSH18 | | uint144 | PUSH(uint144) | | |
72 | 3 | PUSH19 | | uint152 | PUSH(uint152) | | |
73 | 3 | PUSH20 | | uint160 | PUSH(uint160) | | |
74 | 3 | PUSH21 | | uint168 | PUSH(uint168) | | |
75 | 3 | PUSH22 | | uint176 | PUSH(uint176) | | |
76 | 3 | PUSH23 | | uint184 | PUSH(uint184) | | |
77 | 3 | PUSH24 | | uint192 | PUSH(uint192) | | |
78 | 3 | PUSH25 | | uint200 | PUSH(uint200) | | |
79 | 3 | PUSH26 | | uint208 | PUSH(uint208) | | |
7A | 3 | PUSH27 | | uint216 | PUSH(uint216) | | |
7B | 3 | PUSH28 | | uint224 | PUSH(uint224) | | |
7C | 3 | PUSH29 | | uint232 | PUSH(uint232) | | |
7D | 3 | PUSH30 | | uint240 | PUSH(uint240) | | |
7E | 3 | PUSH31 | | uint248 | PUSH(uint248) | | |
7F | 3 | PUSH32 | | uint256 | PUSH(uint256) | | |
80 | 3 | DUP1 | value | value, value | PUSH(value) | | |
81 | 3 | DUP2 | _, value | value, _, value | PUSH(value) | | |
82 | 3 | DUP3 | _, _, value | value, _, _, value | PUSH(value) | | |
83 | 3 | DUP4 | _, _, _, value | value, _, _, _, value | PUSH(value) | | |
84 | 3 | DUP5 | ..., value | value, ..., value | PUSH(value) | | |
85 | 3 | DUP6 | ..., value | value, ..., value | PUSH(value) | | |
86 | 3 | DUP7 | ..., value | value, ..., value | PUSH(value) | | |
87 | 3 | DUP8 | ..., value | value, ..., value | PUSH(value) | | |
88 | 3 | DUP9 | ..., value | value, ..., value | PUSH(value) | | |
89 | 3 | DUP10 | ..., value | value, ..., value | PUSH(value) | | |
8A | 3 | DUP11 | ..., value | value, ..., value | PUSH(value) | | |
8B | 3 | DUP12 | ..., value | value, ..., value | PUSH(value) | | |
8C | 3 | DUP13 | ..., value | value, ..., value | PUSH(value) | | |
8D | 3 | DUP14 | ..., value | value, ..., value | PUSH(value) | | |
8E | 3 | DUP15 | ..., value | value, ..., value | PUSH(value) | | |
8F | 3 | DUP16 | ..., value | value, ..., value | PUSH(value) | | |
90 | 3 | SWAP1 | a, b | b, a | a, b = b, a | | |
91 | 3 | SWAP2 | a, _, b | b, _, a | a, b = b, a | | |
92 | 3 | SWAP3 | a, _, _, b | b, _, _, a | a, b = b, a | | |
93 | 3 | SWAP4 | a, _, _, _, b | b, _, _, _, a | a, b = b, a | | |
94 | 3 | SWAP5 | a, ..., b | b, ..., a | a, b = b, a | | |
95 | 3 | SWAP6 | a, ..., b | b, ..., a | a, b = b, a | | |
96 | 3 | SWAP7 | a, ..., b | b, ..., a | a, b = b, a | | |
97 | 3 | SWAP8 | a, ..., b | b, ..., a | a, b = b, a | | |
98 | 3 | SWAP9 | a, ..., b | b, ..., a | a, b = b, a | | |
99 | 3 | SWAP10 | a, ..., b | b, ..., a | a, b = b, a | | |
9A | 3 | SWAP11 | a, ..., b | b, ..., a | a, b = b, a | | |
9B | 3 | SWAP12 | a, ..., b | b, ..., a | a, b = b, a | | |
9C | 3 | SWAP13 | a, ..., b | b, ..., a | a, b = b, a | | |
9D | 3 | SWAP14 | a, ..., b | b, ..., a | a, b = b, a | | |
9E | 3 | SWAP15 | a, ..., b | b, ..., a | a, b = b, a | | |
9F | 3 | SWAP16 | a, ..., b | b, ..., a | a, b = b, a | | |
A0 | 375 | LOG0 | src, length | | LOG0(memory[src:src+length]) | | |
A1 | 750 | LOG1 | src, length, topic0 | | LOG1(memory[src:src+length], topic0) | | |
A2 | 1125 | LOG2 | src, length, topic0, topic1 | | LOG2(memory[src:src+length], topic0, topic1) | | |
A3 | 1500 | LOG3 | src, length, topic0, topic1, topic2 | | LOG3(memory[src:src+length], topic0, topic1, topic2) | | |
A4 | 1875 | LOG4 | src, length, topic0, topic1, topic2, topic3 | | LOG4(memory[src:src+length], topic0, topic1, topic2, topic3) | | |
A5-EF | | | | | | | |
F0 | 32000 | CREATE | value, src, length | addr | addr = new{value:value}(memory[src:src+length]) | | |
F1 | 700 | CALL | gas, addr, value, src, srcLength, dst, dstLength | success | success, memory[dst:dst+dstLength] = address(addr).call{gas:gas,value:value}(memory[src:src+srcLength]) | | |
F2 | 700 | CALLCODE | gas, addr, value, src, srcLength, dst, dstLength | success | success, memory[dst:dst+dstLength] = address(addr).callcode{gas:gas,value:value}(memory[src:src+srcLength]) | subCall.code = address(addr).code | |
F3 | 0 | RETURN | src, length | | return memory[src:src+length] | | |
F4 | 700 | DELEGATECALL | gas, addr, src, srcLength, dst, dstLength | | success, memory[dst:dst+dstLength] = address(addr).delegatecall{gas:gas}(memory[src:src+srcLength]) | subCall.code = address(addr).code subCall.msg.sender = msg.sender | |
F5 | 32000 | CREATE2 | value, src, length, salt | addr | addr = new{value:value,salt:salt}(memory[src:src+length]) | | |
F6 | 3200 | AUTH | authority, src, length | success | success = auth(authority,memory[src:src+length]) | authorized = authority | |
F7 | 700 | AUTHCALL | gas, addr, value, src, srcLength, dst, dstLength | success | success, memory[dst:dst+dstLength] = address(addr).authcall{gas:gas,value:value}(memory[src:src+srcLength]) | subCall.tx.origin = authorized subCall.msg.sender = authorized | |
F8-F9 | | | | | | | |
FA | 700 | STATICCALL | gas, addr, src, srcLength, dst, dstLength | success | success, memory[dst:dst+dstLength] = address(addr).staticcall{gas:gas}(memory[src:src+srcLength]) | | |
FB-FC | | | | | | | |
FD | 0 | REVERT | src, length | | revert(memory[src:src+length]) | | |
FE | all | INVALID | | | | | |
FF | 5000 | SELFDESTRUCT | addr | | selfdestruct(address(addr)) | | |