@aztec-labs/prover-node 6.0.0-rc.1 → 6.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -149,6 +149,17 @@ export declare class CheckpointProver {
149
149
  */
150
150
  getTxsForUpload(): Promise<Map<string, Tx>>;
151
151
  private executeCheckpoint;
152
+ /**
153
+ * Splits the supplied L1-to-L2 messages into the slice each block of the checkpoint consumes, rejecting a span
154
+ * that does not describe this checkpoint.
155
+ *
156
+ * The messages are consumed contiguously across the checkpoint's blocks, so each block's slice runs from its
157
+ * parent block's L1-to-L2 leaf count to its own (compact indices make leaf count equal cumulative message count).
158
+ * The supplied list must cover exactly the range from the previous block to the last one and the per-block counts
159
+ * must not rewind, or the slices would be silently misassigned and only caught by the header mismatch after the
160
+ * block was fully re-executed.
161
+ */
162
+ private sliceMessagesPerBlock;
152
163
  /**
153
164
  * Mark cancelled. Idempotent. Aborts in-flight work, rejects the block-proof promise,
154
165
  * and kicks off a background teardown of the sub-tree. The teardown promise is exposed
@@ -167,4 +178,4 @@ export declare class CheckpointProver {
167
178
  private processTxs;
168
179
  private createFork;
169
180
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQWUsS0FBSyxXQUFXLEVBQUUsS0FBSyxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFTLE1BQU0sOEJBQThCLENBQUM7QUFHeEUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFFVix1QkFBdUIsRUFDdkIsVUFBVSxFQUNYLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHNUYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHbEcsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFlLEVBQUUsRUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBRWxGLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxD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
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQWUsS0FBSyxXQUFXLEVBQUUsS0FBSyxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFTLE1BQU0sOEJBQThCLENBQUM7QUFHeEUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFFVix1QkFBdUIsRUFDdkIsVUFBVSxFQUNYLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHNUYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHbEcsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFlLEVBQUUsRUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBRWxGLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELCtEQUErRDtBQUMvRCxNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsYUFBYSxFQUFFLGtCQUFrQixDQUFDO0lBQ2xDLDBFQUEwRTtJQUMxRSxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDO0lBQy9DLFVBQVUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN4Qiw2RkFBMkY7SUFDM0YsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztJQUM5Qiw2QkFBNkI7SUFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQzdCLGlDQUFpQztJQUNqQyxRQUFRLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUMzQjs7O09BR0c7SUFDSCxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsS0FBSyxJQUFJLENBQUM7SUFDOUM7OztPQUdHO0lBQ0gsdUJBQXVCLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2IsQ0FBQztBQUVGLHFGQUFxRjtBQUNyRixNQUFNLE1BQU0seUJBQXlCLEdBQUc7SUFDdEMscUdBQXFHO0lBQ3JHLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDaEQsQ0FBQztBQUVGLGdFQUFnRTtBQUNoRSxNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsVUFBVSxFQUFFLFVBQVUsQ0FBQztJQUN2QixxR0FBcUc7SUFDckcsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6Qiw4R0FBOEc7SUFDOUcsb0JBQW9CLEVBQUUseUJBQXlCLENBQUM7SUFDaEQsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO0lBQ2pDLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyQixzR0FBc0c7SUFDdEcsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO0lBQzdCLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxjQUFjLENBQUMsQ0FBQztDQUM5RCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gscUJBQWEsZ0JBQWdCO0lBc0N6QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUk7SUFyQ3ZCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ2xDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSx5QkFBeUIsQ0FBQztJQUN6RCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO0lBQzFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDOUIsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztJQUN0QyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDO0lBRXRFOzhFQUMwRTtJQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBeUU7SUFPdkcsdUdBQXVHO0lBQ3ZHLE9BQU8sQ0FBQyxTQUFTLENBQVM7SUFDMUIsMEdBQXdHO0lBQ3hHLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsMERBQTBEO0lBQzFELE9BQU8sQ0FBQyxTQUFTLENBQVM7SUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFnQztJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBeUI7SUFFekQsZ0dBQWdHO0lBQ2hHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFnQjtJQUMzQyxzRUFBc0U7SUFDdEUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFnQjtJQUN0QyxpSEFBaUg7SUFDakgsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFnQjtJQUV4QyxZQUNFLElBQUksRUFBRSxvQkFBb0IsRUFDVCxJQUFJLEVBQUUsb0JBQW9CLEVBd0I1QztJQUVEOzs7O09BSUc7SUFDSCxPQUFjLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FFbEQ7SUFFTSxXQUFXLElBQUksT0FBTyxDQUU1QjtJQUVEOzs7OztPQUtHO0lBQ0ksUUFBUSxJQUFJLE9BQU8sQ0FFekI7SUFFRCwwRkFBd0Y7SUFDakYsY0FBYyxJQUFJLFdBQVcsQ0FFbkM7SUFFRCxpSEFBaUg7SUFDMUcsc0JBQXNCLElBQUksT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBRWhFO0lBRUQsMEVBQTBFO0lBQzdELFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBZXJDO1lBRWEsZ0JBQWdCO0lBcUI5Qjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLGlCQUFpQjtZQWVYLFFBQVE7WUFVUixTQUFTO0lBVXZCOzs7Ozs7OztPQVFHO0lBQ1UsZUFBZSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBU3ZEO1lBRWEsaUJBQWlCO0lBZ0svQjs7Ozs7Ozs7O09BU0c7SUFDSCxPQUFPLENBQUMscUJBQXFCO0lBNEI3Qjs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxFQUFFLE9BQWUsRUFBRSxHQUFFO1FBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU8sR0FBRyxJQUFJLENBcUJuRTtZQUVhLFNBQVM7WUFjVCxlQUFlO0lBZTdCLE9BQU8sQ0FBQyxjQUFjO1lBSVIsVUFBVTtZQTBCVixVQUFVO0NBTXpCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"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"}
@@ -228,10 +228,20 @@ import { MerkleTreeId } from '@aztec-labs/stdlib/trees';
228
228
  checkpointHash: this.checkpoint.hash().toString(),
229
229
  blockCount: this.checkpoint.blocks.length
230
230
  });
231
+ // Structural validation of the checkpoint's message span runs before any proof work starts. Verifier jobs go
232
+ // into a shared cache that outlives this checkpoint's sub-tree, so a job started before the span is checked
233
+ // survives the cancellation that follows and keeps proving for a checkpoint nothing will accept.
234
+ const messagesPerBlock = this.sliceMessagesPerBlock();
231
235
  this.subTree = await this.deps.proverFactory.createCheckpointSubTreeOrchestrator(this.deps.chonkCache, this.epochNumber, checkpointConstants, this.l1ToL2Messages, this.previousInboxRollingHash, this.checkpoint.blocks.length, this.previousBlockHeader);
232
236
  subTreeStarted = true;
233
237
  // Bridge the sub-tree's result onto subTreeProofs.
234
- void this.subTree.getSubTreeResult().then((result)=>{
238
+ void this.subTree.getSubTreeResult().then(async (result)=>{
239
+ // Empty-block proofs can finish before execution reaches addTxs or setBlockCompleted.
240
+ // Keep the sub-tree alive and withhold success until block processing has also succeeded.
241
+ await this.runPromise;
242
+ if (!this.completed || this.failed || signal.aborted) {
243
+ return;
244
+ }
235
245
  this.deps.log.info(`Sub-tree block proofs ready for checkpoint ${this.checkpoint.number}`, {
236
246
  checkpointNumber: this.checkpoint.number,
237
247
  blockProofCount: result.blockProofOutputs.length
@@ -262,28 +272,12 @@ import { MerkleTreeId } from '@aztec-labs/stdlib/trees';
262
272
  return;
263
273
  }
264
274
  }
265
- // Streaming Inbox: the checkpoint's messages are consumed contiguously across its blocks, so each block's slice
266
- // runs from its parent block's L1-to-L2 leaf count to its own (compact indices make leaf count equal cumulative
267
- // message count). The list must cover exactly the range from the previous block to the last one, or the slices
268
- // would be silently misassigned and only caught by the header mismatch after the block was fully re-executed.
269
- const l1ToL2LeafCount = (header)=>Number(header.state.l1ToL2MessageTree.nextAvailableLeafIndex);
270
- const checkpointStartLeafCount = l1ToL2LeafCount(this.previousBlockHeader);
271
- const checkpointEndLeafCount = l1ToL2LeafCount(this.checkpoint.blocks.at(-1).header);
272
- if (this.l1ToL2Messages.length !== checkpointEndLeafCount - checkpointStartLeafCount) {
273
- throw new Error(`Checkpoint ${this.checkpoint.number} consumed ${checkpointEndLeafCount - checkpointStartLeafCount} L1 to L2 messages ` + `(leaf counts ${checkpointStartLeafCount} to ${checkpointEndLeafCount}) but ${this.l1ToL2Messages.length} were supplied`);
274
- }
275
- let previousBlockLeafCount = checkpointStartLeafCount;
276
275
  for(let blockIndex = 0; blockIndex < this.checkpoint.blocks.length; blockIndex++){
277
276
  const blockTimer = new Timer();
278
277
  const block = this.checkpoint.blocks[blockIndex];
279
278
  const globalVariables = block.header.globalVariables;
280
279
  const blockTxs = this.getTxsForBlock(block, txs);
281
- const blockEndLeafCount = l1ToL2LeafCount(block.header);
282
- if (blockEndLeafCount < previousBlockLeafCount) {
283
- throw new Error(`Block ${block.number} L1 to L2 leaf count ${blockEndLeafCount} is below its parent's ${previousBlockLeafCount}`);
284
- }
285
- const blockMessages = this.l1ToL2Messages.slice(previousBlockLeafCount - checkpointStartLeafCount, blockEndLeafCount - checkpointStartLeafCount);
286
- previousBlockLeafCount = blockEndLeafCount;
280
+ const blockMessages = messagesPerBlock[blockIndex];
287
281
  await this.subTree.startNewBlock(block.number, globalVariables.timestamp, blockTxs.length, blockMessages);
288
282
  if (signal.aborted) {
289
283
  return;
@@ -337,6 +331,33 @@ import { MerkleTreeId } from '@aztec-labs/stdlib/trees';
337
331
  }
338
332
  }
339
333
  /**
334
+ * Splits the supplied L1-to-L2 messages into the slice each block of the checkpoint consumes, rejecting a span
335
+ * that does not describe this checkpoint.
336
+ *
337
+ * The messages are consumed contiguously across the checkpoint's blocks, so each block's slice runs from its
338
+ * parent block's L1-to-L2 leaf count to its own (compact indices make leaf count equal cumulative message count).
339
+ * The supplied list must cover exactly the range from the previous block to the last one and the per-block counts
340
+ * must not rewind, or the slices would be silently misassigned and only caught by the header mismatch after the
341
+ * block was fully re-executed.
342
+ */ sliceMessagesPerBlock() {
343
+ const l1ToL2LeafCount = (header)=>Number(header.state.l1ToL2MessageTree.nextAvailableLeafIndex);
344
+ const checkpointStartLeafCount = l1ToL2LeafCount(this.previousBlockHeader);
345
+ const checkpointEndLeafCount = l1ToL2LeafCount(this.checkpoint.blocks.at(-1).header);
346
+ if (this.l1ToL2Messages.length !== checkpointEndLeafCount - checkpointStartLeafCount) {
347
+ throw new Error(`Checkpoint ${this.checkpoint.number} consumed ${checkpointEndLeafCount - checkpointStartLeafCount} L1 to L2 messages ` + `(leaf counts ${checkpointStartLeafCount} to ${checkpointEndLeafCount}) but ${this.l1ToL2Messages.length} were supplied`);
348
+ }
349
+ let previousBlockLeafCount = checkpointStartLeafCount;
350
+ return this.checkpoint.blocks.map((block)=>{
351
+ const blockEndLeafCount = l1ToL2LeafCount(block.header);
352
+ if (blockEndLeafCount < previousBlockLeafCount) {
353
+ throw new Error(`Block ${block.number} L1 to L2 leaf count ${blockEndLeafCount} is below its parent's ${previousBlockLeafCount}`);
354
+ }
355
+ const blockMessages = this.l1ToL2Messages.slice(previousBlockLeafCount - checkpointStartLeafCount, blockEndLeafCount - checkpointStartLeafCount);
356
+ previousBlockLeafCount = blockEndLeafCount;
357
+ return blockMessages;
358
+ });
359
+ }
360
+ /**
340
361
  * Mark cancelled. Idempotent. Aborts in-flight work, rejects the block-proof promise,
341
362
  * and kicks off a background teardown of the sub-tree. The teardown promise is exposed
342
363
  * via `whenDone()`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec-labs/prover-node",
3
- "version": "6.0.0-rc.1",
3
+ "version": "6.0.0-rc.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -56,25 +56,25 @@
56
56
  ]
57
57
  },
58
58
  "dependencies": {
59
- "@aztec-foundation/l1-artifacts": "6.0.0-rc.1",
60
- "@aztec-labs/archiver": "6.0.0-rc.1",
61
- "@aztec-labs/bb-prover": "6.0.0-rc.1",
62
- "@aztec-labs/blob-client": "6.0.0-rc.1",
63
- "@aztec-labs/blob-lib": "6.0.0-rc.1",
64
- "@aztec-labs/constants": "6.0.0-rc.1",
65
- "@aztec-labs/epoch-cache": "6.0.0-rc.1",
66
- "@aztec-labs/ethereum": "6.0.0-rc.1",
67
- "@aztec-labs/foundation": "6.0.0-rc.1",
68
- "@aztec-labs/node-keystore": "6.0.0-rc.1",
69
- "@aztec-labs/node-lib": "6.0.0-rc.1",
70
- "@aztec-labs/noir-protocol-circuits-types": "6.0.0-rc.1",
71
- "@aztec-labs/protocol-contracts": "6.0.0-rc.1",
72
- "@aztec-labs/prover-client": "6.0.0-rc.1",
73
- "@aztec-labs/sequencer-client": "6.0.0-rc.1",
74
- "@aztec-labs/simulator": "6.0.0-rc.1",
75
- "@aztec-labs/stdlib": "6.0.0-rc.1",
76
- "@aztec-labs/telemetry-client": "6.0.0-rc.1",
77
- "@aztec-labs/world-state": "6.0.0-rc.1",
59
+ "@aztec-foundation/l1-artifacts": "6.0.0-rc.5",
60
+ "@aztec-labs/archiver": "6.0.0-rc.2",
61
+ "@aztec-labs/bb-prover": "6.0.0-rc.2",
62
+ "@aztec-labs/blob-client": "6.0.0-rc.2",
63
+ "@aztec-labs/blob-lib": "6.0.0-rc.2",
64
+ "@aztec-labs/constants": "6.0.0-rc.2",
65
+ "@aztec-labs/epoch-cache": "6.0.0-rc.2",
66
+ "@aztec-labs/ethereum": "6.0.0-rc.2",
67
+ "@aztec-labs/foundation": "6.0.0-rc.2",
68
+ "@aztec-labs/node-keystore": "6.0.0-rc.2",
69
+ "@aztec-labs/node-lib": "6.0.0-rc.2",
70
+ "@aztec-labs/noir-protocol-circuits-types": "6.0.0-rc.2",
71
+ "@aztec-labs/protocol-contracts": "6.0.0-rc.2",
72
+ "@aztec-labs/prover-client": "6.0.0-rc.2",
73
+ "@aztec-labs/sequencer-client": "6.0.0-rc.2",
74
+ "@aztec-labs/simulator": "6.0.0-rc.2",
75
+ "@aztec-labs/stdlib": "6.0.0-rc.2",
76
+ "@aztec-labs/telemetry-client": "6.0.0-rc.2",
77
+ "@aztec-labs/world-state": "6.0.0-rc.2",
78
78
  "source-map-support": "^0.5.21",
79
79
  "tslib": "^2.4.0",
80
80
  "viem": "npm:@aztec/viem@2.38.3"
@@ -326,6 +326,11 @@ export class CheckpointProver {
326
326
  blockCount: this.checkpoint.blocks.length,
327
327
  });
328
328
 
329
+ // Structural validation of the checkpoint's message span runs before any proof work starts. Verifier jobs go
330
+ // into a shared cache that outlives this checkpoint's sub-tree, so a job started before the span is checked
331
+ // survives the cancellation that follows and keeps proving for a checkpoint nothing will accept.
332
+ const messagesPerBlock = this.sliceMessagesPerBlock();
333
+
329
334
  this.subTree = await this.deps.proverFactory.createCheckpointSubTreeOrchestrator(
330
335
  this.deps.chonkCache,
331
336
  this.epochNumber,
@@ -338,7 +343,13 @@ export class CheckpointProver {
338
343
  subTreeStarted = true;
339
344
  // Bridge the sub-tree's result onto subTreeProofs.
340
345
  void this.subTree.getSubTreeResult().then(
341
- result => {
346
+ async result => {
347
+ // Empty-block proofs can finish before execution reaches addTxs or setBlockCompleted.
348
+ // Keep the sub-tree alive and withhold success until block processing has also succeeded.
349
+ await this.runPromise;
350
+ if (!this.completed || this.failed || signal.aborted) {
351
+ return;
352
+ }
342
353
  this.deps.log.info(`Sub-tree block proofs ready for checkpoint ${this.checkpoint.number}`, {
343
354
  checkpointNumber: this.checkpoint.number,
344
355
  blockProofCount: result.blockProofOutputs.length,
@@ -375,38 +386,12 @@ export class CheckpointProver {
375
386
  }
376
387
  }
377
388
 
378
- // Streaming Inbox: the checkpoint's messages are consumed contiguously across its blocks, so each block's slice
379
- // runs from its parent block's L1-to-L2 leaf count to its own (compact indices make leaf count equal cumulative
380
- // message count). The list must cover exactly the range from the previous block to the last one, or the slices
381
- // would be silently misassigned and only caught by the header mismatch after the block was fully re-executed.
382
- const l1ToL2LeafCount = (header: BlockHeader) => Number(header.state.l1ToL2MessageTree.nextAvailableLeafIndex);
383
- const checkpointStartLeafCount = l1ToL2LeafCount(this.previousBlockHeader);
384
- const checkpointEndLeafCount = l1ToL2LeafCount(this.checkpoint.blocks.at(-1)!.header);
385
- if (this.l1ToL2Messages.length !== checkpointEndLeafCount - checkpointStartLeafCount) {
386
- throw new Error(
387
- `Checkpoint ${this.checkpoint.number} consumed ${checkpointEndLeafCount - checkpointStartLeafCount} L1 to L2 messages ` +
388
- `(leaf counts ${checkpointStartLeafCount} to ${checkpointEndLeafCount}) but ${this.l1ToL2Messages.length} were supplied`,
389
- );
390
- }
391
-
392
- let previousBlockLeafCount = checkpointStartLeafCount;
393
389
  for (let blockIndex = 0; blockIndex < this.checkpoint.blocks.length; blockIndex++) {
394
390
  const blockTimer = new Timer();
395
391
  const block = this.checkpoint.blocks[blockIndex];
396
392
  const globalVariables = block.header.globalVariables;
397
393
  const blockTxs = this.getTxsForBlock(block, txs);
398
-
399
- const blockEndLeafCount = l1ToL2LeafCount(block.header);
400
- if (blockEndLeafCount < previousBlockLeafCount) {
401
- throw new Error(
402
- `Block ${block.number} L1 to L2 leaf count ${blockEndLeafCount} is below its parent's ${previousBlockLeafCount}`,
403
- );
404
- }
405
- const blockMessages = this.l1ToL2Messages.slice(
406
- previousBlockLeafCount - checkpointStartLeafCount,
407
- blockEndLeafCount - checkpointStartLeafCount,
408
- );
409
- previousBlockLeafCount = blockEndLeafCount;
394
+ const blockMessages = messagesPerBlock[blockIndex];
410
395
 
411
396
  await this.subTree.startNewBlock(block.number, globalVariables.timestamp, blockTxs.length, blockMessages);
412
397
  if (signal.aborted) {
@@ -467,6 +452,44 @@ export class CheckpointProver {
467
452
  }
468
453
  }
469
454
 
455
+ /**
456
+ * Splits the supplied L1-to-L2 messages into the slice each block of the checkpoint consumes, rejecting a span
457
+ * that does not describe this checkpoint.
458
+ *
459
+ * The messages are consumed contiguously across the checkpoint's blocks, so each block's slice runs from its
460
+ * parent block's L1-to-L2 leaf count to its own (compact indices make leaf count equal cumulative message count).
461
+ * The supplied list must cover exactly the range from the previous block to the last one and the per-block counts
462
+ * must not rewind, or the slices would be silently misassigned and only caught by the header mismatch after the
463
+ * block was fully re-executed.
464
+ */
465
+ private sliceMessagesPerBlock(): Fr[][] {
466
+ const l1ToL2LeafCount = (header: BlockHeader) => Number(header.state.l1ToL2MessageTree.nextAvailableLeafIndex);
467
+ const checkpointStartLeafCount = l1ToL2LeafCount(this.previousBlockHeader);
468
+ const checkpointEndLeafCount = l1ToL2LeafCount(this.checkpoint.blocks.at(-1)!.header);
469
+ if (this.l1ToL2Messages.length !== checkpointEndLeafCount - checkpointStartLeafCount) {
470
+ throw new Error(
471
+ `Checkpoint ${this.checkpoint.number} consumed ${checkpointEndLeafCount - checkpointStartLeafCount} L1 to L2 messages ` +
472
+ `(leaf counts ${checkpointStartLeafCount} to ${checkpointEndLeafCount}) but ${this.l1ToL2Messages.length} were supplied`,
473
+ );
474
+ }
475
+
476
+ let previousBlockLeafCount = checkpointStartLeafCount;
477
+ return this.checkpoint.blocks.map(block => {
478
+ const blockEndLeafCount = l1ToL2LeafCount(block.header);
479
+ if (blockEndLeafCount < previousBlockLeafCount) {
480
+ throw new Error(
481
+ `Block ${block.number} L1 to L2 leaf count ${blockEndLeafCount} is below its parent's ${previousBlockLeafCount}`,
482
+ );
483
+ }
484
+ const blockMessages = this.l1ToL2Messages.slice(
485
+ previousBlockLeafCount - checkpointStartLeafCount,
486
+ blockEndLeafCount - checkpointStartLeafCount,
487
+ );
488
+ previousBlockLeafCount = blockEndLeafCount;
489
+ return blockMessages;
490
+ });
491
+ }
492
+
470
493
  /**
471
494
  * Mark cancelled. Idempotent. Aborts in-flight work, rejects the block-proof promise,
472
495
  * and kicks off a background teardown of the sub-tree. The teardown promise is exposed