feat(world-state): add blockHash verification to syncImmediate#21556
Open
spalladino wants to merge 1 commit intomerge-train/spartanfrom
Open
feat(world-state): add blockHash verification to syncImmediate#21556spalladino wants to merge 1 commit intomerge-train/spartanfrom
spalladino wants to merge 1 commit intomerge-train/spartanfrom
Conversation
Adds an optional `BlockHash` parameter to `syncImmediate` for reorg detection. When provided, verifies the block at the target number matches the expected hash. On mismatch, triggers a resync; if still mismatched after sync, throws. Also removes dead `skipThrowIfTargetNotReached` parameter (no caller passed `true`). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.
Motivation
syncImmediatesyncs world state to a target block number but does not verify block identity. If a reorg occurred and the world state is at the same height but on a different fork, the method returns early without detecting the mismatch. Additionally,skipThrowIfTargetNotReachedwas dead code with no caller ever passingtrue.Approach
Added an optional typed
BlockHashparameter tosyncImmediate. When at or past the target height, the implementation checks the hash viagetL2BlockHashbefore returning early. On mismatch it falls through to trigger a resync. After syncing, if the hash still doesn't match, it throws aWorldStateSynchronizerErrorwith reasonblock_hash_mismatch. Removed the unusedskipThrowIfTargetNotReachedparameter entirely.Changes
WorldStateSynchronizerinterface signature — replacedskipThrowIfTargetNotReached?: booleanwithblockHash?: BlockHashServerWorldStateSynchronizer.syncImmediatewith pre-sync and post-sync checksFeePayerBalanceEvictionRulenow passBlockHashfromcontext.block.hash()on BLOCK_MINED events