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 with the following LICENSE https://github.com/trailofbits/evm-opcodes/blob/master/LICENSE.

Table 1. EVM Opcodes and Gas Cost
Opcode Name Description Extra Info Gas

0x00

STOP

Halts execution

-

0

0x01

ADD

Addition operation

-

3

0x02

MUL

Multiplication operation

-

5

0x03

SUB

Subtraction operation

-

3

0x04

DIV

Integer division operation

-

5

0x05

SDIV

Signed integer division operation (truncated)

-

5

0x06

MOD

Modulo remainder operation

-

5

0x07

SMOD

Signed modulo remainder operation

-

5

0x08

ADDMOD

Modulo addition operation

-

8

0x09

MULMOD

Modulo multiplication operation

-

8

0x0a

EXP

Exponential operation

-

10***

0x0b

SIGNEXTEND

Extend length of two’s complement signed integer

-

5

0x0c - 0x0f

Unused

Unused

-

0x10

LT

Less-than comparison

-

3

0x11

GT

Greater-than comparison

-

3

0x12

SLT

Signed less-than comparison

-

3

0x13

SGT

Signed greater-than comparison

-

3

0x14

EQ

Equality comparison

-

3

0x15

ISZERO

Simple not operator

-

3

0x16

AND

Bitwise AND operation

-

3

0x17

OR

Bitwise OR operation

-

3

0x18

XOR

Bitwise XOR operation

-

3

0x19

NOT

Bitwise NOT operation

-

3

0x1a

BYTE

Retrieve single byte from word

-

3

0x1b - 0x1f

Unused

Unused

-

0x20

SHA3

Compute Keccak-256 hash

-

30

0x21 - 0x2f

Unused

Unused

-

0x30

ADDRESS

Get address of currently executing account

-

2

0x31

BALANCE

Get balance of the given account

-

400

0x32

ORIGIN

Get execution origination address

-

2

0x33

CALLER

Get caller address

-

2

0x34

CALLVALUE

Get deposited value by the instruction/transaction responsible for this execution

-

2

0x35

CALLDATALOAD

Get input data of current environment

-

3

0x36

CALLDATASIZE

Get size of input data in current environment

-

2

0x37

CALLDATACOPY

Copy input data in current environment to memory

-

3

0x38

CODESIZE

Get size of code running in current environment

-

2

0x39

CODECOPY

Copy code running in current environment to memory

-

3

0x3a

GASPRICE

Get price of gas in current environment

-

2

0x3b

EXTCODESIZE

Get size of an account’s code

-

700

0x3c

EXTCODECOPY

Copy an account’s code to memory

-

700

0x3d

RETURNDATASIZE

Pushes the size of the return data buffer onto the stack

EIP 211

2

0x3e

RETURNDATACOPY

Copies data from the return data buffer to memory

EIP 211

3

0x3f

Unused

-

-

0x40

BLOCKHASH

Get the hash of one of the 256 most recent complete blocks

-

20

0x41

COINBASE

Get the block’s beneficiary address

-

2

0x42

TIMESTAMP

Get the block’s timestamp

-

2

0x43

NUMBER

Get the block’s number

-

2

0x44

DIFFICULTY

Get the block’s difficulty

-

2

0x45

GASLIMIT

Get the block’s gas limit

-

2

0x46 - 0x4f

Unused

-

-

0x50

POP

Remove word from stack

-

2

0x51

MLOAD

Load word from memory

-

3

0x52

MSTORE

Save word to memory

-

3*

0x53

MSTORE8

Save byte to memory

-

3

0x54

SLOAD

Load word from storage

-

200

0x55

SSTORE

Save word to storage

-

0*

0x56

JUMP

Alter the program counter

-

8

0x57

JUMPI

Conditionally alter the program counter

-

10

0x58

GETPC

Get the value of the program counter prior to the increment

-

2

0x59

MSIZE

Get the size of active memory in bytes

-

2

0x5a

GAS

Get the amount of available gas, including the corresponding reduction the amount of available gas

-

2

0x5b

JUMPDEST

Mark a valid destination for jumps

-

1

0x5c - 0x5f

Unused

-

-

0x60

PUSH1

Place 1 byte item on stack

-

3

0x61

PUSH2

Place 2-byte item on stack

-

3

0x62

PUSH3

Place 3-byte item on stack

-

3

0x63

PUSH4

Place 4-byte item on stack

-

3

0x64

PUSH5

Place 5-byte item on stack

-

3

0x65

PUSH6

Place 6-byte item on stack

-

3

0x66

PUSH7

Place 7-byte item on stack

-

3

0x67

PUSH8

Place 8-byte item on stack

-

3

0x68

PUSH9

Place 9-byte item on stack

-

3

0x69

PUSH10

Place 10-byte item on stack

-

3

0x6a

PUSH11

Place 11-byte item on stack

-

3

0x6b

PUSH12

Place 12-byte item on stack

-

3

0x6c

PUSH13

Place 13-byte item on stack

-

3

0x6d

PUSH14

Place 14-byte item on stack

-

3

0x6e

PUSH15

Place 15-byte item on stack

-

3

0x6f

PUSH16

Place 16-byte item on stack

-

3

0x70

PUSH17

Place 17-byte item on stack

-

3

0x71

PUSH18

Place 18-byte item on stack

-

3

0x72

PUSH19

Place 19-byte item on stack

-

3

0x73

PUSH20

Place 20-byte item on stack

-

3

0x74

PUSH21

Place 21-byte item on stack

-

3

0x75

PUSH22

Place 22-byte item on stack

-

3

0x76

PUSH23

Place 23-byte item on stack

-

3

0x77

PUSH24

Place 24-byte item on stack

-

3

0x78

PUSH25

Place 25-byte item on stack

-

3

0x79

PUSH26

Place 26-byte item on stack

-

3

0x7a

PUSH27

Place 27-byte item on stack

-

3

0x7b

PUSH28

Place 28-byte item on stack

-

3

0x7c

PUSH29

Place 29-byte item on stack

-

3

0x7d

PUSH30

Place 30-byte item on stack

-

3

0x7e

PUSH31

Place 31-byte item on stack

-

3

0x7f

PUSH32

Place 32-byte (full word) item on stack

-

3

0x80

DUP1

Duplicate 1st stack item

-

3

0x81

DUP2

Duplicate 2nd stack item

-

3

0x82

DUP3

Duplicate 3rd stack item

-

3

0x83

DUP4

Duplicate 4th stack item

-

3

0x84

DUP5

Duplicate 5th stack item

-

3

0x85

DUP6

Duplicate 6th stack item

-

3

0x86

DUP7

Duplicate 7th stack item

-

3

0x87

DUP8

Duplicate 8th stack item

-

3

0x88

DUP9

Duplicate 9th stack item

-

3

0x89

DUP10

Duplicate 10th stack item

-

3

0x8a

DUP11

Duplicate 11th stack item

-

3

0x8b

DUP12

Duplicate 12th stack item

-

3

0x8c

DUP13

Duplicate 13th stack item

-

3

0x8d

DUP14

Duplicate 14th stack item

-

3

0x8e

DUP15

Duplicate 15th stack item

-

3

0x8f

DUP16

Duplicate 16th stack item

-

3

0x90

SWAP1

Exchange 1st and 2nd stack items

-

3

0x91

SWAP2

Exchange 1st and 3rd stack items

-

3

0x92

SWAP3

Exchange 1st and 4th stack items

-

3

0x93

SWAP4

Exchange 1st and 5th stack items

-

3

0x94

SWAP5

Exchange 1st and 6th stack items

-

3

0x95

SWAP6

Exchange 1st and 7th stack items

-

3

0x96

SWAP7

Exchange 1st and 8th stack items

-

3

0x97

SWAP8

Exchange 1st and 9th stack items

-

3

0x98

SWAP9

Exchange 1st and 10th stack items

-

3

0x99

SWAP10

Exchange 1st and 11th stack items

-

3

0x9a

SWAP11

Exchange 1st and 12th stack items

-

3

0x9b

SWAP12

Exchange 1st and 13th stack items

-

3

0x9c

SWAP13

Exchange 1st and 14th stack items

-

3

0x9d

SWAP14

Exchange 1st and 15th stack items

-

3

0x9e

SWAP15

Exchange 1st and 16th stack items

-

3

0x9f

SWAP16

Exchange 1st and 17th stack items

-

3

0xa0

LOG0

Append log record with no topics

-

375

0xa1

LOG1

Append log record with one topic

-

750

0xa2

LOG2

Append log record with two topics

-

1125

0xa3

LOG3

Append log record with three topics

-

1500

0xa4

LOG4

Append log record with four topics

-

1875

0xa5 - 0xaf

Unused

-

-

0xb0

JUMPTO

Tentative libevmasm has different numbers

EIP 615

0xb1

JUMPIF

Tentative

EIP 615

0xb2

JUMPSUB

Tentative

EIP 615

0xb4

JUMPSUBV

Tentative

EIP 615

0xb5

BEGINSUB

Tentative

EIP 615

0xb6

BEGINDATA

Tentative

EIP 615

0xb8

RETURNSUB

Tentative

EIP 615

0xb9

PUTLOCAL

Tentative

EIP 615

0xba

GETLOCAL

Tentative

EIP 615

0xbb - 0xe0

Unused

-

-

0xe1

SLOADBYTES

Only referenced in pyethereum

-

-

0xe2

SSTOREBYTES

Only referenced in pyethereum

-

-

0xe3

SSIZE

Only referenced in pyethereum

-

-

0xe4 - 0xef

Unused

-

-

0xf0

CREATE

Create a new account with associated code

-

32000

0xf1

CALL

Message-call into an account

-

Complicated

0xf2

CALLCODE

Message-call into this account with alternative account’s code

-

Complicated

0xf3

RETURN

Halt execution returning output data

-

0

0xf4

DELEGATECALL

Message-call into this account with an alternative account’s code, but persisting into this account with an alternative account’s code

-

Complicated

0xf5

CALLBLACKBOX

-

-

40

0xf6 - 0xf9

Unused

-

-

0xfa

STATICCALL

Similar to CALL, but does not modify state

-

40

0xfb

CREATE2

Create a new account and set creation address to sha3(sender + sha3(init code)) % 2**160

-

0xfc

TXEXECGAS

Not in yellow paper FIXME

-

-

0xfd

REVERT

Stop execution and revert state changes, without consuming all provided gas and providing a reason

-

0

0xfe

INVALID

Designated invalid instruction

-

0

0xff

SELFDESTRUCT

Halt execution and register account for later deletion

-

5000*