diff --git a/Cargo.lock b/Cargo.lock index 4fddc42997b..5099df85c26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3300,7 +3300,7 @@ dependencies = [ [[package]] name = "ef-test-runner" -version = "1.11.0" +version = "1.11.1" dependencies = [ "clap", "ef-tests", @@ -3308,7 +3308,7 @@ dependencies = [ [[package]] name = "ef-tests" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -3748,7 +3748,7 @@ dependencies = [ [[package]] name = "example-full-contract-state" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "eyre", @@ -3880,7 +3880,7 @@ dependencies = [ [[package]] name = "exex-subscription" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "clap", @@ -7532,7 +7532,7 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "reth" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-node-bindings", "alloy-primitives", @@ -7579,7 +7579,7 @@ dependencies = [ [[package]] name = "reth-basic-payload-builder" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7602,7 +7602,7 @@ dependencies = [ [[package]] name = "reth-bench" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7649,7 +7649,7 @@ dependencies = [ [[package]] name = "reth-bench-compare" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-provider", @@ -7677,7 +7677,7 @@ dependencies = [ [[package]] name = "reth-chain-state" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7710,7 +7710,7 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-chains", "alloy-consensus", @@ -7730,7 +7730,7 @@ dependencies = [ [[package]] name = "reth-cli" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-genesis", "clap", @@ -7743,7 +7743,7 @@ dependencies = [ [[package]] name = "reth-cli-commands" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-chains", "alloy-consensus", @@ -7830,7 +7830,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" -version = "1.11.0" +version = "1.11.1" dependencies = [ "reth-tasks", "tokio", @@ -7839,7 +7839,7 @@ dependencies = [ [[package]] name = "reth-cli-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7860,7 +7860,7 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7884,7 +7884,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.11.0" +version = "1.11.1" dependencies = [ "proc-macro2", "quote", @@ -7894,7 +7894,7 @@ dependencies = [ [[package]] name = "reth-config" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "eyre", @@ -7912,7 +7912,7 @@ dependencies = [ [[package]] name = "reth-consensus" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7924,7 +7924,7 @@ dependencies = [ [[package]] name = "reth-consensus-common" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7938,7 +7938,7 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7963,7 +7963,7 @@ dependencies = [ [[package]] name = "reth-db" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7998,7 +7998,7 @@ dependencies = [ [[package]] name = "reth-db-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -8029,7 +8029,7 @@ dependencies = [ [[package]] name = "reth-db-common" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8076,7 +8076,7 @@ dependencies = [ [[package]] name = "reth-discv4" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -8102,7 +8102,7 @@ dependencies = [ [[package]] name = "reth-discv5" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -8127,7 +8127,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-chains", "alloy-primitives", @@ -8155,7 +8155,7 @@ dependencies = [ [[package]] name = "reth-downloaders" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8193,7 +8193,7 @@ dependencies = [ [[package]] name = "reth-e2e-test-utils" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8250,7 +8250,7 @@ dependencies = [ [[package]] name = "reth-ecies" -version = "1.11.0" +version = "1.11.1" dependencies = [ "aes", "alloy-primitives", @@ -8277,7 +8277,7 @@ dependencies = [ [[package]] name = "reth-engine-local" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8300,7 +8300,7 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8324,7 +8324,7 @@ dependencies = [ [[package]] name = "reth-engine-service" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "futures", @@ -8354,7 +8354,7 @@ dependencies = [ [[package]] name = "reth-engine-tree" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eip7928", @@ -8427,7 +8427,7 @@ dependencies = [ [[package]] name = "reth-engine-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -8454,7 +8454,7 @@ dependencies = [ [[package]] name = "reth-era" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8476,7 +8476,7 @@ dependencies = [ [[package]] name = "reth-era-downloader" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "bytes", @@ -8494,7 +8494,7 @@ dependencies = [ [[package]] name = "reth-era-utils" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8520,7 +8520,7 @@ dependencies = [ [[package]] name = "reth-errors" -version = "1.11.0" +version = "1.11.1" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -8530,7 +8530,7 @@ dependencies = [ [[package]] name = "reth-eth-wire" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8568,7 +8568,7 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8593,7 +8593,7 @@ dependencies = [ [[package]] name = "reth-ethereum" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", @@ -8633,7 +8633,7 @@ dependencies = [ [[package]] name = "reth-ethereum-cli" -version = "1.11.0" +version = "1.11.1" dependencies = [ "clap", "eyre", @@ -8656,7 +8656,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8672,7 +8672,7 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8690,7 +8690,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eip2124", "alloy-hardforks 0.4.7", @@ -8703,7 +8703,7 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8731,7 +8731,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8758,7 +8758,7 @@ dependencies = [ [[package]] name = "reth-etl" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "rayon", @@ -8768,7 +8768,7 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8792,7 +8792,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8816,7 +8816,7 @@ dependencies = [ [[package]] name = "reth-execution-errors" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-evm", "alloy-primitives", @@ -8828,7 +8828,7 @@ dependencies = [ [[package]] name = "reth-execution-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8848,7 +8848,7 @@ dependencies = [ [[package]] name = "reth-exex" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8893,7 +8893,7 @@ dependencies = [ [[package]] name = "reth-exex-test-utils" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "eyre", @@ -8924,7 +8924,7 @@ dependencies = [ [[package]] name = "reth-exex-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8941,7 +8941,7 @@ dependencies = [ [[package]] name = "reth-fs-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "serde", "serde_json", @@ -8950,7 +8950,7 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8983,7 +8983,7 @@ dependencies = [ [[package]] name = "reth-ipc" -version = "1.11.0" +version = "1.11.1" dependencies = [ "bytes", "futures", @@ -9005,7 +9005,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" -version = "1.11.0" +version = "1.11.1" dependencies = [ "bitflags 2.10.0", "byteorder", @@ -9023,7 +9023,7 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" -version = "1.11.0" +version = "1.11.1" dependencies = [ "bindgen", "cc", @@ -9031,7 +9031,7 @@ dependencies = [ [[package]] name = "reth-metrics" -version = "1.11.0" +version = "1.11.1" dependencies = [ "futures", "metrics", @@ -9042,7 +9042,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "ipnet", @@ -9050,7 +9050,7 @@ dependencies = [ [[package]] name = "reth-net-nat" -version = "1.11.0" +version = "1.11.1" dependencies = [ "futures-util", "if-addrs", @@ -9064,7 +9064,7 @@ dependencies = [ [[package]] name = "reth-network" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9126,7 +9126,7 @@ dependencies = [ [[package]] name = "reth-network-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9150,7 +9150,7 @@ dependencies = [ [[package]] name = "reth-network-p2p" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9172,7 +9172,7 @@ dependencies = [ [[package]] name = "reth-network-peers" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9189,7 +9189,7 @@ dependencies = [ [[package]] name = "reth-network-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -9202,7 +9202,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" -version = "1.11.0" +version = "1.11.1" dependencies = [ "anyhow", "bincode 1.3.3", @@ -9220,7 +9220,7 @@ dependencies = [ [[package]] name = "reth-node-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -9243,7 +9243,7 @@ dependencies = [ [[package]] name = "reth-node-builder" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9315,7 +9315,7 @@ dependencies = [ [[package]] name = "reth-node-core" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9371,7 +9371,7 @@ dependencies = [ [[package]] name = "reth-node-ethereum" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-contract", @@ -9431,7 +9431,7 @@ dependencies = [ [[package]] name = "reth-node-ethstats" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9454,7 +9454,7 @@ dependencies = [ [[package]] name = "reth-node-events" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9477,7 +9477,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" -version = "1.11.0" +version = "1.11.1" dependencies = [ "bytes", "eyre", @@ -9506,7 +9506,7 @@ dependencies = [ [[package]] name = "reth-node-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "reth-chainspec", "reth-db-api", @@ -9517,7 +9517,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9537,7 +9537,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "pin-project", "reth-payload-primitives", @@ -9548,7 +9548,7 @@ dependencies = [ [[package]] name = "reth-payload-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9571,7 +9571,7 @@ dependencies = [ [[package]] name = "reth-payload-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9580,7 +9580,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -9589,7 +9589,7 @@ dependencies = [ [[package]] name = "reth-primitives" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9611,7 +9611,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9649,7 +9649,7 @@ dependencies = [ [[package]] name = "reth-provider" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9699,7 +9699,7 @@ dependencies = [ [[package]] name = "reth-prune" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9732,11 +9732,11 @@ dependencies = [ [[package]] name = "reth-prune-db" -version = "1.11.0" +version = "1.11.1" [[package]] name = "reth-prune-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "arbitrary", @@ -9756,7 +9756,7 @@ dependencies = [ [[package]] name = "reth-revm" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9770,7 +9770,7 @@ dependencies = [ [[package]] name = "reth-rpc" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -9850,7 +9850,7 @@ dependencies = [ [[package]] name = "reth-rpc-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eip7928", "alloy-eips", @@ -9880,7 +9880,7 @@ dependencies = [ [[package]] name = "reth-rpc-api-testing-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9899,7 +9899,7 @@ dependencies = [ [[package]] name = "reth-rpc-builder" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-network", @@ -9955,7 +9955,7 @@ dependencies = [ [[package]] name = "reth-rpc-convert" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-evm", @@ -9979,7 +9979,7 @@ dependencies = [ [[package]] name = "reth-rpc-e2e-tests" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-genesis", "alloy-rpc-types-engine", @@ -9999,7 +9999,7 @@ dependencies = [ [[package]] name = "reth-rpc-engine-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -10035,7 +10035,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -10078,7 +10078,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10126,7 +10126,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-rpc-types-engine", "http", @@ -10143,7 +10143,7 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -10158,7 +10158,7 @@ dependencies = [ [[package]] name = "reth-stages" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10220,7 +10220,7 @@ dependencies = [ [[package]] name = "reth-stages-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -10253,7 +10253,7 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "arbitrary", @@ -10269,7 +10269,7 @@ dependencies = [ [[package]] name = "reth-static-file" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "assert_matches", @@ -10292,7 +10292,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "clap", @@ -10310,7 +10310,7 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10333,7 +10333,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-eips", "alloy-primitives", @@ -10349,7 +10349,7 @@ dependencies = [ [[package]] name = "reth-storage-rpc-provider" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10378,7 +10378,7 @@ dependencies = [ [[package]] name = "reth-tasks" -version = "1.11.0" +version = "1.11.1" dependencies = [ "auto_impl", "dyn-clone", @@ -10395,7 +10395,7 @@ dependencies = [ [[package]] name = "reth-testing-utils" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10411,7 +10411,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" -version = "1.11.0" +version = "1.11.1" dependencies = [ "tokio", "tokio-stream", @@ -10420,7 +10420,7 @@ dependencies = [ [[package]] name = "reth-tracing" -version = "1.11.0" +version = "1.11.1" dependencies = [ "clap", "eyre", @@ -10438,7 +10438,7 @@ dependencies = [ [[package]] name = "reth-tracing-otlp" -version = "1.11.0" +version = "1.11.1" dependencies = [ "clap", "eyre", @@ -10455,7 +10455,7 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10506,7 +10506,7 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10540,7 +10540,7 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -10573,7 +10573,7 @@ dependencies = [ [[package]] name = "reth-trie-db" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -10604,7 +10604,7 @@ dependencies = [ [[package]] name = "reth-trie-parallel" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -10634,7 +10634,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" -version = "1.11.0" +version = "1.11.1" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -10665,7 +10665,7 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" -version = "1.11.0" +version = "1.11.1" dependencies = [ "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 750ef1756ba..ce091bee4f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "1.11.0" +version = "1.11.1" edition = "2024" rust-version = "1.88" license = "MIT OR Apache-2.0" diff --git a/crates/chain-state/src/deferred_trie.rs b/crates/chain-state/src/deferred_trie.rs index 6ba84589008..8aa106f3d52 100644 --- a/crates/chain-state/src/deferred_trie.rs +++ b/crates/chain-state/src/deferred_trie.rs @@ -312,6 +312,11 @@ impl DeferredTrieData { /// Given that invariant, circular wait dependencies are impossible. #[instrument(level = "debug", target = "engine::tree::deferred_trie", skip_all)] pub fn wait_cloned(&self) -> ComputedTrieData { + #[cfg(feature = "rayon")] + debug_assert!( + rayon::current_thread_index().is_none(), + "wait_cloned must not be called from a rayon worker thread" + ); let mut state = self.state.lock(); match &mut *state { // If the deferred trie data is ready, return the cached result. diff --git a/crates/engine/primitives/src/config.rs b/crates/engine/primitives/src/config.rs index b34f368c7f6..6481e062551 100644 --- a/crates/engine/primitives/src/config.rs +++ b/crates/engine/primitives/src/config.rs @@ -9,6 +9,10 @@ pub const DEFAULT_PERSISTENCE_THRESHOLD: u64 = 2; /// How close to the canonical head we persist blocks. pub const DEFAULT_MEMORY_BLOCK_BUFFER_TARGET: u64 = 0; +/// Default maximum number of entries the persistence pruner may delete per run. +/// Caps MDBX dirty page accumulation to ~400 MB (100k entries × ~4 KB pages). +pub const DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT: usize = 100_000; + /// Returns the default number of storage worker threads based on available parallelism. fn default_storage_worker_count() -> usize { #[cfg(feature = "std")] @@ -186,6 +190,13 @@ pub struct TreeConfig { /// computation is spawned in parallel and whichever finishes first is used. /// If `None`, the timeout fallback is disabled. state_root_task_timeout: Option, + /// Maximum number of entries the persistence pruner may delete in a single run. + /// Limits MDBX dirty page accumulation to prevent OOM during the first prune after startup. + persistence_pruner_delete_limit: usize, + /// Timeout for the persistence pruner per run. Prevents a single prune from blocking + /// block persistence for too long. Account and Storage History segments treat this as + /// a soft limit. + persistence_pruner_timeout: Option, } impl Default for TreeConfig { @@ -220,6 +231,8 @@ impl Default for TreeConfig { sparse_trie_max_storage_tries: DEFAULT_SPARSE_TRIE_MAX_STORAGE_TRIES, disable_sparse_trie_cache_pruning: false, state_root_task_timeout: Some(DEFAULT_STATE_ROOT_TASK_TIMEOUT), + persistence_pruner_delete_limit: DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT, + persistence_pruner_timeout: None, } } } @@ -286,6 +299,8 @@ impl TreeConfig { sparse_trie_max_storage_tries, disable_sparse_trie_cache_pruning: false, state_root_task_timeout, + persistence_pruner_delete_limit: DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT, + persistence_pruner_timeout: None, } } @@ -656,4 +671,26 @@ impl TreeConfig { self.state_root_task_timeout = timeout; self } + + /// Returns the persistence pruner delete limit. + pub const fn persistence_pruner_delete_limit(&self) -> usize { + self.persistence_pruner_delete_limit + } + + /// Setter for persistence pruner delete limit. + pub const fn with_persistence_pruner_delete_limit(mut self, limit: usize) -> Self { + self.persistence_pruner_delete_limit = limit; + self + } + + /// Returns the persistence pruner timeout. + pub const fn persistence_pruner_timeout(&self) -> Option { + self.persistence_pruner_timeout + } + + /// Setter for persistence pruner timeout. + pub const fn with_persistence_pruner_timeout(mut self, timeout: Option) -> Self { + self.persistence_pruner_timeout = timeout; + self + } } diff --git a/crates/engine/tree/src/persistence.rs b/crates/engine/tree/src/persistence.rs index cb7994d9c50..c08ce8cf92d 100644 --- a/crates/engine/tree/src/persistence.rs +++ b/crates/engine/tree/src/persistence.rs @@ -154,6 +154,11 @@ where let start_time = Instant::now(); if let Some(last) = last_block { + // Commit block data immediately so persistence is not blocked by pruning. + // The pruner can take hours on the first run after startup (its + // previous_tip_block_number starts at None, triggering a full segment scan + // even when the pipeline already pruned). Running it in a separate transaction + // ensures blocks become durable on disk without waiting for pruning to finish. let provider_rw = self.provider.database_provider_rw()?; provider_rw.save_blocks(blocks, SaveBlocksMode::Full)?; @@ -164,14 +169,16 @@ where provider_rw.save_safe_block_number(safe)?; } + provider_rw.commit()?; + if self.pruner.is_pruning_needed(last.number) { debug!(target: "engine::persistence", block_num=?last.number, "Running pruner"); let prune_start = Instant::now(); + let provider_rw = self.provider.database_provider_rw()?; let _ = self.pruner.run_with_provider(&provider_rw, last.number)?; + provider_rw.commit()?; self.metrics.prune_before_duration_seconds.record(prune_start.elapsed()); } - - provider_rw.commit()?; } debug!(target: "engine::persistence", first=?first_block, last=?last_block, "Saved range of blocks"); diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 49bcacccde2..8ed200768ab 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -1292,6 +1292,17 @@ where } else if self.should_persist() { let blocks_to_persist = self.get_canonical_blocks_to_persist(PersistTarget::Threshold)?; + if blocks_to_persist.is_empty() { + // This indicates the canonical head block is not in blocks_by_hash, + // which prevents the chain walk from collecting blocks to persist. + warn!( + target: "engine::tree", + canonical_head = ?self.state.tree_state.canonical_head(), + last_persisted = ?self.persistence_state.last_persisted_block, + "should_persist=true but no blocks found to persist; \ + canonical head may not be in memory" + ); + } self.persist_blocks(blocks_to_persist); } } @@ -1411,7 +1422,7 @@ where // Spawn a background task to trigger computation so it's ready when the next payload // arrives. if let Some(overlay) = self.state.tree_state.prepare_canonical_overlay() { - rayon::spawn(move || { + tokio::task::spawn_blocking(move || { let _ = overlay.get(); }); } diff --git a/crates/node/builder/src/launch/engine.rs b/crates/node/builder/src/launch/engine.rs index 31a21d16684..6230021d9be 100644 --- a/crates/node/builder/src/launch/engine.rs +++ b/crates/node/builder/src/launch/engine.rs @@ -170,6 +170,11 @@ impl EngineNodeLauncher { pruner_builder = pruner_builder.finished_exex_height(exex_manager_handle.finished_height()); } + pruner_builder = + pruner_builder.delete_limit(engine_tree_config.persistence_pruner_delete_limit()); + if let Some(timeout) = engine_tree_config.persistence_pruner_timeout() { + pruner_builder = pruner_builder.timeout(timeout); + } let pruner = pruner_builder.build_with_provider_factory(ctx.provider_factory().clone()); let pruner_events = pruner.events(); info!(target: "reth::cli", prune_config=?ctx.prune_config(), "Pruner initialized"); diff --git a/crates/node/core/src/args/engine.rs b/crates/node/core/src/args/engine.rs index cc747c5befa..2aadfb8e144 100644 --- a/crates/node/core/src/args/engine.rs +++ b/crates/node/core/src/args/engine.rs @@ -2,8 +2,8 @@ use clap::{builder::Resettable, Args}; use reth_engine_primitives::{ - TreeConfig, DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE, DEFAULT_SPARSE_TRIE_MAX_STORAGE_TRIES, - DEFAULT_SPARSE_TRIE_PRUNE_DEPTH, + TreeConfig, DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE, DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT, + DEFAULT_SPARSE_TRIE_MAX_STORAGE_TRIES, DEFAULT_SPARSE_TRIE_PRUNE_DEPTH, }; use std::{sync::OnceLock, time::Duration}; @@ -400,6 +400,25 @@ pub struct EngineArgs { default_value = DefaultEngineValues::get_global().state_root_task_timeout.as_deref().unwrap_or("1s"), )] pub state_root_task_timeout: Option, + + /// Maximum number of entries the persistence pruner may delete in a single run. + /// Limits MDBX dirty page accumulation to prevent OOM when the pruner runs for the + /// first time after startup on a large database. + /// + /// Set to 0 to disable the limit (unlimited). + #[arg(long = "engine.persistence-pruner-delete-limit", default_value_t = DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT)] + pub persistence_pruner_delete_limit: usize, + + /// Timeout for the persistence pruner per run. Prevents a single prune from blocking + /// block persistence for too long. + /// + /// CAUTION: Account and Storage History segments treat this as a soft limit. + /// + /// Set to 0s to disable. + /// + /// --engine.persistence-pruner-timeout 30s + #[arg(long = "engine.persistence-pruner-timeout", value_parser = humantime::parse_duration)] + pub persistence_pruner_timeout: Option, } #[allow(deprecated)] @@ -464,6 +483,8 @@ impl Default for EngineArgs { state_root_task_timeout: state_root_task_timeout .as_deref() .map(|s| humantime::parse_duration(s).expect("valid default duration")), + persistence_pruner_delete_limit: DEFAULT_PERSISTENCE_PRUNER_DELETE_LIMIT, + persistence_pruner_timeout: None, } } } @@ -498,6 +519,14 @@ impl EngineArgs { .with_sparse_trie_max_storage_tries(self.sparse_trie_max_storage_tries) .with_disable_sparse_trie_cache_pruning(self.disable_sparse_trie_cache_pruning) .with_state_root_task_timeout(self.state_root_task_timeout.filter(|d| !d.is_zero())) + .with_persistence_pruner_delete_limit(if self.persistence_pruner_delete_limit == 0 { + usize::MAX + } else { + self.persistence_pruner_delete_limit + }) + .with_persistence_pruner_timeout( + self.persistence_pruner_timeout.filter(|d| !d.is_zero()), + ) } } @@ -553,6 +582,8 @@ mod tests { sparse_trie_max_storage_tries: 100, disable_sparse_trie_cache_pruning: true, state_root_task_timeout: Some(Duration::from_secs(2)), + persistence_pruner_delete_limit: 100_000, + persistence_pruner_timeout: Some(Duration::from_secs(30)), }; let parsed_args = CommandParser::::parse_from([ @@ -591,6 +622,10 @@ mod tests { "--engine.disable-sparse-trie-cache-pruning", "--engine.state-root-task-timeout", "2s", + "--engine.persistence-pruner-delete-limit", + "100000", + "--engine.persistence-pruner-timeout", + "30s", ]) .args; diff --git a/crates/trie/sparse/src/parallel.rs b/crates/trie/sparse/src/parallel.rs index 51f04cfd72b..a98bd92ffba 100644 --- a/crates/trie/sparse/src/parallel.rs +++ b/crates/trie/sparse/src/parallel.rs @@ -258,7 +258,7 @@ impl SparseTrie for ParallelSparseTrie { #[cfg(feature = "std")] // Reveal lower subtrie nodes in parallel { - use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator}; + use rayon::iter::{IntoParallelIterator, ParallelIterator}; use tracing::Span; // Capture the current span so it can be propagated to rayon worker threads @@ -267,23 +267,39 @@ impl SparseTrie for ParallelSparseTrie { // Capture reference to upper subtrie nodes for boundary leaf reachability checks let upper_nodes = &self.upper_subtrie.nodes; - // Group the nodes by lower subtrie. This must be collected into a Vec in order for - // rayon's `zip` to be happy. - let node_groups: Vec<_> = lower_nodes + // Group the nodes by lower subtrie. + let results = lower_nodes .chunk_by(|node_a, node_b| { SparseSubtrieType::from_path(&node_a.path) == SparseSubtrieType::from_path(&node_b.path) }) - .collect(); - - // Take the lower subtries in the same order that the nodes were grouped into, so that - // the two can be zipped together. This also must be collected into a Vec for rayon's - // `zip` to be happy. - let lower_subtries: Vec<_> = node_groups - .iter() + // Filter out chunks for unreachable subtries. .filter_map(|nodes| { - // NOTE: chunk_by won't produce empty groups - let node = &nodes[0]; + let mut nodes = nodes + .iter() + .filter(|node| { + // For boundary leaves, check reachability from upper subtrie's parent + // branch. + if node.path.len() == UPPER_TRIE_MAX_DEPTH && + !Self::is_boundary_leaf_reachable( + upper_nodes, + &node.path, + &node.node, + ) + { + trace!( + target: "trie::parallel_sparse", + path = ?node.path, + "Boundary leaf not reachable from upper subtrie, skipping", + ); + false + } else { + true + } + }) + .peekable(); + + let node = nodes.peek()?; let idx = SparseSubtrieType::from_path(&node.path).lower_index().unwrap_or_else( || panic!("upper subtrie node {node:?} found amongst lower nodes"), @@ -303,41 +319,24 @@ impl SparseTrie for ParallelSparseTrie { // shortest path being revealed for each subtrie. Therefore we can reveal the // subtrie itself using this path and retain correct behavior. self.lower_subtries[idx].reveal(&node.path); - Some((idx, self.lower_subtries[idx].take_revealed().expect("just revealed"))) + Some(( + idx, + self.lower_subtries[idx].take_revealed().expect("just revealed"), + nodes, + )) }) - .collect(); - - // Zip the lower subtries and their corresponding node groups, and reveal lower subtrie - // nodes in parallel - let results: Vec<_> = lower_subtries + .collect::>() .into_par_iter() - .zip(node_groups.into_par_iter()) - .map(|((subtrie_idx, mut subtrie), nodes)| { + .map(|(subtrie_idx, mut subtrie, nodes)| { // Enter the parent span to propagate context (e.g., hashed_address for storage // tries) to the worker thread let _guard = parent_span.enter(); // reserve space in the HashMap ahead of time; doing it on a node-by-node basis // can cause multiple re-allocations as the hashmap grows. - subtrie.nodes.reserve(nodes.len()); + subtrie.nodes.reserve(nodes.size_hint().1.unwrap_or(0)); for node in nodes { - // For boundary leaves, check reachability from upper subtrie's parent - // branch - if node.path.len() == UPPER_TRIE_MAX_DEPTH && - !Self::is_boundary_leaf_reachable( - upper_nodes, - &node.path, - &node.node, - ) - { - trace!( - target: "trie::parallel_sparse", - path = ?node.path, - "Boundary leaf not reachable from upper subtrie, skipping", - ); - continue; - } // Reveal each node in the subtrie, returning early on any errors let res = subtrie.reveal_node(node.path, &node.node, node.masks); if res.is_err() { @@ -346,7 +345,7 @@ impl SparseTrie for ParallelSparseTrie { } (subtrie_idx, subtrie, Ok(())) }) - .collect(); + .collect::>(); // Put subtries back which were processed in the rayon pool, collecting the last // seen error in the process and returning that. diff --git a/docs/vocs/vocs.config.ts b/docs/vocs/vocs.config.ts index 9e44044dd7a..6dd99b2573e 100644 --- a/docs/vocs/vocs.config.ts +++ b/docs/vocs/vocs.config.ts @@ -22,7 +22,7 @@ export default defineConfig({ }, { text: 'GitHub', link: 'https://github.com/paradigmxyz/reth' }, { - text: 'v1.11.0', + text: 'v1.11.1', items: [ { text: 'Releases',