Skip to main content

cita_vm/evm/
opcodes.rs

1use std::fmt;
2
3#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)]
4pub enum OpCode {
5    STOP = 0x00,
6    ADD = 0x01,
7    MUL = 0x02,
8    SUB = 0x03,
9    DIV = 0x04,
10    SDIV = 0x05,
11    MOD = 0x06,
12    SMOD = 0x07,
13    ADDMOD = 0x08,
14    MULMOD = 0x09,
15    EXP = 0x0a,
16    SIGNEXTEND = 0x0b,
17    LT = 0x10,
18    GT = 0x11,
19    SLT = 0x12,
20    SGT = 0x13,
21    EQ = 0x14,
22    ISZERO = 0x15,
23    AND = 0x16,
24    OR = 0x17,
25    XOR = 0x18,
26    NOT = 0x19,
27    BYTE = 0x1a,
28    SHL = 0x1b,
29    SHR = 0x1c,
30    SAR = 0x1d,
31    SHA3 = 0x20,
32    ADDRESS = 0x30,
33    BALANCE = 0x31,
34    ORIGIN = 0x32,
35    CALLER = 0x33,
36    CALLVALUE = 0x34,
37    CALLDATALOAD = 0x35,
38    CALLDATASIZE = 0x36,
39    CALLDATACOPY = 0x37,
40    CODESIZE = 0x38,
41    CODECOPY = 0x39,
42    GASPRICE = 0x3a,
43    EXTCODESIZE = 0x3b,
44    EXTCODECOPY = 0x3c,
45    RETURNDATASIZE = 0x3d,
46    RETURNDATACOPY = 0x3e,
47    EXTCODEHASH = 0x3f,
48    BLOCKHASH = 0x40,
49    COINBASE = 0x41,
50    TIMESTAMP = 0x42,
51    NUMBER = 0x43,
52    PREVRANDAO = 0x44,
53    GASLIMIT = 0x45,
54    CHAINID = 0x46,
55    SELFBALANCE = 0x47,
56    BASEFEE = 0x48,
57    BLOBBASEFEE = 0x4a,
58    POP = 0x50,
59    MLOAD = 0x51,
60    MSTORE = 0x52,
61    MSTORE8 = 0x53,
62    SLOAD = 0x54,
63    SSTORE = 0x55,
64    JUMP = 0x56,
65    JUMPI = 0x57,
66    PC = 0x58,
67    MSIZE = 0x59,
68    GAS = 0x5a,
69    JUMPDEST = 0x5b,
70    TLOAD = 0x5c,
71    TSTORE = 0x5d,
72    MCOPY = 0x5e,
73    PUSH0 = 0x5f,
74    PUSH1 = 0x60,
75    PUSH2 = 0x61,
76    PUSH3 = 0x62,
77    PUSH4 = 0x63,
78    PUSH5 = 0x64,
79    PUSH6 = 0x65,
80    PUSH7 = 0x66,
81    PUSH8 = 0x67,
82    PUSH9 = 0x68,
83    PUSH10 = 0x69,
84    PUSH11 = 0x6a,
85    PUSH12 = 0x6b,
86    PUSH13 = 0x6c,
87    PUSH14 = 0x6d,
88    PUSH15 = 0x6e,
89    PUSH16 = 0x6f,
90    PUSH17 = 0x70,
91    PUSH18 = 0x71,
92    PUSH19 = 0x72,
93    PUSH20 = 0x73,
94    PUSH21 = 0x74,
95    PUSH22 = 0x75,
96    PUSH23 = 0x76,
97    PUSH24 = 0x77,
98    PUSH25 = 0x78,
99    PUSH26 = 0x79,
100    PUSH27 = 0x7a,
101    PUSH28 = 0x7b,
102    PUSH29 = 0x7c,
103    PUSH30 = 0x7d,
104    PUSH31 = 0x7e,
105    PUSH32 = 0x7f,
106    DUP1 = 0x80,
107    DUP2 = 0x81,
108    DUP3 = 0x82,
109    DUP4 = 0x83,
110    DUP5 = 0x84,
111    DUP6 = 0x85,
112    DUP7 = 0x86,
113    DUP8 = 0x87,
114    DUP9 = 0x88,
115    DUP10 = 0x89,
116    DUP11 = 0x8a,
117    DUP12 = 0x8b,
118    DUP13 = 0x8c,
119    DUP14 = 0x8d,
120    DUP15 = 0x8e,
121    DUP16 = 0x8f,
122    SWAP1 = 0x90,
123    SWAP2 = 0x91,
124    SWAP3 = 0x92,
125    SWAP4 = 0x93,
126    SWAP5 = 0x94,
127    SWAP6 = 0x95,
128    SWAP7 = 0x96,
129    SWAP8 = 0x97,
130    SWAP9 = 0x98,
131    SWAP10 = 0x99,
132    SWAP11 = 0x9a,
133    SWAP12 = 0x9b,
134    SWAP13 = 0x9c,
135    SWAP14 = 0x9d,
136    SWAP15 = 0x9e,
137    SWAP16 = 0x9f,
138    LOG0 = 0xa0,
139    LOG1 = 0xa1,
140    LOG2 = 0xa2,
141    LOG3 = 0xa3,
142    LOG4 = 0xa4,
143    CREATE = 0xf0,
144    CALL = 0xf1,
145    CALLCODE = 0xf2,
146    RETURN = 0xf3,
147    DELEGATECALL = 0xf4,
148    CREATE2 = 0xf5,
149    REVERT = 0xfd,
150    STATICCALL = 0xfa,
151    SELFDESTRUCT = 0xff,
152}
153
154impl fmt::Display for OpCode {
155    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
156        match *self {
157            OpCode::STOP => write!(f, "STOP"),
158            OpCode::ADD => write!(f, "ADD"),
159            OpCode::MUL => write!(f, "MUL"),
160            OpCode::SUB => write!(f, "SUB"),
161            OpCode::DIV => write!(f, "DIV"),
162            OpCode::SDIV => write!(f, "SDIV"),
163            OpCode::MOD => write!(f, "MOD"),
164            OpCode::SMOD => write!(f, "SMOD"),
165            OpCode::ADDMOD => write!(f, "ADDMOD"),
166            OpCode::MULMOD => write!(f, "MULMOD"),
167            OpCode::EXP => write!(f, "EXP"),
168            OpCode::SIGNEXTEND => write!(f, "SIGNEXTEND"),
169            OpCode::LT => write!(f, "LT"),
170            OpCode::GT => write!(f, "GT"),
171            OpCode::SLT => write!(f, "SLT"),
172            OpCode::SGT => write!(f, "SGT"),
173            OpCode::EQ => write!(f, "EQ"),
174            OpCode::ISZERO => write!(f, "ISZERO"),
175            OpCode::AND => write!(f, "AND"),
176            OpCode::OR => write!(f, "OR"),
177            OpCode::XOR => write!(f, "XOR"),
178            OpCode::NOT => write!(f, "NOT"),
179            OpCode::BYTE => write!(f, "BYTE"),
180            OpCode::SHL => write!(f, "SHL"),
181            OpCode::SHR => write!(f, "SHR"),
182            OpCode::SAR => write!(f, "SAR"),
183            OpCode::SHA3 => write!(f, "SHA3"),
184            OpCode::ADDRESS => write!(f, "ADDRESS"),
185            OpCode::BALANCE => write!(f, "BALANCE"),
186            OpCode::ORIGIN => write!(f, "ORIGIN"),
187            OpCode::CALLER => write!(f, "CALLER"),
188            OpCode::CALLVALUE => write!(f, "CALLVALUE"),
189            OpCode::CALLDATALOAD => write!(f, "CALLDATALOAD"),
190            OpCode::CALLDATASIZE => write!(f, "CALLDATASIZE"),
191            OpCode::CALLDATACOPY => write!(f, "CALLDATACOPY"),
192            OpCode::CODESIZE => write!(f, "CODESIZE"),
193            OpCode::CODECOPY => write!(f, "CODECOPY"),
194            OpCode::GASPRICE => write!(f, "GASPRICE"),
195            OpCode::EXTCODESIZE => write!(f, "EXTCODESIZE"),
196            OpCode::EXTCODECOPY => write!(f, "EXTCODECOPY"),
197            OpCode::RETURNDATASIZE => write!(f, "RETURNDATASIZE"),
198            OpCode::RETURNDATACOPY => write!(f, "RETURNDATACOPY"),
199            OpCode::EXTCODEHASH => write!(f, "EXTCODEHASH"),
200            OpCode::BLOCKHASH => write!(f, "BLOCKHASH"),
201            OpCode::COINBASE => write!(f, "COINBASE"),
202            OpCode::TIMESTAMP => write!(f, "TIMESTAMP"),
203            OpCode::NUMBER => write!(f, "NUMBER"),
204            OpCode::PREVRANDAO => write!(f, "PREVRANDAO"),
205            OpCode::GASLIMIT => write!(f, "GASLIMIT"),
206            OpCode::CHAINID => write!(f, "CHAINID"),
207            OpCode::SELFBALANCE => write!(f, "SELFBALANCE"),
208            OpCode::BASEFEE => write!(f, "BASEFEE"),
209            OpCode::BLOBBASEFEE => write!(f, "BLOBBASEFEE"),
210            OpCode::POP => write!(f, "POP"),
211            OpCode::MLOAD => write!(f, "MLOAD"),
212            OpCode::MSTORE => write!(f, "MSTORE"),
213            OpCode::MSTORE8 => write!(f, "MSTORE8"),
214            OpCode::SLOAD => write!(f, "SLOAD"),
215            OpCode::SSTORE => write!(f, "SSTORE"),
216            OpCode::JUMP => write!(f, "JUMP"),
217            OpCode::JUMPI => write!(f, "JUMPI"),
218            OpCode::PC => write!(f, "PC"),
219            OpCode::MSIZE => write!(f, "MSIZE"),
220            OpCode::GAS => write!(f, "GAS"),
221            OpCode::JUMPDEST => write!(f, "JUMPDEST"),
222            OpCode::TLOAD => write!(f, "TLOAD"),
223            OpCode::TSTORE => write!(f, "TSTORE"),
224            OpCode::MCOPY => write!(f, "MCOPY"),
225            OpCode::PUSH0 => write!(f, "PUSH0"),
226            OpCode::PUSH1 => write!(f, "PUSH1"),
227            OpCode::PUSH2 => write!(f, "PUSH2"),
228            OpCode::PUSH3 => write!(f, "PUSH3"),
229            OpCode::PUSH4 => write!(f, "PUSH4"),
230            OpCode::PUSH5 => write!(f, "PUSH5"),
231            OpCode::PUSH6 => write!(f, "PUSH6"),
232            OpCode::PUSH7 => write!(f, "PUSH7"),
233            OpCode::PUSH8 => write!(f, "PUSH8"),
234            OpCode::PUSH9 => write!(f, "PUSH9"),
235            OpCode::PUSH10 => write!(f, "PUSH10"),
236            OpCode::PUSH11 => write!(f, "PUSH11"),
237            OpCode::PUSH12 => write!(f, "PUSH12"),
238            OpCode::PUSH13 => write!(f, "PUSH13"),
239            OpCode::PUSH14 => write!(f, "PUSH14"),
240            OpCode::PUSH15 => write!(f, "PUSH15"),
241            OpCode::PUSH16 => write!(f, "PUSH16"),
242            OpCode::PUSH17 => write!(f, "PUSH17"),
243            OpCode::PUSH18 => write!(f, "PUSH18"),
244            OpCode::PUSH19 => write!(f, "PUSH19"),
245            OpCode::PUSH20 => write!(f, "PUSH20"),
246            OpCode::PUSH21 => write!(f, "PUSH21"),
247            OpCode::PUSH22 => write!(f, "PUSH22"),
248            OpCode::PUSH23 => write!(f, "PUSH23"),
249            OpCode::PUSH24 => write!(f, "PUSH24"),
250            OpCode::PUSH25 => write!(f, "PUSH25"),
251            OpCode::PUSH26 => write!(f, "PUSH26"),
252            OpCode::PUSH27 => write!(f, "PUSH27"),
253            OpCode::PUSH28 => write!(f, "PUSH28"),
254            OpCode::PUSH29 => write!(f, "PUSH29"),
255            OpCode::PUSH30 => write!(f, "PUSH30"),
256            OpCode::PUSH31 => write!(f, "PUSH31"),
257            OpCode::PUSH32 => write!(f, "PUSH32"),
258            OpCode::DUP1 => write!(f, "DUP1"),
259            OpCode::DUP2 => write!(f, "DUP2"),
260            OpCode::DUP3 => write!(f, "DUP3"),
261            OpCode::DUP4 => write!(f, "DUP4"),
262            OpCode::DUP5 => write!(f, "DUP5"),
263            OpCode::DUP6 => write!(f, "DUP6"),
264            OpCode::DUP7 => write!(f, "DUP7"),
265            OpCode::DUP8 => write!(f, "DUP8"),
266            OpCode::DUP9 => write!(f, "DUP9"),
267            OpCode::DUP10 => write!(f, "DUP10"),
268            OpCode::DUP11 => write!(f, "DUP11"),
269            OpCode::DUP12 => write!(f, "DUP12"),
270            OpCode::DUP13 => write!(f, "DUP13"),
271            OpCode::DUP14 => write!(f, "DUP14"),
272            OpCode::DUP15 => write!(f, "DUP15"),
273            OpCode::DUP16 => write!(f, "DUP16"),
274            OpCode::SWAP1 => write!(f, "SWAP1"),
275            OpCode::SWAP2 => write!(f, "SWAP2"),
276            OpCode::SWAP3 => write!(f, "SWAP3"),
277            OpCode::SWAP4 => write!(f, "SWAP4"),
278            OpCode::SWAP5 => write!(f, "SWAP5"),
279            OpCode::SWAP6 => write!(f, "SWAP6"),
280            OpCode::SWAP7 => write!(f, "SWAP7"),
281            OpCode::SWAP8 => write!(f, "SWAP8"),
282            OpCode::SWAP9 => write!(f, "SWAP9"),
283            OpCode::SWAP10 => write!(f, "SWAP10"),
284            OpCode::SWAP11 => write!(f, "SWAP11"),
285            OpCode::SWAP12 => write!(f, "SWAP12"),
286            OpCode::SWAP13 => write!(f, "SWAP13"),
287            OpCode::SWAP14 => write!(f, "SWAP14"),
288            OpCode::SWAP15 => write!(f, "SWAP15"),
289            OpCode::SWAP16 => write!(f, "SWAP16"),
290            OpCode::LOG0 => write!(f, "LOG0"),
291            OpCode::LOG1 => write!(f, "LOG1"),
292            OpCode::LOG2 => write!(f, "LOG2"),
293            OpCode::LOG3 => write!(f, "LOG3"),
294            OpCode::LOG4 => write!(f, "LOG4"),
295            OpCode::CREATE => write!(f, "CREATE"),
296            OpCode::CALL => write!(f, "CALL"),
297            OpCode::CALLCODE => write!(f, "CALLCODE"),
298            OpCode::RETURN => write!(f, "RETURN"),
299            OpCode::DELEGATECALL => write!(f, "DELEGATECALL"),
300            OpCode::CREATE2 => write!(f, "CREATE2"),
301            OpCode::REVERT => write!(f, "REVERT"),
302            OpCode::STATICCALL => write!(f, "STATICCALL"),
303            OpCode::SELFDESTRUCT => write!(f, "SELFDESTRUCT"),
304        }
305    }
306}
307
308#[derive(PartialEq, Clone, Copy)]
309pub enum GasPriceTier {
310    Zero,
311    Base,
312    VeryLow,
313    Low,
314    Mid,
315    High,
316    Ext,
317    Special,
318}
319
320impl GasPriceTier {
321    pub fn idx(self) -> usize {
322        match self {
323            GasPriceTier::Zero => 0,
324            GasPriceTier::Base => 1,
325            GasPriceTier::VeryLow => 2,
326            GasPriceTier::Low => 3,
327            GasPriceTier::Mid => 4,
328            GasPriceTier::High => 5,
329            GasPriceTier::Ext => 6,
330            GasPriceTier::Special => 7,
331        }
332    }
333}
334
335impl OpCode {
336    pub fn from_u8(n: u8) -> Option<OpCode> {
337        match n {
338            0x00 => Some(OpCode::STOP),
339            0x01 => Some(OpCode::ADD),
340            0x02 => Some(OpCode::MUL),
341            0x03 => Some(OpCode::SUB),
342            0x04 => Some(OpCode::DIV),
343            0x05 => Some(OpCode::SDIV),
344            0x06 => Some(OpCode::MOD),
345            0x07 => Some(OpCode::SMOD),
346            0x08 => Some(OpCode::ADDMOD),
347            0x09 => Some(OpCode::MULMOD),
348            0x0a => Some(OpCode::EXP),
349            0x0b => Some(OpCode::SIGNEXTEND),
350            0x10 => Some(OpCode::LT),
351            0x11 => Some(OpCode::GT),
352            0x12 => Some(OpCode::SLT),
353            0x13 => Some(OpCode::SGT),
354            0x14 => Some(OpCode::EQ),
355            0x15 => Some(OpCode::ISZERO),
356            0x16 => Some(OpCode::AND),
357            0x17 => Some(OpCode::OR),
358            0x18 => Some(OpCode::XOR),
359            0x19 => Some(OpCode::NOT),
360            0x1a => Some(OpCode::BYTE),
361            0x1b => Some(OpCode::SHL),
362            0x1c => Some(OpCode::SHR),
363            0x1d => Some(OpCode::SAR),
364            0x20 => Some(OpCode::SHA3),
365            0x30 => Some(OpCode::ADDRESS),
366            0x31 => Some(OpCode::BALANCE),
367            0x32 => Some(OpCode::ORIGIN),
368            0x33 => Some(OpCode::CALLER),
369            0x34 => Some(OpCode::CALLVALUE),
370            0x35 => Some(OpCode::CALLDATALOAD),
371            0x36 => Some(OpCode::CALLDATASIZE),
372            0x37 => Some(OpCode::CALLDATACOPY),
373            0x38 => Some(OpCode::CODESIZE),
374            0x39 => Some(OpCode::CODECOPY),
375            0x3a => Some(OpCode::GASPRICE),
376            0x3b => Some(OpCode::EXTCODESIZE),
377            0x3c => Some(OpCode::EXTCODECOPY),
378            0x3d => Some(OpCode::RETURNDATASIZE),
379            0x3e => Some(OpCode::RETURNDATACOPY),
380            0x3f => Some(OpCode::EXTCODEHASH),
381            0x40 => Some(OpCode::BLOCKHASH),
382            0x41 => Some(OpCode::COINBASE),
383            0x42 => Some(OpCode::TIMESTAMP),
384            0x43 => Some(OpCode::NUMBER),
385            0x44 => Some(OpCode::PREVRANDAO),
386            0x45 => Some(OpCode::GASLIMIT),
387            0x46 => Some(OpCode::CHAINID),
388            0x47 => Some(OpCode::SELFBALANCE),
389            0x48 => Some(OpCode::BASEFEE),
390            0x4a => Some(OpCode::BLOBBASEFEE),
391            0x50 => Some(OpCode::POP),
392            0x51 => Some(OpCode::MLOAD),
393            0x52 => Some(OpCode::MSTORE),
394            0x53 => Some(OpCode::MSTORE8),
395            0x54 => Some(OpCode::SLOAD),
396            0x55 => Some(OpCode::SSTORE),
397            0x56 => Some(OpCode::JUMP),
398            0x57 => Some(OpCode::JUMPI),
399            0x58 => Some(OpCode::PC),
400            0x59 => Some(OpCode::MSIZE),
401            0x5a => Some(OpCode::GAS),
402            0x5b => Some(OpCode::JUMPDEST),
403            0x5c => Some(OpCode::TLOAD),
404            0x5d => Some(OpCode::TSTORE),
405            0x5e => Some(OpCode::MCOPY),
406            0x5f => Some(OpCode::PUSH0),
407            0x60 => Some(OpCode::PUSH1),
408            0x61 => Some(OpCode::PUSH2),
409            0x62 => Some(OpCode::PUSH3),
410            0x63 => Some(OpCode::PUSH4),
411            0x64 => Some(OpCode::PUSH5),
412            0x65 => Some(OpCode::PUSH6),
413            0x66 => Some(OpCode::PUSH7),
414            0x67 => Some(OpCode::PUSH8),
415            0x68 => Some(OpCode::PUSH9),
416            0x69 => Some(OpCode::PUSH10),
417            0x6a => Some(OpCode::PUSH11),
418            0x6b => Some(OpCode::PUSH12),
419            0x6c => Some(OpCode::PUSH13),
420            0x6d => Some(OpCode::PUSH14),
421            0x6e => Some(OpCode::PUSH15),
422            0x6f => Some(OpCode::PUSH16),
423            0x70 => Some(OpCode::PUSH17),
424            0x71 => Some(OpCode::PUSH18),
425            0x72 => Some(OpCode::PUSH19),
426            0x73 => Some(OpCode::PUSH20),
427            0x74 => Some(OpCode::PUSH21),
428            0x75 => Some(OpCode::PUSH22),
429            0x76 => Some(OpCode::PUSH23),
430            0x77 => Some(OpCode::PUSH24),
431            0x78 => Some(OpCode::PUSH25),
432            0x79 => Some(OpCode::PUSH26),
433            0x7a => Some(OpCode::PUSH27),
434            0x7b => Some(OpCode::PUSH28),
435            0x7c => Some(OpCode::PUSH29),
436            0x7d => Some(OpCode::PUSH30),
437            0x7e => Some(OpCode::PUSH31),
438            0x7f => Some(OpCode::PUSH32),
439            0x80 => Some(OpCode::DUP1),
440            0x81 => Some(OpCode::DUP2),
441            0x82 => Some(OpCode::DUP3),
442            0x83 => Some(OpCode::DUP4),
443            0x84 => Some(OpCode::DUP5),
444            0x85 => Some(OpCode::DUP6),
445            0x86 => Some(OpCode::DUP7),
446            0x87 => Some(OpCode::DUP8),
447            0x88 => Some(OpCode::DUP9),
448            0x89 => Some(OpCode::DUP10),
449            0x8a => Some(OpCode::DUP11),
450            0x8b => Some(OpCode::DUP12),
451            0x8c => Some(OpCode::DUP13),
452            0x8d => Some(OpCode::DUP14),
453            0x8e => Some(OpCode::DUP15),
454            0x8f => Some(OpCode::DUP16),
455            0x90 => Some(OpCode::SWAP1),
456            0x91 => Some(OpCode::SWAP2),
457            0x92 => Some(OpCode::SWAP3),
458            0x93 => Some(OpCode::SWAP4),
459            0x94 => Some(OpCode::SWAP5),
460            0x95 => Some(OpCode::SWAP6),
461            0x96 => Some(OpCode::SWAP7),
462            0x97 => Some(OpCode::SWAP8),
463            0x98 => Some(OpCode::SWAP9),
464            0x99 => Some(OpCode::SWAP10),
465            0x9a => Some(OpCode::SWAP11),
466            0x9b => Some(OpCode::SWAP12),
467            0x9c => Some(OpCode::SWAP13),
468            0x9d => Some(OpCode::SWAP14),
469            0x9e => Some(OpCode::SWAP15),
470            0x9f => Some(OpCode::SWAP16),
471            0xa0 => Some(OpCode::LOG0),
472            0xa1 => Some(OpCode::LOG1),
473            0xa2 => Some(OpCode::LOG2),
474            0xa3 => Some(OpCode::LOG3),
475            0xa4 => Some(OpCode::LOG4),
476            0xf0 => Some(OpCode::CREATE),
477            0xf1 => Some(OpCode::CALL),
478            0xf2 => Some(OpCode::CALLCODE),
479            0xf3 => Some(OpCode::RETURN),
480            0xf4 => Some(OpCode::DELEGATECALL),
481            0xf5 => Some(OpCode::CREATE2),
482            0xfd => Some(OpCode::REVERT),
483            0xfa => Some(OpCode::STATICCALL),
484            0xff => Some(OpCode::SELFDESTRUCT),
485            _ => None,
486        }
487    }
488
489    pub fn gas_price_tier(&self) -> GasPriceTier {
490        match self {
491            OpCode::STOP => GasPriceTier::Zero,
492            OpCode::ADD => GasPriceTier::VeryLow,
493            OpCode::MUL => GasPriceTier::Low,
494            OpCode::SUB => GasPriceTier::VeryLow,
495            OpCode::DIV => GasPriceTier::Low,
496            OpCode::SDIV => GasPriceTier::Low,
497            OpCode::MOD => GasPriceTier::Low,
498            OpCode::SMOD => GasPriceTier::Low,
499            OpCode::EXP => GasPriceTier::Special,
500            OpCode::NOT => GasPriceTier::VeryLow,
501            OpCode::LT => GasPriceTier::VeryLow,
502            OpCode::GT => GasPriceTier::VeryLow,
503            OpCode::SLT => GasPriceTier::VeryLow,
504            OpCode::SGT => GasPriceTier::VeryLow,
505            OpCode::EQ => GasPriceTier::VeryLow,
506            OpCode::ISZERO => GasPriceTier::VeryLow,
507            OpCode::AND => GasPriceTier::VeryLow,
508            OpCode::OR => GasPriceTier::VeryLow,
509            OpCode::XOR => GasPriceTier::VeryLow,
510            OpCode::BYTE => GasPriceTier::VeryLow,
511            OpCode::SHL => GasPriceTier::VeryLow,
512            OpCode::SHR => GasPriceTier::VeryLow,
513            OpCode::SAR => GasPriceTier::VeryLow,
514            OpCode::ADDMOD => GasPriceTier::Mid,
515            OpCode::MULMOD => GasPriceTier::Mid,
516            OpCode::SIGNEXTEND => GasPriceTier::Low,
517            OpCode::RETURNDATASIZE => GasPriceTier::Base,
518            OpCode::RETURNDATACOPY => GasPriceTier::VeryLow,
519            OpCode::SHA3 => GasPriceTier::Special,
520            OpCode::ADDRESS => GasPriceTier::Base,
521            OpCode::BALANCE => GasPriceTier::Special,
522            OpCode::ORIGIN => GasPriceTier::Base,
523            OpCode::CALLER => GasPriceTier::Base,
524            OpCode::CALLVALUE => GasPriceTier::Base,
525            OpCode::CALLDATALOAD => GasPriceTier::VeryLow,
526            OpCode::CALLDATASIZE => GasPriceTier::Base,
527            OpCode::CALLDATACOPY => GasPriceTier::VeryLow,
528            OpCode::EXTCODEHASH => GasPriceTier::Special,
529            OpCode::CODESIZE => GasPriceTier::Base,
530            OpCode::CODECOPY => GasPriceTier::VeryLow,
531            OpCode::GASPRICE => GasPriceTier::Base,
532            OpCode::EXTCODESIZE => GasPriceTier::Special,
533            OpCode::EXTCODECOPY => GasPriceTier::Special,
534            OpCode::BLOCKHASH => GasPriceTier::Ext,
535            OpCode::COINBASE => GasPriceTier::Base,
536            OpCode::TIMESTAMP => GasPriceTier::Base,
537            OpCode::NUMBER => GasPriceTier::Base,
538            OpCode::PREVRANDAO => GasPriceTier::Base,
539            OpCode::GASLIMIT => GasPriceTier::Base,
540            OpCode::CHAINID => GasPriceTier::VeryLow,
541            OpCode::SELFBALANCE => GasPriceTier::Low,
542            OpCode::BASEFEE => GasPriceTier::Base,
543            OpCode::BLOBBASEFEE => GasPriceTier::Base,
544            OpCode::POP => GasPriceTier::Base,
545            OpCode::MLOAD => GasPriceTier::VeryLow,
546            OpCode::MSTORE => GasPriceTier::VeryLow,
547            OpCode::MSTORE8 => GasPriceTier::VeryLow,
548            OpCode::SLOAD => GasPriceTier::Special,
549            OpCode::SSTORE => GasPriceTier::Special,
550            OpCode::JUMP => GasPriceTier::Mid,
551            OpCode::JUMPI => GasPriceTier::High,
552            OpCode::PC => GasPriceTier::Base,
553            OpCode::MSIZE => GasPriceTier::Base,
554            OpCode::GAS => GasPriceTier::Base,
555            OpCode::JUMPDEST => GasPriceTier::Special,
556            OpCode::TLOAD => GasPriceTier::Zero,
557            OpCode::TSTORE => GasPriceTier::Zero,
558            OpCode::MCOPY => GasPriceTier::VeryLow,
559            OpCode::PUSH0 => GasPriceTier::Base,
560            OpCode::PUSH1 => GasPriceTier::VeryLow,
561            OpCode::PUSH2 => GasPriceTier::VeryLow,
562            OpCode::PUSH3 => GasPriceTier::VeryLow,
563            OpCode::PUSH4 => GasPriceTier::VeryLow,
564            OpCode::PUSH5 => GasPriceTier::VeryLow,
565            OpCode::PUSH6 => GasPriceTier::VeryLow,
566            OpCode::PUSH7 => GasPriceTier::VeryLow,
567            OpCode::PUSH8 => GasPriceTier::VeryLow,
568            OpCode::PUSH9 => GasPriceTier::VeryLow,
569            OpCode::PUSH10 => GasPriceTier::VeryLow,
570            OpCode::PUSH11 => GasPriceTier::VeryLow,
571            OpCode::PUSH12 => GasPriceTier::VeryLow,
572            OpCode::PUSH13 => GasPriceTier::VeryLow,
573            OpCode::PUSH14 => GasPriceTier::VeryLow,
574            OpCode::PUSH15 => GasPriceTier::VeryLow,
575            OpCode::PUSH16 => GasPriceTier::VeryLow,
576            OpCode::PUSH17 => GasPriceTier::VeryLow,
577            OpCode::PUSH18 => GasPriceTier::VeryLow,
578            OpCode::PUSH19 => GasPriceTier::VeryLow,
579            OpCode::PUSH20 => GasPriceTier::VeryLow,
580            OpCode::PUSH21 => GasPriceTier::VeryLow,
581            OpCode::PUSH22 => GasPriceTier::VeryLow,
582            OpCode::PUSH23 => GasPriceTier::VeryLow,
583            OpCode::PUSH24 => GasPriceTier::VeryLow,
584            OpCode::PUSH25 => GasPriceTier::VeryLow,
585            OpCode::PUSH26 => GasPriceTier::VeryLow,
586            OpCode::PUSH27 => GasPriceTier::VeryLow,
587            OpCode::PUSH28 => GasPriceTier::VeryLow,
588            OpCode::PUSH29 => GasPriceTier::VeryLow,
589            OpCode::PUSH30 => GasPriceTier::VeryLow,
590            OpCode::PUSH31 => GasPriceTier::VeryLow,
591            OpCode::PUSH32 => GasPriceTier::VeryLow,
592            OpCode::DUP1 => GasPriceTier::VeryLow,
593            OpCode::DUP2 => GasPriceTier::VeryLow,
594            OpCode::DUP3 => GasPriceTier::VeryLow,
595            OpCode::DUP4 => GasPriceTier::VeryLow,
596            OpCode::DUP5 => GasPriceTier::VeryLow,
597            OpCode::DUP6 => GasPriceTier::VeryLow,
598            OpCode::DUP7 => GasPriceTier::VeryLow,
599            OpCode::DUP8 => GasPriceTier::VeryLow,
600            OpCode::DUP9 => GasPriceTier::VeryLow,
601            OpCode::DUP10 => GasPriceTier::VeryLow,
602            OpCode::DUP11 => GasPriceTier::VeryLow,
603            OpCode::DUP12 => GasPriceTier::VeryLow,
604            OpCode::DUP13 => GasPriceTier::VeryLow,
605            OpCode::DUP14 => GasPriceTier::VeryLow,
606            OpCode::DUP15 => GasPriceTier::VeryLow,
607            OpCode::DUP16 => GasPriceTier::VeryLow,
608            OpCode::SWAP1 => GasPriceTier::VeryLow,
609            OpCode::SWAP2 => GasPriceTier::VeryLow,
610            OpCode::SWAP3 => GasPriceTier::VeryLow,
611            OpCode::SWAP4 => GasPriceTier::VeryLow,
612            OpCode::SWAP5 => GasPriceTier::VeryLow,
613            OpCode::SWAP6 => GasPriceTier::VeryLow,
614            OpCode::SWAP7 => GasPriceTier::VeryLow,
615            OpCode::SWAP8 => GasPriceTier::VeryLow,
616            OpCode::SWAP9 => GasPriceTier::VeryLow,
617            OpCode::SWAP10 => GasPriceTier::VeryLow,
618            OpCode::SWAP11 => GasPriceTier::VeryLow,
619            OpCode::SWAP12 => GasPriceTier::VeryLow,
620            OpCode::SWAP13 => GasPriceTier::VeryLow,
621            OpCode::SWAP14 => GasPriceTier::VeryLow,
622            OpCode::SWAP15 => GasPriceTier::VeryLow,
623            OpCode::SWAP16 => GasPriceTier::VeryLow,
624            OpCode::LOG0 => GasPriceTier::Special,
625            OpCode::LOG1 => GasPriceTier::Special,
626            OpCode::LOG2 => GasPriceTier::Special,
627            OpCode::LOG3 => GasPriceTier::Special,
628            OpCode::LOG4 => GasPriceTier::Special,
629            OpCode::CREATE => GasPriceTier::Special,
630            OpCode::CALL => GasPriceTier::Special,
631            OpCode::CALLCODE => GasPriceTier::Special,
632            OpCode::RETURN => GasPriceTier::Zero,
633            OpCode::DELEGATECALL => GasPriceTier::Special,
634            OpCode::STATICCALL => GasPriceTier::Special,
635            OpCode::SELFDESTRUCT => GasPriceTier::Special,
636            OpCode::CREATE2 => GasPriceTier::Special,
637            OpCode::REVERT => GasPriceTier::Zero,
638        }
639    }
640
641    pub fn stack_require(&self) -> u64 {
642        match self {
643            OpCode::STOP => 0,
644            OpCode::ADD => 2,
645            OpCode::MUL => 2,
646            OpCode::SUB => 2,
647            OpCode::DIV => 2,
648            OpCode::SDIV => 2,
649            OpCode::MOD => 2,
650            OpCode::SMOD => 2,
651            OpCode::EXP => 2,
652            OpCode::NOT => 1,
653            OpCode::LT => 2,
654            OpCode::GT => 2,
655            OpCode::SLT => 2,
656            OpCode::SGT => 2,
657            OpCode::EQ => 2,
658            OpCode::ISZERO => 1,
659            OpCode::AND => 2,
660            OpCode::OR => 2,
661            OpCode::XOR => 2,
662            OpCode::BYTE => 2,
663            OpCode::SHL => 2,
664            OpCode::SHR => 2,
665            OpCode::SAR => 2,
666            OpCode::ADDMOD => 3,
667            OpCode::MULMOD => 3,
668            OpCode::SIGNEXTEND => 2,
669            OpCode::RETURNDATASIZE => 0,
670            OpCode::RETURNDATACOPY => 3,
671            OpCode::SHA3 => 2,
672            OpCode::ADDRESS => 0,
673            OpCode::BALANCE => 1,
674            OpCode::ORIGIN => 0,
675            OpCode::CALLER => 0,
676            OpCode::CALLVALUE => 0,
677            OpCode::CALLDATALOAD => 1,
678            OpCode::CALLDATASIZE => 0,
679            OpCode::CALLDATACOPY => 3,
680            OpCode::EXTCODEHASH => 1,
681            OpCode::CODESIZE => 0,
682            OpCode::CODECOPY => 3,
683            OpCode::GASPRICE => 0,
684            OpCode::EXTCODESIZE => 1,
685            OpCode::EXTCODECOPY => 4,
686            OpCode::BLOCKHASH => 1,
687            OpCode::COINBASE => 0,
688            OpCode::TIMESTAMP => 0,
689            OpCode::NUMBER => 0,
690            OpCode::PREVRANDAO => 0,
691            OpCode::GASLIMIT => 0,
692            OpCode::CHAINID => 0,
693            OpCode::SELFBALANCE => 0,
694            OpCode::BASEFEE => 0,
695            OpCode::BLOBBASEFEE => 0,
696            OpCode::POP => 1,
697            OpCode::MLOAD => 1,
698            OpCode::MSTORE => 2,
699            OpCode::MSTORE8 => 2,
700            OpCode::SLOAD => 1,
701            OpCode::SSTORE => 2,
702            OpCode::JUMP => 1,
703            OpCode::JUMPI => 2,
704            OpCode::PC => 0,
705            OpCode::MSIZE => 0,
706            OpCode::GAS => 0,
707            OpCode::JUMPDEST => 0,
708            OpCode::TLOAD => 1,
709            OpCode::TSTORE => 2,
710            OpCode::MCOPY => 3,
711            OpCode::PUSH0 => 0,
712            OpCode::PUSH1 => 0,
713            OpCode::PUSH2 => 0,
714            OpCode::PUSH3 => 0,
715            OpCode::PUSH4 => 0,
716            OpCode::PUSH5 => 0,
717            OpCode::PUSH6 => 0,
718            OpCode::PUSH7 => 0,
719            OpCode::PUSH8 => 0,
720            OpCode::PUSH9 => 0,
721            OpCode::PUSH10 => 0,
722            OpCode::PUSH11 => 0,
723            OpCode::PUSH12 => 0,
724            OpCode::PUSH13 => 0,
725            OpCode::PUSH14 => 0,
726            OpCode::PUSH15 => 0,
727            OpCode::PUSH16 => 0,
728            OpCode::PUSH17 => 0,
729            OpCode::PUSH18 => 0,
730            OpCode::PUSH19 => 0,
731            OpCode::PUSH20 => 0,
732            OpCode::PUSH21 => 0,
733            OpCode::PUSH22 => 0,
734            OpCode::PUSH23 => 0,
735            OpCode::PUSH24 => 0,
736            OpCode::PUSH25 => 0,
737            OpCode::PUSH26 => 0,
738            OpCode::PUSH27 => 0,
739            OpCode::PUSH28 => 0,
740            OpCode::PUSH29 => 0,
741            OpCode::PUSH30 => 0,
742            OpCode::PUSH31 => 0,
743            OpCode::PUSH32 => 0,
744            OpCode::DUP1 => 1,
745            OpCode::DUP2 => 2,
746            OpCode::DUP3 => 3,
747            OpCode::DUP4 => 4,
748            OpCode::DUP5 => 5,
749            OpCode::DUP6 => 6,
750            OpCode::DUP7 => 7,
751            OpCode::DUP8 => 8,
752            OpCode::DUP9 => 9,
753            OpCode::DUP10 => 10,
754            OpCode::DUP11 => 11,
755            OpCode::DUP12 => 12,
756            OpCode::DUP13 => 13,
757            OpCode::DUP14 => 14,
758            OpCode::DUP15 => 15,
759            OpCode::DUP16 => 16,
760            OpCode::SWAP1 => 2,
761            OpCode::SWAP2 => 3,
762            OpCode::SWAP3 => 4,
763            OpCode::SWAP4 => 5,
764            OpCode::SWAP5 => 6,
765            OpCode::SWAP6 => 7,
766            OpCode::SWAP7 => 8,
767            OpCode::SWAP8 => 9,
768            OpCode::SWAP9 => 10,
769            OpCode::SWAP10 => 11,
770            OpCode::SWAP11 => 12,
771            OpCode::SWAP12 => 13,
772            OpCode::SWAP13 => 14,
773            OpCode::SWAP14 => 15,
774            OpCode::SWAP15 => 16,
775            OpCode::SWAP16 => 17,
776            OpCode::LOG0 => 2,
777            OpCode::LOG1 => 3,
778            OpCode::LOG2 => 4,
779            OpCode::LOG3 => 5,
780            OpCode::LOG4 => 6,
781            OpCode::CREATE => 3,
782            OpCode::CALL => 7,
783            OpCode::CALLCODE => 7,
784            OpCode::RETURN => 2,
785            OpCode::DELEGATECALL => 6,
786            OpCode::STATICCALL => 6,
787            OpCode::SELFDESTRUCT => 1,
788            OpCode::CREATE2 => 4,
789            OpCode::REVERT => 2,
790        }
791    }
792
793    pub fn stack_returns(&self) -> u64 {
794        match self {
795            OpCode::STOP => 0,
796            OpCode::ADD => 1,
797            OpCode::MUL => 1,
798            OpCode::SUB => 1,
799            OpCode::DIV => 1,
800            OpCode::SDIV => 1,
801            OpCode::MOD => 1,
802            OpCode::SMOD => 1,
803            OpCode::EXP => 1,
804            OpCode::NOT => 1,
805            OpCode::LT => 1,
806            OpCode::GT => 1,
807            OpCode::SLT => 1,
808            OpCode::SGT => 1,
809            OpCode::EQ => 1,
810            OpCode::ISZERO => 1,
811            OpCode::AND => 1,
812            OpCode::OR => 1,
813            OpCode::XOR => 1,
814            OpCode::BYTE => 1,
815            OpCode::SHL => 1,
816            OpCode::SHR => 1,
817            OpCode::SAR => 1,
818            OpCode::ADDMOD => 1,
819            OpCode::MULMOD => 1,
820            OpCode::SIGNEXTEND => 1,
821            OpCode::RETURNDATASIZE => 1,
822            OpCode::RETURNDATACOPY => 0,
823            OpCode::SHA3 => 1,
824            OpCode::ADDRESS => 1,
825            OpCode::BALANCE => 1,
826            OpCode::ORIGIN => 1,
827            OpCode::CALLER => 1,
828            OpCode::CALLVALUE => 1,
829            OpCode::CALLDATALOAD => 1,
830            OpCode::CALLDATASIZE => 1,
831            OpCode::CALLDATACOPY => 0,
832            OpCode::EXTCODEHASH => 1,
833            OpCode::CODESIZE => 1,
834            OpCode::CODECOPY => 0,
835            OpCode::GASPRICE => 1,
836            OpCode::EXTCODESIZE => 1,
837            OpCode::EXTCODECOPY => 0,
838            OpCode::BLOCKHASH => 1,
839            OpCode::COINBASE => 1,
840            OpCode::TIMESTAMP => 1,
841            OpCode::NUMBER => 1,
842            OpCode::PREVRANDAO => 1,
843            OpCode::GASLIMIT => 1,
844            OpCode::CHAINID => 1,
845            OpCode::SELFBALANCE => 1,
846            OpCode::BASEFEE => 1,
847            OpCode::BLOBBASEFEE => 1,
848            OpCode::POP => 0,
849            OpCode::MLOAD => 1,
850            OpCode::MSTORE => 0,
851            OpCode::MSTORE8 => 0,
852            OpCode::SLOAD => 1,
853            OpCode::SSTORE => 0,
854            OpCode::JUMP => 0,
855            OpCode::JUMPI => 0,
856            OpCode::PC => 1,
857            OpCode::MSIZE => 1,
858            OpCode::GAS => 1,
859            OpCode::JUMPDEST => 0,
860            OpCode::TLOAD => 1,
861            OpCode::TSTORE => 0,
862            OpCode::MCOPY => 0,
863            OpCode::PUSH0 => 1,
864            OpCode::PUSH1 => 1,
865            OpCode::PUSH2 => 1,
866            OpCode::PUSH3 => 1,
867            OpCode::PUSH4 => 1,
868            OpCode::PUSH5 => 1,
869            OpCode::PUSH6 => 1,
870            OpCode::PUSH7 => 1,
871            OpCode::PUSH8 => 1,
872            OpCode::PUSH9 => 1,
873            OpCode::PUSH10 => 1,
874            OpCode::PUSH11 => 1,
875            OpCode::PUSH12 => 1,
876            OpCode::PUSH13 => 1,
877            OpCode::PUSH14 => 1,
878            OpCode::PUSH15 => 1,
879            OpCode::PUSH16 => 1,
880            OpCode::PUSH17 => 1,
881            OpCode::PUSH18 => 1,
882            OpCode::PUSH19 => 1,
883            OpCode::PUSH20 => 1,
884            OpCode::PUSH21 => 1,
885            OpCode::PUSH22 => 1,
886            OpCode::PUSH23 => 1,
887            OpCode::PUSH24 => 1,
888            OpCode::PUSH25 => 1,
889            OpCode::PUSH26 => 1,
890            OpCode::PUSH27 => 1,
891            OpCode::PUSH28 => 1,
892            OpCode::PUSH29 => 1,
893            OpCode::PUSH30 => 1,
894            OpCode::PUSH31 => 1,
895            OpCode::PUSH32 => 1,
896            OpCode::DUP1 => 2,
897            OpCode::DUP2 => 3,
898            OpCode::DUP3 => 4,
899            OpCode::DUP4 => 5,
900            OpCode::DUP5 => 6,
901            OpCode::DUP6 => 7,
902            OpCode::DUP7 => 8,
903            OpCode::DUP8 => 9,
904            OpCode::DUP9 => 10,
905            OpCode::DUP10 => 11,
906            OpCode::DUP11 => 12,
907            OpCode::DUP12 => 13,
908            OpCode::DUP13 => 14,
909            OpCode::DUP14 => 15,
910            OpCode::DUP15 => 16,
911            OpCode::DUP16 => 17,
912            OpCode::SWAP1 => 2,
913            OpCode::SWAP2 => 3,
914            OpCode::SWAP3 => 4,
915            OpCode::SWAP4 => 5,
916            OpCode::SWAP5 => 6,
917            OpCode::SWAP6 => 7,
918            OpCode::SWAP7 => 8,
919            OpCode::SWAP8 => 9,
920            OpCode::SWAP9 => 10,
921            OpCode::SWAP10 => 11,
922            OpCode::SWAP11 => 12,
923            OpCode::SWAP12 => 13,
924            OpCode::SWAP13 => 14,
925            OpCode::SWAP14 => 15,
926            OpCode::SWAP15 => 16,
927            OpCode::SWAP16 => 17,
928            OpCode::LOG0 => 0,
929            OpCode::LOG1 => 0,
930            OpCode::LOG2 => 0,
931            OpCode::LOG3 => 0,
932            OpCode::LOG4 => 0,
933            OpCode::CREATE => 1,
934            OpCode::CALL => 1,
935            OpCode::CALLCODE => 1,
936            OpCode::RETURN => 0,
937            OpCode::DELEGATECALL => 1,
938            OpCode::STATICCALL => 1,
939            OpCode::SELFDESTRUCT => 0,
940            OpCode::CREATE2 => 1,
941            OpCode::REVERT => 0,
942        }
943    }
944
945    pub fn state_changes(&self) -> bool {
946        match self {
947            OpCode::STOP => false,
948            OpCode::ADD => false,
949            OpCode::SUB => false,
950            OpCode::MUL => false,
951            OpCode::DIV => false,
952            OpCode::SDIV => false,
953            OpCode::MOD => false,
954            OpCode::SMOD => false,
955            OpCode::EXP => false,
956            OpCode::NOT => false,
957            OpCode::LT => false,
958            OpCode::GT => false,
959            OpCode::SLT => false,
960            OpCode::SGT => false,
961            OpCode::EQ => false,
962            OpCode::ISZERO => false,
963            OpCode::AND => false,
964            OpCode::OR => false,
965            OpCode::XOR => false,
966            OpCode::BYTE => false,
967            OpCode::SHL => false,
968            OpCode::SHR => false,
969            OpCode::SAR => false,
970            OpCode::ADDMOD => false,
971            OpCode::MULMOD => false,
972            OpCode::SIGNEXTEND => false,
973            OpCode::RETURNDATASIZE => false,
974            OpCode::RETURNDATACOPY => false,
975            OpCode::SHA3 => false,
976            OpCode::ADDRESS => false,
977            OpCode::BALANCE => false,
978            OpCode::ORIGIN => false,
979            OpCode::CALLER => false,
980            OpCode::CALLVALUE => false,
981            OpCode::CALLDATALOAD => false,
982            OpCode::CALLDATASIZE => false,
983            OpCode::CALLDATACOPY => false,
984            OpCode::EXTCODEHASH => false,
985            OpCode::CODESIZE => false,
986            OpCode::CODECOPY => false,
987            OpCode::GASPRICE => false,
988            OpCode::EXTCODESIZE => false,
989            OpCode::EXTCODECOPY => false,
990            OpCode::BLOCKHASH => false,
991            OpCode::COINBASE => false,
992            OpCode::TIMESTAMP => false,
993            OpCode::NUMBER => false,
994            OpCode::PREVRANDAO => false,
995            OpCode::GASLIMIT => false,
996            OpCode::CHAINID => false,
997            OpCode::SELFBALANCE => false,
998            OpCode::BASEFEE => false,
999            OpCode::BLOBBASEFEE => false,
1000            OpCode::POP => false,
1001            OpCode::MLOAD => false,
1002            OpCode::MSTORE => false,
1003            OpCode::MSTORE8 => false,
1004            OpCode::SLOAD => false,
1005            OpCode::SSTORE => true,
1006            OpCode::JUMP => false,
1007            OpCode::JUMPI => false,
1008            OpCode::PC => false,
1009            OpCode::MSIZE => false,
1010            OpCode::GAS => false,
1011            OpCode::JUMPDEST => false,
1012            OpCode::TLOAD => false,
1013            OpCode::TSTORE => false,
1014            OpCode::MCOPY => false,
1015            OpCode::PUSH0 => false,
1016            OpCode::PUSH1 => false,
1017            OpCode::PUSH2 => false,
1018            OpCode::PUSH3 => false,
1019            OpCode::PUSH4 => false,
1020            OpCode::PUSH5 => false,
1021            OpCode::PUSH6 => false,
1022            OpCode::PUSH7 => false,
1023            OpCode::PUSH8 => false,
1024            OpCode::PUSH9 => false,
1025            OpCode::PUSH10 => false,
1026            OpCode::PUSH11 => false,
1027            OpCode::PUSH12 => false,
1028            OpCode::PUSH13 => false,
1029            OpCode::PUSH14 => false,
1030            OpCode::PUSH15 => false,
1031            OpCode::PUSH16 => false,
1032            OpCode::PUSH17 => false,
1033            OpCode::PUSH18 => false,
1034            OpCode::PUSH19 => false,
1035            OpCode::PUSH20 => false,
1036            OpCode::PUSH21 => false,
1037            OpCode::PUSH22 => false,
1038            OpCode::PUSH23 => false,
1039            OpCode::PUSH24 => false,
1040            OpCode::PUSH25 => false,
1041            OpCode::PUSH26 => false,
1042            OpCode::PUSH27 => false,
1043            OpCode::PUSH28 => false,
1044            OpCode::PUSH29 => false,
1045            OpCode::PUSH30 => false,
1046            OpCode::PUSH31 => false,
1047            OpCode::PUSH32 => false,
1048            OpCode::DUP1 => false,
1049            OpCode::DUP2 => false,
1050            OpCode::DUP3 => false,
1051            OpCode::DUP4 => false,
1052            OpCode::DUP5 => false,
1053            OpCode::DUP6 => false,
1054            OpCode::DUP7 => false,
1055            OpCode::DUP8 => false,
1056            OpCode::DUP9 => false,
1057            OpCode::DUP10 => false,
1058            OpCode::DUP11 => false,
1059            OpCode::DUP12 => false,
1060            OpCode::DUP13 => false,
1061            OpCode::DUP14 => false,
1062            OpCode::DUP15 => false,
1063            OpCode::DUP16 => false,
1064            OpCode::SWAP1 => false,
1065            OpCode::SWAP2 => false,
1066            OpCode::SWAP3 => false,
1067            OpCode::SWAP4 => false,
1068            OpCode::SWAP5 => false,
1069            OpCode::SWAP6 => false,
1070            OpCode::SWAP7 => false,
1071            OpCode::SWAP8 => false,
1072            OpCode::SWAP9 => false,
1073            OpCode::SWAP10 => false,
1074            OpCode::SWAP11 => false,
1075            OpCode::SWAP12 => false,
1076            OpCode::SWAP13 => false,
1077            OpCode::SWAP14 => false,
1078            OpCode::SWAP15 => false,
1079            OpCode::SWAP16 => false,
1080            OpCode::LOG0 => true,
1081            OpCode::LOG1 => true,
1082            OpCode::LOG2 => true,
1083            OpCode::LOG3 => true,
1084            OpCode::LOG4 => true,
1085            OpCode::CREATE => true,
1086            OpCode::CALL => false,
1087            OpCode::CALLCODE => false,
1088            OpCode::RETURN => false,
1089            OpCode::DELEGATECALL => false,
1090            OpCode::STATICCALL => false,
1091            OpCode::SELFDESTRUCT => true,
1092            OpCode::CREATE2 => true,
1093            OpCode::REVERT => false,
1094        }
1095    }
1096}