feat: update revm 19 alloy 09 (#13594)

This commit is contained in:
Matthias Seitz
2024-12-30 19:49:39 +01:00
committed by GitHub
parent a6325c41e0
commit 0b135a2670
54 changed files with 273 additions and 341 deletions

255
Cargo.lock generated
View File

@ -121,9 +121,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-consensus" name = "alloy-consensus"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" checksum = "db66918860ff33920fb9e6d648d1e8cee275321406ea255ac9320f6562e26fec"
dependencies = [ dependencies = [
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
@ -141,9 +141,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-consensus-any" name = "alloy-consensus-any"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" checksum = "04519b5157de8a2166bddb07d84a63590100f1d3e2b3682144e787f1c27ccdac"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -155,9 +155,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-contract" name = "alloy-contract"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b668c78c4b1f12f474ede5a85e8ce550d0aa1ef7d49fd1d22855a43b960e725" checksum = "8ff00ab4dd371f53e648d65bd5af01057bdad8aaae8b3cd7cee75445575995c1"
dependencies = [ dependencies = [
"alloy-dyn-abi", "alloy-dyn-abi",
"alloy-json-abi", "alloy-json-abi",
@ -206,9 +206,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-eip7702" name = "alloy-eip7702"
version = "0.4.2" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" checksum = "cabf647eb4650c91a9d38cb6f972bb320009e7e9d61765fb688a86f1563b33e8"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rlp", "alloy-rlp",
@ -222,9 +222,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-eips" name = "alloy-eips"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" checksum = "e56518f46b074d562ac345238343e2231b672a13aca18142d285f95cc055980b"
dependencies = [ dependencies = [
"alloy-eip2930", "alloy-eip2930",
"alloy-eip7702", "alloy-eip7702",
@ -243,10 +243,11 @@ dependencies = [
[[package]] [[package]]
name = "alloy-genesis" name = "alloy-genesis"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b2a4cf7b70f3495788e74ce1c765260ffe38820a2a774ff4aacb62e31ea73f9" checksum = "2cf200fd4c28435995e47b26d4761a4cf6e1011a13b81f9a9afaf16a93d9fd09"
dependencies = [ dependencies = [
"alloy-eips",
"alloy-primitives", "alloy-primitives",
"alloy-serde", "alloy-serde",
"alloy-trie", "alloy-trie",
@ -267,9 +268,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-json-rpc" name = "alloy-json-rpc"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" checksum = "b17c5ada5faf0f9d2921e8b20971eced68abbc92a272b0502cac8b1d00f56777"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-sol-types", "alloy-sol-types",
@ -281,9 +282,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-network" name = "alloy-network"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" checksum = "24f3117647e3262f6db9e18b371bf67c5810270c0cf915786c30fad3b1739561"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-consensus-any", "alloy-consensus-any",
@ -306,9 +307,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-network-primitives" name = "alloy-network-primitives"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" checksum = "1535a4577648ec2fd3c446d4644d9b8e9e01e5816be53a5d515dc1624e2227b2"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -319,9 +320,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-node-bindings" name = "alloy-node-bindings"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aef9849fb8bbb28f69f2cbdb4b0dac2f0e35c04f6078a00dfb8486469aed02de" checksum = "bf741e871fb62c80e0007041e8bc1e81978abfd98aafea8354472f06bfd4d309"
dependencies = [ dependencies = [
"alloy-genesis", "alloy-genesis",
"alloy-primitives", "alloy-primitives",
@ -368,9 +369,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-provider" name = "alloy-provider"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc2dfaddd9a30aa870a78a4e1316e3e115ec1e12e552cbc881310456b85c1f24" checksum = "fcfa2db03d4221b5ca14bff7dbed4712689cb87a3e826af522468783ff05ec5d"
dependencies = [ dependencies = [
"alloy-chains", "alloy-chains",
"alloy-consensus", "alloy-consensus",
@ -390,7 +391,7 @@ dependencies = [
"async-stream", "async-stream",
"async-trait", "async-trait",
"auto_impl", "auto_impl",
"dashmap 6.1.0", "dashmap",
"futures", "futures",
"futures-utils-wasm", "futures-utils-wasm",
"lru", "lru",
@ -409,9 +410,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-pubsub" name = "alloy-pubsub"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "695809e743628d54510c294ad17a4645bd9f465aeb0d20ee9ce9877c9712dc9c" checksum = "4eace70e43b073d4bfc1de915c45993a50facd6526fd8da80204e0f83a9e233a"
dependencies = [ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"alloy-primitives", "alloy-primitives",
@ -450,9 +451,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-client" name = "alloy-rpc-client"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "531137b283547d5b9a5cafc96b006c64ef76810c681d606f28be9781955293b6" checksum = "d2ec6963b08f1c6ef8eacc01dbba20f2c6a1533550403f6b52dbbe0da0360834"
dependencies = [ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"alloy-primitives", "alloy-primitives",
@ -475,9 +476,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types" name = "alloy-rpc-types"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3410a472ce26c457e9780f708ee6bd540b30f88f1f31fdab7a11d00bd6aa1aee" checksum = "138ef78340b47f16ca4d04a4d75fe2ccdb3f1a4f748d5f3b2fbebc43581fd02e"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-engine", "alloy-rpc-types-engine",
@ -488,9 +489,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-admin" name = "alloy-rpc-types-admin"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e4da9f5c14c38d84ce83a7c76541d39b7fd15ccd2265690151284544836e8c8" checksum = "7de3dafd26452207c9d5caa19d74295704fda6c2656c74081ce5609eb7975c1b"
dependencies = [ dependencies = [
"alloy-genesis", "alloy-genesis",
"alloy-primitives", "alloy-primitives",
@ -500,9 +501,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-anvil" name = "alloy-rpc-types-anvil"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed06bd8a5fc57b352a6cbac24eec52a4760f08ae2c1eb56ac49c8ed4b02c351" checksum = "efbe94a1fcd071f19b313e4506d1affee0bd0b4a1cfbfd18a2541fda8e5487cf"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-eth", "alloy-rpc-types-eth",
@ -512,9 +513,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-any" name = "alloy-rpc-types-any"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" checksum = "c64a83112b09bd293ef522bfa3800fa2d2df4d72f2bcd3a84b08490503b22e55"
dependencies = [ dependencies = [
"alloy-consensus-any", "alloy-consensus-any",
"alloy-rpc-types-eth", "alloy-rpc-types-eth",
@ -523,9 +524,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-beacon" name = "alloy-rpc-types-beacon"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c966cacae719252501d2c5f6b67beac2fd6c03ec3c5bb64d664e769737ea5651" checksum = "daf233da6e246eb792a9ce0aec3317cf5fa085ef4c800d1733d12a12aabdc2df"
dependencies = [ dependencies = [
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
@ -539,9 +540,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-debug" name = "alloy-rpc-types-debug"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1dec1c1b65614ebd5834a7dfddf525a186962082023718e10f4f64ed2d02514" checksum = "3cb36f68cc0c83120ecfbf0b1862b35f846da8e0cb95be3d10a3a08bfa711248"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"serde", "serde",
@ -549,9 +550,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-engine" name = "alloy-rpc-types-engine"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03bd16fa4959255ebf4a7702df08f325e5631df5cdca07c8a8e58bdc10fe02e3" checksum = "2c9d87e5622ed4d471f1eefb99a400cd7e362a1889baa9bb4417742260ca43a8"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -570,9 +571,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-eth" name = "alloy-rpc-types-eth"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" checksum = "5fc1892a1ac0d2a49c063f0791aa6bde342f020c5d37aaaec14832b661802cb4"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-consensus-any", "alloy-consensus-any",
@ -583,18 +584,18 @@ dependencies = [
"alloy-serde", "alloy-serde",
"alloy-sol-types", "alloy-sol-types",
"arbitrary", "arbitrary",
"derive_more",
"itertools 0.13.0", "itertools 0.13.0",
"jsonrpsee-types", "jsonrpsee-types",
"serde", "serde",
"serde_json", "serde_json",
"thiserror 2.0.9",
] ]
[[package]] [[package]]
name = "alloy-rpc-types-mev" name = "alloy-rpc-types-mev"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d81da8a9b3094af917a109d55617844096d22c8dbf70cde1c5a93a2bbef7c29a" checksum = "04a86c2e9433b6dbc531fd1f09dd07198cd2127f5567528140d70ee8f8091f08"
dependencies = [ dependencies = [
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
@ -606,9 +607,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-trace" name = "alloy-rpc-types-trace"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db14a83665cd28ffd01939f04c2adf0e0fd9bb648b73ca651dcaa0869dae027f" checksum = "b25a5e0a7ae0127f20077b23319c8d4a416187c204bf3329ab28a0309ed45535"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-eth", "alloy-rpc-types-eth",
@ -620,9 +621,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-rpc-types-txpool" name = "alloy-rpc-types-txpool"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a574e97dff62097d22d6cd360f898f3d069239ca0ca7bfc2e5e7b22815ec572" checksum = "64952ac1199868bcd05b3aae2d5e988e6bd171e42ae71580abe6718263061b27"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-eth", "alloy-rpc-types-eth",
@ -632,9 +633,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-serde" name = "alloy-serde"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" checksum = "17939f6bef49268e4494158fce1ab8913cd6164ec3f9a4ada2c677b9b5a77f2f"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"arbitrary", "arbitrary",
@ -644,9 +645,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-signer" name = "alloy-signer"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" checksum = "77d1f0762a44338f0e05987103bd5919df52170d949080bfebfeb6aaaa867c39"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"async-trait", "async-trait",
@ -658,9 +659,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-signer-local" name = "alloy-signer-local"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" checksum = "59dd2f16055f532f83a8f8e3c13cf1e3b5ff78afdef82edb613946156e542272"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-network", "alloy-network",
@ -746,9 +747,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-transport" name = "alloy-transport"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "538a04a37221469cac0ce231b737fd174de2fdfcdd843bdd068cb39ed3e066ad" checksum = "3a3827275a4eed3431ce876a59c76fd19effc2a8c09566b2603e3a3376d38af0"
dependencies = [ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"base64 0.22.1", "base64 0.22.1",
@ -766,9 +767,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-transport-http" name = "alloy-transport-http"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ed40eb1e1265b2911512f6aa1dcece9702d078f5a646730c45e39e2be00ac1c" checksum = "958417ddf333c55b0627cb7fbee7c6666895061dee79f50404dd6dbdd8e9eba0"
dependencies = [ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"alloy-transport", "alloy-transport",
@ -781,9 +782,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-transport-ipc" name = "alloy-transport-ipc"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a172a59d24706b26a79a837f86d51745cb26ca6f8524712acd0208a14cff95" checksum = "168abcf4337c3fbc0bf9030e62bbaca8b9a0fddf687ecc6585e2e6515dde8b0d"
dependencies = [ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"alloy-pubsub", "alloy-pubsub",
@ -800,9 +801,9 @@ dependencies = [
[[package]] [[package]]
name = "alloy-transport-ws" name = "alloy-transport-ws"
version = "0.8.3" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fba0e39d181d13c266dbb8ca54ed584a2c66d6e9279afca89c7a6b1825e98abb" checksum = "fcaf327f8d3e938272c2eace672094d3800e069e3f34137358e563faaa314f8a"
dependencies = [ dependencies = [
"alloy-pubsub", "alloy-pubsub",
"alloy-transport", "alloy-transport",
@ -1400,13 +1401,14 @@ dependencies = [
[[package]] [[package]]
name = "boa_ast" name = "boa_ast"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a69ee3a749ea36d4e56d92941e7b25076b493d4917c3d155b6cf369e23547d9" checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"boa_interner", "boa_interner",
"boa_macros", "boa_macros",
"boa_string",
"indexmap 2.7.0", "indexmap 2.7.0",
"num-bigint", "num-bigint",
"rustc-hash 2.1.0", "rustc-hash 2.1.0",
@ -1414,9 +1416,9 @@ dependencies = [
[[package]] [[package]]
name = "boa_engine" name = "boa_engine"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06e4559b35b80ceb2e6328481c0eca9a24506663ea33ee1e279be6b5b618b25c" checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9"
dependencies = [ dependencies = [
"arrayvec", "arrayvec",
"bitflags 2.6.0", "bitflags 2.6.0",
@ -1429,9 +1431,9 @@ dependencies = [
"boa_string", "boa_string",
"bytemuck", "bytemuck",
"cfg-if", "cfg-if",
"dashmap 5.5.3", "dashmap",
"fast-float", "fast-float2",
"hashbrown 0.14.5", "hashbrown 0.15.2",
"icu_normalizer", "icu_normalizer",
"indexmap 2.7.0", "indexmap 2.7.0",
"intrusive-collections", "intrusive-collections",
@ -1453,32 +1455,32 @@ dependencies = [
"static_assertions", "static_assertions",
"tap", "tap",
"thin-vec", "thin-vec",
"thiserror 1.0.69", "thiserror 2.0.9",
"time", "time",
] ]
[[package]] [[package]]
name = "boa_gc" name = "boa_gc"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "716406f57d67bc3ac7fd227d5513b42df401dff14a3be22cbd8ee29817225363" checksum = "2425c0b7720d42d73eaa6a883fbb77a5c920da8694964a3d79a67597ac55cce2"
dependencies = [ dependencies = [
"boa_macros", "boa_macros",
"boa_profiler", "boa_profiler",
"boa_string", "boa_string",
"hashbrown 0.14.5", "hashbrown 0.15.2",
"thin-vec", "thin-vec",
] ]
[[package]] [[package]]
name = "boa_interner" name = "boa_interner"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e18df2272616e1ba0322a69333d37dbb78797f1aa0595aad9dc41e8ecd06ad9" checksum = "42407a3b724cfaecde8f7d4af566df4b56af32a2f11f0956f5570bb974e7f749"
dependencies = [ dependencies = [
"boa_gc", "boa_gc",
"boa_macros", "boa_macros",
"hashbrown 0.14.5", "hashbrown 0.15.2",
"indexmap 2.7.0", "indexmap 2.7.0",
"once_cell", "once_cell",
"phf", "phf",
@ -1488,9 +1490,9 @@ dependencies = [
[[package]] [[package]]
name = "boa_macros" name = "boa_macros"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240f4126219a83519bad05c9a40bfc0303921eeb571fc2d7e44c17ffac99d3f1" checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1500,16 +1502,16 @@ dependencies = [
[[package]] [[package]]
name = "boa_parser" name = "boa_parser"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b59dc05bf1dc019b11478a92986f590cff43fced4d20e866eefb913493e91c" checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"boa_ast", "boa_ast",
"boa_interner", "boa_interner",
"boa_macros", "boa_macros",
"boa_profiler", "boa_profiler",
"fast-float", "fast-float2",
"icu_properties", "icu_properties",
"num-bigint", "num-bigint",
"num-traits", "num-traits",
@ -1519,17 +1521,17 @@ dependencies = [
[[package]] [[package]]
name = "boa_profiler" name = "boa_profiler"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00ee0645509b3b91abd724f25072649d9e8e65653a78ff0b6e592788a58dd838" checksum = "4064908e7cdf9b6317179e9b04dcb27f1510c1c144aeab4d0394014f37a0f922"
[[package]] [[package]]
name = "boa_string" name = "boa_string"
version = "0.19.1" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae85205289bab1f2c7c8a30ddf0541cf89ba2ff7dbd144feef50bbfa664288d4" checksum = "7debc13fbf7997bf38bf8e9b20f1ad5e2a7d27a900e1f6039fe244ce30f589b5"
dependencies = [ dependencies = [
"fast-float", "fast-float2",
"paste", "paste",
"rustc-hash 2.1.0", "rustc-hash 2.1.0",
"sptr", "sptr",
@ -2339,19 +2341,6 @@ dependencies = [
"syn 2.0.93", "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]] [[package]]
name = "dashmap" name = "dashmap"
version = "6.1.0" version = "6.1.0"
@ -3180,10 +3169,10 @@ dependencies = [
] ]
[[package]] [[package]]
name = "fast-float" name = "fast-float2"
version = "0.2.0" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55"
[[package]] [[package]]
name = "fastrand" name = "fastrand"
@ -5386,9 +5375,9 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
[[package]] [[package]]
name = "op-alloy-consensus" name = "op-alloy-consensus"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c698f80ee53e56d1b60a97e9d90ad09788b516c964c9c97fb5927860b812ef0d" checksum = "0adb232ec805af3aa35606c19329aa7dc44c4457ae318ed0b8fc7f799dd7dbfe"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -5404,9 +5393,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-genesis" name = "op-alloy-genesis"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a023058a145333ed1760fd34d7f7605d5dd0211381690a29a66658127c8f307b" checksum = "84c272cfd65317538f5815c2b7059445230b050d48ebe2d0bab3e861d419a785"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -5419,9 +5408,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-network" name = "op-alloy-network"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5771424687f73e70f8dbc7d1f4b404cc2fdac9b4cd14745d7f7065c3422e947" checksum = "19872a58b7acceeffb8e88ea048bee1690e7cde53068bd652976435d61fcd1de"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-network", "alloy-network",
@ -5434,9 +5423,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-protocol" name = "op-alloy-protocol"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "caf7cfd504c4cb5b34fe15a59ea68cbb87c3c9cbea4214d31455464505ee6434" checksum = "ad65d040648e0963ed378e88489f5805e24fb56b7e6611362299cd4c24debeb2"
dependencies = [ dependencies = [
"alloc-no-stdlib", "alloc-no-stdlib",
"alloy-consensus", "alloy-consensus",
@ -5458,9 +5447,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-jsonrpsee" name = "op-alloy-rpc-jsonrpsee"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a942124522a7f43d66fc0c332c77edb260c061560f02f8b45a8cc66c740164" checksum = "36b1f2547067c5b60f3144ae1033a54ce1d11341d8327fa8f203b048d51465e9"
dependencies = [ dependencies = [
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
@ -5471,9 +5460,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-types" name = "op-alloy-rpc-types"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5aef2128fe8979596b3a1f79a2454f3e32fd239889a03d50fe686b9a2f30a16" checksum = "e68d1a51fe3ee143f102b82f54fa237f21d12635da363276901e6d3ef6c65b7b"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -5490,9 +5479,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-types-engine" name = "op-alloy-rpc-types-engine"
version = "0.8.5" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b333b8894735ad2e5e2e3afb828a52811e75504735e19a5f9274483826d7fa99" checksum = "9f8833ef149ceb74f8f25a79801d110d88ec2db32e700fa10db6c5f5b5cbb71a"
dependencies = [ dependencies = [
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
@ -5819,9 +5808,9 @@ dependencies = [
[[package]] [[package]]
name = "pollster" name = "pollster"
version = "0.3.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
[[package]] [[package]]
name = "polyval" name = "polyval"
@ -6932,7 +6921,6 @@ dependencies = [
"reth-primitives", "reth-primitives",
"reth-primitives-traits", "reth-primitives-traits",
"reth-storage-api", "reth-storage-api",
"revm-primitives",
] ]
[[package]] [[package]]
@ -7882,7 +7870,7 @@ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"byteorder", "byteorder",
"codspeed-criterion-compat", "codspeed-criterion-compat",
"dashmap 6.1.0", "dashmap",
"derive_more", "derive_more",
"indexmap 2.7.0", "indexmap 2.7.0",
"parking_lot", "parking_lot",
@ -8805,7 +8793,7 @@ dependencies = [
"alloy-rpc-types-engine", "alloy-rpc-types-engine",
"assert_matches", "assert_matches",
"auto_impl", "auto_impl",
"dashmap 6.1.0", "dashmap",
"eyre", "eyre",
"itertools 0.13.0", "itertools 0.13.0",
"metrics", "metrics",
@ -9668,13 +9656,14 @@ dependencies = [
[[package]] [[package]]
name = "revm" name = "revm"
version = "18.0.0" version = "19.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15689a3c6a8d14b647b4666f2e236ef47b5a5133cdfd423f545947986fff7013" checksum = "e8905d0c5f10e767f13ea7cb8e502d315f144071a60fe2bd83977922dd3afa26"
dependencies = [ dependencies = [
"auto_impl", "auto_impl",
"cfg-if", "cfg-if",
"dyn-clone", "dyn-clone",
"once_cell",
"revm-interpreter", "revm-interpreter",
"revm-precompile", "revm-precompile",
"serde", "serde",
@ -9683,9 +9672,9 @@ dependencies = [
[[package]] [[package]]
name = "revm-inspectors" name = "revm-inspectors"
version = "0.13.0" version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d056aaa21f36038ab35fe8ce940ee332903a0b4b992b8ca805fb60c85eb2086" checksum = "dc873bc873e12a1723493e1a35804fa79b673a0bfb1c19cfee659d46def8be42"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-eth", "alloy-rpc-types-eth",
@ -9702,9 +9691,9 @@ dependencies = [
[[package]] [[package]]
name = "revm-interpreter" name = "revm-interpreter"
version = "14.0.0" version = "15.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74e3f11d0fed049a4a10f79820c59113a79b38aed4ebec786a79d5c667bfeb51" checksum = "e5ff76b50b5a9fa861fbc236fc82ce1afdf58861f65012aea807d679e54630d6"
dependencies = [ dependencies = [
"revm-primitives", "revm-primitives",
"serde", "serde",
@ -9712,9 +9701,9 @@ dependencies = [
[[package]] [[package]]
name = "revm-precompile" name = "revm-precompile"
version = "15.0.0" version = "16.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e381060af24b750069a2b2d2c54bba273d84e8f5f9e8026fc9262298e26cc336" checksum = "6542fb37650dfdbf4b9186769e49c4a8bc1901a3280b2ebf32f915b6c8850f36"
dependencies = [ dependencies = [
"aurora-engine-modexp", "aurora-engine-modexp",
"blst", "blst",
@ -9732,9 +9721,9 @@ dependencies = [
[[package]] [[package]]
name = "revm-primitives" name = "revm-primitives"
version = "14.0.0" version = "15.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3702f132bb484f4f0d0ca4f6fbde3c82cfd745041abbedd6eda67730e1868ef0" checksum = "48faea1ecf2c9f80d9b043bbde0db9da616431faed84c4cfa3dd7393005598e6"
dependencies = [ dependencies = [
"alloy-eip2930", "alloy-eip2930",
"alloy-eip7702", "alloy-eip7702",

View File

@ -426,10 +426,10 @@ reth-trie-sparse = { path = "crates/trie/sparse" }
reth-zstd-compressors = { path = "crates/storage/zstd-compressors", default-features = false } reth-zstd-compressors = { path = "crates/storage/zstd-compressors", default-features = false }
# revm # revm
revm = { version = "18.0.0", default-features = false } revm = { version = "19.0.0", default-features = false }
revm-inspectors = "0.13.0" revm-primitives = { version = "15.1.0", default-features = false }
revm-primitives = { version = "14.0.0", default-features = false } revm-interpreter = { version = "15.0.0", default-features = false }
revm-interpreter = { version = "14.0.0", default-features = false } revm-inspectors = "0.14.1"
# eth # eth
alloy-chains = { version = "0.1.32", default-features = false } 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-sol-types = "0.8.15"
alloy-trie = { version = "0.7", default-features = false } alloy-trie = { version = "0.7", default-features = false }
alloy-consensus = { version = "0.8.3", default-features = false } alloy-consensus = { version = "0.9.0", default-features = false }
alloy-contract = { version = "0.8.3", default-features = false } alloy-contract = { version = "0.9.0", default-features = false }
alloy-eips = { version = "0.8.3", default-features = false } alloy-eips = { version = "0.9.0", default-features = false }
alloy-genesis = { version = "0.8.3", default-features = false } alloy-genesis = { version = "0.9.0", default-features = false }
alloy-json-rpc = { version = "0.8.3", default-features = false } alloy-json-rpc = { version = "0.9.0", default-features = false }
alloy-network = { version = "0.8.3", default-features = false } alloy-network = { version = "0.9.0", default-features = false }
alloy-network-primitives = { version = "0.8.3", default-features = false } alloy-network-primitives = { version = "0.9.0", default-features = false }
alloy-node-bindings = { version = "0.8.3", default-features = false } alloy-node-bindings = { version = "0.9.0", default-features = false }
alloy-provider = { version = "0.8.3", features = [ alloy-provider = { version = "0.9.0", features = [
"reqwest", "reqwest",
], default-features = false } ], default-features = false }
alloy-pubsub = { version = "0.8.3", default-features = false } alloy-pubsub = { version = "0.9.0", default-features = false }
alloy-rpc-client = { version = "0.8.3", default-features = false } alloy-rpc-client = { version = "0.9.0", default-features = false }
alloy-rpc-types = { version = "0.8.3", features = [ alloy-rpc-types = { version = "0.9.0", features = [
"eth", "eth",
], default-features = false } ], default-features = false }
alloy-rpc-types-admin = { version = "0.8.3", default-features = false } alloy-rpc-types-admin = { version = "0.9.0", default-features = false }
alloy-rpc-types-anvil = { version = "0.8.3", default-features = false } alloy-rpc-types-anvil = { version = "0.9.0", default-features = false }
alloy-rpc-types-beacon = { version = "0.8.3", default-features = false } alloy-rpc-types-beacon = { version = "0.9.0", default-features = false }
alloy-rpc-types-debug = { version = "0.8.3", default-features = false } alloy-rpc-types-debug = { version = "0.9.0", default-features = false }
alloy-rpc-types-engine = { version = "0.8.3", default-features = false } alloy-rpc-types-engine = { version = "0.9.0", default-features = false }
alloy-rpc-types-eth = { version = "0.8.3", default-features = false } alloy-rpc-types-eth = { version = "0.9.0", default-features = false }
alloy-rpc-types-mev = { version = "0.8.3", default-features = false } alloy-rpc-types-mev = { version = "0.9.0", default-features = false }
alloy-rpc-types-trace = { version = "0.8.3", default-features = false } alloy-rpc-types-trace = { version = "0.9.0", default-features = false }
alloy-rpc-types-txpool = { version = "0.8.3", default-features = false } alloy-rpc-types-txpool = { version = "0.9.0", default-features = false }
alloy-serde = { version = "0.8.3", default-features = false } alloy-serde = { version = "0.9.0", default-features = false }
alloy-signer = { version = "0.8.3", default-features = false } alloy-signer = { version = "0.9.0", default-features = false }
alloy-signer-local = { version = "0.8.3", default-features = false } alloy-signer-local = { version = "0.9.0", default-features = false }
alloy-transport = { version = "0.8.3" } alloy-transport = { version = "0.9.0" }
alloy-transport-http = { version = "0.8.3", features = [ alloy-transport-http = { version = "0.9.0", features = [
"reqwest-rustls-tls", "reqwest-rustls-tls",
], default-features = false } ], default-features = false }
alloy-transport-ipc = { version = "0.8.3", default-features = false } alloy-transport-ipc = { version = "0.9.0", default-features = false }
alloy-transport-ws = { version = "0.8.3", default-features = false } alloy-transport-ws = { version = "0.9.0", default-features = false }
# op # op
op-alloy-rpc-types = { 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.8.4", default-features = false } op-alloy-rpc-types-engine = { version = "0.9.0", default-features = false }
op-alloy-rpc-jsonrpsee = { version = "0.8.4", default-features = false } op-alloy-rpc-jsonrpsee = { version = "0.9.0", default-features = false }
op-alloy-network = { version = "0.8.4", default-features = false } op-alloy-network = { version = "0.9.0", default-features = false }
op-alloy-consensus = { version = "0.8.4", default-features = false } op-alloy-consensus = { version = "0.9.0", default-features = false }
# misc # misc
aquamarine = "0.6" aquamarine = "0.6"

View File

@ -221,8 +221,6 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
suggested_fee_recipient: self.suggested_fee_recipient, suggested_fee_recipient: self.suggested_fee_recipient,
// TODO: add support for withdrawals // TODO: add support for withdrawals
withdrawals: None, withdrawals: None,
target_blobs_per_block: None,
max_blobs_per_block: None,
}; };
let payload_config = PayloadConfig::new( let payload_config = PayloadConfig::new(
Arc::new(SealedHeader::new(best_block.header().clone(), best_block.hash())), Arc::new(SealedHeader::new(best_block.header().clone(), best_block.hash())),

View File

@ -277,7 +277,7 @@ impl ChainSpec {
if self.is_cancun_active_at_timestamp(self.genesis.timestamp) { if self.is_cancun_active_at_timestamp(self.genesis.timestamp) {
let blob_gas_used = self.genesis.blob_gas_used.unwrap_or(0); let blob_gas_used = self.genesis.blob_gas_used.unwrap_or(0);
let excess_blob_gas = self.genesis.excess_blob_gas.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 { } else {
(None, None, None) (None, None, None)
}; };

View File

@ -18,7 +18,6 @@ reth-primitives.workspace = true
# ethereum # ethereum
alloy-primitives.workspace = true alloy-primitives.workspace = true
revm-primitives.workspace = true
reth-primitives-traits.workspace = true reth-primitives-traits.workspace = true
alloy-consensus.workspace = true alloy-consensus.workspace = true
alloy-eips.workspace = true alloy-eips.workspace = true

View File

@ -1,15 +1,11 @@
//! Collection of methods for block validation. //! Collection of methods for block validation.
use alloy_consensus::{constants::MAXIMUM_EXTRA_DATA_SIZE, BlockHeader, EMPTY_OMMER_ROOT_HASH}; use alloy_consensus::{constants::MAXIMUM_EXTRA_DATA_SIZE, BlockHeader, EMPTY_OMMER_ROOT_HASH};
use alloy_eips::{ use alloy_eips::{calc_next_block_base_fee, eip4844::DATA_GAS_PER_BLOB, eip7840::BlobParams};
calc_next_block_base_fee,
eip4844::{DATA_GAS_PER_BLOB, MAX_DATA_GAS_PER_BLOCK},
};
use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks}; use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks};
use reth_consensus::ConsensusError; use reth_consensus::ConsensusError;
use reth_primitives::SealedBlock; use reth_primitives::SealedBlock;
use reth_primitives_traits::{BlockBody, GotExpected, SealedHeader}; 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. /// Gas used needs to be less than gas limit. Gas used is going to be checked after execution.
#[inline] #[inline]
@ -176,9 +172,10 @@ where
/// * `blob_gas_used` exists as a header field /// * `blob_gas_used` exists as a header field
/// * `excess_blob_gas` exists as a header field /// * `excess_blob_gas` exists as a header field
/// * `parent_beacon_block_root` 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` /// * `blob_gas_used` is a multiple of `DATA_GAS_PER_BLOB`
/// * `excess_blob_gas` 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<H: BlockHeader>(header: &H) -> Result<(), ConsensusError> { pub fn validate_4844_header_standalone<H: BlockHeader>(header: &H) -> Result<(), ConsensusError> {
let blob_gas_used = header.blob_gas_used().ok_or(ConsensusError::BlobGasUsedMissing)?; let blob_gas_used = header.blob_gas_used().ok_or(ConsensusError::BlobGasUsedMissing)?;
let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?; let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?;
@ -187,13 +184,6 @@ pub fn validate_4844_header_standalone<H: BlockHeader>(header: &H) -> Result<(),
return Err(ConsensusError::ParentBeaconBlockRootMissing) 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 { if blob_gas_used % DATA_GAS_PER_BLOB != 0 {
return Err(ConsensusError::BlobGasUsedNotMultipleOfBlobGasPerBlob { return Err(ConsensusError::BlobGasUsedNotMultipleOfBlobGasPerBlob {
blob_gas_used, blob_gas_used,
@ -313,6 +303,7 @@ pub fn validate_against_parent_timestamp<H: BlockHeader>(
pub fn validate_against_parent_4844<H: BlockHeader>( pub fn validate_against_parent_4844<H: BlockHeader>(
header: &H, header: &H,
parent: &H, parent: &H,
blob_params: BlobParams,
) -> Result<(), ConsensusError> { ) -> Result<(), ConsensusError> {
// From [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#header-extension): // From [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#header-extension):
// //
@ -329,7 +320,7 @@ pub fn validate_against_parent_4844<H: BlockHeader>(
let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?; let excess_blob_gas = header.excess_blob_gas().ok_or(ConsensusError::ExcessBlobGasMissing)?;
let expected_excess_blob_gas = 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 { if expected_excess_blob_gas != excess_blob_gas {
return Err(ConsensusError::ExcessBlobGasDiff { return Err(ConsensusError::ExcessBlobGasDiff {
diff: GotExpected { got: excess_blob_gas, expected: expected_excess_blob_gas }, diff: GotExpected { got: excess_blob_gas, expected: expected_excess_blob_gas },
@ -509,7 +500,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
// size: 0x9b5 // size: 0x9b5

View File

@ -56,7 +56,8 @@ impl TransactionTestContext {
delegate_to: Address, delegate_to: Address,
wallet: PrivateKeySigner, wallet: PrivateKeySigner,
) -> TxEnvelope { ) -> 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 let signature = wallet
.sign_hash_sync(&authorization.signature_hash()) .sign_hash_sync(&authorization.signature_hash())
.expect("could not sign authorization"); .expect("could not sign authorization");

View File

@ -39,8 +39,6 @@ where
.chain_spec .chain_spec
.is_cancun_active_at_timestamp(timestamp) .is_cancun_active_at_timestamp(timestamp)
.then(B256::random), .then(B256::random),
target_blobs_per_block: None,
max_blobs_per_block: None,
} }
} }
} }

View File

@ -1,6 +1,7 @@
//! Stream wrapper that simulates reorgs. //! Stream wrapper that simulates reorgs.
use alloy_consensus::{Header, Transaction}; use alloy_consensus::{Header, Transaction};
use alloy_eips::eip7840::BlobParams;
use alloy_rpc_types_engine::{ use alloy_rpc_types_engine::{
CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus, CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus,
}; };
@ -28,7 +29,7 @@ use reth_revm::{
DatabaseCommit, DatabaseCommit,
}; };
use reth_rpc_types_compat::engine::payload::block_to_payload; 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::{ use std::{
collections::VecDeque, collections::VecDeque,
future::Future, future::Future,
@ -391,10 +392,7 @@ where
if chain_spec.is_cancun_active_at_timestamp(reorg_target.timestamp) { if chain_spec.is_cancun_active_at_timestamp(reorg_target.timestamp) {
( (
Some(sum_blob_gas_used), Some(sum_blob_gas_used),
Some(calc_excess_blob_gas( reorg_target_parent.next_block_excess_blob_gas(BlobParams::cancun()),
reorg_target_parent.excess_blob_gas.unwrap_or_default(),
reorg_target_parent.blob_gas_used.unwrap_or_default(),
)),
) )
} else { } else {
(None, None) (None, None)
@ -425,8 +423,7 @@ where
blob_gas_used, blob_gas_used,
excess_blob_gas, excess_blob_gas,
state_root: state_provider.state_root(hashed_state)?, state_root: state_provider.state_root(hashed_state)?,
requests_hash: None, // TODO(prague) requests_hash: None, // TODO(prague)
target_blobs_per_block: None, // TODO(prague)
}, },
body: BlockBody { body: BlockBody {
transactions, transactions,

View File

@ -9,7 +9,7 @@
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
use alloy_consensus::{BlockHeader, EMPTY_OMMER_ROOT_HASH}; 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 alloy_primitives::U256;
use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks}; use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks};
use reth_consensus::{ use reth_consensus::{
@ -195,7 +195,13 @@ where
// ensure that the blob gas fields for this block // ensure that the blob gas fields for this block
if self.chain_spec.is_cancun_active_at_timestamp(header.timestamp()) { 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(()) Ok(())

View File

@ -323,8 +323,6 @@ mod tests {
.unwrap(), .unwrap(),
withdrawals: None, withdrawals: None,
parent_beacon_block_root: 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 // Verify that the generated payload ID matches the expected value
@ -362,8 +360,6 @@ mod tests {
}, },
]), ]),
parent_beacon_block_root: 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 // Verify that the generated payload ID matches the expected value
@ -396,8 +392,6 @@ mod tests {
) )
.unwrap(), .unwrap(),
), ),
target_blobs_per_block: None,
max_blobs_per_block: None,
}; };
// Verify that the generated payload ID matches the expected value // Verify that the generated payload ID matches the expected value

View File

@ -810,6 +810,7 @@ mod tests {
.is_zero())); .is_zero()));
} }
// <https://github.com/ethereum/EIPs/pull/9144>
#[test] #[test]
fn eip_2935_fork_activation_outside_window_bounds() { fn eip_2935_fork_activation_outside_window_bounds() {
let fork_activation_block = (BLOCKHASH_SERVE_WINDOW + 256) as u64; 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 // the hash for the ancestor of the fork activation block should be present
assert!(executor assert!(executor
.with_state_mut(|state| state.basic(HISTORY_STORAGE_ADDRESS).unwrap().is_some())); .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] #[test]

View File

@ -31,7 +31,7 @@ use revm_primitives::{
}; };
mod config; 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}; pub use config::{revm_spec, revm_spec_by_timestamp_and_block_number};
use reth_ethereum_forks::EthereumHardfork; use reth_ethereum_forks::EthereumHardfork;
@ -134,12 +134,15 @@ impl ConfigureEvmEnv for EthEvmConfig {
parent.number() + 1, 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 // 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) // cancun now, we need to set the excess blob gas to the default value(0)
let blob_excess_gas_and_price = parent 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)) .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( let mut basefee = parent.next_block_base_fee(
self.chain_spec.base_fee_params_at_timestamp(attributes.timestamp), self.chain_spec.base_fee_params_at_timestamp(attributes.timestamp),

View File

@ -1,5 +1,5 @@
use crate::utils::eth_payload_attributes; 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_primitives::{Address, B256, U256};
use alloy_provider::{network::EthereumWallet, Provider, ProviderBuilder, SendableTx}; use alloy_provider::{network::EthereumWallet, Provider, ProviderBuilder, SendableTx};
use alloy_rpc_types_beacon::relay::{ use alloy_rpc_types_beacon::relay::{
@ -69,7 +69,7 @@ async fn test_fee_history() -> eyre::Result<()> {
assert!(receipt.status()); assert!(receipt.status());
let block = provider.get_block_by_number(1.into(), false.into()).await?.unwrap(); 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); assert_eq!(block.header.base_fee_per_gas.unwrap(), expected_first_base_fee as u64);
for _ in 0..100 { 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()), execution_payload: block_to_payload_v3(payload.block().clone()),
blobs_bundle: BlobsBundleV1::new([]), blobs_bundle: BlobsBundleV1::new([]),
execution_requests: payload.requests().unwrap().try_into().unwrap(), execution_requests: payload.requests().unwrap().try_into().unwrap(),
target_blobs_per_block: eip4844::TARGET_BLOBS_PER_BLOCK,
signature: Default::default(), signature: Default::default(),
}, },
parent_beacon_block_root: attrs.parent_beacon_block_root.unwrap(), parent_beacon_block_root: attrs.parent_beacon_block_root.unwrap(),

View File

@ -1,5 +1,5 @@
use alloy_eips::{BlockId, BlockNumberOrTag}; use alloy_eips::{BlockId, BlockNumberOrTag};
use alloy_primitives::{bytes, Address, B256}; use alloy_primitives::{bytes, Address, B256, U256};
use alloy_provider::{ use alloy_provider::{
network::{ network::{
Ethereum, EthereumWallet, NetworkWallet, TransactionBuilder, TransactionBuilder7702, Ethereum, EthereumWallet, NetworkWallet, TransactionBuilder, TransactionBuilder7702,
@ -26,8 +26,6 @@ pub(crate) fn eth_payload_attributes(timestamp: u64) -> EthPayloadBuilderAttribu
suggested_fee_recipient: Address::ZERO, suggested_fee_recipient: Address::ZERO,
withdrawals: Some(vec![]), withdrawals: Some(vec![]),
parent_beacon_block_root: Some(B256::ZERO), parent_beacon_block_root: Some(B256::ZERO),
target_blobs_per_block: None,
max_blobs_per_block: None,
}; };
EthPayloadBuilderAttributes::new(B256::ZERO, attributes) EthPayloadBuilderAttributes::new(B256::ZERO, attributes)
} }
@ -92,7 +90,7 @@ where
if tx_type == TxType::Eip7702 { if tx_type == TxType::Eip7702 {
let signer = signers.choose(rng).unwrap(); let signer = signers.choose(rng).unwrap();
let auth = Authorization { 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(), address: *call_destinations.choose(rng).unwrap(),
nonce: provider nonce: provider
.get_transaction_count(signer.address()) .get_transaction_count(signer.address())

View File

@ -11,7 +11,8 @@
use alloy_consensus::{Header, EMPTY_OMMER_ROOT_HASH}; use alloy_consensus::{Header, EMPTY_OMMER_ROOT_HASH};
use alloy_eips::{ 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 alloy_primitives::U256;
use reth_basic_payload_builder::{ use reth_basic_payload_builder::{
@ -40,8 +41,8 @@ use reth_transaction_pool::{
use revm::{ use revm::{
db::{states::bundle_state::BundleRetention, State}, db::{states::bundle_state::BundleRetention, State},
primitives::{ primitives::{
calc_excess_blob_gas, BlockEnv, CfgEnvWithHandlerCfg, EVMError, EnvWithHandlerCfg, BlockEnv, CfgEnvWithHandlerCfg, EVMError, EnvWithHandlerCfg, InvalidTransaction,
InvalidTransaction, ResultAndState, TxEnv, ResultAndState, TxEnv,
}, },
DatabaseCommit, DatabaseCommit,
}; };
@ -438,13 +439,17 @@ where
.map_err(PayloadBuilderError::other)?; .map_err(PayloadBuilderError::other)?;
excess_blob_gas = if chain_spec.is_cancun_active_at_timestamp(parent_header.timestamp) { 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 blob_params = if chain_spec.is_prague_active_at_timestamp(parent_header.timestamp) {
let parent_blob_gas_used = parent_header.blob_gas_used.unwrap_or_default(); BlobParams::prague()
Some(calc_excess_blob_gas(parent_excess_blob_gas, parent_blob_gas_used)) } else {
// cancun
BlobParams::cancun()
};
parent_header.next_block_excess_blob_gas(blob_params)
} else { } else {
// for the first post-fork block, both parent.blob_gas_used and // for the first post-fork block, both parent.blob_gas_used and
// parent.excess_blob_gas are evaluated as 0 // 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); blob_gas_used = Some(sum_blob_gas_used);
@ -472,7 +477,6 @@ where
blob_gas_used, blob_gas_used,
excess_blob_gas, excess_blob_gas,
requests_hash, requests_hash,
target_blobs_per_block: None,
}; };
let withdrawals = chain_spec let withdrawals = chain_spec

View File

@ -160,8 +160,8 @@ impl TxReceipt for Receipt {
alloy_primitives::logs_bloom(self.logs()) alloy_primitives::logs_bloom(self.logs())
} }
fn cumulative_gas_used(&self) -> u128 { fn cumulative_gas_used(&self) -> u64 {
self.cumulative_gas_used as u128 self.cumulative_gas_used
} }
fn logs(&self) -> &[Log] { fn logs(&self) -> &[Log] {

View File

@ -157,11 +157,11 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static {
fn fill_cfg_env(&self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &Self::Header); fn fill_cfg_env(&self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &Self::Header);
/// Fill [`BlockEnv`] field according to the chain spec and given 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.number = U256::from(header.number());
block_env.coinbase = header.beneficiary(); block_env.coinbase = header.beneficiary();
block_env.timestamp = U256::from(header.timestamp()); block_env.timestamp = U256::from(header.timestamp());
if after_merge { if spec_id >= SpecId::MERGE {
block_env.prevrandao = header.mix_hash(); block_env.prevrandao = header.mix_hash();
block_env.difficulty = U256::ZERO; block_env.difficulty = U256::ZERO;
} else { } else {
@ -173,7 +173,7 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static {
// EIP-4844 excess blob gas of this block, introduced in Cancun // EIP-4844 excess blob gas of this block, introduced in Cancun
if let Some(excess_blob_gas) = header.excess_blob_gas() { 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, header: &Self::Header,
) { ) {
self.fill_cfg_env(cfg, header); self.fill_cfg_env(cfg, header);
let after_merge = cfg.handler_cfg.spec_id >= SpecId::MERGE; self.fill_block_env(block_env, header, cfg.handler_cfg.spec_id);
self.fill_block_env(block_env, header, after_merge);
} }
/// Returns the configured [`EvmEnv`] for `parent + 1` block. /// Returns the configured [`EvmEnv`] for `parent + 1` block.

View File

@ -260,7 +260,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}, },
]), ]),
}.encode(&mut data); }.encode(&mut data);
@ -296,7 +295,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}, },
]), ]),
}; };
@ -397,7 +395,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}, },
], ],
withdrawals: None, withdrawals: None,
@ -473,7 +470,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}, },
], ],
withdrawals: None, withdrawals: None,

View File

@ -143,7 +143,6 @@ mod tests {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
assert_eq!(header.hash_slow(), expected_hash); assert_eq!(header.hash_slow(), expected_hash);
} }
@ -257,7 +256,6 @@ mod tests {
excess_blob_gas: Some(0), excess_blob_gas: Some(0),
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
let header = Header::decode(&mut data.as_slice()).unwrap(); let header = Header::decode(&mut data.as_slice()).unwrap();
@ -298,7 +296,6 @@ mod tests {
blob_gas_used: Some(0), blob_gas_used: Some(0),
excess_blob_gas: Some(0x1600000), excess_blob_gas: Some(0x1600000),
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
let header = Header::decode(&mut data.as_slice()).unwrap(); let header = Header::decode(&mut data.as_slice()).unwrap();

View File

@ -122,11 +122,8 @@ impl TryFrom<HackReceipt> for OpReceipt {
deposit_receipt_version, deposit_receipt_version,
} = exported_receipt.try_into()?; } = exported_receipt.try_into()?;
let receipt = alloy_consensus::Receipt { let receipt =
status: success.into(), alloy_consensus::Receipt { status: success.into(), cumulative_gas_used, logs };
cumulative_gas_used: cumulative_gas_used as u128,
logs,
};
match tx_type { match tx_type {
TxType::Legacy => Ok(Self::Legacy(receipt)), TxType::Legacy => Ok(Self::Legacy(receipt)),

View File

@ -10,6 +10,7 @@
#![cfg(feature = "optimism")] #![cfg(feature = "optimism")]
use alloy_consensus::{BlockHeader, Header, EMPTY_OMMER_ROOT_HASH}; use alloy_consensus::{BlockHeader, Header, EMPTY_OMMER_ROOT_HASH};
use alloy_eips::eip7840::BlobParams;
use alloy_primitives::{B64, U256}; use alloy_primitives::{B64, U256};
use reth_chainspec::EthereumHardforks; use reth_chainspec::EthereumHardforks;
use reth_consensus::{ use reth_consensus::{
@ -142,7 +143,7 @@ impl HeaderValidator for OpBeaconConsensus {
// ensure that the blob gas fields for this block // ensure that the blob gas fields for this block
if self.chain_spec.is_cancun_active_at_timestamp(header.timestamp) { 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(()) Ok(())

View File

@ -35,9 +35,9 @@ pub fn validate_block_post_execution(
// Check if gas used matches the value set in header. // Check if gas used matches the value set in header.
let cumulative_gas_used = let cumulative_gas_used =
receipts.last().map(|receipt| receipt.cumulative_gas_used()).unwrap_or(0); 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 { 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), gas_spent_by_tx: gas_spent_by_transactions(receipts),
}) })
} }

View File

@ -233,7 +233,7 @@ where
// Success flag was added in `EIP-658: Embedding transaction status code in // Success flag was added in `EIP-658: Embedding transaction status code in
// receipts`. // receipts`.
status: Eip658Value::Eip658(result.is_success()), status: Eip658Value::Eip658(result.is_success()),
cumulative_gas_used: cumulative_gas_used as u128, cumulative_gas_used,
logs: result.into_logs(), logs: result.into_logs(),
}; };

View File

@ -14,6 +14,7 @@ extern crate alloc;
use alloc::{sync::Arc, vec::Vec}; use alloc::{sync::Arc, vec::Vec};
use alloy_consensus::Header; use alloy_consensus::Header;
use alloy_eips::eip7840::BlobParams;
use alloy_primitives::{Address, U256}; use alloy_primitives::{Address, U256};
use op_alloy_consensus::EIP1559ParamError; use op_alloy_consensus::EIP1559ParamError;
use reth_evm::{env::EvmEnv, ConfigureEvm, ConfigureEvmEnv, NextBlockEnvAttributes}; 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 // 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) // cancun now, we need to set the excess blob gas to the default value(0)
let blob_excess_gas_and_price = parent 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)) .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 { let block_env = BlockEnv {
number: U256::from(parent.number + 1), number: U256::from(parent.number + 1),

View File

@ -242,8 +242,6 @@ mod test {
suggested_fee_recipient: Address::ZERO, suggested_fee_recipient: Address::ZERO,
withdrawals: Some(vec![]), withdrawals: Some(vec![]),
parent_beacon_block_root: Some(B256::ZERO), parent_beacon_block_root: Some(B256::ZERO),
target_blobs_per_block: None,
max_blobs_per_block: None,
}, },
} }
} }

View File

@ -60,8 +60,6 @@ pub fn optimism_payload_attributes(timestamp: u64) -> OpPayloadBuilderAttributes
suggested_fee_recipient: Address::ZERO, suggested_fee_recipient: Address::ZERO,
withdrawals: Some(vec![]), withdrawals: Some(vec![]),
parent_beacon_block_root: Some(B256::ZERO), parent_beacon_block_root: Some(B256::ZERO),
target_blobs_per_block: None,
max_blobs_per_block: None,
}; };
OpPayloadBuilderAttributes { OpPayloadBuilderAttributes {

View File

@ -421,7 +421,6 @@ where
blob_gas_used, blob_gas_used,
excess_blob_gas, excess_blob_gas,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
// seal the block // seal the block
@ -819,7 +818,7 @@ where
let receipt = alloy_consensus::Receipt { let receipt = alloy_consensus::Receipt {
status: Eip658Value::Eip658(result.is_success()), 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(), logs: result.into_logs().into_iter().collect(),
}; };
@ -930,7 +929,7 @@ where
let receipt = alloy_consensus::Receipt { let receipt = alloy_consensus::Receipt {
status: Eip658Value::Eip658(result.is_success()), 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(), logs: result.into_logs().into_iter().collect(),
}; };

View File

@ -375,8 +375,6 @@ mod tests {
suggested_fee_recipient: address!("4200000000000000000000000000000000000011"), suggested_fee_recipient: address!("4200000000000000000000000000000000000011"),
withdrawals: Some([].into()), withdrawals: Some([].into()),
parent_beacon_block_root: b256!("8fe0193b9bf83cb7e5a08538e494fecc23046aab9a497af3704f4afdae3250ff").into(), parent_beacon_block_root: b256!("8fe0193b9bf83cb7e5a08538e494fecc23046aab9a497af3704f4afdae3250ff").into(),
target_blobs_per_block: None,
max_blobs_per_block: None,
}, },
transactions: Some([bytes!("7ef8f8a0dc19cfa777d90980e4875d0a548a881baaa3f83f14d1bc0d3038bc329350e54194deaddeaddeaddeaddeaddeaddeaddeaddead00019442000000000000000000000000000000000000158080830f424080b8a4440a5e20000f424000000000000000000000000300000000670d6d890000000000000125000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000014bf9181db6e381d4384bbf69c48b0ee0eed23c6ca26143c6d2544f9d39997a590000000000000000000000007f83d659683caf2767fd3c720981d51f5bc365bc")].into()), transactions: Some([bytes!("7ef8f8a0dc19cfa777d90980e4875d0a548a881baaa3f83f14d1bc0d3038bc329350e54194deaddeaddeaddeaddeaddeaddeaddeaddead00019442000000000000000000000000000000000000158080830f424080b8a4440a5e20000f424000000000000000000000000300000000670d6d890000000000000125000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000014bf9181db6e381d4384bbf69c48b0ee0eed23c6ca26143c6d2544f9d39997a590000000000000000000000007f83d659683caf2767fd3c720981d51f5bc365bc")].into()),
no_tx_pool: None, no_tx_pool: None,

View File

@ -85,7 +85,6 @@ pub const BEDROCK_HEADER: Header = Header {
excess_blob_gas: None, excess_blob_gas: None,
parent_beacon_block_root: None, parent_beacon_block_root: None,
requests_hash: None, requests_hash: None,
target_blobs_per_block: None,
}; };
/// Bedrock total difficulty on Optimism Mainnet. /// Bedrock total difficulty on Optimism Mainnet.

View File

@ -188,7 +188,7 @@ impl TxReceipt for OpReceipt {
self.as_receipt().bloom() self.as_receipt().bloom()
} }
fn cumulative_gas_used(&self) -> u128 { fn cumulative_gas_used(&self) -> u64 {
self.as_receipt().cumulative_gas_used() self.as_receipt().cumulative_gas_used()
} }
@ -236,7 +236,7 @@ mod compact {
Self { Self {
tx_type: receipt.tx_type(), tx_type: receipt.tx_type(),
success: receipt.status(), 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), logs: Cow::Borrowed(&receipt.as_receipt().logs),
deposit_nonce: if let OpReceipt::Deposit(receipt) = receipt { deposit_nonce: if let OpReceipt::Deposit(receipt) = receipt {
receipt.deposit_nonce receipt.deposit_nonce
@ -263,11 +263,8 @@ mod compact {
deposit_receipt_version, deposit_receipt_version,
} = receipt; } = receipt;
let inner = Receipt { let inner =
status: success.into(), Receipt { status: success.into(), cumulative_gas_used, logs: logs.into_owned() };
cumulative_gas_used: cumulative_gas_used as u128,
logs: logs.into_owned(),
};
match tx_type { match tx_type {
OpTxType::Legacy => Self::Legacy(inner), OpTxType::Legacy => Self::Legacy(inner),

View File

@ -130,7 +130,7 @@ where
number: block_env.number.to::<u64>(), number: block_env.number.to::<u64>(),
gas_limit: block_env.gas_limit.to::<u64>(), gas_limit: block_env.gas_limit.to::<u64>(),
difficulty: U256::ZERO, 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(|| { blob_gas_used: is_cancun.then(|| {
transactions.iter().map(|tx| tx.blob_gas_used().unwrap_or_default()).sum::<u64>() transactions.iter().map(|tx| tx.blob_gas_used().unwrap_or_default()).sum::<u64>()
}), }),
@ -138,7 +138,6 @@ where
extra_data: Default::default(), extra_data: Default::default(),
parent_beacon_block_root: is_cancun.then_some(B256::ZERO), parent_beacon_block_root: is_cancun.then_some(B256::ZERO),
requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH), requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH),
target_blobs_per_block: None,
}; };
// seal the block // seal the block
@ -156,7 +155,7 @@ where
) -> reth_provider::ProviderReceipt<Self::Provider> { ) -> reth_provider::ProviderReceipt<Self::Provider> {
let receipt = alloy_consensus::Receipt { let receipt = alloy_consensus::Receipt {
status: Eip658Value::Eip658(result.is_success()), status: Eip658Value::Eip658(result.is_success()),
cumulative_gas_used: cumulative_gas_used as u128, cumulative_gas_used,
logs: result.into_logs().into_iter().collect(), logs: result.into_logs().into_iter().collect(),
}; };

View File

@ -39,6 +39,6 @@ where
receipts receipts
.into_iter() .into_iter()
.enumerate() .enumerate()
.map(|(id, receipt)| (id as u64, receipt.cumulative_gas_used() as u64)) .map(|(id, receipt)| (id as u64, receipt.cumulative_gas_used()))
.collect() .collect()
} }

View File

@ -58,7 +58,6 @@ impl TryFrom<AnyRpcBlock> for Block {
excess_blob_gas, excess_blob_gas,
parent_beacon_block_root, parent_beacon_block_root,
requests_hash, requests_hash,
target_blobs_per_block,
} = block.header.inner; } = block.header.inner;
Ok(Self { Ok(Self {
@ -85,7 +84,6 @@ impl TryFrom<AnyRpcBlock> for Block {
excess_blob_gas, excess_blob_gas,
parent_beacon_block_root, parent_beacon_block_root,
requests_hash, requests_hash,
target_blobs_per_block,
}, },
body: BlockBody { body: BlockBody {
transactions, transactions,
@ -104,6 +102,7 @@ impl TryFrom<AnyRpcTransaction> for TransactionSigned {
let WithOtherFields { inner: tx, other: _ } = tx; let WithOtherFields { inner: tx, other: _ } = tx;
#[allow(unreachable_patterns)]
let (transaction, signature, hash) = match tx.inner { let (transaction, signature, hash) = match tx.inner {
AnyTxEnvelope::Ethereum(TxEnvelope::Legacy(tx)) => { AnyTxEnvelope::Ethereum(TxEnvelope::Legacy(tx)) => {
let (tx, signature, hash) = tx.into_parts(); let (tx, signature, hash) = tx.into_parts();

View File

@ -250,8 +250,8 @@ impl TxReceipt for Receipt {
alloy_primitives::logs_bloom(self.logs.iter()) alloy_primitives::logs_bloom(self.logs.iter())
} }
fn cumulative_gas_used(&self) -> u128 { fn cumulative_gas_used(&self) -> u64 {
self.cumulative_gas_used as u128 self.cumulative_gas_used
} }
fn logs(&self) -> &[Log] { fn logs(&self) -> &[Log] {

View File

@ -1510,7 +1510,6 @@ impl From<TxEnvelope> for TransactionSigned {
TxEnvelope::Eip1559(tx) => tx.into(), TxEnvelope::Eip1559(tx) => tx.into(),
TxEnvelope::Eip4844(tx) => tx.into(), TxEnvelope::Eip4844(tx) => tx.into(),
TxEnvelope::Eip7702(tx) => tx.into(), TxEnvelope::Eip7702(tx) => tx.into(),
_ => unreachable!(),
} }
} }
} }

View File

@ -279,11 +279,7 @@ where
payload, payload,
ExecutionPayloadSidecar::v4( ExecutionPayloadSidecar::v4(
CancunPayloadFields { versioned_hashes, parent_beacon_block_root }, CancunPayloadFields { versioned_hashes, parent_beacon_block_root },
PraguePayloadFields { PraguePayloadFields { requests: RequestsOrHash::Requests(execution_requests) },
requests: RequestsOrHash::Requests(execution_requests),
// TODO: add as an argument and handle in `try_into_block`
target_blobs_per_block: 0,
},
), ),
) )
.await .await

View File

@ -1,7 +1,7 @@
//! `eth_` Extension traits. //! `eth_` Extension traits.
use alloy_primitives::{Bytes, B256}; 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}; use jsonrpsee::{core::RpcResult, proc_macros::rpc};
/// Extension trait for `eth_` namespace for L2s. /// Extension trait for `eth_` namespace for L2s.
@ -13,6 +13,6 @@ pub trait L2EthApiExt {
async fn send_raw_transaction_conditional( async fn send_raw_transaction_conditional(
&self, &self,
bytes: Bytes, bytes: Bytes,
condition: ConditionalOptions, condition: TransactionConditional,
) -> RpcResult<B256>; ) -> RpcResult<B256>;
} }

View File

@ -1,6 +1,7 @@
//! Loads fee history from database. Helper trait for `eth_` fee and transaction RPC methods. //! Loads fee history from database. Helper trait for `eth_` fee and transaction RPC methods.
use alloy_consensus::BlockHeader; use alloy_consensus::BlockHeader;
use alloy_eips::eip7840::BlobParams;
use alloy_primitives::U256; use alloy_primitives::U256;
use alloy_rpc_types_eth::{BlockNumberOrTag, FeeHistory}; use alloy_rpc_types_eth::{BlockNumberOrTag, FeeHistory};
use futures::Future; use futures::Future;
@ -166,7 +167,7 @@ pub trait EthFees: LoadFee {
for header in &headers { for header in &headers {
base_fee_per_gas.push(header.base_fee_per_gas().unwrap_or_default() as u128); 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); 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( blob_gas_used_ratio.push(
header.blob_gas_used().unwrap_or_default() as f64 header.blob_gas_used().unwrap_or_default() as f64
/ alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK 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`: // 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. // > "[..] 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 { Ok(FeeHistory {
@ -332,7 +333,7 @@ pub trait LoadFee: LoadBlock {
async move { async move {
self.block_with_senders(BlockNumberOrTag::Latest.into()) self.block_with_senders(BlockNumberOrTag::Latest.into())
.await? .await?
.and_then(|h| h.next_block_blob_fee()) .and_then(|h| h.next_block_blob_fee(BlobParams::cancun()))
.ok_or(EthApiError::ExcessBlobGasNotSet.into()) .ok_or(EthApiError::ExcessBlobGasNotSet.into())
.map(U256::from) .map(U256::from)
} }

View File

@ -408,10 +408,8 @@ pub enum RpcInvalidTransactionError {
#[error("blob transaction missing blob hashes")] #[error("blob transaction missing blob hashes")]
BlobTransactionMissingBlobHashes, BlobTransactionMissingBlobHashes,
/// Blob transaction has too many blobs /// 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 { TooManyBlobs {
/// The maximum number of blobs allowed.
max: usize,
/// The number of blobs in the transaction. /// The number of blobs in the transaction.
have: usize, have: usize,
}, },
@ -522,7 +520,7 @@ impl From<revm::primitives::InvalidTransaction> for RpcInvalidTransactionError {
InvalidTransaction::BlobGasPriceGreaterThanMax => Self::BlobFeeCapTooLow, InvalidTransaction::BlobGasPriceGreaterThanMax => Self::BlobFeeCapTooLow,
InvalidTransaction::EmptyBlobs => Self::BlobTransactionMissingBlobHashes, InvalidTransaction::EmptyBlobs => Self::BlobTransactionMissingBlobHashes,
InvalidTransaction::BlobVersionNotSupported => Self::BlobHashVersionMismatch, InvalidTransaction::BlobVersionNotSupported => Self::BlobHashVersionMismatch,
InvalidTransaction::TooManyBlobs { max, have } => Self::TooManyBlobs { max, have }, InvalidTransaction::TooManyBlobs { have } => Self::TooManyBlobs { have },
InvalidTransaction::BlobCreateTransaction => Self::BlobTransactionIsCreate, InvalidTransaction::BlobCreateTransaction => Self::BlobTransactionIsCreate,
InvalidTransaction::EofCrateShouldHaveToAddress => Self::EofCrateShouldHaveToAddress, InvalidTransaction::EofCrateShouldHaveToAddress => Self::EofCrateShouldHaveToAddress,
InvalidTransaction::AuthorizationListNotSupported => { InvalidTransaction::AuthorizationListNotSupported => {

View File

@ -21,7 +21,6 @@ use reth_primitives::{NodePrimitives, SealedBlock};
use reth_primitives_traits::BlockBody; use reth_primitives_traits::BlockBody;
use reth_rpc_server_types::constants::gas_oracle::MAX_HEADER_HISTORY; use reth_rpc_server_types::constants::gas_oracle::MAX_HEADER_HISTORY;
use reth_storage_api::BlockReaderIdExt; use reth_storage_api::BlockReaderIdExt;
use revm_primitives::{calc_blob_gasprice, calc_excess_blob_gas};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tracing::trace; use tracing::trace;
@ -294,7 +293,7 @@ where
*previous_gas = receipt.cumulative_gas_used(); *previous_gas = receipt.cumulative_gas_used();
Some(TxGasAndReward { Some(TxGasAndReward {
gas_used: gas_used as u64, gas_used,
reward: tx.effective_tip_per_gas(base_fee_per_gas).unwrap_or_default(), reward: tx.effective_tip_per_gas(base_fee_per_gas).unwrap_or_default(),
}) })
}) })
@ -368,7 +367,9 @@ impl FeeHistoryEntry {
Self { Self {
base_fee_per_gas: block.base_fee_per_gas().unwrap_or_default(), 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, 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 / blob_gas_used_ratio: block.body.blob_gas_used() as f64 /
alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK as f64, alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK as f64,
excess_blob_gas: block.excess_blob_gas(), excess_blob_gas: block.excess_blob_gas(),
@ -397,13 +398,13 @@ impl FeeHistoryEntry {
/// ///
/// See also [`Self::next_block_excess_blob_gas`] /// See also [`Self::next_block_excess_blob_gas`]
pub fn next_block_blob_fee(&self) -> Option<u128> { pub fn next_block_blob_fee(&self) -> Option<u128> {
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. /// 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 /// Returns a `None` if no excess blob gas is set, no EIP-4844 support
pub fn next_block_excess_blob_gas(&self) -> Option<u64> { pub fn next_block_excess_blob_gas(&self) -> Option<u64> {
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?))
} }
} }

View File

@ -6,7 +6,6 @@ use alloy_primitives::{Address, TxKind};
use alloy_rpc_types_eth::{Log, ReceiptWithBloom, TransactionReceipt}; use alloy_rpc_types_eth::{Log, ReceiptWithBloom, TransactionReceipt};
use reth_primitives::{Receipt, TransactionMeta, TransactionSigned, TxType}; use reth_primitives::{Receipt, TransactionMeta, TransactionSigned, TxType};
use reth_primitives_traits::SignedTransaction; use reth_primitives_traits::SignedTransaction;
use revm_primitives::calc_blob_gasprice;
/// Builds an [`TransactionReceipt`] obtaining the inner receipt envelope from the given closure. /// Builds an [`TransactionReceipt`] obtaining the inner receipt envelope from the given closure.
pub fn build_receipt<R, T, E>( pub fn build_receipt<R, T, E>(
@ -38,7 +37,8 @@ where
let blob_gas_used = transaction.blob_gas_used(); let blob_gas_used = transaction.blob_gas_used();
// Blob gas price should only be present if the transaction is a blob transaction // 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(); let logs_bloom = receipt.bloom();
// get number of logs in the block // get number of logs in the block
@ -87,7 +87,7 @@ where
effective_gas_price: transaction.effective_gas_price(meta.base_fee), effective_gas_price: transaction.effective_gas_price(meta.base_fee),
// EIP-4844 fields // EIP-4844 fields
blob_gas_price, 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()), authorization_list: transaction.authorization_list().map(|l| l.to_vec()),
}) })
} }

View File

@ -86,7 +86,6 @@ pub fn try_payload_v1_to_block<T: Decodable2718>(
ommers_hash: EMPTY_OMMER_ROOT_HASH, ommers_hash: EMPTY_OMMER_ROOT_HASH,
difficulty: Default::default(), difficulty: Default::default(),
nonce: Default::default(), nonce: Default::default(),
target_blobs_per_block: None,
}; };
Ok(Block { header, body: BlockBody { transactions, ..Default::default() } }) Ok(Block { header, body: BlockBody { transactions, ..Default::default() } })
@ -132,14 +131,9 @@ pub fn block_to_payload<T: SignedTransaction>(
None None
}; };
let prague = if let Some(requests_hash) = value.requests_hash { let prague = value
Some(PraguePayloadFields { .requests_hash
requests: RequestsOrHash::Hash(requests_hash), .map(|requests_hash| PraguePayloadFields { requests: RequestsOrHash::Hash(requests_hash) });
target_blobs_per_block: value.target_blobs_per_block.unwrap_or_default(),
})
} else {
None
};
let sidecar = match (cancun, prague) { let sidecar = match (cancun, prague) {
(Some(cancun), Some(prague)) => ExecutionPayloadSidecar::v4(cancun, prague), (Some(cancun), Some(prague)) => ExecutionPayloadSidecar::v4(cancun, prague),

View File

@ -1,6 +1,7 @@
//! `Eth` bundle implementation and helpers. //! `Eth` bundle implementation and helpers.
use alloy_consensus::{BlockHeader, Transaction as _}; use alloy_consensus::{BlockHeader, Transaction as _};
use alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK;
use alloy_primitives::{Keccak256, U256}; use alloy_primitives::{Keccak256, U256};
use alloy_rpc_types_mev::{EthCallBundle, EthCallBundleResponse, EthCallBundleTransactionResult}; use alloy_rpc_types_mev::{EthCallBundle, EthCallBundleResponse, EthCallBundleTransactionResult};
use jsonrpsee::core::RpcResult; use jsonrpsee::core::RpcResult;
@ -22,7 +23,7 @@ use revm::{
db::{CacheDB, DatabaseCommit, DatabaseRef}, db::{CacheDB, DatabaseCommit, DatabaseRef},
primitives::{ResultAndState, TxEnv}, primitives::{ResultAndState, TxEnv},
}; };
use revm_primitives::{EnvKzgSettings, EnvWithHandlerCfg, SpecId, MAX_BLOB_GAS_PER_BLOCK}; use revm_primitives::{EnvKzgSettings, EnvWithHandlerCfg, SpecId};
use std::sync::Arc; use std::sync::Arc;
/// `Eth` bundle implementation. /// `Eth` bundle implementation.
@ -90,7 +91,7 @@ where
// Validate that the bundle does not contain more than MAX_BLOB_NUMBER_PER_BLOCK blob // Validate that the bundle does not contain more than MAX_BLOB_NUMBER_PER_BLOCK blob
// transactions. // transactions.
if transactions.iter().filter_map(|tx| tx.blob_gas_used()).sum::<u64>() > if transactions.iter().filter_map(|tx| tx.blob_gas_used()).sum::<u64>() >
MAX_BLOB_GAS_PER_BLOCK MAX_DATA_GAS_PER_BLOCK
{ {
return Err(EthApiError::InvalidParams( return Err(EthApiError::InvalidParams(
EthBundleError::Eip4844BlobGasExceeded.to_string(), 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. /// Thrown if the bundle does not contain a block number, or block number is 0.
#[error("bundle missing blockNumber")] #[error("bundle missing blockNumber")]
BundleMissingBlockNumber, BundleMissingBlockNumber,
/// Thrown when the blob gas usage of the blob transactions in a bundle exceed /// Thrown when the blob gas usage of the blob transactions in a bundle exceed the maximum.
/// [`MAX_BLOB_GAS_PER_BLOCK`]. #[error("blob gas usage exceeds the limit of {MAX_DATA_GAS_PER_BLOCK} gas per block.")]
#[error("blob gas usage exceeds the limit of {MAX_BLOB_GAS_PER_BLOCK} gas per block.")]
Eip4844BlobGasExceeded, Eip4844BlobGasExceeded,
} }

View File

@ -97,7 +97,6 @@ where
extra_data: Default::default(), extra_data: Default::default(),
parent_beacon_block_root: is_cancun.then_some(B256::ZERO), parent_beacon_block_root: is_cancun.then_some(B256::ZERO),
requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH), requests_hash: is_prague.then_some(EMPTY_REQUESTS_HASH),
target_blobs_per_block: None,
}; };
// seal the block // seal the block

View File

@ -109,7 +109,6 @@ where
TxEip4844Variant::TxEip4844WithSidecar(tx) => &mut tx.tx.input, TxEip4844Variant::TxEip4844WithSidecar(tx) => &mut tx.tx.input,
}, },
TxEnvelope::Eip7702(tx) => &mut tx.tx_mut().input, TxEnvelope::Eip7702(tx) => &mut tx.tx_mut().input,
_ => return,
}; };
*input = input.slice(..4); *input = input.slice(..4);
} }

View File

@ -53,7 +53,9 @@ where
// blob fee is burnt, so we don't need to calculate it // blob fee is burnt, so we don't need to calculate it
let total_fees = receipts let total_fees = receipts
.iter() .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::<u128>(); .sum::<u128>();
Ok(BlockDetails::new(block, Default::default(), U256::from(total_fees))) Ok(BlockDetails::new(block, Default::default(), U256::from(total_fees)))
@ -256,7 +258,7 @@ where
.map(|(receipt, tx_ty)| { .map(|(receipt, tx_ty)| {
let inner = OtsReceipt { let inner = OtsReceipt {
status: receipt.status(), status: receipt.status(),
cumulative_gas_used: receipt.cumulative_gas_used() as u64, cumulative_gas_used: receipt.cumulative_gas_used(),
logs: None, logs: None,
logs_bloom: None, logs_bloom: None,
r#type: tx_ty, r#type: tx_ty,

View File

@ -108,7 +108,7 @@ where
TxpoolInspectSummary { TxpoolInspectSummary {
to: tx.to(), to: tx.to(),
value: tx.value(), value: tx.value(),
gas: tx.gas_limit() as u128, gas: tx.gas_limit(),
gas_price: tx.max_fee_per_gas(), gas_price: tx.max_fee_per_gas(),
}, },
); );

View File

@ -380,7 +380,6 @@ where
requests: RequestsOrHash::Requests( requests: RequestsOrHash::Requests(
request.request.execution_requests.to_requests(), request.request.execution_requests.to_requests(),
), ),
target_blobs_per_block: request.request.target_blobs_per_block,
}, },
), ),
)? )?

View File

@ -19,7 +19,7 @@ use reth_codecs_derive::add_arbitrary_tests;
#[cfg_attr(feature = "test-utils", allow(unreachable_pub), visibility::make(pub))] #[cfg_attr(feature = "test-utils", allow(unreachable_pub), visibility::make(pub))]
#[add_arbitrary_tests(crate, compact)] #[add_arbitrary_tests(crate, compact)]
pub(crate) struct Authorization { pub(crate) struct Authorization {
chain_id: u64, chain_id: U256,
address: Address, address: Address,
nonce: u64, nonce: u64,
} }
@ -80,7 +80,7 @@ mod tests {
#[test] #[test]
fn test_roundtrip_compact_authorization_list_item() { fn test_roundtrip_compact_authorization_list_item() {
let authorization = AlloyAuthorization { let authorization = AlloyAuthorization {
chain_id: 1u64, chain_id: U256::from(1),
address: address!("dac17f958d2ee523a2206206994597c13d831ec7"), address: address!("dac17f958d2ee523a2206206994597c13d831ec7"),
nonce: 1, nonce: 1,
} }

View File

@ -58,7 +58,6 @@ pub(crate) struct Header {
#[reth_codecs(crate = "crate")] #[reth_codecs(crate = "crate")]
pub(crate) struct HeaderExt { pub(crate) struct HeaderExt {
requests_hash: Option<B256>, requests_hash: Option<B256>,
target_blobs_per_block: Option<u64>,
} }
impl HeaderExt { impl HeaderExt {
@ -66,7 +65,7 @@ impl HeaderExt {
/// ///
/// Required since [`Header`] uses `Option<HeaderExt>` as a field. /// Required since [`Header`] uses `Option<HeaderExt>` as a field.
const fn into_option(self) -> Option<Self> { const fn into_option(self) -> Option<Self> {
if self.requests_hash.is_some() || self.target_blobs_per_block.is_some() { if self.requests_hash.is_some() {
Some(self) Some(self)
} else { } else {
None None
@ -79,7 +78,7 @@ impl Compact for AlloyHeader {
where where
B: bytes::BufMut + AsMut<[u8]>, 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 { let header = Header {
parent_hash: self.parent_hash, parent_hash: self.parent_hash,
@ -131,7 +130,6 @@ impl Compact for AlloyHeader {
parent_beacon_block_root: header.parent_beacon_block_root, parent_beacon_block_root: header.parent_beacon_block_root,
requests_hash: header.extra_fields.as_ref().and_then(|h| h.requests_hash), requests_hash: header.extra_fields.as_ref().and_then(|h| h.requests_hash),
extra_data: header.extra_data, 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) (alloy_header, buf)
} }
@ -190,7 +188,7 @@ mod tests {
#[test] #[test]
fn test_extra_fields() { fn test_extra_fields() {
let mut header = HOLESKY_BLOCK; 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 mut encoded_header = vec![];
let len = header.to_compact(&mut encoded_header); let len = header.to_compact(&mut encoded_header);

View File

@ -8,7 +8,7 @@ use crate::{
BlockInfo, PoolTransaction, PoolUpdateKind, BlockInfo, PoolTransaction, PoolUpdateKind,
}; };
use alloy_consensus::{BlockHeader, Typed2718}; use alloy_consensus::{BlockHeader, Typed2718};
use alloy_eips::BlockNumberOrTag; use alloy_eips::{eip7840::BlobParams, BlockNumberOrTag};
use alloy_primitives::{Address, BlockHash, BlockNumber}; use alloy_primitives::{Address, BlockHash, BlockNumber};
use alloy_rlp::Encodable; use alloy_rlp::Encodable;
use futures_util::{ use futures_util::{
@ -119,7 +119,7 @@ pub async fn maintain_transaction_pool<N, Client, P, St, Tasks>(
chain_spec.base_fee_params_at_timestamp(latest.timestamp() + 12), chain_spec.base_fee_params_at_timestamp(latest.timestamp() + 12),
) )
.unwrap_or_default(), .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); pool.set_block_info(info);
} }
@ -276,7 +276,7 @@ pub async fn maintain_transaction_pool<N, Client, P, St, Tasks>(
chain_spec.base_fee_params_at_timestamp(new_tip.timestamp() + 12), chain_spec.base_fee_params_at_timestamp(new_tip.timestamp() + 12),
) )
.unwrap_or_default(); .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 // we know all changed account in the new chain
let new_changed_accounts: HashSet<_> = let new_changed_accounts: HashSet<_> =
@ -379,7 +379,7 @@ pub async fn maintain_transaction_pool<N, Client, P, St, Tasks>(
chain_spec.base_fee_params_at_timestamp(tip.timestamp() + 12), chain_spec.base_fee_params_at_timestamp(tip.timestamp() + 12),
) )
.unwrap_or_default(); .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(); let first_block = blocks.first();
trace!( trace!(

View File

@ -858,7 +858,7 @@ pub fn ensure_intrinsic_gas<T: EthPoolTransaction>(
SpecId::MERGE SpecId::MERGE
}; };
let gas_after_merge = revm_interpreter::gas::validate_initial_tx_gas( let gas = revm_interpreter::gas::calculate_initial_tx_gas(
spec_id, spec_id,
transaction.input(), transaction.input(),
transaction.is_create(), transaction.is_create(),
@ -866,7 +866,8 @@ pub fn ensure_intrinsic_gas<T: EthPoolTransaction>(
transaction.authorization_count() as u64, 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) Err(InvalidPoolTransactionError::IntrinsicGasTooLow)
} else { } else {
Ok(()) Ok(())

View File

@ -116,7 +116,6 @@ impl From<Header> for SealedHeader {
excess_blob_gas: value.excess_blob_gas.map(|v| v.to::<u64>()), excess_blob_gas: value.excess_blob_gas.map(|v| v.to::<u64>()),
parent_beacon_block_root: value.parent_beacon_block_root, parent_beacon_block_root: value.parent_beacon_block_root,
requests_hash: value.requests_hash, requests_hash: value.requests_hash,
target_blobs_per_block: value.target_blobs_per_block.map(|v| v.to::<u64>()),
}; };
Self::new(header, value.hash) Self::new(header, value.hash)
} }