test(fast-inbox): streaming inbox e2e latency and mid-checkpoint inclusion (A-1385)#24790
Open
spalladino wants to merge 5 commits into
Open
test(fast-inbox): streaming inbox e2e latency and mid-checkpoint inclusion (A-1385)#24790spalladino wants to merge 5 commits into
spalladino wants to merge 5 commits into
Conversation
This was referenced Jul 18, 2026
spalladino
force-pushed
the
spl/a-1385-streaming-e2e
branch
from
July 19, 2026 01:25
651d40c to
14003e9
Compare
spalladino
force-pushed
the
spl/a-1385-streaming-e2e
branch
3 times, most recently
from
July 19, 2026 17:57
e896f31 to
a1f18f3
Compare
spalladino
force-pushed
the
spl/a-1384-flip-streaming-inbox
branch
from
July 19, 2026 17:57
97fce26 to
4d7c269
Compare
spalladino
force-pushed
the
spl/a-1385-streaming-e2e
branch
2 times, most recently
from
July 19, 2026 20:48
7d0b8da to
6599148
Compare
spalladino
force-pushed
the
spl/a-1384-flip-streaming-inbox
branch
from
July 19, 2026 20:48
73e288c to
4c6d86b
Compare
…age (A-1385) Add a checkpoint-sub-tree orchestrator test for a checkpoint whose L1-to-L2 messages span multiple blocks, including a non-first block carrying a bundle. Asserts per-block start/end L1-to-L2 snapshot continuity and slice partitioning (no gap/overlap; block slice = [prevBlockLeafCount, blockLeafCount)). Adds TestContext.makeCheckpointWithMessagesPerBlock to distribute a bundle across a checkpoint's blocks (the single-block-per-checkpoint makeCheckpoint puts every message in the first block).
…usion (A-1385) New end-to-end coverage the legacy suite could not express (streaming Inbox, AZIP-22 / FI-15): a message included in a non-first block of a checkpoint (mid-checkpoint), the L1-inclusion to L2-availability latency within the streaming bound (slot-denominated), a message-only zero-tx block on an empty pool, and a public consume of a streaming-inserted message by compact index with double-spend protection.
…only block root (A-1385) Extends the multi-block-slice orchestrator test to assert per-block message sponge continuity (first block starts empty, each block absorbs exactly its own slice, last end sponge equals the InboxParity sponge) and turns its last block into a zero-tx message-only block, exercising the msgs-only block root selection wired in the flip. Also drops a stray async on a helper with no await in the streaming inbox e2e (lint).
…s-only block (A-1385) Drive the streaming Inbox shapes through the entire proving DAG (block roots incl. msgs-only, block merge, checkpoint roots, checkpoint merge, root rollup) at simulated-circuit fidelity in the top-tree orchestrator suite: a checkpoint whose messages land in a non-first block plus a zero-tx message-only block, followed by message-carrying and message-less checkpoints. Asserts the root rollup's inbox rolling-hash range matches the accumulation over the epoch's messages in block order. TestContext now threads the inbox rolling hash across the checkpoints it builds (previously hardcoded to zero), so a checkpoint built after a message-carrying one commits the correct continuation in its header and the checkpoint merge continuity assert can be exercised.
…tputs (A-1385) The sub-tree result surfaces at most two top-level nodes for the binary checkpoint root, so a three-block checkpoint yields [block-merge(blocks 0-1), block 2] rather than one output per block. The slice/sponge continuity walk now runs over expected per-output block ranges; merge public inputs span their range (is_first_block from the left child, start sponge/state from the left, end sponge/state from the right).
spalladino
force-pushed
the
spl/a-1385-streaming-e2e
branch
from
July 19, 2026 20:51
6599148 to
595fd99
Compare
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.
Test-only coverage for the Fast Inbox (AZIP-22) streaming L1→L2 message path (issue A-1385, FI-15) — the behaviours the legacy suite could not express, because pre-flip every message entered at the first block of the next checkpoint.
Stacked on the node/flip phase: #24784 (A-1379) → #24785 (A-1380) → #24786 (A-1381) → #24787 (A-1382) → #24788 (A-1383) → #24789 (A-1384). Base is
spl/a-1384-flip-streaming-inbox.e2e (
end-to-end)New
single-node/cross-chain/streaming_inbox.test.ts, on the provenCrossChainMessagingTestfixture (production pipelining sequencer) with a widened slot (36s, 6s blocks → up to ~4 blocks per checkpoint) andminTxsPerBlock: 0:INBOX_LAG_SECONDSpartway through a checkpoint's build, then asserts the inserting block hasindexWithinCheckpoint > 0and that the immediately preceding block did not yet carry the message. Retries with fresh messages if a message happens to age exactly at a checkpoint boundary.includingBlockTimestamp − messageL1Timestamp ≤ INBOX_LAG_SECONDS + 2·slotDuration(derived from the deployed constants, not hardcoded), and that it is positive. Wall-clock latency is logged only (A-1178 style), never asserted.prover-client
New
checkpoint-sub-tree-orchestratortest for a checkpoint whose L1→L2 messages span multiple blocks (a non-first block carries a bundle). Asserts per-block start/end L1→L2 tree-snapshot continuity and slice partitioning (no gap/overlap; block slice =[prevBlockLeafCount, blockLeafCount)) and theisFirstBlockflag. AddsTestContext.makeCheckpointWithMessagesPerBlockto distribute a bundle across a checkpoint's blocks (the single-block-per-checkpointmakeCheckpointputs every message in the first block).Validation
prover-clientorchestrator test could not be run locally — the local build is broken innoir-protocol-circuits-types/simulator/prover-clientfrom stale circuit artifacts, andend-to-endsits downstream. CI validates both. Every helper, fixture, and API call is grounded on an existing green suite (l1_to_l2.test.ts,cross_chain_public_message.test.ts) and verified against the current interfaces. No packages that build locally (stdlib, blob-lib, ethereum, foundation) are touched.Review follow-up (phase-2 final review)
The multi-block-slice orchestrator test now also asserts per-block message-sponge continuity (start empty, each block absorbs exactly its slice, last end equals the InboxParity sponge) and turns its last block into a zero-tx message-only block, exercising the msgs-only block-root wiring fixed in #24789. A stray
asyncin the e2e suite was dropped (lint).