Skip to content

fix(archiver): handle duplicate checkpoint from L1 reorg (backport #22252)#22257

Merged
PhilWindle merged 2 commits into
backport-to-v4-stagingfrom
claudebox/backport-22252-archiver-dup-checkpoint
Apr 2, 2026
Merged

fix(archiver): handle duplicate checkpoint from L1 reorg (backport #22252)#22257
PhilWindle merged 2 commits into
backport-to-v4-stagingfrom
claudebox/backport-22252-archiver-dup-checkpoint

Conversation

@AztecBot

@AztecBot AztecBot commented Apr 2, 2026

Copy link
Copy Markdown
Collaborator

Summary

Backport of #22252 to v4.

Fixes a mainnet issue where an L1 reorg moved a checkpoint to a different L1 block, causing the archiver to re-discover it and crash with InitialCheckpointNumberNotSequentialError in an infinite loop.

When addCheckpoints receives a checkpoint that's already stored, it now:

  • Accepts it if the archive root matches (same content, just different L1 block)
  • Updates the L1 metadata (block number, timestamp, hash) and attestations
  • Throws if the archive root doesn't match (content mismatch — genuine conflict)

Conflict Resolution

Cherry-pick had one conflict in block_store.ts:

  • v4 uses inline code for extracting previous checkpoint block data; next refactored this into a getPreviousCheckpointBlock() helper. Kept v4's inline approach but updated to use checkpoints[0] reference (correct after potential skip of already-stored checkpoints).
  • Only ported skipOrUpdateAlreadyStoredCheckpoints method (the fix). Dropped getPreviousCheckpointBlock and validateCheckpointBlocks refactors that exist on next but not v4.

Test Results

  • 176 passed in kv_archiver_store.test.ts
  • 33 passed in archiver-sync.test.ts (includes new handles L1 reorg that moves a checkpoint to a later L1 block test)
  • Build, format pass

ClaudeBox log: https://claudebox.work/s/21a4c138364df1ef?run=1

AztecBot and others added 2 commits April 2, 2026 10:17
Adapted block_store.ts for v4 branch structure:
- Kept v4's inline previous-checkpoint-block extraction (no getPreviousCheckpointBlock helper)
- Used checkpoints[0] reference instead of firstCheckpointNumber for post-skip correctness
- Only included skipOrUpdateAlreadyStoredCheckpoints method (the actual fix)
- Dropped getPreviousCheckpointBlock and validateCheckpointBlocks refactors from next
@AztecBot AztecBot added ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels Apr 2, 2026
@PhilWindle PhilWindle marked this pull request as ready for review April 2, 2026 10:44
@PhilWindle PhilWindle enabled auto-merge April 2, 2026 10:44
@PhilWindle PhilWindle merged commit af7324b into backport-to-v4-staging Apr 2, 2026
30 of 36 checks passed
@PhilWindle PhilWindle deleted the claudebox/backport-22252-archiver-dup-checkpoint branch April 2, 2026 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants