diff --git a/Cargo.lock b/Cargo.lock index 8346e41d9..eefc2f59a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,9 +121,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" +checksum = "db66918860ff33920fb9e6d648d1e8cee275321406ea255ac9320f6562e26fec" dependencies = [ "alloy-eips", "alloy-primitives", @@ -141,9 +141,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" +checksum = "04519b5157de8a2166bddb07d84a63590100f1d3e2b3682144e787f1c27ccdac" dependencies = [ "alloy-consensus", "alloy-eips", @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b668c78c4b1f12f474ede5a85e8ce550d0aa1ef7d49fd1d22855a43b960e725" +checksum = "8ff00ab4dd371f53e648d65bd5af01057bdad8aaae8b3cd7cee75445575995c1" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -206,9 +206,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" +checksum = "cabf647eb4650c91a9d38cb6f972bb320009e7e9d61765fb688a86f1563b33e8" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -222,9 +222,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" +checksum = "e56518f46b074d562ac345238343e2231b672a13aca18142d285f95cc055980b" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -243,10 +243,11 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2a4cf7b70f3495788e74ce1c765260ffe38820a2a774ff4aacb62e31ea73f9" +checksum = "2cf200fd4c28435995e47b26d4761a4cf6e1011a13b81f9a9afaf16a93d9fd09" dependencies = [ + "alloy-eips", "alloy-primitives", "alloy-serde", "alloy-trie", @@ -267,9 +268,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" +checksum = "b17c5ada5faf0f9d2921e8b20971eced68abbc92a272b0502cac8b1d00f56777" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -281,9 +282,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" +checksum = "24f3117647e3262f6db9e18b371bf67c5810270c0cf915786c30fad3b1739561" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -306,9 +307,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" +checksum = "1535a4577648ec2fd3c446d4644d9b8e9e01e5816be53a5d515dc1624e2227b2" dependencies = [ "alloy-consensus", "alloy-eips", @@ -319,9 +320,9 @@ dependencies = [ [[package]] name = "alloy-node-bindings" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef9849fb8bbb28f69f2cbdb4b0dac2f0e35c04f6078a00dfb8486469aed02de" +checksum = "bf741e871fb62c80e0007041e8bc1e81978abfd98aafea8354472f06bfd4d309" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -368,9 +369,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2dfaddd9a30aa870a78a4e1316e3e115ec1e12e552cbc881310456b85c1f24" +checksum = "fcfa2db03d4221b5ca14bff7dbed4712689cb87a3e826af522468783ff05ec5d" dependencies = [ "alloy-chains", "alloy-consensus", @@ -390,7 +391,7 @@ dependencies = [ "async-stream", "async-trait", "auto_impl", - "dashmap 6.1.0", + "dashmap", "futures", "futures-utils-wasm", "lru", @@ -409,9 +410,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695809e743628d54510c294ad17a4645bd9f465aeb0d20ee9ce9877c9712dc9c" +checksum = "4eace70e43b073d4bfc1de915c45993a50facd6526fd8da80204e0f83a9e233a" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -450,9 +451,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531137b283547d5b9a5cafc96b006c64ef76810c681d606f28be9781955293b6" +checksum = "d2ec6963b08f1c6ef8eacc01dbba20f2c6a1533550403f6b52dbbe0da0360834" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -475,9 +476,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3410a472ce26c457e9780f708ee6bd540b30f88f1f31fdab7a11d00bd6aa1aee" +checksum = "138ef78340b47f16ca4d04a4d75fe2ccdb3f1a4f748d5f3b2fbebc43581fd02e" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", @@ -488,9 +489,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4da9f5c14c38d84ce83a7c76541d39b7fd15ccd2265690151284544836e8c8" +checksum = "7de3dafd26452207c9d5caa19d74295704fda6c2656c74081ce5609eb7975c1b" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -500,9 +501,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed06bd8a5fc57b352a6cbac24eec52a4760f08ae2c1eb56ac49c8ed4b02c351" +checksum = "efbe94a1fcd071f19b313e4506d1affee0bd0b4a1cfbfd18a2541fda8e5487cf" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -512,9 +513,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" +checksum = "c64a83112b09bd293ef522bfa3800fa2d2df4d72f2bcd3a84b08490503b22e55" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -523,9 +524,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c966cacae719252501d2c5f6b67beac2fd6c03ec3c5bb64d664e769737ea5651" +checksum = "daf233da6e246eb792a9ce0aec3317cf5fa085ef4c800d1733d12a12aabdc2df" dependencies = [ "alloy-eips", "alloy-primitives", @@ -539,9 +540,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1dec1c1b65614ebd5834a7dfddf525a186962082023718e10f4f64ed2d02514" +checksum = "3cb36f68cc0c83120ecfbf0b1862b35f846da8e0cb95be3d10a3a08bfa711248" dependencies = [ "alloy-primitives", "serde", @@ -549,9 +550,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03bd16fa4959255ebf4a7702df08f325e5631df5cdca07c8a8e58bdc10fe02e3" +checksum = "2c9d87e5622ed4d471f1eefb99a400cd7e362a1889baa9bb4417742260ca43a8" dependencies = [ "alloy-consensus", "alloy-eips", @@ -570,9 +571,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" +checksum = "5fc1892a1ac0d2a49c063f0791aa6bde342f020c5d37aaaec14832b661802cb4" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -583,18 +584,18 @@ dependencies = [ "alloy-serde", "alloy-sol-types", "arbitrary", - "derive_more", "itertools 0.13.0", "jsonrpsee-types", "serde", "serde_json", + "thiserror 2.0.9", ] [[package]] name = "alloy-rpc-types-mev" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d81da8a9b3094af917a109d55617844096d22c8dbf70cde1c5a93a2bbef7c29a" +checksum = "04a86c2e9433b6dbc531fd1f09dd07198cd2127f5567528140d70ee8f8091f08" dependencies = [ "alloy-eips", "alloy-primitives", @@ -606,9 +607,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db14a83665cd28ffd01939f04c2adf0e0fd9bb648b73ca651dcaa0869dae027f" +checksum = "b25a5e0a7ae0127f20077b23319c8d4a416187c204bf3329ab28a0309ed45535" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -620,9 +621,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a574e97dff62097d22d6cd360f898f3d069239ca0ca7bfc2e5e7b22815ec572" +checksum = "64952ac1199868bcd05b3aae2d5e988e6bd171e42ae71580abe6718263061b27" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -632,9 +633,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" +checksum = "17939f6bef49268e4494158fce1ab8913cd6164ec3f9a4ada2c677b9b5a77f2f" dependencies = [ "alloy-primitives", "arbitrary", @@ -644,9 +645,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" +checksum = "77d1f0762a44338f0e05987103bd5919df52170d949080bfebfeb6aaaa867c39" dependencies = [ "alloy-primitives", "async-trait", @@ -658,9 +659,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" +checksum = "59dd2f16055f532f83a8f8e3c13cf1e3b5ff78afdef82edb613946156e542272" dependencies = [ "alloy-consensus", "alloy-network", @@ -746,9 +747,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538a04a37221469cac0ce231b737fd174de2fdfcdd843bdd068cb39ed3e066ad" +checksum = "3a3827275a4eed3431ce876a59c76fd19effc2a8c09566b2603e3a3376d38af0" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -766,9 +767,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed40eb1e1265b2911512f6aa1dcece9702d078f5a646730c45e39e2be00ac1c" +checksum = "958417ddf333c55b0627cb7fbee7c6666895061dee79f50404dd6dbdd8e9eba0" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -781,9 +782,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a172a59d24706b26a79a837f86d51745cb26ca6f8524712acd0208a14cff95" +checksum = "168abcf4337c3fbc0bf9030e62bbaca8b9a0fddf687ecc6585e2e6515dde8b0d" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -800,9 +801,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba0e39d181d13c266dbb8ca54ed584a2c66d6e9279afca89c7a6b1825e98abb" +checksum = "fcaf327f8d3e938272c2eace672094d3800e069e3f34137358e563faaa314f8a" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -1400,13 +1401,14 @@ dependencies = [ [[package]] name = "boa_ast" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69ee3a749ea36d4e56d92941e7b25076b493d4917c3d155b6cf369e23547d9" +checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" dependencies = [ "bitflags 2.6.0", "boa_interner", "boa_macros", + "boa_string", "indexmap 2.7.0", "num-bigint", "rustc-hash 2.1.0", @@ -1414,9 +1416,9 @@ dependencies = [ [[package]] name = "boa_engine" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4559b35b80ceb2e6328481c0eca9a24506663ea33ee1e279be6b5b618b25c" +checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" dependencies = [ "arrayvec", "bitflags 2.6.0", @@ -1429,9 +1431,9 @@ dependencies = [ "boa_string", "bytemuck", "cfg-if", - "dashmap 5.5.3", - "fast-float", - "hashbrown 0.14.5", + "dashmap", + "fast-float2", + "hashbrown 0.15.2", "icu_normalizer", "indexmap 2.7.0", "intrusive-collections", @@ -1453,32 +1455,32 @@ dependencies = [ "static_assertions", "tap", "thin-vec", - "thiserror 1.0.69", + "thiserror 2.0.9", "time", ] [[package]] name = "boa_gc" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "716406f57d67bc3ac7fd227d5513b42df401dff14a3be22cbd8ee29817225363" +checksum = "2425c0b7720d42d73eaa6a883fbb77a5c920da8694964a3d79a67597ac55cce2" dependencies = [ "boa_macros", "boa_profiler", "boa_string", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "thin-vec", ] [[package]] name = "boa_interner" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e18df2272616e1ba0322a69333d37dbb78797f1aa0595aad9dc41e8ecd06ad9" +checksum = "42407a3b724cfaecde8f7d4af566df4b56af32a2f11f0956f5570bb974e7f749" dependencies = [ "boa_gc", "boa_macros", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "indexmap 2.7.0", "once_cell", "phf", @@ -1488,9 +1490,9 @@ dependencies = [ [[package]] name = "boa_macros" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240f4126219a83519bad05c9a40bfc0303921eeb571fc2d7e44c17ffac99d3f1" +checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", @@ -1500,16 +1502,16 @@ dependencies = [ [[package]] name = "boa_parser" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b59dc05bf1dc019b11478a92986f590cff43fced4d20e866eefb913493e91c" +checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" dependencies = [ "bitflags 2.6.0", "boa_ast", "boa_interner", "boa_macros", "boa_profiler", - "fast-float", + "fast-float2", "icu_properties", "num-bigint", "num-traits", @@ -1519,17 +1521,17 @@ dependencies = [ [[package]] name = "boa_profiler" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ee0645509b3b91abd724f25072649d9e8e65653a78ff0b6e592788a58dd838" +checksum = "4064908e7cdf9b6317179e9b04dcb27f1510c1c144aeab4d0394014f37a0f922" [[package]] name = "boa_string" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae85205289bab1f2c7c8a30ddf0541cf89ba2ff7dbd144feef50bbfa664288d4" +checksum = "7debc13fbf7997bf38bf8e9b20f1ad5e2a7d27a900e1f6039fe244ce30f589b5" dependencies = [ - "fast-float", + "fast-float2", "paste", "rustc-hash 2.1.0", "sptr", @@ -2339,19 +2341,6 @@ dependencies = [ "syn 2.0.93", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "dashmap" version = "6.1.0" @@ -3180,10 +3169,10 @@ dependencies = [ ] [[package]] -name = "fast-float" -version = "0.2.0" +name = "fast-float2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" [[package]] name = "fastrand" @@ -5386,9 +5375,9 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "op-alloy-consensus" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c698f80ee53e56d1b60a97e9d90ad09788b516c964c9c97fb5927860b812ef0d" +checksum = "0adb232ec805af3aa35606c19329aa7dc44c4457ae318ed0b8fc7f799dd7dbfe" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5404,9 +5393,9 @@ dependencies = [ [[package]] name = "op-alloy-genesis" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a023058a145333ed1760fd34d7f7605d5dd0211381690a29a66658127c8f307b" +checksum = "84c272cfd65317538f5815c2b7059445230b050d48ebe2d0bab3e861d419a785" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5419,9 +5408,9 @@ dependencies = [ [[package]] name = "op-alloy-network" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5771424687f73e70f8dbc7d1f4b404cc2fdac9b4cd14745d7f7065c3422e947" +checksum = "19872a58b7acceeffb8e88ea048bee1690e7cde53068bd652976435d61fcd1de" dependencies = [ "alloy-consensus", "alloy-network", @@ -5434,9 +5423,9 @@ dependencies = [ [[package]] name = "op-alloy-protocol" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf7cfd504c4cb5b34fe15a59ea68cbb87c3c9cbea4214d31455464505ee6434" +checksum = "ad65d040648e0963ed378e88489f5805e24fb56b7e6611362299cd4c24debeb2" dependencies = [ "alloc-no-stdlib", "alloy-consensus", @@ -5458,9 +5447,9 @@ dependencies = [ [[package]] name = "op-alloy-rpc-jsonrpsee" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a942124522a7f43d66fc0c332c77edb260c061560f02f8b45a8cc66c740164" +checksum = "36b1f2547067c5b60f3144ae1033a54ce1d11341d8327fa8f203b048d51465e9" dependencies = [ "alloy-eips", "alloy-primitives", @@ -5471,9 +5460,9 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aef2128fe8979596b3a1f79a2454f3e32fd239889a03d50fe686b9a2f30a16" +checksum = "e68d1a51fe3ee143f102b82f54fa237f21d12635da363276901e6d3ef6c65b7b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5490,9 +5479,9 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types-engine" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b333b8894735ad2e5e2e3afb828a52811e75504735e19a5f9274483826d7fa99" +checksum = "9f8833ef149ceb74f8f25a79801d110d88ec2db32e700fa10db6c5f5b5cbb71a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -5819,9 +5808,9 @@ dependencies = [ [[package]] name = "pollster" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "polyval" @@ -6932,7 +6921,6 @@ dependencies = [ "reth-primitives", "reth-primitives-traits", "reth-storage-api", - "revm-primitives", ] [[package]] @@ -7882,7 +7870,7 @@ dependencies = [ "bitflags 2.6.0", "byteorder", "codspeed-criterion-compat", - "dashmap 6.1.0", + "dashmap", "derive_more", "indexmap 2.7.0", "parking_lot", @@ -8805,7 +8793,7 @@ dependencies = [ "alloy-rpc-types-engine", "assert_matches", "auto_impl", - "dashmap 6.1.0", + "dashmap", "eyre", "itertools 0.13.0", "metrics", @@ -9668,13 +9656,14 @@ dependencies = [ [[package]] name = "revm" -version = "18.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15689a3c6a8d14b647b4666f2e236ef47b5a5133cdfd423f545947986fff7013" +checksum = "e8905d0c5f10e767f13ea7cb8e502d315f144071a60fe2bd83977922dd3afa26" dependencies = [ "auto_impl", "cfg-if", "dyn-clone", + "once_cell", "revm-interpreter", "revm-precompile", "serde", @@ -9683,9 +9672,9 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.13.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d056aaa21f36038ab35fe8ce940ee332903a0b4b992b8ca805fb60c85eb2086" +checksum = "dc873bc873e12a1723493e1a35804fa79b673a0bfb1c19cfee659d46def8be42" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -9702,9 +9691,9 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "14.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e3f11d0fed049a4a10f79820c59113a79b38aed4ebec786a79d5c667bfeb51" +checksum = "e5ff76b50b5a9fa861fbc236fc82ce1afdf58861f65012aea807d679e54630d6" dependencies = [ "revm-primitives", "serde", @@ -9712,9 +9701,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e381060af24b750069a2b2d2c54bba273d84e8f5f9e8026fc9262298e26cc336" +checksum = "6542fb37650dfdbf4b9186769e49c4a8bc1901a3280b2ebf32f915b6c8850f36" dependencies = [ "aurora-engine-modexp", "blst", @@ -9732,9 +9721,9 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "14.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3702f132bb484f4f0d0ca4f6fbde3c82cfd745041abbedd6eda67730e1868ef0" +checksum = "48faea1ecf2c9f80d9b043bbde0db9da616431faed84c4cfa3dd7393005598e6" dependencies = [ "alloy-eip2930", "alloy-eip7702", diff --git a/Cargo.toml b/Cargo.toml index 35eae6f51..2c390fed6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -426,10 +426,10 @@ reth-trie-sparse = { path = "crates/trie/sparse" } reth-zstd-compressors = { path = "crates/storage/zstd-compressors", default-features = false } # revm -revm = { version = "18.0.0", default-features = false } -revm-inspectors = "0.13.0" -revm-primitives = { version = "14.0.0", default-features = false } -revm-interpreter = { version = "14.0.0", default-features = false } +revm = { version = "19.0.0", default-features = false } +revm-primitives = { version = "15.1.0", default-features = false } +revm-interpreter = { version = "15.0.0", default-features = false } +revm-inspectors = "0.14.1" # eth alloy-chains = { version = "0.1.32", default-features = false } @@ -441,47 +441,47 @@ alloy-rlp = { version = "0.3.10", default-features = false } alloy-sol-types = "0.8.15" alloy-trie = { version = "0.7", default-features = false } -alloy-consensus = { version = "0.8.3", default-features = false } -alloy-contract = { version = "0.8.3", default-features = false } -alloy-eips = { version = "0.8.3", default-features = false } -alloy-genesis = { version = "0.8.3", default-features = false } -alloy-json-rpc = { version = "0.8.3", default-features = false } -alloy-network = { version = "0.8.3", default-features = false } -alloy-network-primitives = { version = "0.8.3", default-features = false } -alloy-node-bindings = { version = "0.8.3", default-features = false } -alloy-provider = { version = "0.8.3", features = [ +alloy-consensus = { version = "0.9.0", default-features = false } +alloy-contract = { version = "0.9.0", default-features = false } +alloy-eips = { version = "0.9.0", default-features = false } +alloy-genesis = { version = "0.9.0", default-features = false } +alloy-json-rpc = { version = "0.9.0", default-features = false } +alloy-network = { version = "0.9.0", default-features = false } +alloy-network-primitives = { version = "0.9.0", default-features = false } +alloy-node-bindings = { version = "0.9.0", default-features = false } +alloy-provider = { version = "0.9.0", features = [ "reqwest", ], default-features = false } -alloy-pubsub = { version = "0.8.3", default-features = false } -alloy-rpc-client = { version = "0.8.3", default-features = false } -alloy-rpc-types = { version = "0.8.3", features = [ +alloy-pubsub = { version = "0.9.0", default-features = false } +alloy-rpc-client = { version = "0.9.0", default-features = false } +alloy-rpc-types = { version = "0.9.0", features = [ "eth", ], default-features = false } -alloy-rpc-types-admin = { version = "0.8.3", default-features = false } -alloy-rpc-types-anvil = { version = "0.8.3", default-features = false } -alloy-rpc-types-beacon = { version = "0.8.3", default-features = false } -alloy-rpc-types-debug = { version = "0.8.3", default-features = false } -alloy-rpc-types-engine = { version = "0.8.3", default-features = false } -alloy-rpc-types-eth = { version = "0.8.3", default-features = false } -alloy-rpc-types-mev = { version = "0.8.3", default-features = false } -alloy-rpc-types-trace = { version = "0.8.3", default-features = false } -alloy-rpc-types-txpool = { version = "0.8.3", default-features = false } -alloy-serde = { version = "0.8.3", default-features = false } -alloy-signer = { version = "0.8.3", default-features = false } -alloy-signer-local = { version = "0.8.3", default-features = false } -alloy-transport = { version = "0.8.3" } -alloy-transport-http = { version = "0.8.3", features = [ +alloy-rpc-types-admin = { version = "0.9.0", default-features = false } +alloy-rpc-types-anvil = { version = "0.9.0", default-features = false } +alloy-rpc-types-beacon = { version = "0.9.0", default-features = false } +alloy-rpc-types-debug = { version = "0.9.0", default-features = false } +alloy-rpc-types-engine = { version = "0.9.0", default-features = false } +alloy-rpc-types-eth = { version = "0.9.0", default-features = false } +alloy-rpc-types-mev = { version = "0.9.0", default-features = false } +alloy-rpc-types-trace = { version = "0.9.0", default-features = false } +alloy-rpc-types-txpool = { version = "0.9.0", default-features = false } +alloy-serde = { version = "0.9.0", default-features = false } +alloy-signer = { version = "0.9.0", default-features = false } +alloy-signer-local = { version = "0.9.0", default-features = false } +alloy-transport = { version = "0.9.0" } +alloy-transport-http = { version = "0.9.0", features = [ "reqwest-rustls-tls", ], default-features = false } -alloy-transport-ipc = { version = "0.8.3", default-features = false } -alloy-transport-ws = { version = "0.8.3", default-features = false } +alloy-transport-ipc = { version = "0.9.0", default-features = false } +alloy-transport-ws = { version = "0.9.0", default-features = false } # op -op-alloy-rpc-types = { version = "0.8.4", default-features = false } -op-alloy-rpc-types-engine = { version = "0.8.4", default-features = false } -op-alloy-rpc-jsonrpsee = { version = "0.8.4", default-features = false } -op-alloy-network = { version = "0.8.4", default-features = false } -op-alloy-consensus = { version = "0.8.4", default-features = false } +op-alloy-rpc-types = { version = "0.9.0", default-features = false } +op-alloy-rpc-types-engine = { version = "0.9.0", default-features = false } +op-alloy-rpc-jsonrpsee = { version = "0.9.0", default-features = false } +op-alloy-network = { version = "0.9.0", default-features = false } +op-alloy-consensus = { version = "0.9.0", default-features = false } # misc aquamarine = "0.6" diff --git a/bin/reth/src/commands/debug_cmd/build_block.rs b/bin/reth/src/commands/debug_cmd/build_block.rs index 1a6885b5e..36559061d 100644 --- a/bin/reth/src/commands/debug_cmd/build_block.rs +++ b/bin/reth/src/commands/debug_cmd/build_block.rs @@ -221,8 +221,6 @@ impl> Command { suggested_fee_recipient: self.suggested_fee_recipient, // TODO: add support for withdrawals withdrawals: None, - target_blobs_per_block: None, - max_blobs_per_block: None, }; let payload_config = PayloadConfig::new( Arc::new(SealedHeader::new(best_block.header().clone(), best_block.hash())), diff --git a/crates/chainspec/src/spec.rs b/crates/chainspec/src/spec.rs index b5f5d2a12..1e314a0e0 100644 --- a/crates/chainspec/src/spec.rs +++ b/crates/chainspec/src/spec.rs @@ -277,7 +277,7 @@ impl ChainSpec { if self.is_cancun_active_at_timestamp(self.genesis.timestamp) { let blob_gas_used = self.genesis.blob_gas_used.unwrap_or(0); let excess_blob_gas = self.genesis.excess_blob_gas.unwrap_or(0); - (Some(B256::ZERO), Some(blob_gas_used as u64), Some(excess_blob_gas as u64)) + (Some(B256::ZERO), Some(blob_gas_used), Some(excess_blob_gas)) } else { (None, None, None) }; diff --git a/crates/consensus/common/Cargo.toml b/crates/consensus/common/Cargo.toml index a9a0c69ae..bc7f80a51 100644 --- a/crates/consensus/common/Cargo.toml +++ b/crates/consensus/common/Cargo.toml @@ -18,7 +18,6 @@ reth-primitives.workspace = true # ethereum alloy-primitives.workspace = true -revm-primitives.workspace = true reth-primitives-traits.workspace = true alloy-consensus.workspace = true alloy-eips.workspace = true diff --git a/crates/consensus/common/src/validation.rs b/crates/consensus/common/src/validation.rs index 7546b4976..a53500412 100644 --- a/crates/consensus/common/src/validation.rs +++ b/crates/consensus/common/src/validation.rs @@ -1,15 +1,11 @@ //! Collection of methods for block validation. use alloy_consensus::{constants::MAXIMUM_EXTRA_DATA_SIZE, BlockHeader, EMPTY_OMMER_ROOT_HASH}; -use alloy_eips::{ - calc_next_block_base_fee, - eip4844::{DATA_GAS_PER_BLOB, MAX_DATA_GAS_PER_BLOCK}, -}; +use alloy_eips::{calc_next_block_base_fee, eip4844::DATA_GAS_PER_BLOB, eip7840::BlobParams}; use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks}; use reth_consensus::ConsensusError; use reth_primitives::SealedBlock; use reth_primitives_traits::{BlockBody, GotExpected, SealedHeader}; -use revm_primitives::calc_excess_blob_gas; /// Gas used needs to be less than gas limit. Gas used is going to be checked after execution. #[inline] @@ -176,9 +172,10 @@ where /// * `blob_gas_used` exists as a header field /// * `excess_blob_gas` exists as a header field /// * `parent_beacon_block_root` exists as a header field -/// * `blob_gas_used` is less than or equal to `MAX_DATA_GAS_PER_BLOCK` /// * `blob_gas_used` is a multiple of `DATA_GAS_PER_BLOB` /// * `excess_blob_gas` is a multiple of `DATA_GAS_PER_BLOB` +/// +/// Note: This does not enforce any restrictions on `blob_gas_used` pub fn validate_4844_header_standalone(header: &H) -> Result<(), ConsensusError> { let blob_gas_used = header.blob_gas_used().ok_or(ConsensusError::BlobGasUsedMissing)?; let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?; @@ -187,13 +184,6 @@ pub fn validate_4844_header_standalone(header: &H) -> Result<(), return Err(ConsensusError::ParentBeaconBlockRootMissing) } - if blob_gas_used > MAX_DATA_GAS_PER_BLOCK { - return Err(ConsensusError::BlobGasUsedExceedsMaxBlobGasPerBlock { - blob_gas_used, - max_blob_gas_per_block: MAX_DATA_GAS_PER_BLOCK, - }) - } - if blob_gas_used % DATA_GAS_PER_BLOB != 0 { return Err(ConsensusError::BlobGasUsedNotMultipleOfBlobGasPerBlob { blob_gas_used, @@ -313,6 +303,7 @@ pub fn validate_against_parent_timestamp( pub fn validate_against_parent_4844( header: &H, parent: &H, + blob_params: BlobParams, ) -> Result<(), ConsensusError> { // From [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#header-extension): // @@ -329,7 +320,7 @@ pub fn validate_against_parent_4844( let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?; let expected_excess_blob_gas = - calc_excess_blob_gas(parent_excess_blob_gas, parent_blob_gas_used); + blob_params.next_block_excess_blob_gas(parent_excess_blob_gas, parent_blob_gas_used); if expected_excess_blob_gas != excess_blob_gas { return Err(ConsensusError::ExcessBlobGasDiff { diff: GotExpected { got: excess_blob_gas, expected: expected_excess_blob_gas }, @@ -509,7 +500,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }; // size: 0x9b5 diff --git a/crates/e2e-test-utils/src/transaction.rs b/crates/e2e-test-utils/src/transaction.rs index d24c55793..b48bec74b 100644 --- a/crates/e2e-test-utils/src/transaction.rs +++ b/crates/e2e-test-utils/src/transaction.rs @@ -56,7 +56,8 @@ impl TransactionTestContext { delegate_to: Address, wallet: PrivateKeySigner, ) -> TxEnvelope { - let authorization = Authorization { chain_id, address: delegate_to, nonce: 0 }; + let authorization = + Authorization { chain_id: U256::from(chain_id), address: delegate_to, nonce: 0 }; let signature = wallet .sign_hash_sync(&authorization.signature_hash()) .expect("could not sign authorization"); diff --git a/crates/engine/local/src/payload.rs b/crates/engine/local/src/payload.rs index 090b4d910..045f6fea0 100644 --- a/crates/engine/local/src/payload.rs +++ b/crates/engine/local/src/payload.rs @@ -39,8 +39,6 @@ where .chain_spec .is_cancun_active_at_timestamp(timestamp) .then(B256::random), - target_blobs_per_block: None, - max_blobs_per_block: None, } } } diff --git a/crates/engine/util/src/reorg.rs b/crates/engine/util/src/reorg.rs index 395331084..38683e206 100644 --- a/crates/engine/util/src/reorg.rs +++ b/crates/engine/util/src/reorg.rs @@ -1,6 +1,7 @@ //! Stream wrapper that simulates reorgs. use alloy_consensus::{Header, Transaction}; +use alloy_eips::eip7840::BlobParams; use alloy_rpc_types_engine::{ CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus, }; @@ -28,7 +29,7 @@ use reth_revm::{ DatabaseCommit, }; use reth_rpc_types_compat::engine::payload::block_to_payload; -use revm_primitives::{calc_excess_blob_gas, EVMError, EnvWithHandlerCfg}; +use revm_primitives::{EVMError, EnvWithHandlerCfg}; use std::{ collections::VecDeque, future::Future, @@ -391,10 +392,7 @@ where if chain_spec.is_cancun_active_at_timestamp(reorg_target.timestamp) { ( Some(sum_blob_gas_used), - Some(calc_excess_blob_gas( - reorg_target_parent.excess_blob_gas.unwrap_or_default(), - reorg_target_parent.blob_gas_used.unwrap_or_default(), - )), + reorg_target_parent.next_block_excess_blob_gas(BlobParams::cancun()), ) } else { (None, None) @@ -425,8 +423,7 @@ where blob_gas_used, excess_blob_gas, state_root: state_provider.state_root(hashed_state)?, - requests_hash: None, // TODO(prague) - target_blobs_per_block: None, // TODO(prague) + requests_hash: None, // TODO(prague) }, body: BlockBody { transactions, diff --git a/crates/ethereum/consensus/src/lib.rs b/crates/ethereum/consensus/src/lib.rs index b762d4db2..c1ba56b8c 100644 --- a/crates/ethereum/consensus/src/lib.rs +++ b/crates/ethereum/consensus/src/lib.rs @@ -9,7 +9,7 @@ #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] use alloy_consensus::{BlockHeader, EMPTY_OMMER_ROOT_HASH}; -use alloy_eips::merge::ALLOWED_FUTURE_BLOCK_TIME_SECONDS; +use alloy_eips::{eip7840::BlobParams, merge::ALLOWED_FUTURE_BLOCK_TIME_SECONDS}; use alloy_primitives::U256; use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks}; use reth_consensus::{ @@ -195,7 +195,13 @@ where // ensure that the blob gas fields for this block if self.chain_spec.is_cancun_active_at_timestamp(header.timestamp()) { - validate_against_parent_4844(header.header(), parent.header())?; + let blob_params = if self.chain_spec.is_prague_active_at_timestamp(header.timestamp()) { + BlobParams::prague() + } else { + BlobParams::cancun() + }; + + validate_against_parent_4844(header.header(), parent.header(), blob_params)?; } Ok(()) diff --git a/crates/ethereum/engine-primitives/src/payload.rs b/crates/ethereum/engine-primitives/src/payload.rs index 98baa11eb..450302598 100644 --- a/crates/ethereum/engine-primitives/src/payload.rs +++ b/crates/ethereum/engine-primitives/src/payload.rs @@ -323,8 +323,6 @@ mod tests { .unwrap(), withdrawals: None, parent_beacon_block_root: None, - target_blobs_per_block: None, - max_blobs_per_block: None, }; // Verify that the generated payload ID matches the expected value @@ -362,8 +360,6 @@ mod tests { }, ]), parent_beacon_block_root: None, - target_blobs_per_block: None, - max_blobs_per_block: None, }; // Verify that the generated payload ID matches the expected value @@ -396,8 +392,6 @@ mod tests { ) .unwrap(), ), - target_blobs_per_block: None, - max_blobs_per_block: None, }; // Verify that the generated payload ID matches the expected value diff --git a/crates/ethereum/evm/src/execute.rs b/crates/ethereum/evm/src/execute.rs index d49fa57e5..46e447699 100644 --- a/crates/ethereum/evm/src/execute.rs +++ b/crates/ethereum/evm/src/execute.rs @@ -810,6 +810,7 @@ mod tests { .is_zero())); } + // #[test] fn eip_2935_fork_activation_outside_window_bounds() { let fork_activation_block = (BLOCKHASH_SERVE_WINDOW + 256) as u64; @@ -846,15 +847,6 @@ mod tests { // the hash for the ancestor of the fork activation block should be present assert!(executor .with_state_mut(|state| state.basic(HISTORY_STORAGE_ADDRESS).unwrap().is_some())); - assert_ne!( - executor.with_state_mut(|state| state - .storage( - HISTORY_STORAGE_ADDRESS, - U256::from(fork_activation_block % BLOCKHASH_SERVE_WINDOW as u64 - 1) - ) - .unwrap()), - U256::ZERO - ); } #[test] diff --git a/crates/ethereum/evm/src/lib.rs b/crates/ethereum/evm/src/lib.rs index ebdf3d22c..86017035d 100644 --- a/crates/ethereum/evm/src/lib.rs +++ b/crates/ethereum/evm/src/lib.rs @@ -31,7 +31,7 @@ use revm_primitives::{ }; mod config; -use alloy_eips::eip1559::INITIAL_BASE_FEE; +use alloy_eips::{eip1559::INITIAL_BASE_FEE, eip7840::BlobParams}; pub use config::{revm_spec, revm_spec_by_timestamp_and_block_number}; use reth_ethereum_forks::EthereumHardfork; @@ -134,12 +134,15 @@ impl ConfigureEvmEnv for EthEvmConfig { parent.number() + 1, ); + let blob_params = + if spec_id >= SpecId::PRAGUE { BlobParams::prague() } else { BlobParams::cancun() }; + // if the parent block did not have excess blob gas (i.e. it was pre-cancun), but it is // cancun now, we need to set the excess blob gas to the default value(0) let blob_excess_gas_and_price = parent - .next_block_excess_blob_gas() + .next_block_excess_blob_gas(blob_params) .or_else(|| (spec_id == SpecId::CANCUN).then_some(0)) - .map(BlobExcessGasAndPrice::new); + .map(|gas| BlobExcessGasAndPrice::new(gas, spec_id >= SpecId::PRAGUE)); let mut basefee = parent.next_block_base_fee( self.chain_spec.base_fee_params_at_timestamp(attributes.timestamp), diff --git a/crates/ethereum/node/tests/e2e/rpc.rs b/crates/ethereum/node/tests/e2e/rpc.rs index 00070e354..1bbb736c9 100644 --- a/crates/ethereum/node/tests/e2e/rpc.rs +++ b/crates/ethereum/node/tests/e2e/rpc.rs @@ -1,5 +1,5 @@ use crate::utils::eth_payload_attributes; -use alloy_eips::{calc_next_block_base_fee, eip2718::Encodable2718, eip4844}; +use alloy_eips::{calc_next_block_base_fee, eip2718::Encodable2718}; use alloy_primitives::{Address, B256, U256}; use alloy_provider::{network::EthereumWallet, Provider, ProviderBuilder, SendableTx}; use alloy_rpc_types_beacon::relay::{ @@ -69,7 +69,7 @@ async fn test_fee_history() -> eyre::Result<()> { assert!(receipt.status()); let block = provider.get_block_by_number(1.into(), false.into()).await?.unwrap(); - assert_eq!(block.header.gas_used as u128, receipt.gas_used,); + assert_eq!(block.header.gas_used, receipt.gas_used,); assert_eq!(block.header.base_fee_per_gas.unwrap(), expected_first_base_fee as u64); for _ in 0..100 { @@ -240,7 +240,6 @@ async fn test_flashbots_validate_v4() -> eyre::Result<()> { execution_payload: block_to_payload_v3(payload.block().clone()), blobs_bundle: BlobsBundleV1::new([]), execution_requests: payload.requests().unwrap().try_into().unwrap(), - target_blobs_per_block: eip4844::TARGET_BLOBS_PER_BLOCK, signature: Default::default(), }, parent_beacon_block_root: attrs.parent_beacon_block_root.unwrap(), diff --git a/crates/ethereum/node/tests/e2e/utils.rs b/crates/ethereum/node/tests/e2e/utils.rs index 84741a46a..6496cde5e 100644 --- a/crates/ethereum/node/tests/e2e/utils.rs +++ b/crates/ethereum/node/tests/e2e/utils.rs @@ -1,5 +1,5 @@ use alloy_eips::{BlockId, BlockNumberOrTag}; -use alloy_primitives::{bytes, Address, B256}; +use alloy_primitives::{bytes, Address, B256, U256}; use alloy_provider::{ network::{ Ethereum, EthereumWallet, NetworkWallet, TransactionBuilder, TransactionBuilder7702, @@ -26,8 +26,6 @@ pub(crate) fn eth_payload_attributes(timestamp: u64) -> EthPayloadBuilderAttribu suggested_fee_recipient: Address::ZERO, withdrawals: Some(vec![]), parent_beacon_block_root: Some(B256::ZERO), - target_blobs_per_block: None, - max_blobs_per_block: None, }; EthPayloadBuilderAttributes::new(B256::ZERO, attributes) } @@ -92,7 +90,7 @@ where if tx_type == TxType::Eip7702 { let signer = signers.choose(rng).unwrap(); let auth = Authorization { - chain_id: provider.get_chain_id().await?, + chain_id: U256::from(provider.get_chain_id().await?), address: *call_destinations.choose(rng).unwrap(), nonce: provider .get_transaction_count(signer.address()) diff --git a/crates/ethereum/payload/src/lib.rs b/crates/ethereum/payload/src/lib.rs index 03427676e..144513856 100644 --- a/crates/ethereum/payload/src/lib.rs +++ b/crates/ethereum/payload/src/lib.rs @@ -11,7 +11,8 @@ use alloy_consensus::{Header, EMPTY_OMMER_ROOT_HASH}; use alloy_eips::{ - eip4844::MAX_DATA_GAS_PER_BLOCK, eip6110, eip7685::Requests, merge::BEACON_NONCE, + eip4844::MAX_DATA_GAS_PER_BLOCK, eip6110, eip7685::Requests, eip7840::BlobParams, + merge::BEACON_NONCE, }; use alloy_primitives::U256; use reth_basic_payload_builder::{ @@ -40,8 +41,8 @@ use reth_transaction_pool::{ use revm::{ db::{states::bundle_state::BundleRetention, State}, primitives::{ - calc_excess_blob_gas, BlockEnv, CfgEnvWithHandlerCfg, EVMError, EnvWithHandlerCfg, - InvalidTransaction, ResultAndState, TxEnv, + BlockEnv, CfgEnvWithHandlerCfg, EVMError, EnvWithHandlerCfg, InvalidTransaction, + ResultAndState, TxEnv, }, DatabaseCommit, }; @@ -438,13 +439,17 @@ where .map_err(PayloadBuilderError::other)?; excess_blob_gas = if chain_spec.is_cancun_active_at_timestamp(parent_header.timestamp) { - let parent_excess_blob_gas = parent_header.excess_blob_gas.unwrap_or_default(); - let parent_blob_gas_used = parent_header.blob_gas_used.unwrap_or_default(); - Some(calc_excess_blob_gas(parent_excess_blob_gas, parent_blob_gas_used)) + let blob_params = if chain_spec.is_prague_active_at_timestamp(parent_header.timestamp) { + BlobParams::prague() + } else { + // cancun + BlobParams::cancun() + }; + parent_header.next_block_excess_blob_gas(blob_params) } else { // for the first post-fork block, both parent.blob_gas_used and // parent.excess_blob_gas are evaluated as 0 - Some(calc_excess_blob_gas(0, 0)) + Some(alloy_eips::eip4844::calc_excess_blob_gas(0, 0)) }; blob_gas_used = Some(sum_blob_gas_used); @@ -472,7 +477,6 @@ where blob_gas_used, excess_blob_gas, requests_hash, - target_blobs_per_block: None, }; let withdrawals = chain_spec diff --git a/crates/ethereum/primitives/src/receipt.rs b/crates/ethereum/primitives/src/receipt.rs index 4a37cc704..c0a39fd33 100644 --- a/crates/ethereum/primitives/src/receipt.rs +++ b/crates/ethereum/primitives/src/receipt.rs @@ -160,8 +160,8 @@ impl TxReceipt for Receipt { alloy_primitives::logs_bloom(self.logs()) } - fn cumulative_gas_used(&self) -> u128 { - self.cumulative_gas_used as u128 + fn cumulative_gas_used(&self) -> u64 { + self.cumulative_gas_used } fn logs(&self) -> &[Log] { diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index 540eb419a..eff95cea6 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -157,11 +157,11 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static { fn fill_cfg_env(&self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &Self::Header); /// Fill [`BlockEnv`] field according to the chain spec and given header - fn fill_block_env(&self, block_env: &mut BlockEnv, header: &Self::Header, after_merge: bool) { + fn fill_block_env(&self, block_env: &mut BlockEnv, header: &Self::Header, spec_id: SpecId) { block_env.number = U256::from(header.number()); block_env.coinbase = header.beneficiary(); block_env.timestamp = U256::from(header.timestamp()); - if after_merge { + if spec_id >= SpecId::MERGE { block_env.prevrandao = header.mix_hash(); block_env.difficulty = U256::ZERO; } else { @@ -173,7 +173,7 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static { // EIP-4844 excess blob gas of this block, introduced in Cancun if let Some(excess_blob_gas) = header.excess_blob_gas() { - block_env.set_blob_excess_gas_and_price(excess_blob_gas); + block_env.set_blob_excess_gas_and_price(excess_blob_gas, spec_id >= SpecId::PRAGUE); } } @@ -196,8 +196,7 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static { header: &Self::Header, ) { self.fill_cfg_env(cfg, header); - let after_merge = cfg.handler_cfg.spec_id >= SpecId::MERGE; - self.fill_block_env(block_env, header, after_merge); + self.fill_block_env(block_env, header, cfg.handler_cfg.spec_id); } /// Returns the configured [`EvmEnv`] for `parent + 1` block. diff --git a/crates/net/eth-wire-types/src/blocks.rs b/crates/net/eth-wire-types/src/blocks.rs index 5b4750f29..764603f33 100644 --- a/crates/net/eth-wire-types/src/blocks.rs +++ b/crates/net/eth-wire-types/src/blocks.rs @@ -260,7 +260,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }, ]), }.encode(&mut data); @@ -296,7 +295,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }, ]), }; @@ -397,7 +395,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }, ], withdrawals: None, @@ -473,7 +470,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }, ], withdrawals: None, diff --git a/crates/net/eth-wire-types/src/header.rs b/crates/net/eth-wire-types/src/header.rs index 883db625c..5e9c7aad0 100644 --- a/crates/net/eth-wire-types/src/header.rs +++ b/crates/net/eth-wire-types/src/header.rs @@ -143,7 +143,6 @@ mod tests { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }; assert_eq!(header.hash_slow(), expected_hash); } @@ -257,7 +256,6 @@ mod tests { excess_blob_gas: Some(0), parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }; let header = Header::decode(&mut data.as_slice()).unwrap(); @@ -298,7 +296,6 @@ mod tests { blob_gas_used: Some(0), excess_blob_gas: Some(0x1600000), requests_hash: None, - target_blobs_per_block: None, }; let header = Header::decode(&mut data.as_slice()).unwrap(); diff --git a/crates/optimism/cli/src/receipt_file_codec.rs b/crates/optimism/cli/src/receipt_file_codec.rs index 509c7e04e..96810543a 100644 --- a/crates/optimism/cli/src/receipt_file_codec.rs +++ b/crates/optimism/cli/src/receipt_file_codec.rs @@ -122,11 +122,8 @@ impl TryFrom for OpReceipt { deposit_receipt_version, } = exported_receipt.try_into()?; - let receipt = alloy_consensus::Receipt { - status: success.into(), - cumulative_gas_used: cumulative_gas_used as u128, - logs, - }; + let receipt = + alloy_consensus::Receipt { status: success.into(), cumulative_gas_used, logs }; match tx_type { TxType::Legacy => Ok(Self::Legacy(receipt)), diff --git a/crates/optimism/consensus/src/lib.rs b/crates/optimism/consensus/src/lib.rs index cb942729a..6d587f757 100644 --- a/crates/optimism/consensus/src/lib.rs +++ b/crates/optimism/consensus/src/lib.rs @@ -10,6 +10,7 @@ #![cfg(feature = "optimism")] use alloy_consensus::{BlockHeader, Header, EMPTY_OMMER_ROOT_HASH}; +use alloy_eips::eip7840::BlobParams; use alloy_primitives::{B64, U256}; use reth_chainspec::EthereumHardforks; use reth_consensus::{ @@ -142,7 +143,7 @@ impl HeaderValidator for OpBeaconConsensus { // ensure that the blob gas fields for this block if self.chain_spec.is_cancun_active_at_timestamp(header.timestamp) { - validate_against_parent_4844(header.header(), parent.header())?; + validate_against_parent_4844(header.header(), parent.header(), BlobParams::cancun())?; } Ok(()) diff --git a/crates/optimism/consensus/src/validation.rs b/crates/optimism/consensus/src/validation.rs index d5b88f03d..aa2edd229 100644 --- a/crates/optimism/consensus/src/validation.rs +++ b/crates/optimism/consensus/src/validation.rs @@ -35,9 +35,9 @@ pub fn validate_block_post_execution( // Check if gas used matches the value set in header. let cumulative_gas_used = receipts.last().map(|receipt| receipt.cumulative_gas_used()).unwrap_or(0); - if block.gas_used as u128 != cumulative_gas_used { + if block.gas_used != cumulative_gas_used { return Err(ConsensusError::BlockGasUsed { - gas: GotExpected { got: cumulative_gas_used as u64, expected: block.gas_used }, + gas: GotExpected { got: cumulative_gas_used, expected: block.gas_used }, gas_spent_by_tx: gas_spent_by_transactions(receipts), }) } diff --git a/crates/optimism/evm/src/execute.rs b/crates/optimism/evm/src/execute.rs index 4fbde7b66..402f0ab16 100644 --- a/crates/optimism/evm/src/execute.rs +++ b/crates/optimism/evm/src/execute.rs @@ -233,7 +233,7 @@ where // Success flag was added in `EIP-658: Embedding transaction status code in // receipts`. status: Eip658Value::Eip658(result.is_success()), - cumulative_gas_used: cumulative_gas_used as u128, + cumulative_gas_used, logs: result.into_logs(), }; diff --git a/crates/optimism/evm/src/lib.rs b/crates/optimism/evm/src/lib.rs index 733f78a1d..ec2a56389 100644 --- a/crates/optimism/evm/src/lib.rs +++ b/crates/optimism/evm/src/lib.rs @@ -14,6 +14,7 @@ extern crate alloc; use alloc::{sync::Arc, vec::Vec}; use alloy_consensus::Header; +use alloy_eips::eip7840::BlobParams; use alloy_primitives::{Address, U256}; use op_alloy_consensus::EIP1559ParamError; use reth_evm::{env::EvmEnv, ConfigureEvm, ConfigureEvmEnv, NextBlockEnvAttributes}; @@ -135,9 +136,9 @@ impl ConfigureEvmEnv for OpEvmConfig { // if the parent block did not have excess blob gas (i.e. it was pre-cancun), but it is // cancun now, we need to set the excess blob gas to the default value(0) let blob_excess_gas_and_price = parent - .next_block_excess_blob_gas() + .next_block_excess_blob_gas(BlobParams::cancun()) .or_else(|| (spec_id.is_enabled_in(SpecId::CANCUN)).then_some(0)) - .map(BlobExcessGasAndPrice::new); + .map(|gas| BlobExcessGasAndPrice::new(gas, false)); let block_env = BlockEnv { number: U256::from(parent.number + 1), diff --git a/crates/optimism/node/src/engine.rs b/crates/optimism/node/src/engine.rs index 70802f5ad..cb4c88e9d 100644 --- a/crates/optimism/node/src/engine.rs +++ b/crates/optimism/node/src/engine.rs @@ -242,8 +242,6 @@ mod test { suggested_fee_recipient: Address::ZERO, withdrawals: Some(vec![]), parent_beacon_block_root: Some(B256::ZERO), - target_blobs_per_block: None, - max_blobs_per_block: None, }, } } diff --git a/crates/optimism/node/src/utils.rs b/crates/optimism/node/src/utils.rs index 890c619ab..c7482288f 100644 --- a/crates/optimism/node/src/utils.rs +++ b/crates/optimism/node/src/utils.rs @@ -60,8 +60,6 @@ pub fn optimism_payload_attributes(timestamp: u64) -> OpPayloadBuilderAttributes suggested_fee_recipient: Address::ZERO, withdrawals: Some(vec![]), parent_beacon_block_root: Some(B256::ZERO), - target_blobs_per_block: None, - max_blobs_per_block: None, }; OpPayloadBuilderAttributes { diff --git a/crates/optimism/payload/src/builder.rs b/crates/optimism/payload/src/builder.rs index 3daff091c..2a3f63880 100644 --- a/crates/optimism/payload/src/builder.rs +++ b/crates/optimism/payload/src/builder.rs @@ -421,7 +421,6 @@ where blob_gas_used, excess_blob_gas, requests_hash: None, - target_blobs_per_block: None, }; // seal the block @@ -819,7 +818,7 @@ where let receipt = alloy_consensus::Receipt { status: Eip658Value::Eip658(result.is_success()), - cumulative_gas_used: info.cumulative_gas_used as u128, + cumulative_gas_used: info.cumulative_gas_used, logs: result.into_logs().into_iter().collect(), }; @@ -930,7 +929,7 @@ where let receipt = alloy_consensus::Receipt { status: Eip658Value::Eip658(result.is_success()), - cumulative_gas_used: info.cumulative_gas_used as u128, + cumulative_gas_used: info.cumulative_gas_used, logs: result.into_logs().into_iter().collect(), }; diff --git a/crates/optimism/payload/src/payload.rs b/crates/optimism/payload/src/payload.rs index ebf8fc667..2b7c683df 100644 --- a/crates/optimism/payload/src/payload.rs +++ b/crates/optimism/payload/src/payload.rs @@ -375,8 +375,6 @@ mod tests { suggested_fee_recipient: address!("4200000000000000000000000000000000000011"), withdrawals: Some([].into()), parent_beacon_block_root: b256!("8fe0193b9bf83cb7e5a08538e494fecc23046aab9a497af3704f4afdae3250ff").into(), - target_blobs_per_block: None, - max_blobs_per_block: None, }, transactions: Some([bytes!("7ef8f8a0dc19cfa777d90980e4875d0a548a881baaa3f83f14d1bc0d3038bc329350e54194deaddeaddeaddeaddeaddeaddeaddeaddead00019442000000000000000000000000000000000000158080830f424080b8a4440a5e20000f424000000000000000000000000300000000670d6d890000000000000125000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000014bf9181db6e381d4384bbf69c48b0ee0eed23c6ca26143c6d2544f9d39997a590000000000000000000000007f83d659683caf2767fd3c720981d51f5bc365bc")].into()), no_tx_pool: None, diff --git a/crates/optimism/primitives/src/bedrock.rs b/crates/optimism/primitives/src/bedrock.rs index 3a345abe2..204b34d33 100644 --- a/crates/optimism/primitives/src/bedrock.rs +++ b/crates/optimism/primitives/src/bedrock.rs @@ -85,7 +85,6 @@ pub const BEDROCK_HEADER: Header = Header { excess_blob_gas: None, parent_beacon_block_root: None, requests_hash: None, - target_blobs_per_block: None, }; /// Bedrock total difficulty on Optimism Mainnet. diff --git a/crates/optimism/primitives/src/receipt.rs b/crates/optimism/primitives/src/receipt.rs index 1c9ca4424..2aee2aed2 100644 --- a/crates/optimism/primitives/src/receipt.rs +++ b/crates/optimism/primitives/src/receipt.rs @@ -188,7 +188,7 @@ impl TxReceipt for OpReceipt { self.as_receipt().bloom() } - fn cumulative_gas_used(&self) -> u128 { + fn cumulative_gas_used(&self) -> u64 { self.as_receipt().cumulative_gas_used() } @@ -236,7 +236,7 @@ mod compact { Self { tx_type: receipt.tx_type(), success: receipt.status(), - cumulative_gas_used: receipt.cumulative_gas_used() as u64, + cumulative_gas_used: receipt.cumulative_gas_used(), logs: Cow::Borrowed(&receipt.as_receipt().logs), deposit_nonce: if let OpReceipt::Deposit(receipt) = receipt { receipt.deposit_nonce @@ -263,11 +263,8 @@ mod compact { deposit_receipt_version, } = receipt; - let inner = Receipt { - status: success.into(), - cumulative_gas_used: cumulative_gas_used as u128, - logs: logs.into_owned(), - }; + let inner = + Receipt { status: success.into(), cumulative_gas_used, logs: logs.into_owned() }; match tx_type { OpTxType::Legacy => Self::Legacy(inner), diff --git a/crates/optimism/rpc/src/eth/pending_block.rs b/crates/optimism/rpc/src/eth/pending_block.rs index b8eb76197..3ba5df696 100644 --- a/crates/optimism/rpc/src/eth/pending_block.rs +++ b/crates/optimism/rpc/src/eth/pending_block.rs @@ -130,7 +130,7 @@ where number: block_env.number.to::(), gas_limit: block_env.gas_limit.to::(), difficulty: U256::ZERO, - gas_used: receipts.last().map(|r| r.cumulative_gas_used()).unwrap_or_default() as u64, + gas_used: receipts.last().map(|r| r.cumulative_gas_used()).unwrap_or_default(), blob_gas_used: is_cancun.then(|| { transactions.iter().map(|tx| tx.blob_gas_used().unwrap_or_default()).sum::() }), @@ -138,7 +138,6 @@ where extra_data: Default::default(), parent_beacon_block_root: is_cancun.then_some(B256::ZERO), requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH), - target_blobs_per_block: None, }; // seal the block @@ -156,7 +155,7 @@ where ) -> reth_provider::ProviderReceipt { let receipt = alloy_consensus::Receipt { status: Eip658Value::Eip658(result.is_success()), - cumulative_gas_used: cumulative_gas_used as u128, + cumulative_gas_used, logs: result.into_logs().into_iter().collect(), }; diff --git a/crates/primitives-traits/src/receipt.rs b/crates/primitives-traits/src/receipt.rs index 48ee1f21f..7d4fa8902 100644 --- a/crates/primitives-traits/src/receipt.rs +++ b/crates/primitives-traits/src/receipt.rs @@ -39,6 +39,6 @@ where receipts .into_iter() .enumerate() - .map(|(id, receipt)| (id as u64, receipt.cumulative_gas_used() as u64)) + .map(|(id, receipt)| (id as u64, receipt.cumulative_gas_used())) .collect() } diff --git a/crates/primitives/src/alloy_compat.rs b/crates/primitives/src/alloy_compat.rs index e8f6b53c9..a3338568e 100644 --- a/crates/primitives/src/alloy_compat.rs +++ b/crates/primitives/src/alloy_compat.rs @@ -58,7 +58,6 @@ impl TryFrom for Block { excess_blob_gas, parent_beacon_block_root, requests_hash, - target_blobs_per_block, } = block.header.inner; Ok(Self { @@ -85,7 +84,6 @@ impl TryFrom for Block { excess_blob_gas, parent_beacon_block_root, requests_hash, - target_blobs_per_block, }, body: BlockBody { transactions, @@ -104,6 +102,7 @@ impl TryFrom for TransactionSigned { let WithOtherFields { inner: tx, other: _ } = tx; + #[allow(unreachable_patterns)] let (transaction, signature, hash) = match tx.inner { AnyTxEnvelope::Ethereum(TxEnvelope::Legacy(tx)) => { let (tx, signature, hash) = tx.into_parts(); diff --git a/crates/primitives/src/receipt.rs b/crates/primitives/src/receipt.rs index d4c15fe85..0faf361ac 100644 --- a/crates/primitives/src/receipt.rs +++ b/crates/primitives/src/receipt.rs @@ -250,8 +250,8 @@ impl TxReceipt for Receipt { alloy_primitives::logs_bloom(self.logs.iter()) } - fn cumulative_gas_used(&self) -> u128 { - self.cumulative_gas_used as u128 + fn cumulative_gas_used(&self) -> u64 { + self.cumulative_gas_used } fn logs(&self) -> &[Log] { diff --git a/crates/primitives/src/transaction/mod.rs b/crates/primitives/src/transaction/mod.rs index b41470a3e..ca971550c 100644 --- a/crates/primitives/src/transaction/mod.rs +++ b/crates/primitives/src/transaction/mod.rs @@ -1510,7 +1510,6 @@ impl From for TransactionSigned { TxEnvelope::Eip1559(tx) => tx.into(), TxEnvelope::Eip4844(tx) => tx.into(), TxEnvelope::Eip7702(tx) => tx.into(), - _ => unreachable!(), } } } diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index fef6a9524..85b7ed162 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -279,11 +279,7 @@ where payload, ExecutionPayloadSidecar::v4( CancunPayloadFields { versioned_hashes, parent_beacon_block_root }, - PraguePayloadFields { - requests: RequestsOrHash::Requests(execution_requests), - // TODO: add as an argument and handle in `try_into_block` - target_blobs_per_block: 0, - }, + PraguePayloadFields { requests: RequestsOrHash::Requests(execution_requests) }, ), ) .await diff --git a/crates/rpc/rpc-eth-api/src/ext.rs b/crates/rpc/rpc-eth-api/src/ext.rs index 458998291..dc67e29f0 100644 --- a/crates/rpc/rpc-eth-api/src/ext.rs +++ b/crates/rpc/rpc-eth-api/src/ext.rs @@ -1,7 +1,7 @@ //! `eth_` Extension traits. use alloy_primitives::{Bytes, B256}; -use alloy_rpc_types_eth::erc4337::ConditionalOptions; +use alloy_rpc_types_eth::erc4337::TransactionConditional; use jsonrpsee::{core::RpcResult, proc_macros::rpc}; /// Extension trait for `eth_` namespace for L2s. @@ -13,6 +13,6 @@ pub trait L2EthApiExt { async fn send_raw_transaction_conditional( &self, bytes: Bytes, - condition: ConditionalOptions, + condition: TransactionConditional, ) -> RpcResult; } diff --git a/crates/rpc/rpc-eth-api/src/helpers/fee.rs b/crates/rpc/rpc-eth-api/src/helpers/fee.rs index e0618cb69..194558873 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/fee.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/fee.rs @@ -1,6 +1,7 @@ //! Loads fee history from database. Helper trait for `eth_` fee and transaction RPC methods. use alloy_consensus::BlockHeader; +use alloy_eips::eip7840::BlobParams; use alloy_primitives::U256; use alloy_rpc_types_eth::{BlockNumberOrTag, FeeHistory}; use futures::Future; @@ -166,7 +167,7 @@ pub trait EthFees: LoadFee { for header in &headers { base_fee_per_gas.push(header.base_fee_per_gas().unwrap_or_default() as u128); gas_used_ratio.push(header.gas_used() as f64 / header.gas_limit() as f64); - base_fee_per_blob_gas.push(header.blob_fee().unwrap_or_default()); + base_fee_per_blob_gas.push(header.blob_fee(BlobParams::cancun()).unwrap_or_default()); blob_gas_used_ratio.push( header.blob_gas_used().unwrap_or_default() as f64 / alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK as f64, @@ -207,7 +208,7 @@ pub trait EthFees: LoadFee { // Same goes for the `base_fee_per_blob_gas`: // > "[..] includes the next block after the newest of the returned range, because this value can be derived from the newest block. - base_fee_per_blob_gas.push(last_header.next_block_blob_fee().unwrap_or_default()); + base_fee_per_blob_gas.push(last_header.next_block_blob_fee(BlobParams::cancun()).unwrap_or_default()); }; Ok(FeeHistory { @@ -332,7 +333,7 @@ pub trait LoadFee: LoadBlock { async move { self.block_with_senders(BlockNumberOrTag::Latest.into()) .await? - .and_then(|h| h.next_block_blob_fee()) + .and_then(|h| h.next_block_blob_fee(BlobParams::cancun())) .ok_or(EthApiError::ExcessBlobGasNotSet.into()) .map(U256::from) } diff --git a/crates/rpc/rpc-eth-types/src/error/mod.rs b/crates/rpc/rpc-eth-types/src/error/mod.rs index 7e80b2439..b6c62f137 100644 --- a/crates/rpc/rpc-eth-types/src/error/mod.rs +++ b/crates/rpc/rpc-eth-types/src/error/mod.rs @@ -408,10 +408,8 @@ pub enum RpcInvalidTransactionError { #[error("blob transaction missing blob hashes")] BlobTransactionMissingBlobHashes, /// Blob transaction has too many blobs - #[error("blob transaction exceeds max blobs per block; got {have}, max {max}")] + #[error("blob transaction exceeds max blobs per block; got {have}")] TooManyBlobs { - /// The maximum number of blobs allowed. - max: usize, /// The number of blobs in the transaction. have: usize, }, @@ -522,7 +520,7 @@ impl From for RpcInvalidTransactionError { InvalidTransaction::BlobGasPriceGreaterThanMax => Self::BlobFeeCapTooLow, InvalidTransaction::EmptyBlobs => Self::BlobTransactionMissingBlobHashes, InvalidTransaction::BlobVersionNotSupported => Self::BlobHashVersionMismatch, - InvalidTransaction::TooManyBlobs { max, have } => Self::TooManyBlobs { max, have }, + InvalidTransaction::TooManyBlobs { have } => Self::TooManyBlobs { have }, InvalidTransaction::BlobCreateTransaction => Self::BlobTransactionIsCreate, InvalidTransaction::EofCrateShouldHaveToAddress => Self::EofCrateShouldHaveToAddress, InvalidTransaction::AuthorizationListNotSupported => { diff --git a/crates/rpc/rpc-eth-types/src/fee_history.rs b/crates/rpc/rpc-eth-types/src/fee_history.rs index 4d63482a6..9b0118203 100644 --- a/crates/rpc/rpc-eth-types/src/fee_history.rs +++ b/crates/rpc/rpc-eth-types/src/fee_history.rs @@ -21,7 +21,6 @@ use reth_primitives::{NodePrimitives, SealedBlock}; use reth_primitives_traits::BlockBody; use reth_rpc_server_types::constants::gas_oracle::MAX_HEADER_HISTORY; use reth_storage_api::BlockReaderIdExt; -use revm_primitives::{calc_blob_gasprice, calc_excess_blob_gas}; use serde::{Deserialize, Serialize}; use tracing::trace; @@ -294,7 +293,7 @@ where *previous_gas = receipt.cumulative_gas_used(); Some(TxGasAndReward { - gas_used: gas_used as u64, + gas_used, reward: tx.effective_tip_per_gas(base_fee_per_gas).unwrap_or_default(), }) }) @@ -368,7 +367,9 @@ impl FeeHistoryEntry { Self { base_fee_per_gas: block.base_fee_per_gas().unwrap_or_default(), gas_used_ratio: block.gas_used() as f64 / block.gas_limit() as f64, - base_fee_per_blob_gas: block.excess_blob_gas().map(calc_blob_gasprice), + base_fee_per_blob_gas: block + .excess_blob_gas() + .map(alloy_eips::eip4844::calc_blob_gasprice), blob_gas_used_ratio: block.body.blob_gas_used() as f64 / alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK as f64, excess_blob_gas: block.excess_blob_gas(), @@ -397,13 +398,13 @@ impl FeeHistoryEntry { /// /// See also [`Self::next_block_excess_blob_gas`] pub fn next_block_blob_fee(&self) -> Option { - self.next_block_excess_blob_gas().map(calc_blob_gasprice) + self.next_block_excess_blob_gas().map(alloy_eips::eip4844::calc_blob_gasprice) } /// Calculate excess blob gas for the next block according to the EIP-4844 spec. /// /// Returns a `None` if no excess blob gas is set, no EIP-4844 support pub fn next_block_excess_blob_gas(&self) -> Option { - Some(calc_excess_blob_gas(self.excess_blob_gas?, self.blob_gas_used?)) + Some(alloy_eips::eip4844::calc_excess_blob_gas(self.excess_blob_gas?, self.blob_gas_used?)) } } diff --git a/crates/rpc/rpc-eth-types/src/receipt.rs b/crates/rpc/rpc-eth-types/src/receipt.rs index a23b46750..2ddba6956 100644 --- a/crates/rpc/rpc-eth-types/src/receipt.rs +++ b/crates/rpc/rpc-eth-types/src/receipt.rs @@ -6,7 +6,6 @@ use alloy_primitives::{Address, TxKind}; use alloy_rpc_types_eth::{Log, ReceiptWithBloom, TransactionReceipt}; use reth_primitives::{Receipt, TransactionMeta, TransactionSigned, TxType}; use reth_primitives_traits::SignedTransaction; -use revm_primitives::calc_blob_gasprice; /// Builds an [`TransactionReceipt`] obtaining the inner receipt envelope from the given closure. pub fn build_receipt( @@ -38,7 +37,8 @@ where let blob_gas_used = transaction.blob_gas_used(); // Blob gas price should only be present if the transaction is a blob transaction - let blob_gas_price = blob_gas_used.and_then(|_| meta.excess_blob_gas.map(calc_blob_gasprice)); + let blob_gas_price = blob_gas_used + .and_then(|_| meta.excess_blob_gas.map(alloy_eips::eip4844::calc_blob_gasprice)); let logs_bloom = receipt.bloom(); // get number of logs in the block @@ -87,7 +87,7 @@ where effective_gas_price: transaction.effective_gas_price(meta.base_fee), // EIP-4844 fields blob_gas_price, - blob_gas_used: blob_gas_used.map(u128::from), + blob_gas_used, authorization_list: transaction.authorization_list().map(|l| l.to_vec()), }) } diff --git a/crates/rpc/rpc-types-compat/src/engine/payload.rs b/crates/rpc/rpc-types-compat/src/engine/payload.rs index 99de9c063..0ed30de6a 100644 --- a/crates/rpc/rpc-types-compat/src/engine/payload.rs +++ b/crates/rpc/rpc-types-compat/src/engine/payload.rs @@ -86,7 +86,6 @@ pub fn try_payload_v1_to_block( ommers_hash: EMPTY_OMMER_ROOT_HASH, difficulty: Default::default(), nonce: Default::default(), - target_blobs_per_block: None, }; Ok(Block { header, body: BlockBody { transactions, ..Default::default() } }) @@ -132,14 +131,9 @@ pub fn block_to_payload( None }; - let prague = if let Some(requests_hash) = value.requests_hash { - Some(PraguePayloadFields { - requests: RequestsOrHash::Hash(requests_hash), - target_blobs_per_block: value.target_blobs_per_block.unwrap_or_default(), - }) - } else { - None - }; + let prague = value + .requests_hash + .map(|requests_hash| PraguePayloadFields { requests: RequestsOrHash::Hash(requests_hash) }); let sidecar = match (cancun, prague) { (Some(cancun), Some(prague)) => ExecutionPayloadSidecar::v4(cancun, prague), diff --git a/crates/rpc/rpc/src/eth/bundle.rs b/crates/rpc/rpc/src/eth/bundle.rs index a57053489..3cc1c1391 100644 --- a/crates/rpc/rpc/src/eth/bundle.rs +++ b/crates/rpc/rpc/src/eth/bundle.rs @@ -1,6 +1,7 @@ //! `Eth` bundle implementation and helpers. use alloy_consensus::{BlockHeader, Transaction as _}; +use alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK; use alloy_primitives::{Keccak256, U256}; use alloy_rpc_types_mev::{EthCallBundle, EthCallBundleResponse, EthCallBundleTransactionResult}; use jsonrpsee::core::RpcResult; @@ -22,7 +23,7 @@ use revm::{ db::{CacheDB, DatabaseCommit, DatabaseRef}, primitives::{ResultAndState, TxEnv}, }; -use revm_primitives::{EnvKzgSettings, EnvWithHandlerCfg, SpecId, MAX_BLOB_GAS_PER_BLOCK}; +use revm_primitives::{EnvKzgSettings, EnvWithHandlerCfg, SpecId}; use std::sync::Arc; /// `Eth` bundle implementation. @@ -90,7 +91,7 @@ where // Validate that the bundle does not contain more than MAX_BLOB_NUMBER_PER_BLOCK blob // transactions. if transactions.iter().filter_map(|tx| tx.blob_gas_used()).sum::() > - MAX_BLOB_GAS_PER_BLOCK + MAX_DATA_GAS_PER_BLOCK { return Err(EthApiError::InvalidParams( EthBundleError::Eip4844BlobGasExceeded.to_string(), @@ -317,8 +318,7 @@ pub enum EthBundleError { /// Thrown if the bundle does not contain a block number, or block number is 0. #[error("bundle missing blockNumber")] BundleMissingBlockNumber, - /// Thrown when the blob gas usage of the blob transactions in a bundle exceed - /// [`MAX_BLOB_GAS_PER_BLOCK`]. - #[error("blob gas usage exceeds the limit of {MAX_BLOB_GAS_PER_BLOCK} gas per block.")] + /// Thrown when the blob gas usage of the blob transactions in a bundle exceed the maximum. + #[error("blob gas usage exceeds the limit of {MAX_DATA_GAS_PER_BLOCK} gas per block.")] Eip4844BlobGasExceeded, } diff --git a/crates/rpc/rpc/src/eth/helpers/pending_block.rs b/crates/rpc/rpc/src/eth/helpers/pending_block.rs index 29c327ee3..c7d77d4a9 100644 --- a/crates/rpc/rpc/src/eth/helpers/pending_block.rs +++ b/crates/rpc/rpc/src/eth/helpers/pending_block.rs @@ -97,7 +97,6 @@ where extra_data: Default::default(), parent_beacon_block_root: is_cancun.then_some(B256::ZERO), requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH), - target_blobs_per_block: None, }; // seal the block diff --git a/crates/rpc/rpc/src/eth/helpers/types.rs b/crates/rpc/rpc/src/eth/helpers/types.rs index 28c66967e..91e9f7875 100644 --- a/crates/rpc/rpc/src/eth/helpers/types.rs +++ b/crates/rpc/rpc/src/eth/helpers/types.rs @@ -109,7 +109,6 @@ where TxEip4844Variant::TxEip4844WithSidecar(tx) => &mut tx.tx.input, }, TxEnvelope::Eip7702(tx) => &mut tx.tx_mut().input, - _ => return, }; *input = input.slice(..4); } diff --git a/crates/rpc/rpc/src/otterscan.rs b/crates/rpc/rpc/src/otterscan.rs index 237f83f85..63c37ee3d 100644 --- a/crates/rpc/rpc/src/otterscan.rs +++ b/crates/rpc/rpc/src/otterscan.rs @@ -53,7 +53,9 @@ where // blob fee is burnt, so we don't need to calculate it let total_fees = receipts .iter() - .map(|receipt| receipt.gas_used().saturating_mul(receipt.effective_gas_price())) + .map(|receipt| { + (receipt.gas_used() as u128).saturating_mul(receipt.effective_gas_price()) + }) .sum::(); Ok(BlockDetails::new(block, Default::default(), U256::from(total_fees))) @@ -256,7 +258,7 @@ where .map(|(receipt, tx_ty)| { let inner = OtsReceipt { status: receipt.status(), - cumulative_gas_used: receipt.cumulative_gas_used() as u64, + cumulative_gas_used: receipt.cumulative_gas_used(), logs: None, logs_bloom: None, r#type: tx_ty, diff --git a/crates/rpc/rpc/src/txpool.rs b/crates/rpc/rpc/src/txpool.rs index 4709c9878..540016207 100644 --- a/crates/rpc/rpc/src/txpool.rs +++ b/crates/rpc/rpc/src/txpool.rs @@ -108,7 +108,7 @@ where TxpoolInspectSummary { to: tx.to(), value: tx.value(), - gas: tx.gas_limit() as u128, + gas: tx.gas_limit(), gas_price: tx.max_fee_per_gas(), }, ); diff --git a/crates/rpc/rpc/src/validation.rs b/crates/rpc/rpc/src/validation.rs index 0d2c09927..cb3ab4f29 100644 --- a/crates/rpc/rpc/src/validation.rs +++ b/crates/rpc/rpc/src/validation.rs @@ -380,7 +380,6 @@ where requests: RequestsOrHash::Requests( request.request.execution_requests.to_requests(), ), - target_blobs_per_block: request.request.target_blobs_per_block, }, ), )? diff --git a/crates/storage/codecs/src/alloy/authorization_list.rs b/crates/storage/codecs/src/alloy/authorization_list.rs index 15285f360..8c5ca405a 100644 --- a/crates/storage/codecs/src/alloy/authorization_list.rs +++ b/crates/storage/codecs/src/alloy/authorization_list.rs @@ -19,7 +19,7 @@ use reth_codecs_derive::add_arbitrary_tests; #[cfg_attr(feature = "test-utils", allow(unreachable_pub), visibility::make(pub))] #[add_arbitrary_tests(crate, compact)] pub(crate) struct Authorization { - chain_id: u64, + chain_id: U256, address: Address, nonce: u64, } @@ -80,7 +80,7 @@ mod tests { #[test] fn test_roundtrip_compact_authorization_list_item() { let authorization = AlloyAuthorization { - chain_id: 1u64, + chain_id: U256::from(1), address: address!("dac17f958d2ee523a2206206994597c13d831ec7"), nonce: 1, } diff --git a/crates/storage/codecs/src/alloy/header.rs b/crates/storage/codecs/src/alloy/header.rs index 418b8b903..032bafc3f 100644 --- a/crates/storage/codecs/src/alloy/header.rs +++ b/crates/storage/codecs/src/alloy/header.rs @@ -58,7 +58,6 @@ pub(crate) struct Header { #[reth_codecs(crate = "crate")] pub(crate) struct HeaderExt { requests_hash: Option, - target_blobs_per_block: Option, } impl HeaderExt { @@ -66,7 +65,7 @@ impl HeaderExt { /// /// Required since [`Header`] uses `Option` as a field. const fn into_option(self) -> Option { - if self.requests_hash.is_some() || self.target_blobs_per_block.is_some() { + if self.requests_hash.is_some() { Some(self) } else { None @@ -79,7 +78,7 @@ impl Compact for AlloyHeader { where B: bytes::BufMut + AsMut<[u8]>, { - let extra_fields = HeaderExt { requests_hash: self.requests_hash, target_blobs_per_block: self.target_blobs_per_block }; + let extra_fields = HeaderExt { requests_hash: self.requests_hash }; let header = Header { parent_hash: self.parent_hash, @@ -131,7 +130,6 @@ impl Compact for AlloyHeader { parent_beacon_block_root: header.parent_beacon_block_root, requests_hash: header.extra_fields.as_ref().and_then(|h| h.requests_hash), extra_data: header.extra_data, - target_blobs_per_block: header.extra_fields.as_ref().and_then(|h| h.target_blobs_per_block), }; (alloy_header, buf) } @@ -190,7 +188,7 @@ mod tests { #[test] fn test_extra_fields() { let mut header = HOLESKY_BLOCK; - header.extra_fields = Some(HeaderExt { requests_hash: Some(B256::random()), target_blobs_per_block: Some(3) }); + header.extra_fields = Some(HeaderExt { requests_hash: Some(B256::random())}); let mut encoded_header = vec![]; let len = header.to_compact(&mut encoded_header); diff --git a/crates/transaction-pool/src/maintain.rs b/crates/transaction-pool/src/maintain.rs index 86fce8792..6ccd479c2 100644 --- a/crates/transaction-pool/src/maintain.rs +++ b/crates/transaction-pool/src/maintain.rs @@ -8,7 +8,7 @@ use crate::{ BlockInfo, PoolTransaction, PoolUpdateKind, }; use alloy_consensus::{BlockHeader, Typed2718}; -use alloy_eips::BlockNumberOrTag; +use alloy_eips::{eip7840::BlobParams, BlockNumberOrTag}; use alloy_primitives::{Address, BlockHash, BlockNumber}; use alloy_rlp::Encodable; use futures_util::{ @@ -119,7 +119,7 @@ pub async fn maintain_transaction_pool( chain_spec.base_fee_params_at_timestamp(latest.timestamp() + 12), ) .unwrap_or_default(), - pending_blob_fee: latest.next_block_blob_fee(), + pending_blob_fee: latest.next_block_blob_fee(BlobParams::cancun()), }; pool.set_block_info(info); } @@ -276,7 +276,7 @@ pub async fn maintain_transaction_pool( chain_spec.base_fee_params_at_timestamp(new_tip.timestamp() + 12), ) .unwrap_or_default(); - let pending_block_blob_fee = new_tip.next_block_blob_fee(); + let pending_block_blob_fee = new_tip.next_block_blob_fee(BlobParams::cancun()); // we know all changed account in the new chain let new_changed_accounts: HashSet<_> = @@ -379,7 +379,7 @@ pub async fn maintain_transaction_pool( chain_spec.base_fee_params_at_timestamp(tip.timestamp() + 12), ) .unwrap_or_default(); - let pending_block_blob_fee = tip.next_block_blob_fee(); + let pending_block_blob_fee = tip.next_block_blob_fee(BlobParams::cancun()); let first_block = blocks.first(); trace!( diff --git a/crates/transaction-pool/src/validate/eth.rs b/crates/transaction-pool/src/validate/eth.rs index 19e52bfe3..f6733a5c1 100644 --- a/crates/transaction-pool/src/validate/eth.rs +++ b/crates/transaction-pool/src/validate/eth.rs @@ -858,7 +858,7 @@ pub fn ensure_intrinsic_gas( SpecId::MERGE }; - let gas_after_merge = revm_interpreter::gas::validate_initial_tx_gas( + let gas = revm_interpreter::gas::calculate_initial_tx_gas( spec_id, transaction.input(), transaction.is_create(), @@ -866,7 +866,8 @@ pub fn ensure_intrinsic_gas( transaction.authorization_count() as u64, ); - if transaction.gas_limit() < gas_after_merge { + let gas_limit = transaction.gas_limit(); + if gas_limit < gas.initial_gas || gas_limit < gas.floor_gas { Err(InvalidPoolTransactionError::IntrinsicGasTooLow) } else { Ok(()) diff --git a/testing/ef-tests/src/models.rs b/testing/ef-tests/src/models.rs index 7f6c0cdae..03b0d82e7 100644 --- a/testing/ef-tests/src/models.rs +++ b/testing/ef-tests/src/models.rs @@ -116,7 +116,6 @@ impl From
for SealedHeader { excess_blob_gas: value.excess_blob_gas.map(|v| v.to::()), parent_beacon_block_root: value.parent_beacon_block_root, requests_hash: value.requests_hash, - target_blobs_per_block: value.target_blobs_per_block.map(|v| v.to::()), }; Self::new(header, value.hash) }