Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
184 commits
Select commit Hold shift + click to select a range
0c7dcdb
feat: message-bundle components in rollup-lib (A-1372)
spalladino Jul 7, 2026
63f9df0
refactor: batched level-merge for append_leaves_to_snapshot
spalladino Jul 7, 2026
f961ad2
docs(fast-inbox): state that a full l1-to-l2 tree halts the chain (A-…
spalladino Jul 27, 2026
9a4faed
fix(fast-inbox): harden the leaf-index guards in append_leaves_to_sna…
spalladino Jul 27, 2026
3923fc4
test(fast-inbox): constrain the frontier-hint and capacity edge cases…
spalladino Jul 27, 2026
b8c073b
feat: introduce inboxRollingHash end to end, dual with inHash (A-1373)
spalladino Jul 7, 2026
53d6c00
feat: expose inbox rolling hash on root rollup public inputs (A-1373)
spalladino Jul 7, 2026
f9bbf43
chore: regenerate rollup sample inputs for inbox rolling hash ABI (A-…
spalladino Jul 8, 2026
5bf6ee9
chore: regenerate checkpoint-root sample inputs for inbox rolling has…
spalladino Jul 13, 2026
41d92e5
chore: drop stale pinned build (A-1373)
spalladino Jul 13, 2026
c13ba1e
fix: verify checkpoint headers in getEpochProofPublicInputs (A-1373)
spalladino Jul 17, 2026
a0e7d0a
test(fast-inbox): regenerate pxe L2 tips snapshot for inboxRollingHas…
spalladino Jul 19, 2026
c49779c
test(fast-inbox): stub parent-checkpoint sourcing for the inbox rolli…
spalladino Jul 19, 2026
52748c6
fix(fast-inbox): dedupe checkpoint header verification on epoch proof…
spalladino Jul 27, 2026
9a9c5f3
fix(fast-inbox): thread the previous inbox rolling hash into the reru…
spalladino Jul 28, 2026
fd4eda7
fix(fast-inbox): schedule proving jobs oldest-epoch-first across proo…
spalladino Jul 19, 2026
aaec2d5
feat: per-block L1-to-L2 message bundles, move parity to checkpoint r…
spalladino Jul 7, 2026
cee6523
chore: drop unused imports and fix test-input types after per-block b…
spalladino Jul 7, 2026
7419645
test: assert sub-tree surfaces the checkpoint parity root proof (A-1374)
spalladino Jul 8, 2026
3351f07
docs: correct block-merge propagation comment (A-1374)
spalladino Jul 8, 2026
4e26de5
fix: enqueue block root for empty first blocks after parity moved to …
spalladino Jul 13, 2026
98e0f0f
chore: regenerate rollup sample inputs for per-block message bundle A…
spalladino Jul 13, 2026
18addde
chore(fast-inbox): regenerate block-root sample inputs for message_bu…
spalladino Jul 17, 2026
dadb7a7
chore(fast-inbox): regenerate block-root sample inputs at the per-blo…
spalladino Jul 19, 2026
aa03b00
chore: bump playground main-entrypoint chunk-size limit to 1960 KB
spalladino Jul 17, 2026
a322758
chore(fast-inbox): mark multi_proof as a flake under CI's 2-CPU limit…
spalladino Jul 20, 2026
02be796
chore(fast-inbox): skip multi_proof on the transitional intermediate …
spalladino Jul 20, 2026
626d8e5
fix(fast-inbox): require the message-bundle append before finishing a…
spalladino Jul 28, 2026
f515cb2
test(fast-inbox): cover block-root message appends at a non-zero tree…
spalladino Jul 28, 2026
db26f5d
feat: add block_root_msgs_only_rollup circuit for no-tx blocks with m…
spalladino Jul 8, 2026
e53f794
fix: complete proving-broker and bb-prover wiring for msgs-only block…
spalladino Jul 8, 2026
7fcb4af
docs: warn that the msgs-only single-block allowlist entry rests on i…
spalladino Jul 13, 2026
182ecbd
fix(fast-inbox): include the message-only block-root proof in the Pro…
spalladino Jul 21, 2026
b3f77b1
fix(fast-inbox): bump the proving broker database schema version (A-1…
spalladino Jul 27, 2026
dcfc8e3
feat: single variable-size InboxParity proof per checkpoint (A-1427)
spalladino Jul 17, 2026
40245b0
fix: drop unused NESTED_RECURSIVE_PROOF_LENGTH imports orphaned by th…
spalladino Jul 17, 2026
fe87c0c
fix: map L1ToL2MessageBundle messages to a fixed-length Noir array
spalladino Jul 17, 2026
7104e09
fix: use top-level import type in checkpoint-proving-state
spalladino Jul 17, 2026
adaf3a2
fix: feed a valid sha-truncated inHash in bb_prover_parity test
spalladino Jul 17, 2026
5831c6b
chore(fast-inbox): regenerate checkpoint-root sample inputs for inbox…
spalladino Jul 17, 2026
7a8a603
chore(fast-inbox): regenerate block-root sample inputs for the messag…
spalladino Jul 19, 2026
2b08840
refactor(fast-inbox): name the checkpoint sub-tree proof bundle for w…
spalladino Jul 27, 2026
fa7a627
test(fast-inbox): follow the InboxParity request type through the bro…
spalladino Jul 28, 2026
e5efd1d
fix(fast-inbox): annotate the rerun checkpoint job return type (A-1427)
spalladino Jul 28, 2026
fb142eb
feat(fast-inbox): same-block L1-to-L2 message consumption for non-fir…
spalladino Jul 17, 2026
3042611
docs(fast-inbox): mirror the same-block l1ToL2TreeSnapshot semantics …
spalladino Jul 18, 2026
d73a969
fix(fast-inbox): dispatch block-root proving on the rollupType discri…
spalladino Jul 19, 2026
eb38c30
chore(fast-inbox): regenerate block-root sample inputs for same-block…
spalladino Jul 19, 2026
37ee1a7
docs(fast-inbox): state circuits and stdlib inbox comments on their o…
spalladino Jul 27, 2026
51cb753
feat: rolling-hash buckets in the Inbox alongside frontier trees
spalladino Jul 17, 2026
e76b842
test(fast-inbox): gas measurements for Inbox.sendL2Message and timest…
spalladino Jul 17, 2026
c0ee535
test(fast-inbox): clarify gas-measurement and bucket-timestamp commen…
spalladino Jul 17, 2026
f25a2bd
feat(fast-inbox): enforce a minimum Inbox bucket-ring size of 512 (A-…
spalladino Jul 18, 2026
f65c86f
chore(fast-inbox): clarify Inbox ring-floor rationale comment (A-1377)
spalladino Jul 18, 2026
95a022b
chore(fast-inbox): fix solhint function ordering in Inbox (A-1377)
spalladino Jul 19, 2026
50a0f07
docs(fast-inbox): follow the MessageSent event through the example In…
spalladino Jul 19, 2026
3a2047d
feat: streaming inbox propose validation, unwired
spalladino Jul 17, 2026
decfb91
test(fast-inbox): use the real 512 ring floor in the overwritten-hint…
spalladino Jul 18, 2026
a6444aa
test(fast-inbox): drop the backwards proposal-time warp in the overwr…
spalladino Jul 18, 2026
83a77c2
chore(fast-inbox): fix solhint import order in ProposeLib (A-1378)
spalladino Jul 19, 2026
91e0559
chore(fast-inbox): re-enable multi_proof from this point in the stack…
spalladino Jul 20, 2026
f1080bf
docs(fast-inbox): describe the inbox rolling-hash mechanism without a…
spalladino Jul 27, 2026
e5284d7
fix(fast-inbox): reject propose against a still-mutable inbox bucket …
spalladino Jul 27, 2026
41992ab
feat(fast-inbox): archiver syncs Inbox buckets (A-1379)
spalladino Jul 18, 2026
3630ec2
fix(fast-inbox): guard between-buckets lower bound and bound timestam…
spalladino Jul 18, 2026
d4afda5
fix(fast-inbox): resolve message-sent L1 block timestamps by hash (A-…
spalladino Jul 27, 2026
a5811ec
refactor(fast-inbox): store inbox buckets as complete units in the ar…
spalladino Jul 27, 2026
4b322d9
fix(fast-inbox): fail loudly when an inbox bucket range names an unsy…
spalladino Jul 27, 2026
562c5aa
refactor(fast-inbox): index inbox buckets by timestamp through a mult…
spalladino Jul 27, 2026
b6b1727
feat(fast-inbox): world-state accepts per-block message bundles (A-1380)
spalladino Jul 18, 2026
4e68955
refactor(fast-inbox): TXE pads L1-to-L2 bundle only for first-in-chec…
spalladino Jul 18, 2026
d2d8d86
feat(fast-inbox): block proposals carry an optional inbox bucket refe…
spalladino Jul 18, 2026
1d985b0
test(fast-inbox): drop isOpen from the inbox bucket ref fixture (A-1381)
spalladino Jul 27, 2026
510e9b3
feat(fast-inbox): sequencer streaming message selection behind STREAM…
spalladino Jul 18, 2026
5a52f01
refactor(fast-inbox): reuse ConsumedBucketCursor for the streaming ch…
spalladino Jul 18, 2026
ce74cb6
fix(fast-inbox): apply streaming cutoff floor on the cap-terminated f…
spalladino Jul 18, 2026
8b430fa
test(fast-inbox): drop isOpen from the sequencer inbox bucket fixture…
spalladino Jul 27, 2026
035698b
refactor(fast-inbox): extract shared inbox consumption predicate (A-1…
spalladino Jul 18, 2026
7495340
feat(fast-inbox): validator streaming acceptance conditions behind ST…
spalladino Jul 18, 2026
95bcd1b
refactor(fast-inbox): dedupe block L1-to-L2 leaf-count read in the va…
spalladino Jul 18, 2026
bcb302c
fix(fast-inbox): synthesize the genesis Inbox bucket on read (A-1383)
spalladino Jul 18, 2026
6709b38
test(fast-inbox): drop isOpen from the streaming inbox bucket fixture…
spalladino Jul 27, 2026
86458bd
feat(fast-inbox): query inbox messages by cumulative leaf count (A-1383)
spalladino Jul 27, 2026
678fd72
docs(fast-inbox): drop spec, issue, and transition references from st…
spalladino Jul 27, 2026
bf352a9
feat(fast-inbox): flip L1 propose to streaming inbox consumption (A-1…
spalladino Jul 18, 2026
8b0873c
feat(fast-inbox): drop bundle padding and per-block blob root in circ…
spalladino Jul 18, 2026
c335179
feat(fast-inbox): per-block blob root and 256 msg/block constant in t…
spalladino Jul 18, 2026
bb7a0ef
feat(fast-inbox): drop the L1-to-L2 tree leaf-count multiple check (A…
spalladino Jul 18, 2026
8d960ad
feat(fast-inbox): make streaming the only node consumption path (A-1384)
spalladino Jul 18, 2026
6b88d9c
feat(fast-inbox): drop bundle num_real_msgs and pad in the prover pat…
spalladino Jul 18, 2026
c0ade9a
feat(fast-inbox): drop archiver inHash cross-check and TXE message pa…
spalladino Jul 18, 2026
9cc8904
feat(fast-inbox): split checkpoint messages per block in the prover (…
spalladino Jul 18, 2026
3f31da6
feat(fast-inbox): answer message-checkpoint queries from records, not…
spalladino Jul 18, 2026
a555440
fix(fast-inbox): thread per-block message sponges and wire the msgs-o…
spalladino Jul 19, 2026
7716776
fix(fast-inbox): bb full-rollup test respects the per-block message c…
spalladino Jul 19, 2026
db2a088
feat(fast-inbox): a non-empty message bundle satisfies the block min-…
spalladino Jul 19, 2026
24253bc
chore(fast-inbox): drop unused isFirstBlock param from buildHeaderAnd…
spalladino Jul 19, 2026
f6f2430
chore(fast-inbox): fix solhint import order for SafeCast in ProposeLi…
spalladino Jul 19, 2026
70d5f4b
fix(fast-inbox): typecheck fixes for the streaming flip (A-1384)
spalladino Jul 19, 2026
419b9b3
test(fast-inbox): carry bucketHint in archiver propose-calldata fixtu…
spalladino Jul 19, 2026
dfb4f40
chore(fast-inbox): format validator config after streaming flag remov…
spalladino Jul 19, 2026
0ddad79
fix(fast-inbox): regen scenarios respect the per-block message cap (A…
spalladino Jul 19, 2026
9d5352b
chore(fast-inbox): regenerate block-root sample inputs post-flip (A-1…
spalladino Jul 19, 2026
d2ab16c
test(fast-inbox): streaming inbox mocks for the validator and prover-…
spalladino Jul 19, 2026
2708dd3
fix(fast-inbox): split epoch-proof functions into EpochProofExtLib to…
spalladino Jul 19, 2026
c4171f2
test(fast-inbox): drop the legacy message-mismatch proposal test at t…
spalladino Jul 19, 2026
eda890e
fix(fast-inbox): drop unused isFirstBlock binding in blob-data fixtur…
spalladino Jul 20, 2026
803f000
fix(fast-inbox): correct portal forge-test index expectations for the…
spalladino Jul 20, 2026
0906368
fix(fast-inbox): expose getL1ToL2MessageIndex on the node so wait-for…
spalladino Jul 20, 2026
1f78d10
fix(fast-inbox): validate compact L1-to-L2 message indices in the arc…
spalladino Jul 20, 2026
7aada9c
test(fast-inbox): rewrite l1_to_l2_inbox_drift for the streaming inbo…
spalladino Jul 20, 2026
2486db7
test(fast-inbox): compact-index the archiver-sync fixtures and assert…
spalladino Jul 20, 2026
b6f6453
test(fast-inbox): stub streaming inbox methods in sequencer and valid…
spalladino Jul 20, 2026
049b7bd
test(fast-inbox): drop pre-flip L1-to-L2 message tests from the world…
spalladino Jul 20, 2026
3ee1ba6
fix(fast-inbox): source the checkpoint bucket hint from the streaming…
spalladino Jul 20, 2026
5394e3c
test(fast-inbox): back-port the l1 publisher integration test to stre…
spalladino Jul 21, 2026
b7edbdf
test(fast-inbox): gate L1->L2 message readiness on the PXE sync tip (…
spalladino Jul 21, 2026
eeabc7d
fix(fast-inbox): reconstruct each block's own L1-to-L2 message root f…
spalladino Jul 21, 2026
7ac515b
fix(fast-inbox): register Inbox buckets in the prefilled mock archive…
spalladino Jul 21, 2026
ac7d58f
chore(fast-inbox): drop inert isFirstBlock parameter from blob-data f…
spalladino Jul 21, 2026
e397c05
feat(fast-inbox): check the epoch proof's end inbox rolling hash expl…
spalladino Jul 27, 2026
aeac505
perf(fast-inbox): pack the inbox consumption counts into the slot-num…
spalladino Jul 27, 2026
9cdfc62
test(fast-inbox): drop isOpen from the flipped inbox bucket fixtures …
spalladino Jul 27, 2026
9f96979
refactor(fast-inbox): source checkpoint consumed messages by leaf-cou…
spalladino Jul 27, 2026
ee5c4a0
refactor(fast-inbox): make per-block message insertion the only path …
spalladino Jul 27, 2026
3642c4d
fix(fast-inbox): override the pipelined parent's consumed inbox total…
spalladino Jul 27, 2026
bcc37cf
test(fast-inbox): seed the inbox before the checkpoint's L1 block in …
spalladino Jul 27, 2026
66a5672
test(fast-inbox): prover orchestrator multi-block message-slice cover…
spalladino Jul 18, 2026
8e73d97
test(fast-inbox): streaming inbox e2e latency and mid-checkpoint incl…
spalladino Jul 18, 2026
1c0267b
test(fast-inbox): assert message-sponge threading and cover the msgs-…
spalladino Jul 19, 2026
3e82240
test(fast-inbox): epoch proof over per-block message slices and a msg…
spalladino Jul 19, 2026
6cd8458
fix(fast-inbox): sub-tree slice test models post-merge block proof ou…
spalladino Jul 19, 2026
48d6a57
test(fast-inbox): follow the per-block message argument in the multi-…
spalladino Jul 27, 2026
9371d6b
docs(fast-inbox): describe streaming inbox behavior without transitio…
spalladino Jul 27, 2026
49f78a2
docs(fast-inbox): drop issue references from the streaming e2e commen…
spalladino Jul 27, 2026
2843f9c
chore(fast-inbox): delete legacy L1 inbox path (A-1386)
spalladino Jul 18, 2026
dcbda8c
chore(fast-inbox): follow the L1 inbox cleanup through the TS clients…
spalladino Jul 18, 2026
6d011ea
chore(fast-inbox): drop unused cheatCodes from bot e2e after inbox-dr…
spalladino Jul 19, 2026
5d0534d
fix(fast-inbox): drop leftover conflict markers in calldata retriever…
spalladino Jul 19, 2026
4f10262
docs(fast-inbox): drop checkpointNumber from the example Inbox ABIs (…
spalladino Jul 19, 2026
903b185
fix(fast-inbox): drop removed consume/getRoot/getInProgress from inbo…
spalladino Jul 20, 2026
97a8256
docs(fast-inbox): correct PublicInputArgs inbox rolling-hash validati…
spalladino Jul 21, 2026
c0875f8
docs(fast-inbox): PublicInputArgs both rolling-hash boundaries are ch…
spalladino Jul 27, 2026
6d19511
test(fast-inbox): fuzz the Inbox send path across L1 blocks and rollo…
spalladino Jul 27, 2026
7239dcb
test(fast-inbox): read the per-bucket cap from the shared constant (A…
spalladino Jul 27, 2026
9acee09
chore(fast-inbox): drop inHash from parity and checkpoint header circ…
spalladino Jul 18, 2026
7c77dae
chore(fast-inbox): drop inHash from the L1 checkpoint header and dele…
spalladino Jul 18, 2026
6baff87
chore(fast-inbox): follow the checkpoint header inHash removal throug…
spalladino Jul 18, 2026
a5e2d29
chore(fast-inbox): fix l1 publisher revert assertion after inHash rem…
spalladino Jul 18, 2026
97d7873
test(fast-inbox): regenerate pxe L2 tips snapshot for the inHash-less…
spalladino Jul 19, 2026
85a0724
test(fast-inbox): drive l1 publisher inbox consumption through the st…
spalladino Jul 21, 2026
61af362
test(fast-inbox): drop isOpen from the l1 publisher inbox bucket mirr…
spalladino Jul 27, 2026
666df4c
docs(fast-inbox): correct the is_first_block and sole-block-variant r…
spalladino Jul 27, 2026
2b9fec8
chore(fast-inbox): drop AZTEC_INBOX_LAG config and e2e plumbing (A-1388)
spalladino Jul 18, 2026
605743e
chore(fast-inbox): remove legacy inHash and per-checkpoint index help…
spalladino Jul 18, 2026
bc818f2
chore(fast-inbox): delete legacy per-checkpoint and 128-bit message p…
spalladino Jul 18, 2026
f1fc731
chore(fast-inbox): drop legacy inHash threading from sequencer and va…
spalladino Jul 18, 2026
88fa611
chore(fast-inbox): remove world-state padding remnants and node simul…
spalladino Jul 18, 2026
28fbf78
chore(fast-inbox): clarify bucket-reference tail compatibility commen…
spalladino Jul 18, 2026
10316cf
fix(fast-inbox): drop AZTEC_INBOX_LAG reads from the L1 deploy-script…
spalladino Jul 19, 2026
bf6b640
fix(fast-inbox): bump p2p attestation store version for the shrunken …
spalladino Jul 19, 2026
32d5732
docs(fast-inbox): sweep remaining inboxLag and inHash references (A-1…
spalladino Jul 19, 2026
ed633e5
chore(fast-inbox): format ethereum inbox contract wrapper (A-1388)
spalladino Jul 19, 2026
6865d71
chore(fast-inbox): remove legacy 128-bit inbox rolling hash (A-1386)
spalladino Jul 21, 2026
1814b33
chore(fast-inbox): delete dead InboxLeaf class (A-1388)
spalladino Jul 21, 2026
8ea51db
docs(fast-inbox): clarify up-front message insertion is test-only (A-…
spalladino Jul 21, 2026
825cb9b
chore(fast-inbox): drop removed legacy rolling-hash arg from docs-exa…
spalladino Jul 21, 2026
1b5612b
perf(fast-inbox): roll back inbox messages by bucket, not by message …
spalladino Jul 27, 2026
13447c5
refactor(fast-inbox)!: answer L1-to-L2 message readiness from the mes…
spalladino Jul 27, 2026
8b522a9
fix(fast-inbox): predict the next block's inbox messages when simulat…
spalladino Jul 27, 2026
2d04b54
docs(fast-inbox): drop spec references from cleanup-era inbox comment…
spalladino Jul 27, 2026
c273112
chore(fast-inbox): emit inbox lag and checkpoint cap from the constan…
spalladino Jul 18, 2026
138638f
chore(fast-inbox): fix solhint import order for ConstantsGen in Propo…
spalladino Jul 19, 2026
f097833
chore(fast-inbox): single canonical path for rollup sample-input rege…
spalladino Jul 18, 2026
a0d4aba
chore(fast-inbox): cover the msgs-only block root in sample-input reg…
spalladino Jul 19, 2026
2c1ecdf
fix(fast-inbox): regen scenarios respect the per-block message cap (A…
spalladino Jul 19, 2026
c4282fd
chore(fast-inbox): regenerate rollup sample inputs
spalladino Jul 19, 2026
32f6fbb
chore(fast-inbox): refresh l1 gas benchmarks after legacy inbox path …
spalladino Jul 21, 2026
aaa82d2
docs(fast-inbox): drop the spec reference from the sample-input scena…
spalladino Jul 27, 2026
b658866
chore(fast-inbox): refresh l1 gas benchmarks after the submit-path he…
spalladino Jul 27, 2026
7a0adec
docs(fast-inbox): correct the message latency and event shape in the …
spalladino Jul 27, 2026
0df0df2
chore(fast-inbox): nargo fmt noir circuits for the beta.25 compiler b…
spalladino Jul 28, 2026
4e020c5
chore(fast-inbox): refresh private-kernel reset costs for the rebased…
spalladino Jul 28, 2026
2ad4dd2
chore(fast-inbox): regenerate rollup sample inputs for the rebased bb…
spalladino Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 23 additions & 22 deletions barretenberg/.claude/skills/gate-counts/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,41 +209,42 @@ Then retry `bb gates`.
The committed `Prover.toml` files carry fake recursive proofs whose length is
frozen at the value present when they were last generated. After a proof-length
change they must be regenerated (or hacked — see below). Two commands cover all
protocol circuits:
protocol circuits, split by whether the sample needs a real client-proved
transaction.

**Kernel circuits + most rollup circuits** (spins up an L1/anvil sandbox):
**Block-root and above rollup circuits — prover-client suite** (simulated
orchestrator, no L1 sandbox):

```bash
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 \
yarn workspace @aztec/end-to-end test:e2e e2e_prover/full.test
AZTEC_GENERATE_TEST_DATA=1 \
yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
```

Regenerates `Prover.toml` for: `private-kernel-init` and its `private-kernel-init-N`
variants, `private-kernel-inner` and its `private-kernel-inner-N` variants,
`private-kernel-reset`, `private-kernel-reset-tail`,
`private-kernel-reset-tail-to-public`, `rollup-tx-base-private`,
`rollup-tx-base-public`, `rollup-block-root-first`,
`rollup-block-root-first-single-tx`, `rollup-checkpoint-root-single-block`,
`rollup-checkpoint-merge`, `rollup-root`.
Regenerates `Prover.toml` for `rollup-block-root-first-empty-tx`,
`rollup-block-root-first`, `rollup-block-root-first-single-tx`,
`rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-root-msgs-only`,
`rollup-block-merge`, `rollup-checkpoint-root`, `rollup-checkpoint-root-single-block`,
`rollup-checkpoint-merge`, `rollup-tx-merge`, `rollup-root`.

**Rollup circuits NOT covered by `full.test`** (incl. `rollup-tx-merge`):
**Private-kernel + transaction-base circuits — e2e prover full test** (spins up
an L1/anvil sandbox):

```bash
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 \
yarn workspace @aztec/prover-client test src/orchestrator/orchestrator_single_checkpoint.test.ts
yarn workspace @aztec/end-to-end test:e2e single-node/prover/server/full.test
```

Regenerates `Prover.toml` for `rollup-tx-merge`, `rollup-block-root-first-empty-tx`,
`rollup-block-root` (single-tx checkpoint test) and `rollup-block-root-single-tx`,
`rollup-block-merge`, `rollup-checkpoint-root` (multi-block checkpoint test).

> **`rollup-tx-merge`'s `Prover.toml` is regenerated by the prover-client
> command, NOT `full.test`** — it is commented out in `full.test`'s circuit
> list. Use the prover-client command for the tx-merge circuit.
Regenerates `Prover.toml` for: `private-kernel-init` and its `private-kernel-init-N`
variants, `private-kernel-inner` and its `private-kernel-inner-N` variants,
`private-kernel-reset-tail`, `private-kernel-reset-tail-to-public`,
`rollup-tx-base-private`, `rollup-tx-base-public`. These need real client-proved
transactions the simulated orchestrator cannot produce. (`private-kernel-reset`,
the inner reset, is commented out and hand-maintained — not regenerated.)

The circuit lists live in the `updateProtocolCircuitSampleInputs(...)` loops in
`yarn-project/end-to-end/src/e2e_prover/full.test.ts` and
`yarn-project/prover-client/src/orchestrator/orchestrator_single_checkpoint.test.ts`;
`yarn-project/end-to-end/src/single-node/prover/server/full.test.ts` and the
`scenarios` array in
`yarn-project/prover-client/src/test/regenerate_rollup_sample_inputs.test.ts`;
re-read them if a circuit seems missing (entries get commented in/out).

### Build prerequisites for regeneration
Expand Down
37 changes: 19 additions & 18 deletions barretenberg/.claude/skills/update-prover-toml/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: update-prover-toml
description: Regenerate the protocol-circuit sample Prover.toml files (the witnesses CI feeds to `nargo execute`). Covers which e2e test/commands regenerate which tomls, and the one exception — private-kernel-reset/Prover.toml (the inner reset) which is NOT generated by the test at all and is maintained entirely by hand. Use when a `nargo execute` CI check fails on a crates/*/Prover.toml, after changing protocol-circuit inputs/constants, or when asked to refresh/regenerate Prover.toml sample inputs.
description: Regenerate the protocol-circuit sample Prover.toml files (the witnesses CI feeds to `nargo execute`). Covers which of the two commands regenerates which tomls — the prover-client `regenerate_rollup_sample_inputs` suite for the block-root and above rollup circuits, and the e2e prover full test for the private-kernel and transaction-base circuits — and the one exception, private-kernel-reset/Prover.toml (the inner reset), which is NOT generated by the test at all and is maintained entirely by hand. Use when a `nargo execute` CI check fails on a crates/*/Prover.toml, after changing protocol-circuit inputs/constants, or when asked to refresh/regenerate Prover.toml sample inputs.
---

# Updating protocol-circuit Prover.toml files
Expand All @@ -21,39 +21,40 @@ The tomls are captured from a real end-to-end run, not written by hand (except t

## How regeneration works

`yarn-project/end-to-end/src/e2e_prover/full.test.ts` has a test "generates sample Prover.toml files if generate test data is on". During proving, circuit inputs are captured via `pushTestData`/`getTestData`; the test then calls `updateProtocolCircuitSampleInputs(circuitName, TOML.stringify(...))` (`yarn-project/foundation/src/testing/files/index.ts`), which writes `noir-projects/noir-protocol-circuits/crates/<circuitName>/Prover.toml`.
Two commands cover the protocol-circuit tomls, split by whether the sample needs a real client-proved transaction. Both capture circuit inputs during proving via `pushTestData`/`getTestData` and write them with `updateProtocolCircuitSampleInputs(circuitName, TOML.stringify(...))` (`yarn-project/foundation/src/testing/files/index.ts`), which writes `noir-projects/noir-protocol-circuits/crates/<circuitName>/Prover.toml`.

The test early-returns unless **both** are true: `AZTEC_GENERATE_TEST_DATA=1` (enables `isGenerateTestDataEnabled()`) and fake proofs (`FAKE_PROOFS=1`, i.e. `REAL_PROOFS` is false).
### Block-root and above rollup circuits — prover-client suite

### Command

From the repo root:
`yarn-project/prover-client/src/test/regenerate_rollup_sample_inputs.test.ts` drives representative epochs through the simulated orchestrator and dumps each rollup circuit's captured input. The whole suite is `describe.skip`ped unless `AZTEC_GENERATE_TEST_DATA=1`, and it needs no L1 sandbox.

```bash
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn-project/end-to-end/scripts/run_test.sh simple e2e_prover/full
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
```

(Equivalently, from `yarn-project/end-to-end`: `AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e e2e_prover/full.test`.) This is a full-stack run (L1 anvil + node + prover), ~15 min with fake proofs.
Regenerates: `rollup-block-root-first-empty-tx`, `rollup-block-root-first`, `rollup-block-root-first-single-tx`, `rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-root-msgs-only`, `rollup-block-merge`, `rollup-checkpoint-root`, `rollup-checkpoint-root-single-block`, `rollup-checkpoint-merge`, `rollup-tx-merge`, `rollup-root`. The scenario list lives in the `scenarios` array in that test; each scenario's `dump` field names the tomls it owns.

After it finishes, review and stage the changed tomls with `git diff noir-projects/noir-protocol-circuits/crates/*/Prover.toml`.
### Private-kernel and transaction-base circuits — e2e prover full test

### Which tomls this regenerates
`full.test.ts` has a test "generates sample Prover.toml files if generate test data is on". It early-returns unless **both** `AZTEC_GENERATE_TEST_DATA=1` (enables `isGenerateTestDataEnabled()`) and fake proofs (`FAKE_PROOFS=1`, i.e. `REAL_PROOFS` is false) are set. These circuits need real client-proved transactions, which the simulated orchestrator suite above cannot produce.

The circuit list lives in the `forEach(circuitName => ...)` loop in `full.test.ts`. Currently active (regenerated by the run above):
From the repo root:

```bash
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn-project/end-to-end/scripts/run_test.sh simple single-node/prover/server/full
```

(Equivalently, from `yarn-project/end-to-end`: `AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e single-node/prover/server/full.test`.) This is a full-stack run (L1 anvil + node + prover), ~15 min with fake proofs.

Regenerates:

- `private-kernel-init`, `private-kernel-init-2` … `private-kernel-init-5`
- `private-kernel-inner`, `private-kernel-inner-2` … `private-kernel-inner-5`
- `private-kernel-reset-tail`, `private-kernel-reset-tail-to-public` (the terminal resets — these run as part of every tx's tail)
- `rollup-tx-base-private`, `rollup-tx-base-public`
- `rollup-block-root-first`, `rollup-block-root-first-single-tx`
- `rollup-checkpoint-root-single-block`, `rollup-checkpoint-merge`
- `rollup-root`

`private-kernel-reset` (the **inner** reset) is deliberately **commented out** of this list and is **not** generated by the test — see the exception below.

Other entries commented out (e.g. `rollup-tx-merge`, `rollup-block-root`, `rollup-block-merge`, `rollup-checkpoint-root`) are also not produced by this flow; the inline comment points to the orchestrator single-checkpoint test for those.
The circuit list lives in the `forEach(circuitName => ...)` loop in `full.test.ts`. `private-kernel-reset` (the **inner** reset) is deliberately **commented out** of this list and is **not** generated by the test — see the exception below.

If you add a new circuit crate, add its name to that list so its toml gets generated.
After either run, review and stage the changed tomls with `git diff noir-projects/noir-protocol-circuits/crates/*/Prover.toml`. If you add a new circuit crate, add its name to the appropriate list so its toml gets generated.

## ⚠️ Exception: `private-kernel-reset/Prover.toml` (inner reset) is NOT generated — hand-maintain it

Expand Down
14 changes: 7 additions & 7 deletions barretenberg/cpp/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,21 +139,21 @@ run the generation commands above.

Proof-length-affecting changes (e.g. `CHONK_PROOF_LENGTH` bumps from MegaFlavor entity additions) make the committed `Prover.toml` fixtures stale. `nargo execute --program-dir <crate>` then fails with `Type Array { length: N, typ: Field } is expected to have length N but value Vec(...)`.

Regenerate via the e2e prover full test with fake proofs:
Regeneration is split across two commands. The block-root, block-merge, checkpoint, tx-merge, and root rollup samples come from the prover-client suite, which drives the simulated orchestrator and needs no L1 sandbox:

```bash
cd yarn-project
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn workspace @aztec/end-to-end test e2e_prover/full.test
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
```

`FAKE_PROOFS=1` skips real proving — runs in ~2 min (orchestrator + witness generation only). Writes 12 `Prover.toml` files under `noir-projects/noir-protocol-circuits/crates/<circuit>/Prover.toml`.

For circuits not exercised by `full.test.ts` (`rollup-tx-merge`, `rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-merge`, `rollup-checkpoint-root`, `rollup-block-root-first-empty-tx`), additionally run:
The private-kernel samples and the transaction-base rollup samples (`rollup-tx-base-private`, `rollup-tx-base-public`) need real client-proved transactions, so they come from the e2e prover full test with fake proofs:

```bash
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test orchestrator_single_checkpoint
cd yarn-project
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn workspace @aztec/end-to-end test single-node/prover/server/full.test
```

`FAKE_PROOFS=1` skips real proving. Both write into `noir-projects/noir-protocol-circuits/crates/<circuit>/Prover.toml`.

Verify with `nargo execute --program-dir noir-projects/noir-protocol-circuits/crates/<crate>` for any previously-failing crate; should print `Circuit witness successfully solved`.

## Verification Keys
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,34 +35,10 @@ These functions allow you to query the current state of the Inbox.

| Function | Returns | Description |
| -------------------------- | ----------------- | ------------------------------------------------ |
| `getRoot(uint256)` | `bytes32` | Returns the root of a message tree for a given checkpoint number. |
| `getState()` | `InboxState` | Returns the current inbox state (rolling hash, total messages inserted, in-progress checkpoint). |
| `getState()` | `InboxState` | Returns the current inbox state (rolling hash, total messages inserted). |
| `getTotalMessagesInserted()` | `uint64` | Returns the total number of messages inserted into the inbox. |
| `getInProgress()` | `uint64` | Returns the checkpoint number currently being filled. |
| `getFeeAssetPortal()` | `address` | Returns the address of the Fee Juice portal. |

## Internal functions

:::note
The following functions are only callable by the Rollup contract and are documented here for completeness.
:::

### `consume()`

Consumes a message tree for a given checkpoint number.

#include_code consume l1-contracts/src/core/interfaces/messagebridge/IInbox.sol solidity

| Name | Type | Description |
| ----------- | --------- | ---------------------------------------- |
| _toConsume | `uint256` | The checkpoint number to consume. |
| ReturnValue | `bytes32` | The root of the consumed message tree. |

#### Edge cases

- Will revert with `Inbox__Unauthorized()` if `msg.sender != ROLLUP`.
- Will revert with `Inbox__MustBuildBeforeConsume()` if trying to consume a checkpoint that hasn't been built yet.

## Related pages

- [Outbox](./outbox.md) - L2 to L1 message passing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ sequenceDiagram
Portal->>Aave: withdraw(aTokenAmount)
Aave-->>Portal: underlying + yield
Portal->>Inbox: sendL2Message(content)
Note over Inbox: Wait for 2 L2 blocks (required for L1→L2 message availability)
Note over Inbox: Wait for an L2 block to include the message (12-30s)
User->>Bridge: claim_public(amount_with_yield)
Bridge->>Inbox: consume_l1_to_l2_message
Bridge->>Token: mint_to_public(user, amount_with_yield)
Expand Down Expand Up @@ -441,7 +441,7 @@ Extract the message leaf index:

#include_code get_claim_leaf_index /docs/examples/ts/aave_bridge/index.ts typescript

On the local network, L2 blocks are only produced when transactions are submitted. L1-to-L2 messages require 2 L2 blocks before they can be consumed on L2. This utility deploys two dummy contracts (with random salts for unique addresses) to force block production. On devnet or testnet, blocks are produced continuously and this step is unnecessary:
On the local network, L2 blocks are only produced when transactions are submitted. An L1-to-L2 message can only be consumed once an L2 block includes it, and the network waits until the message is at least 12 seconds old before including it. This utility deploys two dummy contracts (with random salts for unique addresses) to force block production. On devnet or testnet, blocks are produced continuously and this step is unnecessary:

#include_code mine_blocks /docs/examples/ts/aave_bridge/index.ts typescript

Expand Down Expand Up @@ -501,7 +501,7 @@ If `claim_public` reverts, ensure you called `set_minter(l2Bridge.address, true)

### L1→L2 message not found — claim reverts after mining blocks

L1-to-L2 messages need 2 L2 blocks after the L1 transaction before they become consumable. Make sure `mine2Blocks` runs before the claim. If the issue persists, verify the `messageLeafIndex` extracted from the `MessageSent` event is correct.
An L1-to-L2 message becomes consumable once an L2 block includes it, which takes 12 to 30 seconds after the L1 transaction. Make sure `mine2Blocks` runs before the claim. If the issue persists, verify the `messageLeafIndex` extracted from the `MessageSent` event is correct.

## Next Steps

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,15 +437,15 @@ To bridge, first approve the portal address to transfer the NFT, then transfer i

#include_code deposit_to_aztec /docs/examples/ts/token_bridge/index.ts typescript

The `Inbox` contract will emit an important log: `MessageSent(inProgress, index, leaf, updatedRollingHash);`. This log provides the **leaf index** of the message in the [L1-L2 Message Tree](../../foundational-topics/ethereum-aztec-messaging/index.md)—the location of the message in the tree that will appear on L2. You need this index, plus the secret, to correctly claim and decrypt the message.
The `Inbox` contract will emit an important log: `MessageSent(index, hash, inboxRollingHash, bucketSeq);`. Its first field is the **leaf index** of the message in the [L1-L2 Message Tree](../../foundational-topics/ethereum-aztec-messaging/index.md)—the location of the message in the tree that will appear on L2. You need this index, plus the secret, to correctly claim and decrypt the message.

Use viem to extract this information:

#include_code get_message_leaf_index /docs/examples/ts/token_bridge/index.ts typescript

This extracts the logs from the deposit and retrieves the leaf index. You can now claim it on L2. However, for security reasons, at least 2 blocks must pass before a message can be claimed on L2. If you called `claim` on the L2 contract immediately, it would return "no message available".
This extracts the logs from the deposit and retrieves the leaf index. You can now claim it on L2. However, a message can only be claimed once an L2 block includes it, and the network waits until the message is at least 12 seconds old before including it, so expect 12 to 30 seconds of latency. If you called `claim` on the L2 contract immediately, it would return "no message available".

Add a utility function to mine two blocks (it deploys a contract with a random salt):
On a local network blocks are only produced when transactions are submitted, so add a utility function that forces a couple of blocks (it deploys a contract with a random salt):

#include_code mine_blocks /docs/examples/ts/token_bridge/index.ts typescript

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ Bridge WETH from L1 to L2:
When depositing from L1 to L2, we use a secret/secret-hash pattern: generate a random secret on the client, send only the hash to L1 (in the deposit transaction), then later reveal the secret on L2 to claim the tokens. This prevents **front-running attacks**: a malicious sequencer (the node that orders and processes L2 transactions) cannot observe the L1 deposit and claim the tokens themselves because they don't know the secret. Only someone who knows the preimage can claim.
:::

Before claiming, we need to mine 2 L2 blocks. L1-to-L2 messages are not available in the same block they are sent -- the rollup must first include them in an L2 block, and then one more block must pass before the message can be consumed. We use a helper that deploys throwaway contracts to force these blocks:
Before claiming, we need to mine a couple of L2 blocks. An L1-to-L2 message is not available the moment it is sent -- the rollup only includes it in an L2 block once it is at least 12 seconds old, and it becomes consumable as soon as that block lands. We use a helper that deploys throwaway contracts to force these blocks:

#include_code mine_blocks /docs/examples/ts/example_swap/index.ts typescript

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ export AZTEC_EPOCH_DURATION=16
export AZTEC_TARGET_COMMITTEE_SIZE=48
export AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET=2
export AZTEC_LAG_IN_EPOCHS_FOR_RANDAO=2
export AZTEC_INBOX_LAG=2
export AZTEC_PROOF_SUBMISSION_EPOCHS=2
export AZTEC_LOCAL_EJECTION_THRESHOLD=0
export AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS=1
Expand Down
Loading
Loading