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}