mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: update revm 19 alloy 09 (#13594)
This commit is contained in:
255
Cargo.lock
generated
255
Cargo.lock
generated
@ -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",
|
||||||
|
|||||||
74
Cargo.toml
74
Cargo.toml
@ -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"
|
||||||
|
|||||||
@ -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())),
|
||||||
|
|||||||
@ -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)
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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(())
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
@ -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())
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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] {
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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)),
|
||||||
|
|||||||
@ -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(())
|
||||||
|
|||||||
@ -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),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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] {
|
||||||
|
|||||||
@ -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!(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 => {
|
||||||
|
|||||||
@ -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?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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()),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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,
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)?
|
)?
|
||||||
|
|||||||
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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!(
|
||||||
|
|||||||
@ -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(())
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user