# Cancun EVM Opcode Planning A proposal to move some propsoed EIP opcodes around to make for a more coherent layout in Cancun and Prauge. ## Opcodes under active consideration This list includes opcodes propsed either for EOF or Cancun. The old opcode is the current EIP proposed opcode | Old Opcode | New Opcode | Name | Description | Immediate Arg | |:----------:|:----------:| -------------- | ----------------------------------------------- |:-------------:| | 0x49 | 0x49 | BLOBHASH | Returns hashes of blobs in the transaction | | | 0x4A | 0x4A | BEACON_ROOT | Exposes the Beacon Chain Root | | | 0xB3 | 0x5C | TLOAD | Transient data load | | | 0xB4 | 0x5D | TSTORE | Transient data store | | | 0xB7 | 0x5E | MCOPY | Memory copy | | | 0x5C | 0xE0 | RJUMP | relative jump | y | | 0x5D | 0xE1 | RJUMI | relative conditional jump | y | | 0x5E | 0xE2 | RJUMV | relative jump table | y | | 0xB0 | 0xE3 | CALLF | EOF Subroutine Call | y | | 0xB1 | 0xE4 | RETF | EOF Subroutine return | | | 0xB2 | 0xE5 | JUMPF | EOF Function Jump | y | | 0xB5 | 0xE6 | DUPN | Unlimited dup | y | | 0xB6 | 0xE7 | SWAPN | Unlimited swap | y | | 0xB8 | 0xE8 | DATALOAD | Loads data from EOF data section, via stack | | | 0xB9 | 0xE9 | DATALOADN | Loads data from EOF data section, via immediate | y | | 0xBA | 0xEA | DATASIZE | Size of the EOF data section | y | | 0xBB | 0xEB | DATACOPY | Bulk EOF data copy | y | | 0xF6 | 0xEC | CREATE3 | Create from EOF contained initcode | y | | 0xF8 | 0xED | RETURNCONTRACT | contract to be created, references EOF data | y | | 0xF9 | 0xF6 | PAY | transfers value from caller to target | | | 0xF7 | 0xF7 | CREATE4 | Create from transaction contained initcode | | | 0xF9 | 0xF8 | CALL2 | CALL without gas and output memory | | | 0xFB | 0xF9 | DELEGATECALL2 | DELEGATECALL without gas and output memory | | | 0xFC | 0xFB | STATICCALL2 | STATICCALL without gas and output memory | | Methodology * All Opcodes that require an immediate argument or that require EOF containers go into the 0xE block * Move TSORE and MCOPY into the Storage/Memory/Control Flow block * Pack opcodes to the earliest opcode in their block ## Opcode Blocks | Prefix | Available | Propsoed | Name | | ------ | ---------:| --------:| ------------------------------- | | 0x0 | 3 | | Aritmetic | | 0x1 | 2 | | Comparison / Bitwise | | 0x2 | 15 | | Cryptography | | 0x3 | 0 | | Environmental | | 0x4 | 7 | 2 | Block | | 0x5 | 3 | 3 | Storage / Memory / Control Flow | | 0x6 | 0 | | PUSHx | | 0x7 | 0 | | PUSHx | | 0x8 | 0 | | DUPx | | 0x9 | 0 | | SWAPx | | 0xA | 11 | | Log | | 0xB | 16 | | Unassigned | | 0xC | 16 | | Unassigned | | 0xD | 16 | | Unassigned | | 0xE | 16 | 14 | Unassigned | | 0xF | 6 | 5 | System | ## Existing Opcodes Current up to Shanghai | Number | Name | Initial Release | Execution spec category | | ------ | -------------- | ---------------- | ----------------------- | | 0x00 | STOP | | Control Flow | | 0x01 | ADD | | Arithmetic | | 0x02 | MUL | | Arithmetic | | 0x03 | SUB | | Arithmetic | | 0x04 | DIV | | Arithmetic | | 0x05 | SDIV | | Arithmetic | | 0x06 | MOD | | Arithmetic | | 0x07 | SMOD | | Arithmetic | | 0x08 | ADDMOD | | Arithmetic | | 0x09 | MULMOD | | Arithmetic | | 0x0A | EXP | | Arithmetic | | 0x0B | SIGNEXTEND | | Arithmetic | | 0x10 | LT | | Comparison | | 0x11 | GT | | Comparison | | 0x12 | SLT | | Comparison | | 0x13 | SGT | | Comparison | | 0x14 | EQ | | Comparison | | 0x15 | ISZERO | | Comparison | | 0x16 | AND | | Bitwise | | 0x17 | OR | | Bitwise | | 0x18 | XOR | | Bitwise | | 0x19 | NOT | | Bitwise | | 0x1A | BYTE | | Bitwise | | 0x1B | SHL | Constantinople | Bitwise | | 0x1C | SHR | Constantinople | Bitwise | | 0x1D | SAR | Constantinople | Bitwise | | 0x20 | KECCAK | | Keccak | | 0x30 | ADDRESS | | Environmental | | 0x31 | BALANCE | | Environmental | | 0x32 | ORIGIN | | Environmental | | 0x33 | CALLER | | Environmental | | 0x34 | CALLVALUE | | Environmental | | 0x35 | CALLDATALOAD | | Environmental | | 0x36 | CALLDATASIZE | | Environmental | | 0x37 | CALLDATACOPY | | Environmental | | 0x38 | CODESIZE | | Environmental | | 0x39 | CODECOPY | | Environmental | | 0x3A | GASPRICE | | Environmental | | 0x3B | EXTCODESIZE | | Environmental | | 0x3C | EXTCODECOPY | | Environmental | | 0x3D | RETURNDATASIZE | Byzantium | Environmental | | 0x3E | RETURNDATACOPY | Byzantium | Environmental | | 0x3F | EXTCODEHASH | Constantinople | Environmental | | 0x40 | BLOCKHASH | | Block | | 0x41 | COINBASE | | Block | | 0x42 | TIMESTAMP | | Block | | 0x43 | NUMBER | | Block | | 0x44 | DIFFICULTY | Frontier->London | Block | | 0x44 | PREVRANDAO | Paris | Block | | 0x45 | GASLIMIT | | Block | | 0x46 | CHAINID | Istanbul | Block | | 0x47 | SELFBALANCE | Istanbul | Block | | 0x48 | BASEFEE | London | Block | | 0x50 | POP | | Pop | | 0x51 | MLOAD | | Memory | | 0x52 | MSTORE | | Memory | | 0x53 | MSTORE8 | | Memory | | 0x54 | SLOAD | | Storage | | 0x55 | SSTORE | | Storage | | 0x56 | JUMP | | Control Flow | | 0x57 | JUMPI | | Control Flow | | 0x58 | PC | | Control Flow | | 0x59 | MSIZE | | Memory | | 0x5A | GAS | | Control Flow | | 0x5B | JUMPDEST | | Control Flow | | 0x5F | PUSH0 | Shanghai | Push | | 0x60 | PUSH1 | | Push | | 0x61 | PUSH2 | | Push | | 0x62 | PUSH3 | | Push | | 0x63 | PUSH4 | | Push | | 0x64 | PUSH5 | | Push | | 0x65 | PUSH6 | | Push | | 0x66 | PUSH7 | | Push | | 0x67 | PUSH8 | | Push | | 0x68 | PUSH9 | | Push | | 0x69 | PUSH10 | | Push | | 0x6A | PUSH11 | | Push | | 0x6B | PUSH12 | | Push | | 0x6C | PUSH13 | | Push | | 0x6D | PUSH14 | | Push | | 0x6E | PUSH15 | | Push | | 0x6F | PUSH16 | | Push | | 0x70 | PUSH17 | | Push | | 0x71 | PUSH18 | | Push | | 0x72 | PUSH19 | | Push | | 0x73 | PUSH20 | | Push | | 0x74 | PUSH21 | | Push | | 0x75 | PUSH22 | | Push | | 0x76 | PUSH23 | | Push | | 0x77 | PUSH24 | | Push | | 0x78 | PUSH25 | | Push | | 0x79 | PUSH26 | | Push | | 0x7A | PUSH27 | | Push | | 0x7B | PUSH28 | | Push | | 0x7C | PUSH29 | | Push | | 0x7D | PUSH30 | | Push | | 0x7E | PUSH31 | | Push | | 0x7F | PUSH32 | | Push | | 0x80 | DUP1 | | Dup | | 0x81 | DUP2 | | Dup | | 0x82 | DUP3 | | Dup | | 0x83 | DUP4 | | Dup | | 0x84 | DUP5 | | Dup | | 0x85 | DUP6 | | Dup | | 0x86 | DUP7 | | Dup | | 0x87 | DUP8 | | Dup | | 0x88 | DUP9 | | Dup | | 0x89 | DUP10 | | Dup | | 0x8A | DUP11 | | Dup | | 0x8B | DUP12 | | Dup | | 0x8C | DUP13 | | Dup | | 0x8D | DUP14 | | Dup | | 0x8E | DUP15 | | Dup | | 0x8F | DUP16 | | Dup | | 0x90 | SWAP1 | | Swap | | 0x91 | SWAP2 | | Swap | | 0x92 | SWAP3 | | Swap | | 0x93 | SWAP4 | | Swap | | 0x94 | SWAP5 | | Swap | | 0x95 | SWAP6 | | Swap | | 0x96 | SWAP7 | | Swap | | 0x97 | SWAP8 | | Swap | | 0x98 | SWAP9 | | Swap | | 0x99 | SWAP10 | | Swap | | 0x9A | SWAP11 | | Swap | | 0x9B | SWAP12 | | Swap | | 0x9C | SWAP13 | | Swap | | 0x9D | SWAP14 | | Swap | | 0x9E | SWAP15 | | Swap | | 0x9F | SWAP16 | | Swap | | 0xA0 | LOG0 | | Log | | 0xA1 | LOG1 | | Log | | 0xA2 | LOG2 | | Log | | 0xA3 | LOG3 | | Log | | 0xA4 | LOG4 | | Log | | 0xF0 | CREATE | | System | | 0xF1 | CALL | | System | | 0xF2 | CALLCODE | | System | | 0xF3 | RETURN | | System | | 0xF4 | DELEGATECALL | Homestad | System | | 0xF5 | CREATE2 | Constantinople | System | | 0xFA | STATICCALL | Byzantium | System | | 0xFD | REVERT | Byzantium | System | | 0xFE | INVALID/ABORT | (unofficial) | System | | 0xFF | SELFDESTRUCT | | System | ## All Proposed Opcodes All EIP propsoed opcodes that have not shipped. This includes all unshipped EIPs, even withdrawn and non-viable proposals. | EIP | Opcode | Name | Description | Immediate Arg | | ---------------------------------------------------------------------- | ------ | --------------------- | ---------------------------------------------------------------------------- | ------------- | | [101](https://eips.ethereum.org/EIPS/eip-101) | 0x5C | tx.gas | primordial account-abstraction support | | | [141](https://eips.ethereum.org/EIPS/eip-141) | 0xFE | INVALID <br />/ ABORT | Designated invalid opcode. <br />(Adopted in practice, Not formally adopted) | | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB0 | JUMPTO | static jump | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB1 | JUMPIF | static conditional jump | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB2 | JUMPV | static jump table | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB3 | JUMPSUB | static subroutine call | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB4 | JUMPSUBV | static subroutine table call | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB5 | BEGINSUB | marker opcode | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB6 | BEGINDATA | marker opcode | | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB7 | RETURNSUB | subroutine return | | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB8 | PUTLOCAL | call local storage | y | | [615](https://eips.ethereum.org/EIPS/eip-615) | 0xB9 | GETLOCAL | call local storage | y | | [663](https://eips.ethereum.org/EIPS/eip-663) | 0xB5 | DUPN | Unlimited dup | y | | [663](https://eips.ethereum.org/EIPS/eip-663) | 0xB6 | SWAPN | Unlimited swap | y | | [698](https://eips.ethereum.org/EIPS/eip-698) | 0x46 | BLOCKREWARD | Get the blockreward for the current block | | | [1109](https://eips.ethereum.org/EIPS/eip-1109) | 0xFB | PRECOMPILEDCALL | call only precompiled addresses | | | [1153](https://eips.ethereum.org/EIPS/eip-1153) | 0xB3 | TLOAD | Transient data load | | | [1153](https://eips.ethereum.org/EIPS/eip-1153) | 0xB4 | TSTORE | Transient data store | | | [2315](https://eips.ethereum.org/EIPS/eip-2315) | 0x5E | RETURNSUB | Subroutine return | | | [2315](https://eips.ethereum.org/EIPS/eip-2315) | 0x5F | RJUMPSUB | Subroutine jump | | | [2327](https://eips.ethereum.org/EIPS/eip-2327) | 0xB6 | BEGINDATA | End of executable code marker | | | [2330](https://eips.ethereum.org/EIPS/eip-2330) | 0x5C | EXTSLOAD | Load external contract data | | | [2936](https://eips.ethereum.org/EIPS/eip-2936) | 0x5C | EXTCLEAR | Split sotrage clearing form SELFDESTRUCT | | | [2937](https://eips.ethereum.org/EIPS/eip-2937) | 0xA8 | SET_INDESTRUCTABLE | Prevents future SELFDESTRUCTs | | | [2938](https://eips.ethereum.org/EIPS/eip-2938) | 0x48 | NONCE | Get the nonce of the callee | | | [2938](https://eips.ethereum.org/EIPS/eip-2938) | 0x49 | PAYGAS | Pays gas for all futher operations | | | [2970](https://eips.ethereum.org/EIPS/eip-2970) | 0x4A | IS_STATIC | Is current frame static? | | | [2997](https://eips.ethereum.org/EIPS/eip-2997) | 0xF6 | IMPERAONATECALL | Call with sender calculated from salt and caller | | | [3074](https://eips.ethereum.org/EIPS/eip-3074) | 0xF6 | AUTH | Preperatory operation for AUTHCALL | | | [3074](https://eips.ethereum.org/EIPS/eip-3074) | 0xF7 | AUTHCALL | Call with calle set to external account | | | [3322](https://eips.ethereum.org/EIPS/eip-3322) | 0x49 | SELFGAS | Store gas refund to account | | | [3322](https://eips.ethereum.org/EIPS/eip-3322) | 0x49 | USEGAS | Increase execution gas from account stored gas | | | [3322](https://eips.ethereum.org/EIPS/eip-3322) | 0x49 | STOREGAS | Move gas to refund | | | [3332](https://eips.ethereum.org/EIPS/eip-3332) | 0x46 | MEDGASPRICE | Get median gas proce of prior block | | | [3337](https://eips.ethereum.org/EIPS/eip-3337) | 0x5C | SETFP | Sets a frame pointer to a memory location | | | [3337](https://eips.ethereum.org/EIPS/eip-3337) | 0x5D | GETFP | Gets the current frame pointer | | | [3337](https://eips.ethereum.org/EIPS/eip-3337) | 0x5E | MLOADFP | Reads memory at the frame pointer | | | [3337](https://eips.ethereum.org/EIPS/eip-3337) | 0x5F | MSTOREFP | Writes memory at the frame pointer | | | [3455](https://eips.ethereum.org/EIPS/eip-3455) | 0xF8 | SUDO | Unvalidated AUTHCALL (april fools joke) | | | [3508](https://eips.ethereum.org/EIPS/eip-3508) | 0x47 | ORIGINDATALOAD | Load transaction calldata | | | [3508](https://eips.ethereum.org/EIPS/eip-3508) | 0x48 | ORIGINDATASIZE | Size of transaction calldata | | | [3508](https://eips.ethereum.org/EIPS/eip-3508) | 0x49 | ORIGINDATACOPY | Bulk load transaction calldata | | | [3520](https://eips.ethereum.org/EIPS/eip-3520) | 0x4A | ENTRYPOINT | To address of transaction | | | [4200](https://eips.ethereum.org/EIPS/eip-4200) | 0x5C | RJUMP | relative jump | y | | [4200](https://eips.ethereum.org/EIPS/eip-4200) | 0x5D | RJUMI | relative conditional jump | y | | [4200](https://eips.ethereum.org/EIPS/eip-4200) | 0x5E | RJUMV | relative jump table | y | | [4520](https://eips.ethereum.org/EIPS/eip-4520) | 0xEB | - | Reserve for multi-byte opcodes | y | | [4520](https://eips.ethereum.org/EIPS/eip-4520) | 0xEC | - | Reserve for multi-byte opcodes | y | | [4750](https://eips.ethereum.org/EIPS/eip-4750) | 0xB0 | CALLF | EOF Subroutine Call | y | | [4750](https://eips.ethereum.org/EIPS/eip-4750) | 0xB1 | RETF | EOF Subroutine return | | | [4788](https://eips.ethereum.org/EIPS/eip-4788) | 0x4A | BEACON_ROOT | Exposes the Beacon Chain Root | | | [4844](https://eips.ethereum.org/EIPS/eip-4844) | 0x49 | BLOBHASH | Returns hashes of blobs in the transaction | | | [5000](https://eips.ethereum.org/EIPS/eip-5000) | 0x1E | MULDIV | combo multiply then divide trinary operation | | | [5003](https://eips.ethereum.org/EIPS/eip-5003) | 0xF8 | AUTHUSURP | Adds code into EOAs | | | [5478](https://eips.ethereum.org/EIPS/eip-5478) | 0xF6 | CREATE2COPY | Create 2 with no initcode and contract copying | | | [5656](https://eips.ethereum.org/EIPS/eip-5656) | 0xB7 | MCOPY | Memory copy | | | [5920](https://eips.ethereum.org/EIPS/eip-5920) | 0xF9 | PAY | transfers value from caller to target | | | [6206](https://eips.ethereum.org/EIPS/eip-6206) | 0xB2 | JUMPF | EOF Function Jump | y | | [6888](https://eips.ethereum.org/EIPS/eip-6888) | 0x5B | JUMPC | Jump if the most recent arithmetic op set the carry bit | | | [6888](https://eips.ethereum.org/EIPS/eip-6888) | 0x5C | JUMPO | Jump if the most recent arithmetic op set the overflow bit | | | [6913](https://eips.ethereum.org/EIPS/eip-6913) | 0x49 | SETCODE | Replace code of current contract | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xF6 | CREATE3 | Create from EOF contained initcode | y | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xF7 | CREATE4 | Create from transaction contained initcode | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xF8 | RETURNCONTRACT | contract to be created, references EOF data | y | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xB8 | DATALOAD | Loads data from EOF data section, via stack | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xB9 | DATALOADN | Loads data from EOF data section, via immediate | y | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xBA | DATASIZE | Size of the EOF data section | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xBB | DATACOPY | Bulk data section copy | y | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xF9 | CALL2 | CALL without gas and output memory | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xFB | DELEGATECALL2 | DELEGATECALL without gas and output memory | | | [mega EOF](https://notes.ethereum.org/@ipsilon/mega-eof-specification) | 0xFC | STATICCALL2 | STATICCALL without gas and output memory | |
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.