chore(fast-inbox): delete legacy node message paths (A-1388) - #24793
Closed
spalladino wants to merge 18 commits into
Closed
chore(fast-inbox): delete legacy node message paths (A-1388)#24793spalladino wants to merge 18 commits into
spalladino wants to merge 18 commits into
Conversation
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 01:25
92cecbd to
83a74e1
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 01:25
d06eb0f to
7e1dc3d
Compare
This was referenced Jul 19, 2026
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 14:05
7e1dc3d to
0e1e0ed
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
2 times, most recently
from
July 19, 2026 15:10
115b351 to
5817030
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
2 times, most recently
from
July 19, 2026 15:36
2277ca8 to
43ac45a
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 15:36
5817030 to
01b921a
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 17:57
43ac45a to
b82f5cc
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 17:57
01b921a to
6269f44
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 18:02
b82f5cc to
8287158
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 18:02
6269f44 to
3111d18
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 20:30
8287158 to
4c4c1a8
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 20:30
38cadbf to
5660774
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 20:48
4c4c1a8 to
c51c85b
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 20:48
5660774 to
7fa4b0a
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 19, 2026 20:51
c51c85b to
de57be7
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 19, 2026 20:51
7fa4b0a to
0224d57
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 20, 2026 13:32
de57be7 to
ce83790
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 20, 2026 13:32
0224d57 to
02cd879
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 20, 2026 14:07
ce83790 to
f853ebe
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 20, 2026 14:07
02cd879 to
05a1f0c
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 20, 2026 15:30
f853ebe to
9d37080
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 20, 2026 15:30
05a1f0c to
93b18af
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 20, 2026 17:28
9d37080 to
c50ce18
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
2 times, most recently
from
July 20, 2026 21:21
5cc8950 to
94dec7d
Compare
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 27, 2026 20:53
92c4a70 to
f4cc2db
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 27, 2026 20:53
398aa38 to
f0fb1e1
Compare
Removes the legacy inboxLag / AZTEC_INBOX_LAG config field and env var from ethereum config, foundation env vars, the network-consensus-config list, the l1-contracts and spartan network defaults, and the e2e test option plumbing. Also drops the removed inHash argument from the e2e web3signer createBlockProposal wrapper.
…ers from stdlib/p2p (A-1388) Deletes computeInHashFromL1ToL2Messages and the inHash field from BlockProposal (including its signed-payload slot), the CheckpointProposal getBlockProposal pass-through, and the createBlockProposal inHash argument on the validator interface. Removes the padded per-checkpoint InboxLeaf helpers (smallestIndexForCheckpoint / indexRangeForCheckpoint / checkpointNumberFromIndex) and the legacy getL1ToL2Messages(checkpointNumber) member from the L1ToL2MessageSource and archiver RPC interfaces. Regenerates the block-proposal golden wire fixtures for the shrunk payload; the p2p wire format changes at a release boundary (fresh networks), matching the A-1381 optional-tail precedent.
…aths in the archiver (A-1388) Removes the legacy getL1ToL2Messages(checkpointNumber) flow, the padded per-checkpoint index invariants, the inboxTreeInProgress readiness gate, and the L1ToL2MessagesNotReadyError. InboxMessage drops the 128-bit keccak rollingHash and the vacuous derived checkpointNumber, so messages carry only the compact global index and the full-width consensus rolling hash; the store serialization changes and ARCHIVER_DB_VERSION bumps to 9 (nodes resync, no migration). Reorg detection now compares the local consensus rolling hash and total against the Inbox's current rolling-hash bucket via new getBucket/getCurrentBucketSeq/getCurrentBucket wrappers, replacing the 128-bit getState comparison. Test fakes/mocks move to compact indexing.
…lidator (A-1388) Removes the dead inHash=Fr.ZERO plumbing through the checkpoint proposal job and the validator/validation-service createBlockProposal path, and deletes the dead in_hash_mismatch validation-failure reason from proposal_handler, validator, and metrics. Updates the sequencer/validator test mocks and callers for the dropped inHash argument and the removed getL1ToL2Messages message source member.
…ator message fetch (A-1388) Drops the no-op first-in-checkpoint padding alias and its stale docs in world-state, and removes the obsolete non-first-block-empty-bundle transitional test. The node public-calls simulator no longer fetches next-checkpoint messages via the removed per-checkpoint API and drops its now-unused l1ToL2MessageSource dependency, simulating against the fork's current tree (streaming Inbox consumes per block). Rewrites the THREAT_MODEL inHash/consume passages to the consensus rolling-hash / bucket model.
…ts (A-1388) The optional bucket-reference tail keeps proposals that omit it round-tripping cleanly; it does not make the wire byte-identical to the pre-inHash-removal format. Reword the toBuffer/fromBuffer comments to describe only the tail's unset case.
… tests (A-1388) The env sweep removed AZTEC_INBOX_LAG from scripts/network-defaults.json but both deploy-script test setUps still readUint the key, which reverts (vm.parseJsonUint on a missing path), failing the suites before any test runs. The deploy configuration no longer consumes the env var.
…proposal formats (A-1388) The attestation store persists raw BlockProposal and CheckpointAttestation buffers. Both changed shape in this stack (the checkpoint header lost inHash and the block-proposal wire format dropped its zeroed inHash), and stored checkpoint attestations are decoded without a tolerant fallback, so a store written by a pre-Fast-Inbox node would throw on read. Bump 2 -> 3 to wipe stale pools, matching the archiver's no-migration bump.
…388) Removes the dead AZTEC_INBOX_LAG entries from the spartan environment profiles and the governance-upgrade tutorial, rewrites the validator and sequencer README sections that still described the legacy inHash flow, and drops e2e comments that still explained fixture settings in terms of the deleted inboxLag / L1ToL2MessagesNotReadyError behavior. Versioned docs snapshots are left untouched.
…mple inbox ABIs (A-1386)
…(A-1388) Finding the cut point for an L1-block rollback walked the messages backwards from the tip, deserializing every message being removed just to learn where the removal starts. A bucket lives entirely within one L1 block and its snapshot now records that block plus the bucket's first message index, so scan the bucket snapshots instead — a few records per L1 block rather than one per message.
…sage leaf index (A-1388) Blocks consume Inbox messages in order into consecutive L1-to-L2 tree leaves, so a message is available at a tip exactly when that tip's leaf count has grown past the message's index — one comparison against data every block header already carries. `isL1ToL2MessageReady` now does that via `getL1ToL2MessageIndex`, which also drops its stale claim that messages land in the first block of a checkpoint. The `getL1ToL2MessageCheckpoint` node RPC method existed only to answer this question and needed a binary search over block records to do it, so delete it: node service, world-state queries, interface, schema, and its callers. `getL1ToL2MessageIndex` takes its place in the operator API reference.
…ing public calls (A-1388) A transaction that consumes an L1-to-L2 message sent moments ago failed public simulation until a block actually consumed the message, because the simulation fork stops at the tip's message tree. Predict the bundle the next block would take — the sequencer's own bucket selection, so lag eligibility and the per-block/per-checkpoint caps match what will be built — and append it to the fork. The prediction treats the next block as non-final (the censorship cutoff only widens consumption on a checkpoint's last block, which the node cannot know) and derives its cursor from the fork's own leaf count, so it can never re-insert messages the fork already holds. Best-effort: unsynced buckets or a missing header leave the simulation on the bare tip, as before.
spalladino
force-pushed
the
spl/a-1387-circuits-cleanup
branch
from
July 28, 2026 12:37
f4cc2db to
666df4c
Compare
spalladino
force-pushed
the
spl/a-1388-node-cleanup
branch
from
July 28, 2026 12:38
f0fb1e1 to
2d04b54
Compare
Contributor
Author
|
Superseded by #25038. The Fast Inbox stack has been regrouped from 20 per-issue PRs (plus 2 umbrellas) down to 3 area PRs plus an umbrella, and rebased onto New structure: #25036 (circuits + L1) → #25037 (node + flip) → #25038 (cleanup), with #25039 as the full-stack umbrella. The original branch for this PR is left on the remote as a recovery point. Closing here to cut the rebase and review overhead of maintaining 22 PRs; the work is not abandoned. |
spalladino
added a commit
that referenced
this pull request
Jul 28, 2026
Deletes the legacy L1 Inbox path now that `propose` enforces streaming-inbox consumption (AZIP-22 Fast Inbox, FI-16). Stacked on `spl/a-1385-streaming-e2e`; part of the Fast Inbox stack (#24784..#24790 below this one). ## What is deleted - **Frontier trees**: the `trees` mapping, `forest`, `HEIGHT`/`SIZE`/`EMPTY_ROOT`, the per-message tree insert, `getRoot()`, and the whole `consume()` flow. - **LAG / inboxLag**: the `LAG` immutable and `_lag`/`_height` constructor args (the Inbox constructor is now `(rollup, feeAsset, version, bucketRingSize)`), `RollupConfigInput.inboxLag` and its `RollupCore` pass-through, and `Constants.L1_TO_L2_MSG_SUBTREE_HEIGHT` from the Inbox construction. - **Dead event field**: the `MessageSent.checkpointNumber` (former `inProgress`) argument, which became meaningless once `consume()` stopped advancing it. - **Orphaned errors**: `Inbox__Unauthorized`, `Inbox__MustBuildBeforeConsume`, `Rollup__InvalidInHash`. ## What is re-homed / kept - The compact message index now reads the current bucket's running total (`totalMsgCount`) instead of a parallel counter; `InboxState.inProgress` and `getInProgress()` are gone. - The 128-bit `rollingHash`, `InboxState.{rollingHash, totalMessagesInserted}`, `getState()`, and `getTotalMessagesInserted()` are **kept**: the node still consumes them for message sync and L1-reorg detection. Their removal is the node cleanup's job (FI-18). - `FrontierLib` is **kept** — it still backs the base-parity (`test/Parity.t.sol`) and merkle (`test/merkle/Frontier.t.sol`) tests, which are unrelated to the Inbox (parity-circuit territory, FI-17). The plan's "delete the file" assumption is contradicted by grep. ## TS follow-through - `ethereum` InboxContract: drop `getLag()`, drop the `MessageSent.checkpointNumber` decode, stop reading `inProgress`; `InboxContractState.treeInProgress` is now optional (no longer tracked on-chain). - Stop threading `inboxLag` through `queries.getL1ContractsConfig` and the L1 deploy env. The broader `AZTEC_INBOX_LAG` config sweep (`ethereum/src/config.ts`, `foundation`, `stdlib`, ~30 e2e configs) is deferred to FI-18, which explicitly owns it. - Archiver decode derives the message's checkpoint number from the compact index (the event no longer carries it), keeping the legacy per-checkpoint store shape untouched for FI-18. - Removed the obsolete `advanceInboxInProgress` cheat code + its inbox-drift tests, and the orphaned archiver `inHash`-mismatch sync test (the cross-check was removed at the flip). ## Gas Deleting the frontier insert is a large `sendL2Message` win. Whole-test gas (`forge test` on `InboxBuckets.t.sol`), before → after: | Case | Before | After | | --- | --- | --- | | First-ever message | 175,251 | 116,835 | | First message of a new L1 block | 329,460 | 195,555 | | Absorb into an existing bucket | 286,673 | 149,968 | | Rollover mid-block (256 messages) | 18,923,988 | 3,068,480 | Per-call `sendL2Message` gas after cleanup: first-ever 99,526; first-of-new-block 53,763; existing-bucket absorb 9,273; rollover 53,801. ## Testing - `forge build` + `forge test` green: 887 passed, 0 failed. This fixes 4 pre-existing baseline failures the flip stranded (`fee_portal`/`TokenPortal` deposit tests using tree-relative indices + the old event shape). - `@aztec/ethereum` builds clean; `config`/`queries` unit tests green. - `@aztec/archiver` has no self-owned type errors; `message_store` (36), `archiver-sync` (59), and the decode/struct suites (58) all pass. (Pre-existing `noir-protocol-circuits-types` stale-artifact errors are unaffected.) - e2e not run locally. The stability gate ("a few days of green e2e/networks before deleting the fallback") applies at merge time for this stacked line, not at PR creation. ## Review follow-up (phase-2 final review) Deleting the inbox-drift bot test left `bot.test.ts`'s `cheatCodes` variable unused (lint error); a follow-up commit removes it. ## Leftover sweep (post-review) - Corrected the `PublicInputArgs` natspec in `IRollup.sol`: it still described `previousInboxRollingHash` / `endInboxRollingHash` as deliberately unvalidated "until the Fast Inbox flip", but the flip (#24789, below this branch) added exactly that validation — `EpochProofLib` anchors the start boundary against the propose-time record, and the end boundary is covered transitively by the stored checkpoint header hashes. The comment now describes the implemented behavior. - The 128-bit rolling hash this PR deliberately kept (see "What is re-homed / kept") is now removed at the node-cleanup PR #24793, where its last TS readers disappear. Replaces #24791.
spalladino
added a commit
that referenced
this pull request
Jul 28, 2026
Node cleanup for the Fast Inbox (AZIP-22) project — removes the legacy L1-to-L2 message paths the flip (#24789) left dead. Sits on the Fast Inbox stack (#24784..#24792); base is `spl/a-1387-circuits-cleanup`. ## What's removed - **stdlib / p2p**: `computeInHashFromL1ToL2Messages` and the whole `in_hash.ts`; the `inHash` field on `BlockProposal` (constructor, signed payload, wire, and the `createBlockProposal` validator-interface argument); the `CheckpointProposal.getBlockProposal` `inHash` pass-through; the padded per-checkpoint `InboxLeaf` helpers (`smallestIndexForCheckpoint` / `indexRangeForCheckpoint` / `checkpointNumberFromIndex`); the legacy `getL1ToL2Messages(checkpointNumber)` member from the `L1ToL2MessageSource` and archiver RPC interfaces. - **archiver**: the legacy per-checkpoint `getL1ToL2Messages` flow, the padded per-checkpoint index invariants, the `inboxTreeInProgress` readiness gate + `L1ToL2MessagesNotReadyError`, and the 128-bit keccak rolling hash. `InboxMessage` now carries only the compact global index and the full-width consensus rolling hash (the vacuous derived `checkpointNumber` and the 128-bit `rollingHash` are gone). Reorg detection compares the local consensus rolling hash and total against the Inbox's current rolling-hash bucket (new `getBucket` / `getCurrentBucketSeq` / `getCurrentBucket` wrappers) instead of the 128-bit `getState`. - **sequencer / validator**: the dead `inHash = Fr.ZERO` threading through the checkpoint proposal job and the validator/validation-service create-proposal path, plus the dead `in_hash_mismatch` validation-failure reason. - **world-state**: the no-op first-in-checkpoint padding alias and the obsolete non-first-block-empty-bundle transitional test (the production assertion was already removed at the flip). - **node**: the public-calls simulator's dead next-checkpoint message fetch and its now-unused `l1ToL2MessageSource` dependency. - **config / env**: `AZTEC_INBOX_LAG` / `inboxLag` from ethereum config, foundation env vars, the network-consensus-config list, the l1-contracts + spartan network defaults, and the e2e option plumbing. - **docs**: `THREAT_MODEL.md` and the archiver README rewritten from the `inHash == inbox.consume(...)` model to the consensus rolling-hash / bucket model. ## Format / store / wire notes - **Store version bump**: `ARCHIVER_DB_VERSION` 8 → 9 because `InboxMessage` serialization dropped `rollingHash` + `checkpointNumber` and the `inboxTreeInProgress` singleton is gone. No migration — nodes resync (fresh rollup instance per release line, same no-migration policy as the rest of the stack). - **p2p wire format**: dropping the (zeroed-since-flip) `inHash` shrinks the block-proposal bytes. Done as a plain removal at a release boundary (fresh networks), matching the A-1381 optional-tail precedent; the golden `wire_compat_fixtures.ts` buffers were regenerated. The checkpoint-proposal fixture is unaffected (it never carried `inHash`). - **L1 follow-through: done (leftover sweep, below).** The on-chain Inbox 128-bit `messagesRollingHash` accumulation, `InboxState.rollingHash`, and the `MessageSent.rollingHash` event arg are now removed in this PR — this is the earliest branch where it is safe, since the TS reads disappear here. `getState()` / `getTotalMessagesInserted()` are kept: `chain_monitor` and fast node sync still read the message count. ## Testing Locally green (unit suites that run without `@aztec/bb-avm-sim`): archiver (561), stdlib p2p + interfaces (76), world-state synchronizer + native (74), validator-client unit (38), ethereum config (6). Suites that import `@aztec/bb-avm-sim` (p2p libp2p, sequencer-client, node simulator, validator integration) and full typecheck of the packages downstream of the pinned-VK blocker are CI-validated. No e2e / VK regen locally. ## Review follow-up (phase-2 final review) Four commits were appended by the final review pass: - The env sweep removed `AZTEC_INBOX_LAG` from `scripts/network-defaults.json` while both L1 deploy-script test setUps still `readUint` the key, reverting before any test ran; the reads are gone. - The p2p attestation store version is bumped 2 -> 3: it persists proposal/attestation buffers whose formats changed in this stack (checkpoint header lost `inHash`; block-proposal wire dropped it), and stored checkpoint attestations decode without a tolerant fallback. - `l1_publisher.integration.test.ts` is reworked for streaming consumption: each checkpoint consumes every message sent while it was built, threading the previous checkpoint's rolling hash and reading the propose `bucketHint` from the Inbox's current bucket (the legacy inboxLag shift register is gone). - Remaining `inboxLag`/`inHash` references are swept from the spartan environment profiles, the governance-upgrade tutorial, the validator/sequencer READMEs, and stale e2e comments. ## l1 publisher test dissolved into A-1387 (pass-8) This branch's rewrite of `l1_publisher.integration.test.ts` is superseded by the corrected streaming-selector version landed at A-1387 (#24792): the branch's own message-reconstruction rework commit is dropped and the file is byte-identical to A-1387's here (segment diff for this file is zero). The A-1384 world-state mock bucket registration coexists with this branch's legacy-message-path deletion (the buckets survive the cleanup). First real box verification of this suite at A-1388: l1_publisher 13/13; world-state integration 12/12 at top. ## Leftover sweep (post-review) - Removed the legacy 128-bit keccak inbox rolling hash from L1: `InboxState.rollingHash`, the `MessageSent` `bytes16 rollingHash` event arg, and its keccak accumulation in `Inbox.sol`, updating the four Solidity test suites that asserted it (`Inbox.t`, `InboxBuckets.t`, `TokenPortal.t`, `depositToAztecPublic.t`) and the three live docs-example inbox ABIs that embedded the old event shape. The node's message sync and L1-reorg detection already run entirely on the full-width consensus rolling hash from the buckets. - Deleted the dead `InboxLeaf` class from stdlib (this branch had already removed its per-checkpoint index helpers) and fixed a stale `InboxLeaf` mention in the archiver retrieval JSDoc. - Clarified the checkpoint-builder comments: the up-front whole-checkpoint message insertion (`insertMessagesPerBlock = false`) is only exercised by tests; production always streams messages per block. Replaces #24793.
spalladino
added a commit
that referenced
this pull request
Jul 28, 2026
…ts generator (A-1434) Moves `INBOX_LAG_SECONDS` (12) and `MAX_L1_TO_L2_MSGS_PER_CHECKPOINT` (1024) out of the hand-declared file-scope constants in `ProposeLib.sol` and into the generated `Constants` library, giving L1 Solidity and the TS node a single source of truth (A-1434, Fast Inbox cleanup). Both values already lived in `constants.nr` (the Noir source of truth) and were already emitted to `constants.gen.ts`; the only gap was the Solidity side, which gates emission behind an allowlist. - Add both names to the `SOLIDITY_CONSTANTS` allowlist in `constants/src/scripts/constants.in.ts`, so `yarn remake-constants` emits them into `ConstantsGen.sol`. `constants.gen.ts` is unchanged (already present). - Regenerate `ConstantsGen.sol` (generator output; not hand-edited). - `ProposeLib.sol` imports `Constants` and references the generated values; the hand-declared file-scope copies are deleted. - Update `ProposeInboxConsumption.t.sol` to import the constants from `ConstantsGen.sol` instead of `ProposeLib.sol`. TS node code that validates inbox consumption (`stdlib` cutoff predicate, `validator-client` streaming checks, `sequencer-client` bucket selector) already reads these from `@aztec/constants`, so no TS source change is needed. Testing: - `forge build` and `forge test test/rollup/ProposeInboxConsumption.t.sol` (15 tests) pass. - The three TS regression suites pass: `stdlib` inbox_consumption (10), `validator-client` streaming_inbox_checks (14), `sequencer-client` inbox_bucket_selector (9). - `@aztec/constants`, `@aztec/l1-artifacts`, and `@aztec/ethereum` build. Part of the Fast Inbox stack, on top of #24784..#24793. Replaces #24794.
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.
Node cleanup for the Fast Inbox (AZIP-22) project — removes the legacy L1-to-L2 message paths the flip (#24789) left dead. Sits on the Fast Inbox stack (#24784..#24792); base is
spl/a-1387-circuits-cleanup.What's removed
computeInHashFromL1ToL2Messagesand the wholein_hash.ts; theinHashfield onBlockProposal(constructor, signed payload, wire, and thecreateBlockProposalvalidator-interface argument); theCheckpointProposal.getBlockProposalinHashpass-through; the padded per-checkpointInboxLeafhelpers (smallestIndexForCheckpoint/indexRangeForCheckpoint/checkpointNumberFromIndex); the legacygetL1ToL2Messages(checkpointNumber)member from theL1ToL2MessageSourceand archiver RPC interfaces.getL1ToL2Messagesflow, the padded per-checkpoint index invariants, theinboxTreeInProgressreadiness gate +L1ToL2MessagesNotReadyError, and the 128-bit keccak rolling hash.InboxMessagenow carries only the compact global index and the full-width consensus rolling hash (the vacuous derivedcheckpointNumberand the 128-bitrollingHashare gone). Reorg detection compares the local consensus rolling hash and total against the Inbox's current rolling-hash bucket (newgetBucket/getCurrentBucketSeq/getCurrentBucketwrappers) instead of the 128-bitgetState.inHash = Fr.ZEROthreading through the checkpoint proposal job and the validator/validation-service create-proposal path, plus the deadin_hash_mismatchvalidation-failure reason.l1ToL2MessageSourcedependency.AZTEC_INBOX_LAG/inboxLagfrom ethereum config, foundation env vars, the network-consensus-config list, the l1-contracts + spartan network defaults, and the e2e option plumbing.THREAT_MODEL.mdand the archiver README rewritten from theinHash == inbox.consume(...)model to the consensus rolling-hash / bucket model.Format / store / wire notes
ARCHIVER_DB_VERSION8 → 9 becauseInboxMessageserialization droppedrollingHash+checkpointNumberand theinboxTreeInProgresssingleton is gone. No migration — nodes resync (fresh rollup instance per release line, same no-migration policy as the rest of the stack).inHashshrinks the block-proposal bytes. Done as a plain removal at a release boundary (fresh networks), matching the A-1381 optional-tail precedent; the goldenwire_compat_fixtures.tsbuffers were regenerated. The checkpoint-proposal fixture is unaffected (it never carriedinHash).messagesRollingHashaccumulation,InboxState.rollingHash, and theMessageSent.rollingHashevent arg are now removed in this PR — this is the earliest branch where it is safe, since the TS reads disappear here.getState()/getTotalMessagesInserted()are kept:chain_monitorand fast node sync still read the message count.Testing
Locally green (unit suites that run without
@aztec/bb-avm-sim): archiver (561), stdlib p2p + interfaces (76), world-state synchronizer + native (74), validator-client unit (38), ethereum config (6). Suites that import@aztec/bb-avm-sim(p2p libp2p, sequencer-client, node simulator, validator integration) and full typecheck of the packages downstream of the pinned-VK blocker are CI-validated. No e2e / VK regen locally.Review follow-up (phase-2 final review)
Four commits were appended by the final review pass:
AZTEC_INBOX_LAGfromscripts/network-defaults.jsonwhile both L1 deploy-script test setUps stillreadUintthe key, reverting before any test ran; the reads are gone.inHash; block-proposal wire dropped it), and stored checkpoint attestations decode without a tolerant fallback.l1_publisher.integration.test.tsis reworked for streaming consumption: each checkpoint consumes every message sent while it was built, threading the previous checkpoint's rolling hash and reading the proposebucketHintfrom the Inbox's current bucket (the legacy inboxLag shift register is gone).inboxLag/inHashreferences are swept from the spartan environment profiles, the governance-upgrade tutorial, the validator/sequencer READMEs, and stale e2e comments.l1 publisher test dissolved into A-1387 (pass-8)
This branch's rewrite of
l1_publisher.integration.test.tsis superseded by the corrected streaming-selector version landed at A-1387 (#24792): the branch's own message-reconstruction rework commit is dropped and the file is byte-identical to A-1387's here (segment diff for this file is zero). The A-1384 world-state mock bucket registration coexists with this branch's legacy-message-path deletion (the buckets survive the cleanup). First real box verification of this suite at A-1388: l1_publisher 13/13; world-state integration 12/12 at top.Leftover sweep (post-review)
InboxState.rollingHash, theMessageSentbytes16 rollingHashevent arg, and its keccak accumulation inInbox.sol, updating the four Solidity test suites that asserted it (Inbox.t,InboxBuckets.t,TokenPortal.t,depositToAztecPublic.t) and the three live docs-example inbox ABIs that embedded the old event shape. The node's message sync and L1-reorg detection already run entirely on the full-width consensus rolling hash from the buckets.InboxLeafclass from stdlib (this branch had already removed its per-checkpoint index helpers) and fixed a staleInboxLeafmention in the archiver retrieval JSDoc.insertMessagesPerBlock = false) is only exercised by tests; production always streams messages per block.