From 03247be372e4780320c95eb8e6bf6032bb21b5db Mon Sep 17 00:00:00 2001 From: Dan Cline <6798349+Rjected@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:47:15 -0500 Subject: [PATCH] feat: add BLOBBASEFEE --- Cargo.lock | 203 +++++++++++-------------------- Cargo.toml | 1 + etk-analyze/Cargo.toml | 2 +- etk-analyze/src/sym.rs | 6 +- etk-dasm/src/blocks/annotated.rs | 2 +- etk-dasm/src/sym.rs | 11 ++ etk-ops/src/cancun.toml | 6 + 7 files changed, 94 insertions(+), 137 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f4c9309a..66c44838 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,15 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - [[package]] name = "alloc-no-stdlib" version = "2.0.3" @@ -41,15 +32,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "assert_matches" version = "1.5.0" @@ -105,25 +87,22 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.58.1" +version = "0.66.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" dependencies = [ - "bitflags", + "bitflags 2.4.2", "cexpr", "clang-sys", - "clap 2.34.0", - "env_logger", "lazy_static", "lazycell", - "log", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "which", + "syn 2.0.52", ] [[package]] @@ -132,6 +111,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + [[package]] name = "block-buffer" version = "0.7.3" @@ -215,9 +200,9 @@ checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cexpr" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ "nom", ] @@ -239,21 +224,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim 0.8.0", - "textwrap 0.11.0", - "unicode-width", - "vec_map", -] - [[package]] name = "clap" version = "3.1.18" @@ -261,14 +231,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_derive", "clap_lex", "indexmap 1.8.1", "lazy_static", - "strsim 0.10.0", + "strsim", "termcolor", - "textwrap 0.15.0", + "textwrap", ] [[package]] @@ -281,7 +251,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -362,7 +332,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -385,20 +355,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "syn 1.0.93", ] [[package]] @@ -424,7 +381,7 @@ name = "etk-analyze" version = "0.4.0-dev" dependencies = [ "assert_matches", - "clap 3.1.18", + "clap", "etk-asm", "etk-cli", "etk-dasm", @@ -439,7 +396,7 @@ name = "etk-asm" version = "0.4.0-dev" dependencies = [ "assert_matches", - "clap 3.1.18", + "clap", "etk-cli", "etk-ops", "hex", @@ -459,7 +416,7 @@ dependencies = [ name = "etk-cli" version = "0.4.0-dev" dependencies = [ - "clap 3.1.18", + "clap", "hex", "hex-literal", "snafu", @@ -469,7 +426,7 @@ dependencies = [ name = "etk-dasm" version = "0.4.0-dev" dependencies = [ - "clap 3.1.18", + "clap", "etk-4byte", "etk-asm", "etk-cli", @@ -716,12 +673,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.18" @@ -888,6 +839,12 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.5.1" @@ -929,12 +886,12 @@ dependencies = [ [[package]] name = "nom" -version = "5.1.2" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", - "version_check", + "minimal-lexical", ] [[package]] @@ -994,7 +951,7 @@ version = "0.10.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "foreign-types", "libc", @@ -1011,7 +968,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1080,7 +1037,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1137,7 +1094,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.93", "version_check", ] @@ -1154,18 +1111,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.38" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1206,7 +1163,7 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1215,8 +1172,6 @@ version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ - "aho-corasick", - "memchr", "regex-syntax", ] @@ -1314,7 +1269,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -1354,7 +1309,7 @@ checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1434,7 +1389,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1447,12 +1402,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - [[package]] name = "strsim" version = "0.10.0" @@ -1470,6 +1419,17 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "syn" +version = "2.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -1493,15 +1453,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "textwrap" version = "0.15.0" @@ -1548,7 +1499,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1610,7 +1561,7 @@ checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.93", ] [[package]] @@ -1646,6 +1597,12 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -1655,12 +1612,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - [[package]] name = "unicode-xid" version = "0.2.3" @@ -1685,12 +1636,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.4" @@ -1740,7 +1685,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 1.0.93", "wasm-bindgen-shared", ] @@ -1774,7 +1719,7 @@ checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.93", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1795,15 +1740,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "which" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1889,20 +1825,19 @@ dependencies = [ [[package]] name = "z3" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25754b4bf4516a65d0e596ea9c1f0082224bdf20823a37fdd9111fa08d5bf48" +checksum = "4a7ff5718c079e7b813378d67a5bed32ccc2086f151d6185074a7e24f4a565e8" dependencies = [ - "lazy_static", "log", "z3-sys", ] [[package]] name = "z3-sys" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c82dcbc58be4bf1994c520066cb2bd6c3d36aed0fdc57244f34d277421986a6" +checksum = "d7cf70fdbc0de3f42b404f49b0d4686a82562254ea29ff0a155eef2f5430f4b0" dependencies = [ "bindgen", "cmake", diff --git a/Cargo.toml b/Cargo.toml index d702ebce..4bbacaba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,2 +1,3 @@ [workspace] members = ["etk-ops", "etk-asm", "etk-dasm", "etk-analyze", "etk-cli", "etk-4byte"] +resolver = "2" diff --git a/etk-analyze/Cargo.toml b/etk-analyze/Cargo.toml index 886c1f38..09cfef2c 100644 --- a/etk-analyze/Cargo.toml +++ b/etk-analyze/Cargo.toml @@ -20,7 +20,7 @@ clap = { optional = true, version = "3.1", features = ["derive"] } etk-cli = { optional = true, path = "../etk-cli", version = "0.4.0-dev" } etk-asm = { optional = true, path = "../etk-asm", version = "0.4.0-dev" } etk-dasm = { path = "../etk-dasm", version = "0.4.0-dev" } -z3 = { version = "0.11.2", features = ["static-link-z3"] } +z3 = { version = "0.12.1", features = ["static-link-z3"] } [dependencies.petgraph] version = "0.6.0" diff --git a/etk-analyze/src/sym.rs b/etk-analyze/src/sym.rs index 80087233..56f54b4a 100644 --- a/etk-analyze/src/sym.rs +++ b/etk-analyze/src/sym.rs @@ -79,6 +79,7 @@ impl<'z> Visit for Z3Visit<'z> { Sym::ChainId => BV::new_const(self.context, "chainid", 256), Sym::SelfBalance => BV::fresh_const(self.context, "selfbalance", 256), Sym::BaseFee => BV::new_const(self.context, "basefee", 256), + Sym::BlobBaseFee => BV::new_const(self.context, "blobbasefee", 256), Sym::GetPc(pc) => BV::from_u64(self.context, *pc as u64, 256), Sym::MSize => BV::fresh_const(self.context, "msize", 256), Sym::Gas => BV::fresh_const(self.context, "gas", 256), @@ -142,7 +143,10 @@ impl<'z> Visit for Z3Visit<'z> { // TODO: Probably incorrect, certainly inefficient. // Something something discrete log problem? - lhs.to_int(false).power(&rhs.to_int(false)).to_ast(256) + lhs.to_int(false) + .power(&rhs.to_int(false)) + .to_int() + .to_ast(256) } Sym::Lt => { diff --git a/etk-dasm/src/blocks/annotated.rs b/etk-dasm/src/blocks/annotated.rs index 368cd20f..db5ee93e 100644 --- a/etk-dasm/src/blocks/annotated.rs +++ b/etk-dasm/src/blocks/annotated.rs @@ -453,6 +453,7 @@ impl<'a> Annotator<'a> { Op::ChainId(_) => stack.push(Expr::chain_id()), Op::SelfBalance(_) => stack.push(Expr::self_balance()), Op::BaseFee(_) => stack.push(Expr::base_fee()), + Op::BlobBaseFee(_) => stack.push(Expr::blob_base_fee()), Op::MSize(_) => stack.push(Expr::m_size()), Op::Gas(_) => stack.push(Expr::gas()), @@ -817,7 +818,6 @@ impl<'a> Annotator<'a> { | Op::Invalid4b(_) | Op::Invalid4c(_) | Op::Invalid4d(_) - | Op::Invalid4e(_) | Op::Invalid4f(_) | Op::Invalid5c(_) | Op::Invalid5d(_) diff --git a/etk-dasm/src/sym.rs b/etk-dasm/src/sym.rs index 3254bc32..1760309a 100644 --- a/etk-dasm/src/sym.rs +++ b/etk-dasm/src/sym.rs @@ -169,6 +169,13 @@ impl Expr { } } + /// Create an [`Expr`] representing `blobbasefee` (`0x4e`). + pub fn blob_base_fee() -> Self { + Self { + ops: vec![Sym::BlobBaseFee], + } + } + /// Create an [`Expr`] representing `pc` (`0x58`). pub fn pc(offset: u16) -> Self { Self { @@ -798,6 +805,9 @@ pub enum Sym { /// A `basefee` (`0x48`) operation. BaseFee, + /// A `blobbasefee` (`0x4e`) operation. + BlobBaseFee, + /// A `pc` (`0x58`) operation. GetPc(u16), @@ -878,6 +888,7 @@ impl Sym { | Sym::ChainId | Sym::SelfBalance | Sym::BaseFee + | Sym::BlobBaseFee | Sym::GetPc(_) | Sym::MSize | Sym::Gas diff --git a/etk-ops/src/cancun.toml b/etk-ops/src/cancun.toml index db89c9a1..6906b39e 100644 --- a/etk-ops/src/cancun.toml +++ b/etk-ops/src/cancun.toml @@ -311,6 +311,12 @@ mnemonic = "basefee" pushes = 1 pops = 0 +[BlobBaseFee] +code = 0x4e +mnemonic = "blobbasefee" +pushes = 1 +pops = 0 + [Pop] code = 0x50 mnemonic = "pop"