Skip to content

instruction_table

InstructionTable.init()

Opcodes

EVM Opcodes.

Properties

enum {
  STOP = 0x00
  ADD = 0x01
  MUL = 0x02
  SUB = 0x03
  DIV = 0x04
  SDIV = 0x05
  MOD = 0x06
  SMOD = 0x07
  ADDMOD = 0x08
  MULMOD = 0x09
  EXP = 0x0a
  SIGNEXTEND = 0x0b
  LT = 0x10
  GT = 0x11
  SLT = 0x12
  SGT = 0x13
  EQ = 0x14
  ISZERO = 0x15
  AND = 0x16
  OR = 0x17
  XOR = 0x18
  NOT = 0x19
  BYTE = 0x1a
  SHL = 0x1b
  SHR = 0x1c
  SAR = 0x1d
  KECCAK256 = 0x20
  ADDRESS = 0x30
  BALANCE = 0x31
  ORIGIN = 0x32
  CALLER = 0x33
  CALLVALUE = 0x34
  CALLDATALOAD = 0x35
  CALLDATASIZE = 0x36
  CALLDATACOPY = 0x37
  CODESIZE = 0x38
  CODECOPY = 0x39
  GASPRICE = 0x3a
  EXTCODESIZE = 0x3b
  EXTCODECOPY = 0x3c
  RETURNDATASIZE = 0x3d
  RETURNDATACOPY = 0x3e
  EXTCODEHASH = 0x3f
  BLOCKHASH = 0x40
  COINBASE = 0x41
  TIMESTAMP = 0x42
  NUMBER = 0x43
  PREVRANDAO = 0x44
  GASLIMIT = 0x45
  CHAINID = 0x46
  SELFBALANCE = 0x47
  BASEFEE = 0x48
  BLOBHASH = 0x49
  BLOBBASEFEE = 0x4a
  POP = 0x50
  MLOAD = 0x51
  MSTORE = 0x52
  MSTORE8 = 0x53
  SLOAD = 0x54
  SSTORE = 0x55
  JUMP = 0x56
  JUMPI = 0x57
  PC = 0x58
  MSIZE = 0x59
  GAS = 0x5a
  JUMPDEST = 0x5b
  TLOAD = 0x5c
  TSTORE = 0x5d
  MCOPY = 0x5e
  PUSH0 = 0x5f
  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 = 0x79
  PUSH27 = 0x7a
  PUSH28 = 0x7b
  PUSH29 = 0x7c
  PUSH30 = 0x7d
  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
  LOG0 = 0xa0
  LOG1 = 0xa1
  LOG2 = 0xa2
  LOG3 = 0xa3
  LOG4 = 0xa4
  CREATE = 0xf0
  CALL = 0xf1
  CALLCODE = 0xf2
  RETURN = 0xf3
  DELEGATECALL = 0xf4
  CREATE2 = 0xf5
  STATICCALL = 0xfa
  REVERT = 0xfd
  INVALID = 0xfe
  SELFDESTRUCT = 0xff
}

ToOpcode

Converts u8 to associated opcode. Will return null for unknown opcodes

Signature

pub fn toOpcode(num: u8) ?Opcodes

InstructionTable

Properties

struct {
  inner: [256]Operations
}

Init

Creates the instruction table.

Signature

pub fn init() InstructionTable

GetInstruction

Gets the associated operation for the provided opcode.

Signature

pub fn getInstruction(self: @This(), opcode: u8) Operations

Operations

Opcode operations and checks.

Properties

struct {
  /// The execution function attached to the opcode.
  execution: *const fn (ctx: *Interpreter) anyerror!void
  /// The max allowed size of the stack
  max_stack: usize
}

MakeDupInstruction

Creates the dup instructions for the instruction table.

Signature

pub fn makeDupInstruction(comptime dup_size: u8) *const fn (ctx: *Interpreter) anyerror!void

Dup

Signature

pub fn dup(self: *Interpreter) anyerror!void

MakePushInstruction

Creates the push instructions for the instruction table.

Signature

pub fn makePushInstruction(comptime push_size: u8) *const fn (ctx: *Interpreter) anyerror!void

Push

Signature

pub fn push(self: *Interpreter) anyerror!void

MakeSwapInstruction

Creates the swap instructions for the instruction table.

Signature

pub fn makeSwapInstruction(comptime swap_size: u8) *const fn (ctx: *Interpreter) anyerror!void

Swap

Signature

pub fn swap(self: *Interpreter) anyerror!void

MakeLogInstruction

Creates the log instructions for the instruction table.

Signature

pub fn makeLogInstruction(comptime swap_size: u8) *const fn (ctx: *Interpreter) anyerror!void

Log

Signature

pub fn log(self: *Interpreter) anyerror!void

MakeCreateInstruction

Creates the log instructions for the instruction table.

Signature

pub fn makeCreateInstruction(comptime is_create2: bool) *const fn (ctx: *Interpreter) anyerror!void

Log

Signature

pub fn log(self: *Interpreter) anyerror!void

MaxStack

Callculates the max avaliable size of the stack for the operation to execute.

Signature

pub fn maxStack(comptime limit: comptime_int, comptime pop: comptime_int, comptime push: comptime_int) usize