Appendix A: Ethereum EVM Opcodes and Gas Consumption
This appendix is based on the consolidation work done by the people of https://github.com/trailofbits/evm-opcodes as a reference for Ethereum VM (EVM) opcodes and instruction information licensed under the Apache License 2.0.
Opcode | Name | Description | Extra info | Gas |
---|---|---|---|---|
|
STOP |
Halts execution |
- |
0 |
|
ADD |
Addition operation |
- |
3 |
|
MUL |
Multiplication operation |
- |
5 |
|
SUB |
Subtraction operation |
- |
3 |
|
DIV |
Integer division operation |
- |
5 |
|
SDIV |
Signed integer division operation (truncated) |
- |
5 |
|
MOD |
Modulo remainder operation |
- |
5 |
|
SMOD |
Signed modulo remainder operation |
- |
5 |
|
ADDMOD |
Modulo addition operation |
- |
8 |
|
MULMOD |
Modulo multiplication operation |
- |
8 |
|
EXP |
Exponential operation |
- |
10*** |
|
SIGNEXTEND |
Extend length of two’s complement signed integer |
- |
5 |
|
Unused |
Unused |
- |
|
|
LT |
Less-than comparison |
- |
3 |
|
GT |
Greater-than comparison |
- |
3 |
|
SLT |
Signed less-than comparison |
- |
3 |
|
SGT |
Signed greater-than comparison |
- |
3 |
|
EQ |
Equality comparison |
- |
3 |
|
ISZERO |
Simple NOT operator |
- |
3 |
|
AND |
Bitwise AND operation |
- |
3 |
|
OR |
Bitwise OR operation |
- |
3 |
|
XOR |
Bitwise XOR operation |
- |
3 |
|
NOT |
Bitwise NOT operation |
- |
3 |
|
BYTE |
Retrieve single byte from word |
- |
3 |
|
Unused |
Unused |
- |
|
|
SHA3 |
Compute Keccak-256 hash |
- |
30 |
|
Unused |
Unused |
- |
|
|
ADDRESS |
Get address of currently executing account |
- |
2 |
|
BALANCE |
Get balance of the given account |
- |
400 |
|
ORIGIN |
Get execution origination address |
- |
2 |
|
CALLER |
Get caller address |
- |
2 |
|
CALLVALUE |
Get deposited value by the instruction/transaction responsible for this execution |
- |
2 |
|
CALLDATALOAD |
Get input data of current environment |
- |
3 |
|
CALLDATASIZE |
Get size of input data in current environment |
- |
2 |
|
CALLDATACOPY |
Copy input data in current environment to memory |
- |
3 |
|
CODESIZE |
Get size of code running in current environment |
- |
2 |
|
CODECOPY |
Copy code running in current environment to memory |
- |
3 |
|
GASPRICE |
Get price of gas in current environment |
- |
2 |
|
EXTCODESIZE |
Get size of an account’s code |
- |
700 |
|
EXTCODECOPY |
Copy an account’s code to memory |
- |
700 |
|
RETURNDATASIZE |
Pushes the size of the return data buffer onto the stack |
2 |
|
|
RETURNDATACOPY |
Copies data from the return data buffer to memory |
3 |
|
|
Unused |
- |
- |
|
|
BLOCKHASH |
Get the hash of one of the 256 most recent complete blocks |
- |
20 |
|
COINBASE |
Get the block’s beneficiary address |
- |
2 |
|
TIMESTAMP |
Get the block’s timestamp |
- |
2 |
|
NUMBER |
Get the block’s number |
- |
2 |
|
DIFFICULTY |
Get the block’s difficulty |
- |
2 |
|
GASLIMIT |
Get the block’s gas limit |
- |
2 |
|
Unused |
- |
- |
|
|
POP |
Remove word from stack |
- |
2 |
|
MLOAD |
Load word from memory |
- |
3 |
|
MSTORE |
Save word to memory |
- |
3* |
|
MSTORE8 |
Save byte to memory |
- |
3 |
|
SLOAD |
Load word from storage |
- |
200 |
|
SSTORE |
Save word to storage |
- |
0* |
|
JUMP |
Alter the program counter |
- |
8 |
|
JUMPI |
Conditionally alter the program counter |
- |
10 |
|
GETPC |
Get the value of the program counter prior to the increment |
- |
2 |
|
MSIZE |
Get the size of active memory in bytes |
- |
2 |
|
GAS |
Get the amount of available gas, including the corresponding reduction in the amount of available gas |
- |
2 |
|
JUMPDEST |
Mark a valid destination for jumps |
- |
1 |
|
Unused |
- |
- |
|
|
PUSH1 |
Place 1-byte item on stack |
- |
3 |
|
PUSH2 |
Place 2-byte item on stack |
- |
3 |
|
PUSH3 |
Place 3-byte item on stack |
- |
3 |
|
PUSH4 |
Place 4-byte item on stack |
- |
3 |
|
PUSH5 |
Place 5-byte item on stack |
- |
3 |
|
PUSH6 |
Place 6-byte item on stack |
- |
3 |
|
PUSH7 |
Place 7-byte item on stack |
- |
3 |
|
PUSH8 |
Place 8-byte item on stack |
- |
3 |
|
PUSH9 |
Place 9-byte item on stack |
- |
3 |
|
PUSH10 |
Place 10-byte item on stack |
- |
3 |
|
PUSH11 |
Place 11-byte item on stack |
- |
3 |
|
PUSH12 |
Place 12-byte item on stack |
- |
3 |
|
PUSH13 |
Place 13-byte item on stack |
- |
3 |
|
PUSH14 |
Place 14-byte item on stack |
- |
3 |
|
PUSH15 |
Place 15-byte item on stack |
- |
3 |
|
PUSH16 |
Place 16-byte item on stack |
- |
3 |
|
PUSH17 |
Place 17-byte item on stack |
- |
3 |
|
PUSH18 |
Place 18-byte item on stack |
- |
3 |
|
PUSH19 |
Place 19-byte item on stack |
- |
3 |
|
PUSH20 |
Place 20-byte item on stack |
- |
3 |
|
PUSH21 |
Place 21-byte item on stack |
- |
3 |
|
PUSH22 |
Place 22-byte item on stack |
- |
3 |
|
PUSH23 |
Place 23-byte item on stack |
- |
3 |
|
PUSH24 |
Place 24-byte item on stack |
- |
3 |
|
PUSH25 |
Place 25-byte item on stack |
- |
3 |
|
PUSH26 |
Place 26-byte item on stack |
- |
3 |
|
PUSH27 |
Place 27-byte item on stack |
- |
3 |
|
PUSH28 |
Place 28-byte item on stack |
- |
3 |
|
PUSH29 |
Place 29-byte item on stack |
- |
3 |
|
PUSH30 |
Place 30-byte item on stack |
- |
3 |
|
PUSH31 |
Place 31-byte item on stack |
- |
3 |
|
PUSH32 |
Place 32-byte (full word) item on stack |
- |
3 |
|
DUP1 |
Duplicate 1st stack item |
- |
3 |
|
DUP2 |
Duplicate 2nd stack item |
- |
3 |
|
DUP3 |
Duplicate 3rd stack item |
- |
3 |
|
DUP4 |
Duplicate 4th stack item |
- |
3 |
|
DUP5 |
Duplicate 5th stack item |
- |
3 |
|
DUP6 |
Duplicate 6th stack item |
- |
3 |
|
DUP7 |
Duplicate 7th stack item |
- |
3 |
|
DUP8 |
Duplicate 8th stack item |
- |
3 |
|
DUP9 |
Duplicate 9th stack item |
- |
3 |
|
DUP10 |
Duplicate 10th stack item |
- |
3 |
|
DUP11 |
Duplicate 11th stack item |
- |
3 |
|
DUP12 |
Duplicate 12th stack item |
- |
3 |
|
DUP13 |
Duplicate 13th stack item |
- |
3 |
|
DUP14 |
Duplicate 14th stack item |
- |
3 |
|
DUP15 |
Duplicate 15th stack item |
- |
3 |
|
DUP16 |
Duplicate 16th stack item |
- |
3 |
|
SWAP1 |
Exchange 1st and 2nd stack items |
- |
3 |
|
SWAP2 |
Exchange 1st and 3rd stack items |
- |
3 |
|
SWAP3 |
Exchange 1st and 4th stack items |
- |
3 |
|
SWAP4 |
Exchange 1st and 5th stack items |
- |
3 |
|
SWAP5 |
Exchange 1st and 6th stack items |
- |
3 |
|
SWAP6 |
Exchange 1st and 7th stack items |
- |
3 |
|
SWAP7 |
Exchange 1st and 8th stack items |
- |
3 |
|
SWAP8 |
Exchange 1st and 9th stack items |
- |
3 |
|
SWAP9 |
Exchange 1st and 10th stack items |
- |
3 |
|
SWAP10 |
Exchange 1st and 11th stack items |
- |
3 |
|
SWAP11 |
Exchange 1st and 12th stack items |
- |
3 |
|
SWAP12 |
Exchange 1st and 13th stack items |
- |
3 |
|
SWAP13 |
Exchange 1st and 14th stack items |
- |
3 |
|
SWAP14 |
Exchange 1st and 15th stack items |
- |
3 |
|
SWAP15 |
Exchange 1st and 16th stack items |
- |
3 |
|
SWAP16 |
Exchange 1st and 17th stack items |
- |
3 |
|
LOG0 |
Append log record with no topics |
- |
375 |
|
LOG1 |
Append log record with one topic |
- |
750 |
|
LOG2 |
Append log record with two topics |
- |
1125 |
|
LOG3 |
Append log record with three topics |
- |
1500 |
|
LOG4 |
Append log record with four topics |
- |
1875 |
|
Unused |
- |
- |
|
|
JUMPTO |
Tentative libevmasm has different numbers |
||
|
JUMPIF |
Tentative |
||
|
JUMPSUB |
Tentative |
||
|
JUMPSUBV |
Tentative |
||
|
BEGINSUB |
Tentative |
||
|
BEGINDATA |
Tentative |
||
|
RETURNSUB |
Tentative |
||
|
PUTLOCAL |
Tentative |
||
|
GETLOCA |
Tentative |
||
|
Unused |
- |
- |
|
|
SLOADBYTES |
Only referenced in pyethereum |
- |
- |
|
SSTOREBYTES |
Only referenced in pyethereum |
- |
- |
|
SSIZE |
Only referenced in pyethereum |
- |
- |
|
Unused |
- |
- |
|
|
CREATE |
Create a new account with associated code |
- |
32000 |
|
CALL |
Message-call into an account |
- |
Complicated |
|
CALLCODE |
Message-call into this account with alternative account’s code |
- |
Complicated |
|
RETURN |
Halt execution returning output data |
- |
0 |
|
DELEGATECALL |
Message-call into this account with an alternative account’s code, but persisting into this account with an alternative account’s code |
- |
Complicated |
|
CALLBLACKBOX |
- |
- |
40 |
|
Unused |
- |
- |
|
|
STATICCALL |
Similar to CALL, but does not modify state |
- |
40 |
|
CREATE2 |
Create a new account and set creation address to |
- |
|
|
TXEXECGAS |
Not in yellow paper FIXME |
- |
- |
|
REVERT |
Stop execution and revert state changes, without consuming all provided gas and providing a reason |
- |
0 |
|
INVALID |
Designated invalid instruction |
- |
0 |
|
SELFDESTRUCT |
Halt execution and register account for later deletion |
- |
5000* |