Compare commits

..

4 Commits

Author SHA1 Message Date
Brian Picciano
d6324d63e2 chore: release 1.11.3 2026-03-12 12:34:39 +01:00
Brian Picciano
5f3ade1bfe fix(trie): Reset proof v2 calculator on error (#22781)
Co-authored-by: Amp <amp@ampcode.com>
2026-03-12 10:09:18 +00:00
Derek Cofausper
b053f6fafe cherry-pick: fix don't produce both updates and removals for trie nodes (#22507)
Co-Authored-By: Arsenii Kulikov <62447812+klkvr@users.noreply.github.com>
2026-03-12 02:30:25 +00:00
Derek Cofausper
2a58e7a077 cherry-pick: install rayon panic handler (37f5b3a)
Co-Authored-By: Arsenii Kulikov <62447812+klkvr@users.noreply.github.com>
2026-03-12 02:30:17 +00:00
6 changed files with 234 additions and 127 deletions

View File

@@ -0,0 +1,5 @@
---
reth-trie: patch
---
Fixed a potential panic in `ProofCalculator` by clearing internal computation state (`branch_stack`, `child_stack`, `branch_path`, etc.) after errors, preventing stale state from causing `usize` underflow panics when the calculator is reused. Added a test verifying correct behavior after simulated mid-computation errors.

242
Cargo.lock generated
View File

@@ -3300,7 +3300,7 @@ dependencies = [
[[package]]
name = "ef-test-runner"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"clap",
"ef-tests",
@@ -3308,7 +3308,7 @@ dependencies = [
[[package]]
name = "ef-tests"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -3748,7 +3748,7 @@ dependencies = [
[[package]]
name = "example-full-contract-state"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"eyre",
@@ -3880,7 +3880,7 @@ dependencies = [
[[package]]
name = "exex-subscription"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"clap",
@@ -7532,7 +7532,7 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
[[package]]
name = "reth"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-node-bindings",
"alloy-primitives",
@@ -7579,7 +7579,7 @@ dependencies = [
[[package]]
name = "reth-basic-payload-builder"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7602,7 +7602,7 @@ dependencies = [
[[package]]
name = "reth-bench"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7649,7 +7649,7 @@ dependencies = [
[[package]]
name = "reth-bench-compare"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-provider",
@@ -7677,7 +7677,7 @@ dependencies = [
[[package]]
name = "reth-chain-state"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7710,7 +7710,7 @@ dependencies = [
[[package]]
name = "reth-chainspec"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-chains",
"alloy-consensus",
@@ -7730,7 +7730,7 @@ dependencies = [
[[package]]
name = "reth-cli"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-genesis",
"clap",
@@ -7743,7 +7743,7 @@ dependencies = [
[[package]]
name = "reth-cli-commands"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-chains",
"alloy-consensus",
@@ -7830,7 +7830,7 @@ dependencies = [
[[package]]
name = "reth-cli-runner"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"reth-tasks",
"tokio",
@@ -7839,7 +7839,7 @@ dependencies = [
[[package]]
name = "reth-cli-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -7860,7 +7860,7 @@ dependencies = [
[[package]]
name = "reth-codecs"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7884,7 +7884,7 @@ dependencies = [
[[package]]
name = "reth-codecs-derive"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"proc-macro2",
"quote",
@@ -7894,7 +7894,7 @@ dependencies = [
[[package]]
name = "reth-config"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"eyre",
@@ -7912,7 +7912,7 @@ dependencies = [
[[package]]
name = "reth-consensus"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -7924,7 +7924,7 @@ dependencies = [
[[package]]
name = "reth-consensus-common"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7938,7 +7938,7 @@ dependencies = [
[[package]]
name = "reth-consensus-debug-client"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -7963,7 +7963,7 @@ dependencies = [
[[package]]
name = "reth-db"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -7998,7 +7998,7 @@ dependencies = [
[[package]]
name = "reth-db-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-genesis",
@@ -8029,7 +8029,7 @@ dependencies = [
[[package]]
name = "reth-db-common"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-genesis",
@@ -8060,7 +8060,7 @@ dependencies = [
[[package]]
name = "reth-db-models"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -8076,7 +8076,7 @@ dependencies = [
[[package]]
name = "reth-discv4"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -8102,7 +8102,7 @@ dependencies = [
[[package]]
name = "reth-discv5"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -8127,7 +8127,7 @@ dependencies = [
[[package]]
name = "reth-dns-discovery"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-chains",
"alloy-primitives",
@@ -8155,7 +8155,7 @@ dependencies = [
[[package]]
name = "reth-downloaders"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8193,7 +8193,7 @@ dependencies = [
[[package]]
name = "reth-e2e-test-utils"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8250,7 +8250,7 @@ dependencies = [
[[package]]
name = "reth-ecies"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"aes",
"alloy-primitives",
@@ -8277,7 +8277,7 @@ dependencies = [
[[package]]
name = "reth-engine-local"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -8300,7 +8300,7 @@ dependencies = [
[[package]]
name = "reth-engine-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8324,7 +8324,7 @@ dependencies = [
[[package]]
name = "reth-engine-service"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"futures",
@@ -8354,7 +8354,7 @@ dependencies = [
[[package]]
name = "reth-engine-tree"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eip7928",
@@ -8427,7 +8427,7 @@ dependencies = [
[[package]]
name = "reth-engine-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-rpc-types-engine",
@@ -8454,7 +8454,7 @@ dependencies = [
[[package]]
name = "reth-era"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8476,7 +8476,7 @@ dependencies = [
[[package]]
name = "reth-era-downloader"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"bytes",
@@ -8494,7 +8494,7 @@ dependencies = [
[[package]]
name = "reth-era-utils"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -8520,7 +8520,7 @@ dependencies = [
[[package]]
name = "reth-errors"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"reth-consensus",
"reth-execution-errors",
@@ -8530,7 +8530,7 @@ dependencies = [
[[package]]
name = "reth-eth-wire"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-chains",
"alloy-consensus",
@@ -8568,7 +8568,7 @@ dependencies = [
[[package]]
name = "reth-eth-wire-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-chains",
"alloy-consensus",
@@ -8593,7 +8593,7 @@ dependencies = [
[[package]]
name = "reth-ethereum"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-rpc-types-engine",
"alloy-rpc-types-eth",
@@ -8633,7 +8633,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-cli"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"clap",
"eyre",
@@ -8656,7 +8656,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-consensus"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8672,7 +8672,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-engine-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -8690,7 +8690,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-forks"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eip2124",
"alloy-hardforks 0.4.7",
@@ -8703,7 +8703,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-payload-builder"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8731,7 +8731,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8758,7 +8758,7 @@ dependencies = [
[[package]]
name = "reth-etl"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"rayon",
@@ -8768,7 +8768,7 @@ dependencies = [
[[package]]
name = "reth-evm"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8792,7 +8792,7 @@ dependencies = [
[[package]]
name = "reth-evm-ethereum"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8816,7 +8816,7 @@ dependencies = [
[[package]]
name = "reth-execution-errors"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-evm",
"alloy-primitives",
@@ -8828,7 +8828,7 @@ dependencies = [
[[package]]
name = "reth-execution-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8848,7 +8848,7 @@ dependencies = [
[[package]]
name = "reth-exex"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8893,7 +8893,7 @@ dependencies = [
[[package]]
name = "reth-exex-test-utils"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"eyre",
@@ -8924,7 +8924,7 @@ dependencies = [
[[package]]
name = "reth-exex-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -8941,7 +8941,7 @@ dependencies = [
[[package]]
name = "reth-fs-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"serde",
"serde_json",
@@ -8950,7 +8950,7 @@ dependencies = [
[[package]]
name = "reth-invalid-block-hooks"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -8983,7 +8983,7 @@ dependencies = [
[[package]]
name = "reth-ipc"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"bytes",
"futures",
@@ -9005,7 +9005,7 @@ dependencies = [
[[package]]
name = "reth-libmdbx"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"bitflags 2.10.0",
"byteorder",
@@ -9023,7 +9023,7 @@ dependencies = [
[[package]]
name = "reth-mdbx-sys"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"bindgen",
"cc",
@@ -9031,7 +9031,7 @@ dependencies = [
[[package]]
name = "reth-metrics"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"futures",
"metrics",
@@ -9042,7 +9042,7 @@ dependencies = [
[[package]]
name = "reth-net-banlist"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"ipnet",
@@ -9050,7 +9050,7 @@ dependencies = [
[[package]]
name = "reth-net-nat"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"futures-util",
"if-addrs",
@@ -9064,7 +9064,7 @@ dependencies = [
[[package]]
name = "reth-network"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9126,7 +9126,7 @@ dependencies = [
[[package]]
name = "reth-network-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -9150,7 +9150,7 @@ dependencies = [
[[package]]
name = "reth-network-p2p"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9172,7 +9172,7 @@ dependencies = [
[[package]]
name = "reth-network-peers"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -9189,7 +9189,7 @@ dependencies = [
[[package]]
name = "reth-network-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eip2124",
"humantime-serde",
@@ -9202,7 +9202,7 @@ dependencies = [
[[package]]
name = "reth-nippy-jar"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"anyhow",
"bincode 1.3.3",
@@ -9220,7 +9220,7 @@ dependencies = [
[[package]]
name = "reth-node-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-rpc-types-engine",
"eyre",
@@ -9243,7 +9243,7 @@ dependencies = [
[[package]]
name = "reth-node-builder"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9315,7 +9315,7 @@ dependencies = [
[[package]]
name = "reth-node-core"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9371,7 +9371,7 @@ dependencies = [
[[package]]
name = "reth-node-ethereum"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-contract",
@@ -9431,7 +9431,7 @@ dependencies = [
[[package]]
name = "reth-node-ethstats"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -9454,7 +9454,7 @@ dependencies = [
[[package]]
name = "reth-node-events"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9477,7 +9477,7 @@ dependencies = [
[[package]]
name = "reth-node-metrics"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"bytes",
"eyre",
@@ -9506,7 +9506,7 @@ dependencies = [
[[package]]
name = "reth-node-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"reth-chainspec",
"reth-db-api",
@@ -9517,7 +9517,7 @@ dependencies = [
[[package]]
name = "reth-payload-builder"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -9537,7 +9537,7 @@ dependencies = [
[[package]]
name = "reth-payload-builder-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"pin-project",
"reth-payload-primitives",
@@ -9548,7 +9548,7 @@ dependencies = [
[[package]]
name = "reth-payload-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9571,7 +9571,7 @@ dependencies = [
[[package]]
name = "reth-payload-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -9580,7 +9580,7 @@ dependencies = [
[[package]]
name = "reth-payload-validator"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-rpc-types-engine",
@@ -9589,7 +9589,7 @@ dependencies = [
[[package]]
name = "reth-primitives"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9611,7 +9611,7 @@ dependencies = [
[[package]]
name = "reth-primitives-traits"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9649,7 +9649,7 @@ dependencies = [
[[package]]
name = "reth-provider"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9699,7 +9699,7 @@ dependencies = [
[[package]]
name = "reth-prune"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -9732,11 +9732,11 @@ dependencies = [
[[package]]
name = "reth-prune-db"
version = "1.11.2"
version = "1.11.3"
[[package]]
name = "reth-prune-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"arbitrary",
@@ -9756,7 +9756,7 @@ dependencies = [
[[package]]
name = "reth-revm"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -9770,7 +9770,7 @@ dependencies = [
[[package]]
name = "reth-rpc"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-dyn-abi",
@@ -9850,7 +9850,7 @@ dependencies = [
[[package]]
name = "reth-rpc-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eip7928",
"alloy-eips",
@@ -9880,7 +9880,7 @@ dependencies = [
[[package]]
name = "reth-rpc-api-testing-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -9899,7 +9899,7 @@ dependencies = [
[[package]]
name = "reth-rpc-builder"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-network",
@@ -9955,7 +9955,7 @@ dependencies = [
[[package]]
name = "reth-rpc-convert"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-evm",
@@ -9979,7 +9979,7 @@ dependencies = [
[[package]]
name = "reth-rpc-e2e-tests"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-genesis",
"alloy-rpc-types-engine",
@@ -9999,7 +9999,7 @@ dependencies = [
[[package]]
name = "reth-rpc-engine-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -10035,7 +10035,7 @@ dependencies = [
[[package]]
name = "reth-rpc-eth-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-dyn-abi",
@@ -10078,7 +10078,7 @@ dependencies = [
[[package]]
name = "reth-rpc-eth-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10126,7 +10126,7 @@ dependencies = [
[[package]]
name = "reth-rpc-layer"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-rpc-types-engine",
"http",
@@ -10143,7 +10143,7 @@ dependencies = [
[[package]]
name = "reth-rpc-server-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -10158,7 +10158,7 @@ dependencies = [
[[package]]
name = "reth-stages"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10220,7 +10220,7 @@ dependencies = [
[[package]]
name = "reth-stages-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -10253,7 +10253,7 @@ dependencies = [
[[package]]
name = "reth-stages-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"arbitrary",
@@ -10269,7 +10269,7 @@ dependencies = [
[[package]]
name = "reth-static-file"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"assert_matches",
@@ -10292,7 +10292,7 @@ dependencies = [
[[package]]
name = "reth-static-file-types"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"clap",
@@ -10310,7 +10310,7 @@ dependencies = [
[[package]]
name = "reth-storage-api"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10333,7 +10333,7 @@ dependencies = [
[[package]]
name = "reth-storage-errors"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -10349,7 +10349,7 @@ dependencies = [
[[package]]
name = "reth-storage-rpc-provider"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10378,7 +10378,7 @@ dependencies = [
[[package]]
name = "reth-tasks"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"auto_impl",
"dyn-clone",
@@ -10395,7 +10395,7 @@ dependencies = [
[[package]]
name = "reth-testing-utils"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10411,7 +10411,7 @@ dependencies = [
[[package]]
name = "reth-tokio-util"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"tokio",
"tokio-stream",
@@ -10420,7 +10420,7 @@ dependencies = [
[[package]]
name = "reth-tracing"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"clap",
"eyre",
@@ -10438,7 +10438,7 @@ dependencies = [
[[package]]
name = "reth-tracing-otlp"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"clap",
"eyre",
@@ -10455,7 +10455,7 @@ dependencies = [
[[package]]
name = "reth-transaction-pool"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10506,7 +10506,7 @@ dependencies = [
[[package]]
name = "reth-trie"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -10540,7 +10540,7 @@ dependencies = [
[[package]]
name = "reth-trie-common"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-genesis",
@@ -10573,7 +10573,7 @@ dependencies = [
[[package]]
name = "reth-trie-db"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@@ -10604,7 +10604,7 @@ dependencies = [
[[package]]
name = "reth-trie-parallel"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -10634,7 +10634,7 @@ dependencies = [
[[package]]
name = "reth-trie-sparse"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -10665,7 +10665,7 @@ dependencies = [
[[package]]
name = "reth-zstd-compressors"
version = "1.11.2"
version = "1.11.3"
dependencies = [
"zstd",
]

View File

@@ -1,5 +1,5 @@
[workspace.package]
version = "1.11.2"
version = "1.11.3"
edition = "2024"
rust-version = "1.88"
license = "MIT OR Apache-2.0"

View File

@@ -816,6 +816,17 @@ impl RuntimeBuilder {
let (task_manager, on_shutdown, task_events_tx, graceful_tasks) =
TaskManager::new_parts(handle.clone());
#[cfg(feature = "rayon")]
#[allow(clippy::needless_pass_by_value)]
fn rayon_panic_handler(payload: Box<dyn std::any::Any + Send>) {
let msg = payload
.downcast_ref::<&str>()
.copied()
.or_else(|| payload.downcast_ref::<String>().map(|s| s.as_str()))
.unwrap_or("(no message)");
error!(target: "reth::tasks", %msg, "panic in worker pool thread");
}
#[cfg(feature = "rayon")]
let (
cpu_pool,
@@ -853,6 +864,7 @@ impl RuntimeBuilder {
let proof_storage_worker_pool = rayon::ThreadPoolBuilder::new()
.num_threads(proof_storage_worker_threads)
.thread_name(|i| format!("proof-strg-{i:02}"))
.panic_handler(rayon_panic_handler)
.build()?;
let proof_account_worker_threads =
@@ -860,6 +872,7 @@ impl RuntimeBuilder {
let proof_account_worker_pool = rayon::ThreadPoolBuilder::new()
.num_threads(proof_account_worker_threads)
.thread_name(|i| format!("proof-acct-{i:02}"))
.panic_handler(rayon_panic_handler)
.build()?;
debug!(

View File

@@ -1282,6 +1282,16 @@ where
Ok(())
}
/// Clears internal computation state. Called after errors to ensure the calculator is not
/// left in a partially-computed state when reused.
fn clear_computation_state(&mut self) {
self.branch_stack.clear();
self.branch_path = Nibbles::new();
self.child_stack.clear();
self.cached_branch_stack.clear();
self.retained_proofs.clear();
}
/// Internal implementation of proof calculation. Assumes both cursors have already been reset.
/// See docs on [`Self::proof`] for expected behavior.
fn proof_inner(
@@ -1303,12 +1313,15 @@ where
// Divide targets into chunks, each chunk corresponding to a different sub-trie within the
// overall trie, and handle all proofs within that sub-trie.
for sub_trie_targets in iter_sub_trie_targets(targets) {
self.proof_subtrie(
if let Err(err) = self.proof_subtrie(
value_encoder,
&mut trie_cursor_state,
&mut hashed_cursor_current,
sub_trie_targets,
)?;
) {
self.clear_computation_state();
return Err(err);
}
}
trace!(
@@ -1378,12 +1391,15 @@ where
let sub_trie_targets =
SubTrieTargets { prefix: Nibbles::new(), targets: &EMPTY_TARGETS, retain_root: true };
self.proof_subtrie(
if let Err(err) = self.proof_subtrie(
value_encoder,
&mut trie_cursor_state,
&mut hashed_cursor_current,
sub_trie_targets,
)?;
) {
self.clear_computation_state();
return Err(err);
}
// proof_subtrie will retain the root node if retain_proof is true, regardless of if there
// are any targets.
@@ -1815,6 +1831,79 @@ mod tests {
}
}
/// Tests that `clear_computation_state` properly resets internal stacks, allowing a
/// `ProofCalculator` to be reused after a mid-computation error left stale state.
/// Before the fix, stale data in `branch_stack`, `child_stack`, and `branch_path`
/// could cause a `usize` underflow panic in `pop_branch`.
#[test]
fn test_proof_calculator_reuse_after_error() {
use alloy_primitives::U256;
reth_tracing::init_test_tracing();
let mut post_state = HashedPostState::default();
let addresses = [
B256::right_padding_from(&[0x10]),
B256::right_padding_from(&[0x20]),
B256::right_padding_from(&[0x30]),
B256::right_padding_from(&[0x40]),
];
for addr in &addresses {
let account =
Account { nonce: 1, balance: U256::from(100u64), bytecode_hash: Some(B256::ZERO) };
post_state.accounts.insert(*addr, Some(account));
}
let harness = ProofTestHarness::new(post_state);
let trie_cursor = harness.trie_cursor_factory.account_trie_cursor().unwrap();
let hashed_cursor = harness.hashed_cursor_factory.hashed_account_cursor().unwrap();
let mut proof_calculator = ProofCalculator::new(trie_cursor, hashed_cursor);
// Simulate stale state left by a mid-computation error: push fake entries onto internal
// stacks and set a non-empty branch_path.
proof_calculator.branch_stack.push(ProofTrieBranch {
ext_len: 2,
state_mask: TrieMask::new(0b1111),
masks: None,
});
proof_calculator.branch_stack.push(ProofTrieBranch {
ext_len: 0,
state_mask: TrieMask::new(0b11),
masks: None,
});
proof_calculator
.child_stack
.push(ProofTrieBranchChild::RlpNode(RlpNode::word_rlp(&B256::ZERO)));
proof_calculator.branch_path = Nibbles::from_nibbles([0x1, 0x2, 0x3]);
// clear_computation_state should reset everything so a subsequent proof() call works.
proof_calculator.clear_computation_state();
let mut value_encoder = SyncAccountValueEncoder::new(
harness.trie_cursor_factory.clone(),
harness.hashed_cursor_factory.clone(),
);
let mut sorted_addresses = addresses.to_vec();
sorted_addresses.sort();
let mut targets: Vec<ProofV2Target> =
sorted_addresses.iter().copied().map(ProofV2Target::new).collect();
let result = proof_calculator.proof(&mut value_encoder, &mut targets).unwrap();
// Compare against a fresh calculator to verify correctness.
let trie_cursor = harness.trie_cursor_factory.account_trie_cursor().unwrap();
let hashed_cursor = harness.hashed_cursor_factory.hashed_account_cursor().unwrap();
let mut fresh_calculator = ProofCalculator::new(trie_cursor, hashed_cursor);
let mut value_encoder = SyncAccountValueEncoder::new(
harness.trie_cursor_factory.clone(),
harness.hashed_cursor_factory,
);
let fresh_result = fresh_calculator.proof(&mut value_encoder, &mut targets).unwrap();
pretty_assertions::assert_eq!(fresh_result, result);
}
mod proptest_tests {
use super::*;
use alloy_primitives::{map::B256Map, U256};

View File

@@ -22,7 +22,7 @@ export default defineConfig({
},
{ text: 'GitHub', link: 'https://github.com/paradigmxyz/reth' },
{
text: 'v1.11.2',
text: 'v1.11.3',
items: [
{
text: 'Releases',