Repository navigation
Conversation
(cherry picked from commit 3c8b4e8)
xenoliss
marked this pull request as ready for review
November 9, 2026 22:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Backports paradigmxyz#28148 (upstream commit 3c8b4e8) onto
releases/v2.8.1.When a block destroys an account (for example an EIP-161 cleanup) and recreates it in the same block, the bundle account ends with status
DestroyedChanged: it was destroyed, but it has post-block info and storage.ExecutionCache::insert_statetreated every destroyed account the same way. It removed the account from the account cache and skipped the rest, so the storage written by the recreation never reached the storage cache. If a slot of that account had been cached during prewarming (for example as zero), the stale value stayed in the cache. The next block then executed against the wrong value and the node rejected a valid block.What
Cherry-picked with
-x, upstream authorship kept. The upstream change only removes a destroyed account from the cache when it has no post-block info (account.info.is_none()). Otherwise the account falls through to the normal path, which writes its info and storage. The production change applied cleanly and is identical to upstream.The only adaptation is in the test module's imports, resolved inside the cherry-pick commit. v2.8.1 imports the bundle types from
reth_revm::dbandAccountInfofromrevm::state, not from upstream main'sreth_trie_common::bundle_stateandevm2::evm. So the new test'sStorageSlotis imported asreth_revm::db::states::StorageSlot. The upstream test body is unchanged.Testing
cargo +1.96.0 test -p reth-execution-cache --lib: 21 passed, including the newtest_insert_state_recreated_account_updates_cached_storage.left: Some(0),right: Some(7)). It catches the stale cached slot.cargo +1.96.0 clippy -p reth-execution-cache --lib --tests --all-features --locked -- -D warnings: clean.cargo +nightly fmt --check: clean.Closes CHAIN-6833