Skip to content

fix: backport #21443 — Don't update state if we failed to execute sufficient transactions (v4)#21610

Merged
PhilWindle merged 5 commits intobackport-to-v4-stagingfrom
claudebox/backport-21443-to-v4
Mar 16, 2026
Merged

fix: backport #21443 — Don't update state if we failed to execute sufficient transactions (v4)#21610
PhilWindle merged 5 commits intobackport-to-v4-stagingfrom
claudebox/backport-21443-to-v4

Conversation

@AztecBot
Copy link
Collaborator

Summary

Backport of #21443 to v4.

This PR fixes a bug in block building where the sequencer would update state even when it failed to execute sufficient transactions. The fix:

  • Replaces NoValidTxsError with InsufficientValidTxsError (includes processedCount and minRequired)
  • Moves the minimum valid tx check into CheckpointBuilder.buildBlock() so state is not updated for blocks that will be discarded
  • Introduces a ForkCheckpoint wrapper to revert world state changes on failure
  • Passes minValidTxs from CheckpointProposalJob into the builder

Cherry-pick conflicts

The second commit (3ccb6868a8 — Use an additional world state fork checkpoint) conflicted in checkpoint_builder.ts because the first commit had already restructured the code into the try/catch/ForkCheckpoint pattern. The conflict was just duplicate leftover code that needed to be removed.

Build fix

On v4, LightweightCheckpointBuilder.addBlock() returns Promise<L2Block> directly, while on next it returns Promise<{ block: L2Block, timings: ... }>. Adjusted the destructuring accordingly.

Commit structure

  1. Cherry-pick: Don't update state if we failed to execute sufficient transactions (clean)
  2. Cherry-pick with conflicts: Use an additional world state fork checkpoint when building blocks
  3. Conflict resolution: Remove duplicate code block left by conflict
  4. Cherry-pick: Comment (clean)
  5. Build fix: Adapt to v4 API (addBlock returns L2Block directly)

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

@AztecBot AztecBot added the claudebox Owned by claudebox. it can push to this PR. label Mar 16, 2026
@PhilWindle PhilWindle marked this pull request as ready for review March 16, 2026 16:08
@PhilWindle PhilWindle merged commit 6dc47dc into backport-to-v4-staging Mar 16, 2026
18 of 19 checks passed
@PhilWindle PhilWindle deleted the claudebox/backport-21443-to-v4 branch March 16, 2026 16:08
alexghr pushed a commit that referenced this pull request Mar 17, 2026
BEGIN_COMMIT_OVERRIDE
fix(aztec-nr): return Option from decode functions and fix event
commitment capacity (backport #21264) (#21360)
fix: backport #21271 — handle bad note lengths on
compute_note_hash_and_nullifier (#21364)
fix: not reusing tags of partially reverted txs (#20817)
chore: revert accidental backport of #20817 (#21583)
feat: Implement commit all and revert all for world state checkpoints
(#21532)
cherry-pick: fix: dependabot alerts (#21531)
fix: dependabot alerts (backport #21531 to v4) (#21592)
fix: backport #21443 — Don't update state if we failed to execute
sufficient transactions (v4) (#21610)
chore: Fix msgpack serialisation (#21612)
END_COMMIT_OVERRIDE

---------

Co-authored-by: Jan Beneš <janbenes1234@gmail.com>
Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Co-authored-by: Phil Windle <philip.windle@gmail.com>
Co-authored-by: Santiago Palladino <santiago@aztecprotocol.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ludamad <adam.domurad@gmail.com>
alexghr added a commit that referenced this pull request Mar 17, 2026
BEGIN_COMMIT_OVERRIDE
fix(aztec-nr): return Option from decode functions and fix event
commitment capacity (backport #21264) (#21360)
fix: backport #21271 — handle bad note lengths on
compute_note_hash_and_nullifier (#21364)
fix: not reusing tags of partially reverted txs (#20817)
chore: revert accidental backport of #20817 (#21583)
feat: Implement commit all and revert all for world state checkpoints
(#21532)
cherry-pick: fix: dependabot alerts (#21531)
fix: dependabot alerts (backport #21531 to v4) (#21592)
fix: backport #21443 — Don't update state if we failed to execute
sufficient transactions (v4) (#21610)
chore: Fix msgpack serialisation (#21612)
fix(p2p): fall back to maxTxsPerCheckpoint for per-block tx validation
(#21605)
chore: merge v4 into backport-to-v4-staging (#21618)
fix(revert): avm sim uses event loop again (#21138) (#21630)
fix(e2e): remove historic/finalized block checks from epochs_multiple
test (#21642)
fix: clamp finalized block to oldest available in world-state (#21643)
fix: skip handleChainFinalized when block is behind oldest available
(#21656)
chore: demote finalized block skip log to trace (#21661)
fix: off-by-1 in getBlockHashMembershipWitness archive snapshot
(backport #21648) (#21663)
fix: capture txs not available error reason in proposal handler (#21670)
chore: add L1 inclusion time to stg public (#21665)
END_COMMIT_OVERRIDE

---------

Co-authored-by: Jan Beneš <janbenes1234@gmail.com>
Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Co-authored-by: Phil Windle <philip.windle@gmail.com>
Co-authored-by: Santiago Palladino <santiago@aztecprotocol.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ludamad <adam.domurad@gmail.com>
Co-authored-by: Alex Gherghisan <alexghr@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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