paradigmxyz
reth
Blog
Docs
Changelog
Blog
Docs
Changelog
Overview
Branches
Benchmarks
Runs
Performance History
Latest Results
fix(provider): bound static file changeset range to prevent infinite iteration When account_changesets_range is called with an unbounded range on the static file provider, the changeset walker would loop forever because: 1. For blocks beyond the static file tip, account_block_changeset returns Ok(Vec::new()) due to MissingStaticFileBlock being caught 2. The walker can't distinguish this from a block with no changes 3. It keeps incrementing current_block trying to find data This caused proof workers to hang when processing competing payloads, as the overlay provider would call from_reverts with unbounded ranges. After 300 seconds, MDBX would timeout the read transactions. Fix: Add bound_range() helper that converts unbounded range ends to the highest static file block for the segment. Use this in account_changesets_range to ensure iteration terminates at the actual data boundary.
fix/unbounded-changeset-range-infinite-loop
49 seconds ago
docs: fix misleading comment about serial revealed_paths clearing Amp-Thread-ID: https://ampcode.com/threads/T-019c0319-fc90-70af-9d7f-84e22a84995a
yk/prune-stc
3 minutes ago
Merge origin/main into branch
mediocregopher/21242-proof-v2-enable
3 minutes ago
feat(db): add unsynchronized transaction variants for improved performance This adds TXUnsync and TXMutUnsync associated types to the Database trait, providing faster transaction and cursor implementations that avoid Arc and Mutex overhead at the cost of not being Sync. Key changes: - Add TransactionUnsync and CursorUnsync types in reth-libmdbx - Add TxUnsync and CursorUnsync wrappers in reth-db implementing DbTx/DbTxMut - Add tx_unsync() and tx_mut_unsync() methods to Database trait - Update DatabaseMock and DatabaseEnv implementations Amp-Thread-ID: https://ampcode.com/threads/T-019c01a4-857b-76de-808d-9e43569bd672 Co-authored-by: Amp <amp@ampcode.com>
feat/unsync-transactions
4 minutes ago
fix(trie): prevent infinite loop in from_reverts with unbounded range When from_reverts is called with an unbounded range (e.g., `from_block + 1..`), it previously used BlockNumber::MAX as the end bound. This caused the static file changeset walker to loop forever, because: 1. For blocks beyond the static file tip, get_segment_provider_for_block returns MissingStaticFileBlock 2. This is caught and returns Ok(Vec::new()) - an empty changeset 3. The walker interprets this as "block has no changes" and continues 4. It keeps incrementing current_block trying to find the next block with data, but never finds one 5. The loop continues until current_block reaches MAX This manifested in production when processing competing payloads at the same block height. The overlay state provider's calculate_overlay would call from_reverts with an unbounded range, causing the proof workers to hang indefinitely. After 300 seconds, MDBX would timeout the long-lived read transactions held by these workers. Fix: When the range end is unbounded, use the provider's last_block_number() + 1 instead of MAX. This bounds the iteration to blocks that actually exist.
fix/unbounded-changeset-range-infinite-loop
7 minutes ago
fix(trie): prevent infinite loop in from_reverts with unbounded range When from_reverts is called with an unbounded range (e.g., `from_block + 1..`), it previously used BlockNumber::MAX as the end bound. This caused the static file changeset walker to loop forever, because: 1. For blocks beyond the static file tip, get_segment_provider_for_block returns MissingStaticFileBlock 2. This is caught and returns Ok(Vec::new()) - an empty changeset 3. The walker interprets this as "block has no changes" and continues 4. It keeps incrementing current_block trying to find the next block with data, but never finds one 5. The loop continues until current_block reaches MAX This manifested in production when processing competing payloads at the same block height. The overlay state provider's calculate_overlay would call from_reverts with an unbounded range, causing the proof workers to hang indefinitely. After 300 seconds, MDBX would timeout the long-lived read transactions held by these workers. Fix: When the range end is unbounded, use the provider's last_block_number() + 1 instead of MAX. This bounds the iteration to blocks that actually exist.
fix/unbounded-changeset-range-infinite-loop
9 minutes ago
Update mod.rs
katikatidimon:main
9 minutes ago
feat(trie): add update_leaves method to SparseTrie Add batch update_leaves method that collects proof targets for blinded nodes instead of fetching proofs one-at-a-time. This enables batch proof fetching with a single database call. Key changes: - Move Target struct to reth-trie-common for reuse across crates - Make update_leaf transactional by deferring all mutations to end - Add LeafUpdate enum for batch operations - Add update_leaves method to SparseTrie trait - Add find_blinded_on_path helper for read-only traversal The transactional fix ensures that if update_leaf hits a BlindedNode error, no partial mutations are left in the trie, making retries safe. Closes RETH-177 Amp-Thread-ID: https://ampcode.com/threads/T-019c03f0-b517-7209-a875-8eeb8c8a185f
yk/update_leaves
17 minutes ago
Active Branches
feat(trie): Enable proofs v2 by default
last run
3 minutes ago
#21434
CodSpeed Performance Gauge
0%
fix(trie): prevent infinite loop in from_reverts with unbounded range
last run
9 minutes ago
#21510
CodSpeed Performance Gauge
0%
fix: refactor JWT secret loading in reth-bench to a shared helper
last run
9 minutes ago
#21509
CodSpeed Performance Gauge
0%
© 2026 CodSpeed Technology
Home
Terms
Privacy
Docs