diff --git a/etk-asm/src/ast.rs b/etk-asm/src/ast.rs index bde8c943..dd348f4f 100644 --- a/etk-asm/src/ast.rs +++ b/etk-asm/src/ast.rs @@ -3,7 +3,6 @@ use std::path::PathBuf; use crate::ops::{Abstract, AbstractOp, ExpressionMacroDefinition, InstructionMacroDefinition}; use etk_ops::cancun::Op as CancunOp; use etk_ops::london::Op as LondonOp; -use etk_ops::prague::Op as PragueOp; use etk_ops::shanghai::Op as ShanghaiOp; #[derive(Debug, Clone, PartialEq)] @@ -25,12 +24,6 @@ impl From> for Node { } } -impl From> for Node { - fn from(op: PragueOp) -> Self { - Node::Op(AbstractOp::Op(etk_ops::HardForkOp::Prague(op))) - } -} - impl From> for Node { fn from(op: LondonOp) -> Self { Node::Op(AbstractOp::Op(etk_ops::HardForkOp::London(op))) diff --git a/etk-asm/src/ops.rs b/etk-asm/src/ops.rs index 618eb81f..45fe7ce1 100644 --- a/etk-asm/src/ops.rs +++ b/etk-asm/src/ops.rs @@ -45,7 +45,6 @@ pub(crate) use self::error::Error; use etk_ops::cancun::Push32 as CancunPush32; use etk_ops::london::Push32 as LondonPush32; -use etk_ops::prague::Push32 as PraguePush32; use etk_ops::shanghai::Push32 as ShanghaiPush32; use etk_ops::HardFork; use etk_ops::HardForkOp; @@ -147,16 +146,6 @@ impl Concretize for HardForkOp { })?; HardForkOp::London(op_context) } - HardForkOp::Prague(op) => { - let op_context = - op.code() - .with(bytes.as_slice()) - .context(error::ExpressionTooLarge { - value, - spec: self.code(), - })?; - HardForkOp::Prague(op_context) - } }; Ok(result) @@ -268,9 +257,6 @@ impl AbstractOp { HardFork::London => { HardForkOp::London(etk_ops::london::Op::Push32(LondonPush32(()))) } - HardFork::Prague => { - HardForkOp::Prague(etk_ops::prague::Op::Push32(PraguePush32(()))) - } }; // TODO: Fix hack to get a TryFromSliceError. let err = <[u8; 32]>::try_from(bytes.as_slice()) @@ -295,9 +281,6 @@ impl AbstractOp { HardFork::London => HardForkOp::London( etk_ops::london::Op::<()>::push(size.try_into().unwrap()).unwrap(), ), - HardFork::Prague => HardForkOp::Prague( - etk_ops::prague::Op::<()>::push(size.try_into().unwrap()).unwrap(), - ), }; let start = bytes.len() + 1 - spec.size(); diff --git a/etk-asm/src/parse/mod.rs b/etk-asm/src/parse/mod.rs index 1d42bcd4..016c2283 100644 --- a/etk-asm/src/parse/mod.rs +++ b/etk-asm/src/parse/mod.rs @@ -22,7 +22,6 @@ use self::{ use etk_ops::cancun::Op as CancunOp; use etk_ops::london::Op as LondonOp; -use etk_ops::prague::Op as PragueOp; use etk_ops::shanghai::Op as ShanghaiOp; use crate::ast::Node; @@ -62,9 +61,6 @@ fn parse_abstract_op(pair: Pair, hardfork: HardFork) -> Result { HardForkOp::Shanghai(ShanghaiOp::new(pair.as_str().parse().unwrap()).unwrap()) } - HardFork::Prague => { - HardForkOp::Prague(PragueOp::new(pair.as_str().parse().unwrap()).unwrap()) - } HardFork::London => { HardForkOp::London(LondonOp::new(pair.as_str().parse().unwrap()).unwrap()) } @@ -87,11 +83,9 @@ fn parse_push(pair: Pair, hardfork: HardFork) -> Result HardForkOp::Cancun(CancunOp::<()>::push(size).unwrap()), HardFork::Shanghai => HardForkOp::Shanghai(ShanghaiOp::<()>::push(size).unwrap()), - HardFork::Prague => HardForkOp::Prague(PragueOp::<()>::push(size).unwrap()), HardFork::London => HardForkOp::London(LondonOp::<()>::push(size).unwrap()), }; - //let spec = Op::<()>::push(size).unwrap(); let expr = expression::parse(operand)?; if let Ok(val) = expr.eval() { diff --git a/etk-asm/tests/asm.rs b/etk-asm/tests/asm.rs index 251e4007..86e62212 100644 --- a/etk-asm/tests/asm.rs +++ b/etk-asm/tests/asm.rs @@ -21,7 +21,7 @@ where #[test] fn simple_constructor() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["simple-constructor", "ctor.etk"]))?; assert_eq!( @@ -40,7 +40,7 @@ fn simple_constructor() -> Result<(), Error> { #[test] fn out_of_bounds() { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); let err = ingester .ingest_file(source(&["out-of-bounds", "main", "main.etk"])) .unwrap_err(); @@ -51,7 +51,7 @@ fn out_of_bounds() { #[test] fn subdirectory() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["subdirectory", "main.etk"]))?; assert_eq!(output, hex!("63c001c0de60ff")); @@ -62,7 +62,7 @@ fn subdirectory() -> Result<(), Error> { #[test] fn variable_jump() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["variable-jump", "main.etk"]))?; assert_eq!(output, hex!("6003565b")); @@ -73,7 +73,7 @@ fn variable_jump() -> Result<(), Error> { #[test] fn instruction_macro() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["instruction-macro", "main.etk"]))?; assert_eq!( @@ -87,7 +87,7 @@ fn instruction_macro() -> Result<(), Error> { #[test] fn instruction_macro_with_empty_lines() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["instruction-macro", "empty_lines.etk"]))?; assert_eq!(output, hex!("6000600060006000600060006000")); @@ -98,7 +98,7 @@ fn instruction_macro_with_empty_lines() -> Result<(), Error> { #[test] fn instruction_macro_with_two_instructions_per_line() { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); let err = ingester .ingest_file(source(&[ "instruction-macro", @@ -112,7 +112,7 @@ fn instruction_macro_with_two_instructions_per_line() { #[test] fn undefined_label_undefined_macro() { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); let err = ingester .ingest_file(source(&[ "instruction-macro", @@ -128,7 +128,7 @@ fn undefined_label_undefined_macro() { #[test] fn every_op() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["every-op", "main.etk"]))?; assert_eq!( @@ -297,7 +297,7 @@ fn every_op() -> Result<(), Error> { #[test] fn test_dynamic_push_and_include() -> Result<(), Error> { let mut output = Vec::new(); - let mut ingester = Ingest::new(&mut output, HardFork::default()); + let mut ingester = Ingest::new(&mut output, HardFork::Cancun); ingester.ingest_file(source(&["variable-push", "main.etk"]))?; assert_eq!(output, hex!("61025758585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585801010101010158585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858015b58")); diff --git a/etk-ops/build.rs b/etk-ops/build.rs index 2dc85a89..fdadc92b 100644 --- a/etk-ops/build.rs +++ b/etk-ops/build.rs @@ -819,5 +819,4 @@ fn main() { generate_fork("london").unwrap(); generate_fork("shanghai").unwrap(); generate_fork("cancun").unwrap(); - generate_fork("prague").unwrap(); } diff --git a/etk-ops/src/lib.rs b/etk-ops/src/lib.rs index f7f193e6..f6c8c595 100644 --- a/etk-ops/src/lib.rs +++ b/etk-ops/src/lib.rs @@ -89,11 +89,6 @@ pub mod cancun { include!(concat!(env!("OUT_DIR"), "/cancun.rs")); } -pub mod prague { - //! Instructions available in the Prague hard fork. - include!(concat!(env!("OUT_DIR"), "/prague.rs")); -} - /// An operation that can be executed by the EVM. #[derive(Debug)] pub enum HardForkOp @@ -108,9 +103,6 @@ where /// London hard fork operations. London(london::Op), - - /// Prague hard fork operations. - Prague(prague::Op), } impl Clone for HardForkOp @@ -154,7 +146,6 @@ where Self::Cancun(ref op) => Self::Cancun(op.clone()), Self::Shanghai(ref op) => Self::Shanghai(op.clone()), Self::London(ref op) => Self::London(op.clone()), - Self::Prague(ref op) => Self::Prague(op.clone()), } } } @@ -200,7 +191,6 @@ where (Self::Cancun(op1), HardForkOp::Cancun(op2)) => op1 == op2, (Self::Shanghai(op1), HardForkOp::Shanghai(op2)) => op1 == op2, (Self::London(op1), HardForkOp::London(op2)) => op1 == op2, - (Self::Prague(op1), HardForkOp::Prague(op2)) => op1 == op2, _ => false, } } @@ -254,7 +244,6 @@ where HardForkOp::Cancun(op) => cancun::Op::new(op).map(HardForkOp::Cancun), HardForkOp::Shanghai(op) => shanghai::Op::new(op).map(HardForkOp::Shanghai), HardForkOp::London(op) => london::Op::new(op).map(HardForkOp::London), - HardForkOp::Prague(op) => prague::Op::new(op).map(HardForkOp::Prague), } } @@ -264,7 +253,6 @@ where HardForkOp::Cancun(op) => op.size(), HardForkOp::Shanghai(op) => op.size(), HardForkOp::London(op) => op.size(), - HardForkOp::Prague(op) => op.size(), } } } @@ -313,7 +301,6 @@ impl HardForkOp<()> { HardForkOp::Cancun(op) => Ok(HardForkOp::Cancun(op.with(immediate)?)), HardForkOp::Shanghai(op) => Ok(HardForkOp::Shanghai(op.with(immediate)?)), HardForkOp::London(op) => Ok(HardForkOp::London(op.with(immediate)?)), - HardForkOp::Prague(op) => Ok(HardForkOp::Prague(op.with(immediate)?)), } } } @@ -330,7 +317,6 @@ where HardForkOp::Cancun(op) => op.immediate(), HardForkOp::Shanghai(op) => op.immediate(), HardForkOp::London(op) => op.immediate(), - HardForkOp::Prague(op) => op.immediate(), } } fn immediate_mut(&mut self) -> Option<&mut Self::ImmediateRef> { @@ -338,7 +324,6 @@ where HardForkOp::Cancun(op) => op.immediate_mut(), HardForkOp::Shanghai(op) => op.immediate_mut(), HardForkOp::London(op) => op.immediate_mut(), - HardForkOp::Prague(op) => op.immediate_mut(), } } fn into_immediate(self) -> Option { @@ -346,7 +331,6 @@ where HardForkOp::Cancun(op) => op.into_immediate(), HardForkOp::Shanghai(op) => op.into_immediate(), HardForkOp::London(op) => op.into_immediate(), - HardForkOp::Prague(op) => op.into_immediate(), } } fn extra_len(&self) -> usize { @@ -354,7 +338,6 @@ where HardForkOp::Cancun(op) => op.extra_len(), HardForkOp::Shanghai(op) => op.extra_len(), HardForkOp::London(op) => op.extra_len(), - HardForkOp::Prague(op) => op.extra_len(), } } fn code(&self) -> Self::Code { @@ -362,7 +345,6 @@ where HardForkOp::Cancun(op) => HardForkOp::Cancun(op.code()), HardForkOp::Shanghai(op) => HardForkOp::Shanghai(op.code()), HardForkOp::London(op) => HardForkOp::London(op.code()), - HardForkOp::Prague(op) => HardForkOp::Prague(op.code()), } } fn mnemonic(&self) -> &str { @@ -370,7 +352,6 @@ where HardForkOp::Cancun(op) => op.mnemonic(), HardForkOp::Shanghai(op) => op.mnemonic(), HardForkOp::London(op) => op.mnemonic(), - HardForkOp::Prague(op) => op.mnemonic(), } } fn is_jump(&self) -> bool { @@ -378,7 +359,6 @@ where HardForkOp::Cancun(op) => op.is_jump(), HardForkOp::Shanghai(op) => op.is_jump(), HardForkOp::London(op) => op.is_jump(), - HardForkOp::Prague(op) => op.is_jump(), } } fn is_jump_target(&self) -> bool { @@ -386,7 +366,6 @@ where HardForkOp::Cancun(op) => op.is_jump_target(), HardForkOp::Shanghai(op) => op.is_jump_target(), HardForkOp::London(op) => op.is_jump_target(), - HardForkOp::Prague(op) => op.is_jump_target(), } } fn is_exit(&self) -> bool { @@ -394,7 +373,6 @@ where HardForkOp::Cancun(op) => op.is_exit(), HardForkOp::Shanghai(op) => op.is_exit(), HardForkOp::London(op) => op.is_exit(), - HardForkOp::Prague(op) => op.is_exit(), } } fn pops(&self) -> usize { @@ -402,7 +380,6 @@ where HardForkOp::Cancun(op) => op.pops(), HardForkOp::Shanghai(op) => op.pops(), HardForkOp::London(op) => op.pops(), - HardForkOp::Prague(op) => op.pops(), } } fn pushes(&self) -> usize { @@ -410,7 +387,6 @@ where HardForkOp::Cancun(op) => op.pushes(), HardForkOp::Shanghai(op) => op.pushes(), HardForkOp::London(op) => op.pushes(), - HardForkOp::Prague(op) => op.pushes(), } } } @@ -421,7 +397,6 @@ impl From> for u8 { HardForkOp::Cancun(op) => op.code_byte(), HardForkOp::Shanghai(op) => op.code_byte(), HardForkOp::London(op) => op.code_byte(), - HardForkOp::Prague(op) => op.code_byte(), } } } @@ -432,7 +407,6 @@ impl std::fmt::Display for HardForkOp<()> { HardForkOp::Cancun(op) => op.fmt(f), HardForkOp::Shanghai(op) => op.fmt(f), HardForkOp::London(op) => op.fmt(f), - HardForkOp::Prague(op) => op.fmt(f), } } } @@ -448,14 +422,11 @@ pub enum HardFork { /// The London hard fork. London, - - /// The Prague hard fork. - Prague, } impl Default for HardFork { fn default() -> Self { - Self::Prague + Self::Cancun } } @@ -466,7 +437,6 @@ impl From<&OsStr> for HardFork { "cancun" => Self::Cancun, "shanghai" => Self::Shanghai, "london" => Self::London, - "prague" => Self::Prague, _ => Self::default(), } } diff --git a/etk-ops/src/prague.toml b/etk-ops/src/prague.toml deleted file mode 100644 index 4d95eeac..00000000 --- a/etk-ops/src/prague.toml +++ /dev/null @@ -1,921 +0,0 @@ -[Stop] -code = 0x00 -mnemonic = "stop" -pushes = 0 -pops = 0 -exits = true - -[Add] -code = 0x01 -mnemonic = "add" -pushes = 1 -pops = 2 - -[Mul] -code = 0x02 -mnemonic = "mul" -pushes = 1 -pops = 2 - -[Sub] -code = 0x03 -mnemonic = "sub" -pushes = 1 -pops = 2 - -[Div] -code = 0x04 -mnemonic = "div" -pushes = 1 -pops = 2 - -[SDiv] -code = 0x05 -mnemonic = "sdiv" -pushes = 1 -pops = 2 - -[Mod] -code = 0x06 -mnemonic = "mod" -pushes = 1 -pops = 2 - -[SMod] -code = 0x07 -mnemonic = "smod" -pushes = 1 -pops = 2 - -[AddMod] -code = 0x08 -mnemonic = "addmod" -pushes = 1 -pops = 3 - -[MulMod] -code = 0x09 -mnemonic = "mulmod" -pushes = 1 -pops = 3 - -[Exp] -code = 0x0a -mnemonic = "exp" -pushes = 1 -pops = 2 - -[SignExtend] -code = 0x0b -mnemonic = "signextend" -pushes = 1 -pops = 2 - -[Lt] -code = 0x10 -mnemonic = "lt" -pushes = 1 -pops = 2 - -[Gt] -code = 0x11 -mnemonic = "gt" -pushes = 1 -pops = 2 - -[SLt] -code = 0x12 -mnemonic = "slt" -pushes = 1 -pops = 2 - -[SGt] -code = 0x13 -mnemonic = "sgt" -pushes = 1 -pops = 2 - -[Eq] -code = 0x14 -mnemonic = "eq" -pushes = 1 -pops = 2 - -[IsZero] -code = 0x15 -mnemonic = "iszero" -pushes = 1 -pops = 1 - -[And] -code = 0x16 -mnemonic = "and" -pushes = 1 -pops = 2 - -[Or] -code = 0x17 -mnemonic = "or" -pushes = 1 -pops = 2 - -[Xor] -code = 0x18 -mnemonic = "xor" -pushes = 1 -pops = 2 - -[Not] -code = 0x19 -mnemonic = "not" -pushes = 1 -pops = 1 - -[Byte] -code = 0x1a -mnemonic = "byte" -pushes = 1 -pops = 2 - -[Shl] -code = 0x1b -mnemonic = "shl" -pushes = 1 -pops = 2 - -[Shr] -code = 0x1c -mnemonic = "shr" -pushes = 1 -pops = 2 - -[Sar] -code = 0x1d -mnemonic = "sar" -pushes = 1 -pops = 2 - -[Keccak256] -code = 0x20 -mnemonic = "keccak256" -pushes = 1 -pops = 2 - -[Address] -code = 0x30 -mnemonic = "address" -pushes = 1 -pops = 0 - -[Balance] -code = 0x31 -mnemonic = "balance" -pushes = 1 -pops = 1 - -[Origin] -code = 0x32 -mnemonic = "origin" -pushes = 1 -pops = 0 - -[Caller] -code = 0x33 -mnemonic = "caller" -pushes = 1 -pops = 0 - -[CallValue] -code = 0x34 -mnemonic = "callvalue" -pushes = 1 -pops = 0 - -[CallDataLoad] -code = 0x35 -mnemonic = "calldataload" -pushes = 1 -pops = 1 - -[CallDataSize] -code = 0x36 -mnemonic = "calldatasize" -pushes = 1 -pops = 0 - -[CallDataCopy] -code = 0x37 -mnemonic = "calldatacopy" -pushes = 0 -pops = 3 - -[CodeSize] -code = 0x38 -mnemonic = "codesize" -pushes = 1 -pops = 0 - -[CodeCopy] -code = 0x39 -mnemonic = "codecopy" -pushes = 0 -pops = 3 - -[GasPrice] -code = 0x3a -mnemonic = "gasprice" -pushes = 1 -pops = 0 - -[ExtCodeSize] -code = 0x3b -mnemonic = "extcodesize" -pushes = 1 -pops = 1 - -[ExtCodeCopy] -code = 0x3c -mnemonic = "extcodecopy" -pushes = 0 -pops = 4 - -[ReturnDataSize] -code = 0x3d -mnemonic = "returndatasize" -pushes = 1 -pops = 0 - -[ReturnDataCopy] -code = 0x3e -mnemonic = "returndatacopy" -pushes = 0 -pops = 3 - -[ExtCodeHash] -code = 0x3f -mnemonic = "extcodehash" -pushes = 1 -pops = 1 - -[BlockHash] -code = 0x40 -mnemonic = "blockhash" -pushes = 1 -pops = 1 - -[Coinbase] -code = 0x41 -mnemonic = "coinbase" -pushes = 1 -pops = 0 - -[Timestamp] -code = 0x42 -mnemonic = "timestamp" -pushes = 1 -pops = 0 - -[Number] -code = 0x43 -mnemonic = "number" -pushes = 1 -pops = 0 - -[Difficulty] -code = 0x44 -mnemonic = "difficulty" -pushes = 1 -pops = 0 - -[GasLimit] -code = 0x45 -mnemonic = "gaslimit" -pushes = 1 -pops = 0 - -[ChainId] -code = 0x46 -mnemonic = "chainid" -pushes = 1 -pops = 0 - -[SelfBalance] -code = 0x47 -mnemonic = "selfbalance" -pushes = 1 -pops = 0 - -[BaseFee] -code = 0x48 -mnemonic = "basefee" -pushes = 1 -pops = 0 - -[Pop] -code = 0x50 -mnemonic = "pop" -pushes = 0 -pops = 1 - -[MLoad] -code = 0x51 -mnemonic = "mload" -pushes = 1 -pops = 1 - -[MStore] -code = 0x52 -mnemonic = "mstore" -pushes = 0 -pops = 2 - -[MStore8] -code = 0x53 -mnemonic = "mstore8" -pushes = 1 -pops = 2 - -[SLoad] -code = 0x54 -mnemonic = "sload" -pushes = 1 -pops = 1 - -[SStore] -code = 0x55 -mnemonic = "sstore" -pushes = 0 -pops = 2 - -[Jump] -code = 0x56 -mnemonic = "jump" -pushes = 0 -pops = 1 -jump = true - -[JumpI] -code = 0x57 -mnemonic = "jumpi" -pushes = 0 -pops = 2 -jump = true - -[GetPc] -code = 0x58 -mnemonic = "pc" -pushes = 1 -pops = 0 - -[MSize] -code = 0x59 -mnemonic = "msize" -pushes = 1 -pops = 0 - -[Gas] -code = 0x5a -mnemonic = "gas" -pushes = 1 -pops = 0 - -[Nop] -code = 0x5b -mnemonic = "nop" -pushes = 0 -pops = 0 - -[MCopy] -code = 0x5e -mnemonic = "mcopy" -pushes = 0 -pops = 3 - -[Push0] -code = 0x5f -mnemonic = "push0" -extra_len = 0 -pushes = 1 -pops = 0 - -[Push1] -code = 0x60 -mnemonic = "push1" -extra_len = 1 -pushes = 1 -pops = 0 - -[Push2] -code = 0x61 -mnemonic = "push2" -extra_len = 2 -pushes = 1 -pops = 0 - -[Push3] -code = 0x62 -mnemonic = "push3" -extra_len = 3 -pushes = 1 -pops = 0 - -[Push4] -code = 0x63 -mnemonic = "push4" -extra_len = 4 -pushes = 1 -pops = 0 - -[Push5] -code = 0x64 -mnemonic = "push5" -extra_len = 5 -pushes = 1 -pops = 0 - -[Push6] -code = 0x65 -mnemonic = "push6" -extra_len = 6 -pushes = 1 -pops = 0 - -[Push7] -code = 0x66 -mnemonic = "push7" -extra_len = 7 -pushes = 1 -pops = 0 - -[Push8] -code = 0x67 -mnemonic = "push8" -extra_len = 8 -pushes = 1 -pops = 0 - -[Push9] -code = 0x68 -mnemonic = "push9" -extra_len = 9 -pushes = 1 -pops = 0 - -[Push10] -code = 0x69 -mnemonic = "push10" -extra_len = 10 -pushes = 1 -pops = 0 - -[Push11] -code = 0x6a -mnemonic = "push11" -extra_len = 11 -pushes = 1 -pops = 0 - -[Push12] -code = 0x6b -mnemonic = "push12" -extra_len = 12 -pushes = 1 -pops = 0 - -[Push13] -code = 0x6c -mnemonic = "push13" -extra_len = 13 -pushes = 1 -pops = 0 - -[Push14] -code = 0x6d -mnemonic = "push14" -extra_len = 14 -pushes = 1 -pops = 0 - -[Push15] -code = 0x6e -mnemonic = "push15" -extra_len = 15 -pushes = 1 -pops = 0 - -[Push16] -code = 0x6f -mnemonic = "push16" -extra_len = 16 -pushes = 1 -pops = 0 - -[Push17] -code = 0x70 -mnemonic = "push17" -extra_len = 17 -pushes = 1 -pops = 0 - -[Push18] -code = 0x71 -mnemonic = "push18" -extra_len = 18 -pushes = 1 -pops = 0 - -[Push19] -code = 0x72 -mnemonic = "push19" -extra_len = 19 -pushes = 1 -pops = 0 - -[Push20] -code = 0x73 -mnemonic = "push20" -extra_len = 20 -pushes = 1 -pops = 0 - -[Push21] -code = 0x74 -mnemonic = "push21" -extra_len = 21 -pushes = 1 -pops = 0 - -[Push22] -code = 0x75 -mnemonic = "push22" -extra_len = 22 -pushes = 1 -pops = 0 - -[Push23] -code = 0x76 -mnemonic = "push23" -extra_len = 23 -pushes = 1 -pops = 0 - -[Push24] -code = 0x77 -mnemonic = "push24" -extra_len = 24 -pushes = 1 -pops = 0 - -[Push25] -code = 0x78 -mnemonic = "push25" -extra_len = 25 -pushes = 1 -pops = 0 - -[Push26] -code = 0x79 -mnemonic = "push26" -extra_len = 26 -pushes = 1 -pops = 0 - -[Push27] -code = 0x7a -mnemonic = "push27" -extra_len = 27 -pushes = 1 -pops = 0 - -[Push28] -code = 0x7b -mnemonic = "push28" -extra_len = 28 -pushes = 1 -pops = 0 - -[Push29] -code = 0x7c -mnemonic = "push29" -extra_len = 29 -pushes = 1 -pops = 0 - -[Push30] -code = 0x7d -mnemonic = "push30" -extra_len = 30 -pushes = 1 -pops = 0 - -[Push31] -code = 0x7e -mnemonic = "push31" -extra_len = 31 -pushes = 1 -pops = 0 - -[Push32] -code = 0x7f -mnemonic = "push32" -extra_len = 32 -pushes = 1 -pops = 0 - -[Dup1] -code = 0x80 -mnemonic = "dup1" -pushes = 2 -pops = 1 - -[Dup2] -code = 0x81 -mnemonic = "dup2" -pushes = 3 -pops = 2 - -[Dup3] -code = 0x82 -mnemonic = "dup3" -pushes = 4 -pops = 3 - -[Dup4] -code = 0x83 -mnemonic = "dup4" -pushes = 5 -pops = 4 - -[Dup5] -code = 0x84 -mnemonic = "dup5" -pushes = 6 -pops = 5 - -[Dup6] -code = 0x85 -mnemonic = "dup6" -pushes = 7 -pops = 6 - -[Dup7] -code = 0x86 -mnemonic = "dup7" -pushes = 8 -pops = 7 - -[Dup8] -code = 0x87 -mnemonic = "dup8" -pushes = 9 -pops = 8 - -[Dup9] -code = 0x88 -mnemonic = "dup9" -pushes = 10 -pops = 9 - -[Dup10] -code = 0x89 -mnemonic = "dup10" -pushes = 11 -pops = 10 - -[Dup11] -code = 0x8a -mnemonic = "dup11" -pushes = 12 -pops = 11 - -[Dup12] -code = 0x8b -mnemonic = "dup12" -pushes = 13 -pops = 12 - -[Dup13] -code = 0x8c -mnemonic = "dup13" -pushes = 14 -pops = 13 - -[Dup14] -code = 0x8d -mnemonic = "dup14" -pushes = 15 -pops = 14 - -[Dup15] -code = 0x8e -mnemonic = "dup15" -pushes = 16 -pops = 15 - -[Dup16] -code = 0x8f -mnemonic = "dup16" -pushes = 17 -pops = 16 - -[Swap1] -code = 0x90 -mnemonic = "swap1" -pushes = 2 -pops = 2 - -[Swap2] -code = 0x91 -mnemonic = "swap2" -pushes = 3 -pops = 3 - -[Swap3] -code = 0x92 -mnemonic = "swap3" -pushes = 4 -pops = 4 - -[Swap4] -code = 0x93 -mnemonic = "swap4" -pushes = 5 -pops = 5 - -[Swap5] -code = 0x94 -mnemonic = "swap5" -pushes = 6 -pops = 6 - -[Swap6] -code = 0x95 -mnemonic = "swap6" -pushes = 7 -pops = 7 - -[Swap7] -code = 0x96 -mnemonic = "swap7" -pushes = 8 -pops = 8 - -[Swap8] -code = 0x97 -mnemonic = "swap8" -pushes = 9 -pops = 9 - -[Swap9] -code = 0x98 -mnemonic = "swap9" -pushes = 10 -pops = 10 - -[Swap10] -code = 0x99 -mnemonic = "swap10" -pushes = 11 -pops = 11 - -[Swap11] -code = 0x9a -mnemonic = "swap11" -pushes = 12 -pops = 12 - -[Swap12] -code = 0x9b -mnemonic = "swap12" -pushes = 13 -pops = 13 - -[Swap13] -code = 0x9c -mnemonic = "swap13" -pushes = 14 -pops = 14 - -[Swap14] -code = 0x9d -mnemonic = "swap14" -pushes = 15 -pops = 15 - -[Swap15] -code = 0x9e -mnemonic = "swap15" -pushes = 16 -pops = 16 - -[Swap16] -code = 0x9f -mnemonic = "swap16" -pushes = 17 -pops = 17 - -[Log0] -code = 0xa0 -mnemonic = "log0" -pushes = 2 -pops = 2 - -[Log1] -code = 0xa1 -mnemonic = "log1" -pushes = 3 -pops = 3 - -[Log2] -code = 0xa2 -mnemonic = "log2" -pushes = 4 -pops = 4 - -[Log3] -code = 0xa3 -mnemonic = "log3" -pushes = 5 -pops = 5 - -[Log4] -code = 0xa4 -mnemonic = "log4" -pushes = 6 -pops = 6 - -[Callf] -code = 0xe3 -mnemonic = "callf" -extra_len = 16 -pushes = 0 -pops = 0 - -[Retf] -code = 0xe4 -mnemonic = "retf" -pushes = 0 -pops = 0 - -[Create] -code = 0xf0 -mnemonic = "create" -pushes = 1 -pops = 3 - -[Call] -code = 0xf1 -mnemonic = "call" -pushes = 1 -pops = 7 - -[CallCode] -code = 0xf2 -mnemonic = "callcode" -pushes = 1 -pops = 7 - -[Return] -code = 0xf3 -mnemonic = "return" -pushes = 0 -pops = 2 -exits = true - -[DelegateCall] -code = 0xf4 -mnemonic = "delegatecall" -pushes = 1 -pops = 6 - -[Create2] -code = 0xf5 -mnemonic = "create2" -pushes = 1 -pops = 4 - -[StaticCall] -code = 0xfa -mnemonic = "staticcall" -pushes = 1 -pops = 6 - -[Revert] -code = 0xfd -mnemonic = "revert" -pushes = 0 -pops = 2 -exits = true - -[Invalid] -code = 0xfe -mnemonic = "invalid" -pushes = 0 -pops = 0 -exits = true - -[SelfDestruct] -code = 0xff -mnemonic = "selfdestruct" -pushes = 0 -pops = 2