UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

345 lines (310 loc) 6.76 kB
export enum Opcode { // Arithmetic operations STOP = 0x00, ADD = 0x01, MUL = 0x02, SUB = 0x03, DIV = 0x04, SDIV = 0x05, MOD = 0x06, SMOD = 0x07, ADDMOD = 0x08, MULMOD = 0x09, EXP = 0x0a, SIGNEXTEND = 0x0b, // Unallocated UNRECOGNIZED_0C = 0x0c, UNRECOGNIZED_0D = 0x0d, UNRECOGNIZED_0E = 0x0e, UNRECOGNIZED_0F = 0x0f, // Comparison and bitwise operations 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, // Unallocated UNRECOGNIZED_1E = 0x1e, UNRECOGNIZED_1F = 0x1f, // Cryptographic operations SHA3 = 0x20, // Unallocated UNRECOGNIZED_21 = 0x21, UNRECOGNIZED_22 = 0x22, UNRECOGNIZED_23 = 0x23, UNRECOGNIZED_24 = 0x24, UNRECOGNIZED_25 = 0x25, UNRECOGNIZED_26 = 0x26, UNRECOGNIZED_27 = 0x27, UNRECOGNIZED_28 = 0x28, UNRECOGNIZED_29 = 0x29, UNRECOGNIZED_2A = 0x2a, UNRECOGNIZED_2B = 0x2b, UNRECOGNIZED_2C = 0x2c, UNRECOGNIZED_2D = 0x2d, UNRECOGNIZED_2E = 0x2e, UNRECOGNIZED_2F = 0x2f, // Message info operations 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, // Block info operations BLOCKHASH = 0x40, COINBASE = 0x41, TIMESTAMP = 0x42, NUMBER = 0x43, DIFFICULTY = 0x44, GASLIMIT = 0x45, // Istanbul opcodes CHAINID = 0x46, SELFBALANCE = 0x47, // London opcodes BASEFEE = 0x48, // Unallocated UNRECOGNIZED_49 = 0x49, UNRECOGNIZED_4A = 0x4a, UNRECOGNIZED_4B = 0x4b, UNRECOGNIZED_4C = 0x4c, UNRECOGNIZED_4D = 0x4d, UNRECOGNIZED_4E = 0x4e, UNRECOGNIZED_4F = 0x4f, // Storage, memory, and other operations POP = 0x50, MLOAD = 0x51, MSTORE = 0x52, MSTORE8 = 0x53, SLOAD = 0x54, SSTORE = 0x55, JUMP = 0x56, JUMPI = 0x57, PC = 0x58, MSIZE = 0x59, GAS = 0x5a, JUMPDEST = 0x5b, // Uncallocated UNRECOGNIZED_5C = 0x5c, UNRECOGNIZED_5D = 0x5d, UNRECOGNIZED_5E = 0x5e, UNRECOGNIZED_5F = 0x5f, // Push operations 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, // Dup operations 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, // Swap operations 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, // Log operations LOG0 = 0xa0, LOG1 = 0xa1, LOG2 = 0xa2, LOG3 = 0xa3, LOG4 = 0xa4, // Unallocated UNRECOGNIZED_A5 = 0xa5, UNRECOGNIZED_A6 = 0xa6, UNRECOGNIZED_A7 = 0xa7, UNRECOGNIZED_A8 = 0xa8, UNRECOGNIZED_A9 = 0xa9, UNRECOGNIZED_AA = 0xaa, UNRECOGNIZED_AB = 0xab, UNRECOGNIZED_AC = 0xac, UNRECOGNIZED_AD = 0xad, UNRECOGNIZED_AE = 0xae, UNRECOGNIZED_AF = 0xaf, UNRECOGNIZED_B0 = 0xb0, UNRECOGNIZED_B1 = 0xb1, UNRECOGNIZED_B2 = 0xb2, UNRECOGNIZED_B3 = 0xb3, UNRECOGNIZED_B4 = 0xb4, UNRECOGNIZED_B5 = 0xb5, UNRECOGNIZED_B6 = 0xb6, UNRECOGNIZED_B7 = 0xb7, UNRECOGNIZED_B8 = 0xb8, UNRECOGNIZED_B9 = 0xb9, UNRECOGNIZED_BA = 0xba, UNRECOGNIZED_BB = 0xbb, UNRECOGNIZED_BC = 0xbc, UNRECOGNIZED_BD = 0xbd, UNRECOGNIZED_BE = 0xbe, UNRECOGNIZED_BF = 0xbf, UNRECOGNIZED_C0 = 0xc0, UNRECOGNIZED_C1 = 0xc1, UNRECOGNIZED_C2 = 0xc2, UNRECOGNIZED_C3 = 0xc3, UNRECOGNIZED_C4 = 0xc4, UNRECOGNIZED_C5 = 0xc5, UNRECOGNIZED_C6 = 0xc6, UNRECOGNIZED_C7 = 0xc7, UNRECOGNIZED_C8 = 0xc8, UNRECOGNIZED_C9 = 0xc9, UNRECOGNIZED_CA = 0xca, UNRECOGNIZED_CB = 0xcb, UNRECOGNIZED_CC = 0xcc, UNRECOGNIZED_CD = 0xcd, UNRECOGNIZED_CE = 0xce, UNRECOGNIZED_CF = 0xcf, UNRECOGNIZED_D0 = 0xd0, UNRECOGNIZED_D1 = 0xd1, UNRECOGNIZED_D2 = 0xd2, UNRECOGNIZED_D3 = 0xd3, UNRECOGNIZED_D4 = 0xd4, UNRECOGNIZED_D5 = 0xd5, UNRECOGNIZED_D6 = 0xd6, UNRECOGNIZED_D7 = 0xd7, UNRECOGNIZED_D8 = 0xd8, UNRECOGNIZED_D9 = 0xd9, UNRECOGNIZED_DA = 0xda, UNRECOGNIZED_DB = 0xdb, UNRECOGNIZED_DC = 0xdc, UNRECOGNIZED_DD = 0xdd, UNRECOGNIZED_DE = 0xde, UNRECOGNIZED_DF = 0xdf, UNRECOGNIZED_E0 = 0xe0, UNRECOGNIZED_E1 = 0xe1, UNRECOGNIZED_E2 = 0xe2, UNRECOGNIZED_E3 = 0xe3, UNRECOGNIZED_E4 = 0xe4, UNRECOGNIZED_E5 = 0xe5, UNRECOGNIZED_E6 = 0xe6, UNRECOGNIZED_E7 = 0xe7, UNRECOGNIZED_E8 = 0xe8, UNRECOGNIZED_E9 = 0xe9, UNRECOGNIZED_EA = 0xea, UNRECOGNIZED_EB = 0xeb, UNRECOGNIZED_EC = 0xec, UNRECOGNIZED_ED = 0xed, UNRECOGNIZED_EE = 0xee, UNRECOGNIZED_EF = 0xef, // Call operations CREATE = 0xf0, CALL = 0xf1, CALLCODE = 0xf2, RETURN = 0xf3, DELEGATECALL = 0xf4, CREATE2 = 0xf5, // Unallocated UNRECOGNIZED_F6 = 0xf6, UNRECOGNIZED_F7 = 0xf7, UNRECOGNIZED_F8 = 0xf8, UNRECOGNIZED_F9 = 0xf9, // Other operations STATICCALL = 0xfa, // Unallocated UNRECOGNIZED_FB = 0xfb, UNRECOGNIZED_FC = 0xfc, // Other operations REVERT = 0xfd, INVALID = 0xfe, SELFDESTRUCT = 0xff, } export function opcodeName(opcode: number): string { return Opcode[opcode] ?? `<unrecognized opcode ${opcode}>`; } export function isPush(opcode: Opcode) { return opcode >= Opcode.PUSH1 && opcode <= Opcode.PUSH32; } export function isJump(opcode: Opcode) { return opcode === Opcode.JUMP || opcode === Opcode.JUMPI; } export function getPushLength(opcode: Opcode) { return opcode - Opcode.PUSH1 + 1; } export function getOpcodeLength(opcode: Opcode) { if (!isPush(opcode)) { return 1; } return 1 + getPushLength(opcode); } export function isCall(opcode: Opcode) { return ( opcode === Opcode.CALL || opcode === Opcode.CALLCODE || opcode === Opcode.DELEGATECALL || opcode === Opcode.STATICCALL ); } export function isCreate(opcode: Opcode) { return opcode === Opcode.CREATE || opcode === Opcode.CREATE2; }