@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.0b941701

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.
Files changed (150) hide show
  1. package/dest/config.d.ts +8 -8
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +12 -2
  4. package/dest/index.d.ts +1 -1
  5. package/dest/light/index.d.ts +2 -0
  6. package/dest/light/index.d.ts.map +1 -0
  7. package/dest/light/index.js +1 -0
  8. package/dest/light/lightweight_checkpoint_builder.d.ts +44 -0
  9. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  10. package/dest/light/lightweight_checkpoint_builder.js +194 -0
  11. package/dest/mocks/fixtures.d.ts +8 -8
  12. package/dest/mocks/fixtures.d.ts.map +1 -1
  13. package/dest/mocks/fixtures.js +34 -16
  14. package/dest/mocks/test_context.d.ts +43 -32
  15. package/dest/mocks/test_context.d.ts.map +1 -1
  16. package/dest/mocks/test_context.js +149 -87
  17. package/dest/orchestrator/block-building-helpers.d.ts +37 -30
  18. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  19. package/dest/orchestrator/block-building-helpers.js +170 -189
  20. package/dest/orchestrator/block-proving-state.d.ts +70 -48
  21. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  22. package/dest/orchestrator/block-proving-state.js +282 -177
  23. package/dest/orchestrator/checkpoint-proving-state.d.ts +76 -0
  24. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
  25. package/dest/orchestrator/checkpoint-proving-state.js +243 -0
  26. package/dest/orchestrator/epoch-proving-state.d.ts +43 -28
  27. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  28. package/dest/orchestrator/epoch-proving-state.js +177 -73
  29. package/dest/orchestrator/index.d.ts +1 -1
  30. package/dest/orchestrator/orchestrator.d.ts +51 -35
  31. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  32. package/dest/orchestrator/orchestrator.js +830 -278
  33. package/dest/orchestrator/orchestrator_metrics.d.ts +1 -1
  34. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
  35. package/dest/orchestrator/orchestrator_metrics.js +2 -6
  36. package/dest/orchestrator/tx-proving-state.d.ts +15 -12
  37. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  38. package/dest/orchestrator/tx-proving-state.js +27 -44
  39. package/dest/prover-client/factory.d.ts +3 -3
  40. package/dest/prover-client/factory.d.ts.map +1 -1
  41. package/dest/prover-client/index.d.ts +1 -1
  42. package/dest/prover-client/prover-client.d.ts +5 -5
  43. package/dest/prover-client/prover-client.d.ts.map +1 -1
  44. package/dest/prover-client/prover-client.js +7 -6
  45. package/dest/prover-client/server-epoch-prover.d.ts +16 -12
  46. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  47. package/dest/prover-client/server-epoch-prover.js +11 -11
  48. package/dest/proving_broker/broker_prover_facade.d.ts +25 -17
  49. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  50. package/dest/proving_broker/broker_prover_facade.js +59 -40
  51. package/dest/proving_broker/config.d.ts +23 -10
  52. package/dest/proving_broker/config.d.ts.map +1 -1
  53. package/dest/proving_broker/config.js +29 -6
  54. package/dest/proving_broker/factory.d.ts +2 -2
  55. package/dest/proving_broker/factory.d.ts.map +1 -1
  56. package/dest/proving_broker/factory.js +5 -1
  57. package/dest/proving_broker/fixtures.d.ts +3 -2
  58. package/dest/proving_broker/fixtures.d.ts.map +1 -1
  59. package/dest/proving_broker/fixtures.js +3 -2
  60. package/dest/proving_broker/index.d.ts +1 -1
  61. package/dest/proving_broker/proof_store/factory.d.ts +2 -2
  62. package/dest/proving_broker/proof_store/factory.js +1 -1
  63. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +1 -1
  64. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
  65. package/dest/proving_broker/proof_store/gcs_proof_store.js +1 -0
  66. package/dest/proving_broker/proof_store/index.d.ts +2 -1
  67. package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
  68. package/dest/proving_broker/proof_store/index.js +1 -0
  69. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
  70. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
  71. package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
  72. package/dest/proving_broker/proving_agent.d.ts +6 -11
  73. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  74. package/dest/proving_broker/proving_agent.js +84 -63
  75. package/dest/proving_broker/proving_broker.d.ts +13 -4
  76. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  77. package/dest/proving_broker/proving_broker.js +40 -33
  78. package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
  79. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  80. package/dest/proving_broker/proving_broker_database/memory.js +1 -1
  81. package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
  82. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  83. package/dest/proving_broker/proving_broker_database/persisted.js +401 -11
  84. package/dest/proving_broker/proving_broker_database.d.ts +3 -2
  85. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  86. package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
  87. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  88. package/dest/proving_broker/proving_broker_instrumentation.js +11 -35
  89. package/dest/proving_broker/proving_job_controller.d.ts +9 -9
  90. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  91. package/dest/proving_broker/proving_job_controller.js +87 -60
  92. package/dest/proving_broker/rpc.d.ts +4 -6
  93. package/dest/proving_broker/rpc.d.ts.map +1 -1
  94. package/dest/proving_broker/rpc.js +1 -4
  95. package/dest/test/mock_proof_store.d.ts +9 -0
  96. package/dest/test/mock_proof_store.d.ts.map +1 -0
  97. package/dest/test/mock_proof_store.js +10 -0
  98. package/dest/test/mock_prover.d.ts +23 -17
  99. package/dest/test/mock_prover.d.ts.map +1 -1
  100. package/dest/test/mock_prover.js +38 -20
  101. package/package.json +33 -31
  102. package/src/config.ts +25 -9
  103. package/src/light/index.ts +1 -0
  104. package/src/light/lightweight_checkpoint_builder.ts +274 -0
  105. package/src/mocks/fixtures.ts +44 -39
  106. package/src/mocks/test_context.ts +223 -116
  107. package/src/orchestrator/block-building-helpers.ts +258 -334
  108. package/src/orchestrator/block-proving-state.ts +325 -231
  109. package/src/orchestrator/checkpoint-proving-state.ts +349 -0
  110. package/src/orchestrator/epoch-proving-state.ts +237 -111
  111. package/src/orchestrator/orchestrator.ts +627 -318
  112. package/src/orchestrator/orchestrator_metrics.ts +2 -6
  113. package/src/orchestrator/tx-proving-state.ts +48 -66
  114. package/src/prover-client/factory.ts +6 -2
  115. package/src/prover-client/prover-client.ts +27 -26
  116. package/src/prover-client/server-epoch-prover.ts +40 -22
  117. package/src/proving_broker/broker_prover_facade.ts +206 -128
  118. package/src/proving_broker/config.ts +34 -7
  119. package/src/proving_broker/factory.ts +2 -1
  120. package/src/proving_broker/fixtures.ts +8 -3
  121. package/src/proving_broker/proof_store/factory.ts +1 -1
  122. package/src/proving_broker/proof_store/gcs_proof_store.ts +5 -1
  123. package/src/proving_broker/proof_store/index.ts +1 -0
  124. package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
  125. package/src/proving_broker/proving_agent.ts +90 -64
  126. package/src/proving_broker/proving_broker.ts +57 -41
  127. package/src/proving_broker/proving_broker_database/memory.ts +3 -2
  128. package/src/proving_broker/proving_broker_database/persisted.ts +29 -13
  129. package/src/proving_broker/proving_broker_database.ts +2 -1
  130. package/src/proving_broker/proving_broker_instrumentation.ts +10 -35
  131. package/src/proving_broker/proving_job_controller.ts +92 -81
  132. package/src/proving_broker/rpc.ts +1 -6
  133. package/src/test/mock_proof_store.ts +14 -0
  134. package/src/test/mock_prover.ts +156 -64
  135. package/dest/bin/get-proof-inputs.d.ts +0 -2
  136. package/dest/bin/get-proof-inputs.d.ts.map +0 -1
  137. package/dest/bin/get-proof-inputs.js +0 -51
  138. package/dest/block_builder/index.d.ts +0 -6
  139. package/dest/block_builder/index.d.ts.map +0 -1
  140. package/dest/block_builder/index.js +0 -1
  141. package/dest/block_builder/light.d.ts +0 -33
  142. package/dest/block_builder/light.d.ts.map +0 -1
  143. package/dest/block_builder/light.js +0 -82
  144. package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
  145. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
  146. package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
  147. package/src/bin/get-proof-inputs.ts +0 -59
  148. package/src/block_builder/index.ts +0 -6
  149. package/src/block_builder/light.ts +0 -101
  150. package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
@@ -1,17 +1,16 @@
1
1
  import type {
2
- AVM_PROOF_LENGTH_IN_FIELDS,
2
+ AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED,
3
3
  NESTED_RECURSIVE_PROOF_LENGTH,
4
4
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
5
5
  RECURSIVE_PROOF_LENGTH,
6
- TUBE_PROOF_LENGTH,
7
6
  } from '@aztec/constants';
8
- import { sha256 } from '@aztec/foundation/crypto';
7
+ import { EpochNumber } from '@aztec/foundation/branded-types';
8
+ import { sha256 } from '@aztec/foundation/crypto/sha256';
9
9
  import { createLogger } from '@aztec/foundation/log';
10
10
  import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
11
11
  import { truncate } from '@aztec/foundation/string';
12
12
  import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
13
13
  import {
14
- type ProofAndVerificationKey,
15
14
  type ProofUri,
16
15
  type ProvingJobId,
17
16
  type ProvingJobInputsMap,
@@ -22,21 +21,29 @@ import {
22
21
  type ServerCircuitProver,
23
22
  makeProvingJobId,
24
23
  } from '@aztec/stdlib/interfaces/server';
25
- import type { BaseParityInputs, ParityPublicInputs, RootParityInputs } from '@aztec/stdlib/parity';
26
- import { ProvingRequestType } from '@aztec/stdlib/proofs';
24
+ import type { ParityBasePrivateInputs, ParityPublicInputs, ParityRootPrivateInputs } from '@aztec/stdlib/parity';
25
+ import { ProvingRequestType, RecursiveProof } from '@aztec/stdlib/proofs';
27
26
  import type {
28
- BaseOrMergeRollupPublicInputs,
29
- BlockMergeRollupInputs,
30
- BlockRootOrBlockMergePublicInputs,
31
- BlockRootRollupInputs,
32
- EmptyBlockRootRollupInputs,
33
- MergeRollupInputs,
34
- PrivateBaseRollupInputs,
35
- PublicBaseRollupInputs,
36
- RootRollupInputs,
27
+ BlockMergeRollupPrivateInputs,
28
+ BlockRollupPublicInputs,
29
+ BlockRootEmptyTxFirstRollupPrivateInputs,
30
+ BlockRootFirstRollupPrivateInputs,
31
+ BlockRootRollupPrivateInputs,
32
+ BlockRootSingleTxFirstRollupPrivateInputs,
33
+ BlockRootSingleTxRollupPrivateInputs,
34
+ CheckpointMergeRollupPrivateInputs,
35
+ CheckpointPaddingRollupPrivateInputs,
36
+ CheckpointRollupPublicInputs,
37
+ CheckpointRootRollupPrivateInputs,
38
+ CheckpointRootSingleBlockRollupPrivateInputs,
39
+ PrivateTxBaseRollupPrivateInputs,
40
+ PublicChonkVerifierPrivateInputs,
41
+ PublicChonkVerifierPublicInputs,
42
+ PublicTxBaseRollupPrivateInputs,
43
+ RootRollupPrivateInputs,
37
44
  RootRollupPublicInputs,
38
- SingleTxBlockRootRollupInputs,
39
- TubeInputs,
45
+ TxMergeRollupPrivateInputs,
46
+ TxRollupPublicInputs,
40
47
  } from '@aztec/stdlib/rollup';
41
48
 
42
49
  import { InlineProofStore, type ProofStore } from './proof_store/index.js';
@@ -93,7 +100,15 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
93
100
 
94
101
  // Create a promise for this job id, regardless of whether it was enqueued at the broker
95
102
  // The running promise will monitor for the job to be completed and resolve it either way
103
+ // We install an error handler to prevent unhandled rejections in the process before the
104
+ // job promise is awaited by the caller (see #13166)
96
105
  const promise = promiseWithResolvers<ProvingJobResultsMap[T]>();
106
+ promise.promise.catch(err =>
107
+ this.log.error(`Job errored with '${err.message ?? err}' id=${id} type=${ProvingRequestType[type]}`, {
108
+ provingJobId: id,
109
+ provingJobType: ProvingRequestType[type],
110
+ }),
111
+ );
97
112
  const abortFn = () => {
98
113
  signal?.removeEventListener('abort', abortFn);
99
114
  void this.broker.cancelProvingJob(id).catch(err => this.log.warn(`Error cancelling job id=${id}`, err));
@@ -114,7 +129,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
114
129
  id: ProvingJobId,
115
130
  type: T,
116
131
  inputs: ProvingJobInputsMap[T],
117
- epochNumber = 0,
132
+ epochNumber = EpochNumber.ZERO,
118
133
  signal?: AbortSignal,
119
134
  ): Promise<ProvingJobResultsMap[T]> {
120
135
  const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
@@ -125,27 +140,26 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
125
140
  try {
126
141
  const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
127
142
  job.inputsUri = inputsUri;
128
- const jobStatus = await this.broker.enqueueProvingJob({
129
- id,
130
- type,
131
- inputsUri,
143
+
144
+ // Send the job to the broker
145
+ const jobStatus = await this.broker.enqueueProvingJob({ id, type, inputsUri, epochNumber });
146
+
147
+ const jobLogText = `id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`;
148
+ const jobLogData = {
149
+ provingJobId: id,
150
+ provingJobType: ProvingRequestType[type],
132
151
  epochNumber,
133
- });
152
+ inputsUri: truncate(inputsUri),
153
+ status: jobStatus.status,
154
+ numOutstandingJobs: this.jobs.size,
155
+ };
134
156
 
135
157
  // If we are here then the job was successfully accepted by the broker
136
158
  // the returned status is for before any action was performed
137
159
  if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
138
160
  // Job was already completed by the broker
139
161
  // No need to notify the broker on aborted job
140
- this.log.verbose(
141
- `Job already completed when sent to broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`,
142
- {
143
- provingJobId: id,
144
- provingJobType: ProvingRequestType[type],
145
- epochNumber,
146
- inputsUri: truncate(inputsUri),
147
- },
148
- );
162
+ this.log.verbose(`Job already completed when sent to broker ${jobLogText}`, jobLogData);
149
163
 
150
164
  // Job was not enqueued. It must be completed already, add to our set of already completed jobs
151
165
  this.jobsToRetrieve.add(id);
@@ -155,27 +169,10 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
155
169
 
156
170
  // Job added for the first time
157
171
  if (jobStatus.status === 'not-found') {
158
- this.log.verbose(
159
- `Job enqueued with broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`,
160
- {
161
- provingJobId: id,
162
- provingJobType: ProvingRequestType[type],
163
- epochNumber,
164
- inputsUri: truncate(inputsUri),
165
- numOutstandingJobs: this.jobs.size,
166
- },
167
- );
172
+ this.log.verbose(`Job enqueued with broker ${jobLogText}`, jobLogData);
168
173
  } else {
169
174
  // Job was previously sent to the broker but is not completed
170
- this.log.verbose(
171
- `Job already in queue or in progress when sent to broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`,
172
- {
173
- provingJobId: id,
174
- provingJobType: ProvingRequestType[type],
175
- epochNumber,
176
- inputsUri: truncate(inputsUri),
177
- },
178
- );
175
+ this.log.verbose(`Job already in queue or in progress when sent to broker ${jobLogText}`, jobLogData);
179
176
  }
180
177
  }
181
178
  } catch (err) {
@@ -400,8 +397,8 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
400
397
  getAvmProof(
401
398
  inputs: AvmCircuitInputs,
402
399
  signal?: AbortSignal,
403
- epochNumber?: number,
404
- ): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>> {
400
+ epochNumber?: EpochNumber,
401
+ ): Promise<RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>> {
405
402
  return this.enqueueJob(
406
403
  this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber),
407
404
  ProvingRequestType.PUBLIC_VM,
@@ -412,29 +409,127 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
412
409
  }
413
410
 
414
411
  getBaseParityProof(
415
- inputs: BaseParityInputs,
412
+ inputs: ParityBasePrivateInputs,
416
413
  signal?: AbortSignal,
417
- epochNumber?: number,
414
+ epochNumber?: EpochNumber,
418
415
  ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
419
416
  return this.enqueueJob(
420
- this.generateId(ProvingRequestType.BASE_PARITY, inputs, epochNumber),
421
- ProvingRequestType.BASE_PARITY,
417
+ this.generateId(ProvingRequestType.PARITY_BASE, inputs, epochNumber),
418
+ ProvingRequestType.PARITY_BASE,
422
419
  inputs,
423
420
  epochNumber,
424
421
  signal,
425
422
  );
426
423
  }
427
424
 
428
- getBlockMergeRollupProof(
429
- input: BlockMergeRollupInputs,
425
+ getTxMergeRollupProof(
426
+ input: TxMergeRollupPrivateInputs,
430
427
  signal?: AbortSignal,
431
- epochNumber?: number,
428
+ epochNumber?: EpochNumber,
429
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
430
+ return this.enqueueJob(
431
+ this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber),
432
+ ProvingRequestType.TX_MERGE_ROLLUP,
433
+ input,
434
+ epochNumber,
435
+ signal,
436
+ );
437
+ }
438
+
439
+ getPublicChonkVerifierProof(
440
+ inputs: PublicChonkVerifierPrivateInputs,
441
+ signal?: AbortSignal,
442
+ epochNumber?: EpochNumber,
432
443
  ): Promise<
433
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
444
+ PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
434
445
  > {
435
446
  return this.enqueueJob(
436
- this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
437
- ProvingRequestType.BLOCK_MERGE_ROLLUP,
447
+ this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber),
448
+ ProvingRequestType.PUBLIC_CHONK_VERIFIER,
449
+ inputs,
450
+ epochNumber,
451
+ signal,
452
+ );
453
+ }
454
+
455
+ getPrivateTxBaseRollupProof(
456
+ baseRollupInput: PrivateTxBaseRollupPrivateInputs,
457
+ signal?: AbortSignal,
458
+ epochNumber?: EpochNumber,
459
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
460
+ return this.enqueueJob(
461
+ this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber),
462
+ ProvingRequestType.PRIVATE_TX_BASE_ROLLUP,
463
+ baseRollupInput,
464
+ epochNumber,
465
+ signal,
466
+ );
467
+ }
468
+
469
+ getPublicTxBaseRollupProof(
470
+ inputs: PublicTxBaseRollupPrivateInputs,
471
+ signal?: AbortSignal,
472
+ epochNumber?: EpochNumber,
473
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
474
+ return this.enqueueJob(
475
+ this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber),
476
+ ProvingRequestType.PUBLIC_TX_BASE_ROLLUP,
477
+ inputs,
478
+ epochNumber,
479
+ signal,
480
+ );
481
+ }
482
+
483
+ getRootParityProof(
484
+ inputs: ParityRootPrivateInputs,
485
+ signal?: AbortSignal,
486
+ epochNumber?: EpochNumber,
487
+ ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
488
+ return this.enqueueJob(
489
+ this.generateId(ProvingRequestType.PARITY_ROOT, inputs, epochNumber),
490
+ ProvingRequestType.PARITY_ROOT,
491
+ inputs,
492
+ epochNumber,
493
+ signal,
494
+ );
495
+ }
496
+
497
+ getBlockRootFirstRollupProof(
498
+ input: BlockRootFirstRollupPrivateInputs,
499
+ signal?: AbortSignal,
500
+ epochNumber?: EpochNumber,
501
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
502
+ return this.enqueueJob(
503
+ this.generateId(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber),
504
+ ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP,
505
+ input,
506
+ epochNumber,
507
+ signal,
508
+ );
509
+ }
510
+
511
+ getBlockRootSingleTxFirstRollupProof(
512
+ input: BlockRootSingleTxFirstRollupPrivateInputs,
513
+ signal?: AbortSignal,
514
+ epochNumber?: EpochNumber,
515
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
516
+ return this.enqueueJob(
517
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber),
518
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP,
519
+ input,
520
+ epochNumber,
521
+ signal,
522
+ );
523
+ }
524
+
525
+ getBlockRootEmptyTxFirstRollupProof(
526
+ input: BlockRootEmptyTxFirstRollupPrivateInputs,
527
+ signal?: AbortSignal,
528
+ epochNumber?: EpochNumber,
529
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
530
+ return this.enqueueJob(
531
+ this.generateId(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber),
532
+ ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP,
438
533
  input,
439
534
  epochNumber,
440
535
  signal,
@@ -442,12 +537,10 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
442
537
  }
443
538
 
444
539
  getBlockRootRollupProof(
445
- input: BlockRootRollupInputs,
540
+ input: BlockRootRollupPrivateInputs,
446
541
  signal?: AbortSignal,
447
- epochNumber?: number,
448
- ): Promise<
449
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
450
- > {
542
+ epochNumber?: EpochNumber,
543
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
451
544
  return this.enqueueJob(
452
545
  this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
453
546
  ProvingRequestType.BLOCK_ROOT_ROLLUP,
@@ -457,103 +550,102 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
457
550
  );
458
551
  }
459
552
 
460
- getSingleTxBlockRootRollupProof(
461
- input: SingleTxBlockRootRollupInputs,
553
+ getBlockRootSingleTxRollupProof(
554
+ input: BlockRootSingleTxRollupPrivateInputs,
462
555
  signal?: AbortSignal,
463
- epochNumber?: number,
464
- ): Promise<
465
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
466
- > {
556
+ epochNumber?: EpochNumber,
557
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
467
558
  return this.enqueueJob(
468
- this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
469
- ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP,
559
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber),
560
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP,
470
561
  input,
471
562
  epochNumber,
472
563
  signal,
473
564
  );
474
565
  }
475
566
 
476
- getEmptyBlockRootRollupProof(
477
- input: EmptyBlockRootRollupInputs,
567
+ getBlockMergeRollupProof(
568
+ input: BlockMergeRollupPrivateInputs,
478
569
  signal?: AbortSignal,
479
- epochNumber?: number,
480
- ): Promise<
481
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
482
- > {
570
+ epochNumber?: EpochNumber,
571
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
483
572
  return this.enqueueJob(
484
- this.generateId(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber),
485
- ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP,
573
+ this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
574
+ ProvingRequestType.BLOCK_MERGE_ROLLUP,
486
575
  input,
487
576
  epochNumber,
488
577
  signal,
489
578
  );
490
579
  }
491
580
 
492
- getMergeRollupProof(
493
- input: MergeRollupInputs,
581
+ getCheckpointRootRollupProof(
582
+ input: CheckpointRootRollupPrivateInputs,
494
583
  signal?: AbortSignal,
495
- epochNumber?: number,
584
+ epochNumber?: EpochNumber,
496
585
  ): Promise<
497
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
586
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
498
587
  > {
499
588
  return this.enqueueJob(
500
- this.generateId(ProvingRequestType.MERGE_ROLLUP, input, epochNumber),
501
- ProvingRequestType.MERGE_ROLLUP,
589
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber),
590
+ ProvingRequestType.CHECKPOINT_ROOT_ROLLUP,
502
591
  input,
503
592
  epochNumber,
504
593
  signal,
505
594
  );
506
595
  }
507
- getPrivateBaseRollupProof(
508
- baseRollupInput: PrivateBaseRollupInputs,
596
+
597
+ getCheckpointRootSingleBlockRollupProof(
598
+ input: CheckpointRootSingleBlockRollupPrivateInputs,
509
599
  signal?: AbortSignal,
510
- epochNumber?: number,
600
+ epochNumber?: EpochNumber,
511
601
  ): Promise<
512
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
602
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
513
603
  > {
514
604
  return this.enqueueJob(
515
- this.generateId(ProvingRequestType.PRIVATE_BASE_ROLLUP, baseRollupInput, epochNumber),
516
- ProvingRequestType.PRIVATE_BASE_ROLLUP,
517
- baseRollupInput,
605
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber),
606
+ ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP,
607
+ input,
518
608
  epochNumber,
519
609
  signal,
520
610
  );
521
611
  }
522
612
 
523
- getPublicBaseRollupProof(
524
- inputs: PublicBaseRollupInputs,
613
+ getCheckpointPaddingRollupProof(
614
+ input: CheckpointPaddingRollupPrivateInputs,
525
615
  signal?: AbortSignal,
526
- epochNumber?: number,
616
+ epochNumber?: EpochNumber,
527
617
  ): Promise<
528
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
618
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
529
619
  > {
530
620
  return this.enqueueJob(
531
- this.generateId(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, epochNumber),
532
- ProvingRequestType.PUBLIC_BASE_ROLLUP,
533
- inputs,
621
+ this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber),
622
+ ProvingRequestType.CHECKPOINT_PADDING_ROLLUP,
623
+ input,
534
624
  epochNumber,
535
625
  signal,
536
626
  );
537
627
  }
538
628
 
539
- getRootParityProof(
540
- inputs: RootParityInputs,
629
+ getCheckpointMergeRollupProof(
630
+ input: CheckpointMergeRollupPrivateInputs,
541
631
  signal?: AbortSignal,
542
- epochNumber?: number,
543
- ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
632
+ epochNumber?: EpochNumber,
633
+ ): Promise<
634
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
635
+ > {
544
636
  return this.enqueueJob(
545
- this.generateId(ProvingRequestType.ROOT_PARITY, inputs, epochNumber),
546
- ProvingRequestType.ROOT_PARITY,
547
- inputs,
637
+ this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber),
638
+ ProvingRequestType.CHECKPOINT_MERGE_ROLLUP,
639
+ input,
548
640
  epochNumber,
549
641
  signal,
550
642
  );
551
643
  }
552
644
 
553
645
  getRootRollupProof(
554
- input: RootRollupInputs,
646
+ input: RootRollupPrivateInputs,
555
647
  signal?: AbortSignal,
556
- epochNumber?: number,
648
+ epochNumber?: EpochNumber,
557
649
  ): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
558
650
  return this.enqueueJob(
559
651
  this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber),
@@ -564,21 +656,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
564
656
  );
565
657
  }
566
658
 
567
- getTubeProof(
568
- tubeInput: TubeInputs,
569
- signal?: AbortSignal,
570
- epochNumber?: number,
571
- ): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>> {
572
- return this.enqueueJob(
573
- this.generateId(ProvingRequestType.TUBE_PROOF, tubeInput, epochNumber),
574
- ProvingRequestType.TUBE_PROOF,
575
- tubeInput,
576
- epochNumber,
577
- signal,
578
- );
579
- }
580
-
581
- private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = 0) {
659
+ private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = EpochNumber.ZERO) {
582
660
  const inputsHash = sha256(inputs.toBuffer());
583
661
  return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
584
662
  }
@@ -1,11 +1,13 @@
1
- import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum';
1
+ import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
2
2
  import {
3
3
  type ConfigMappingsType,
4
4
  booleanConfigHelper,
5
5
  getDefaultConfig,
6
6
  numberConfigHelper,
7
7
  } from '@aztec/foundation/config';
8
+ import { pickConfigMappings } from '@aztec/foundation/config';
8
9
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
10
+ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
9
11
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
10
12
 
11
13
  import { z } from 'zod';
@@ -20,7 +22,9 @@ export const ProverBrokerConfig = z.object({
20
22
  /** If starting a prover broker locally, the directory to store broker data */
21
23
  dataDirectory: z.string().optional(),
22
24
  /** The size of the data store map */
23
- dataStoreMapSizeKB: z.number().int().nonnegative(),
25
+ dataStoreMapSizeKb: z.number().int().nonnegative(),
26
+ /** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */
27
+ proverBrokerStoreMapSizeKb: z.number().int().nonnegative().optional(),
24
28
  /** The prover broker may batch jobs together before writing to the database */
25
29
  proverBrokerBatchSize: z.number().int().nonnegative(),
26
30
  /** How often the job batches get flushed */
@@ -30,8 +34,9 @@ export const ProverBrokerConfig = z.object({
30
34
  });
31
35
 
32
36
  export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> &
33
- Pick<DataStoreConfig, 'dataStoreMapSizeKB' | 'dataDirectory'> &
34
- L1ReaderConfig;
37
+ Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> &
38
+ L1ReaderConfig &
39
+ Pick<ChainConfig, 'rollupVersion'>;
35
40
 
36
41
  export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig> = {
37
42
  proverBrokerJobTimeoutMs: {
@@ -64,8 +69,14 @@ export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>
64
69
  description: 'The maximum number of epochs to keep results for',
65
70
  ...numberConfigHelper(1),
66
71
  },
67
- ...l1ReaderConfigMappings,
72
+ proverBrokerStoreMapSizeKb: {
73
+ env: 'PROVER_BROKER_STORE_MAP_SIZE_KB',
74
+ parseEnv: (val: string | undefined) => (val ? +val : undefined),
75
+ description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set.",
76
+ },
68
77
  ...dataConfigMappings,
78
+ ...l1ReaderConfigMappings,
79
+ ...pickConfigMappings(chainConfigMappings, ['rollupVersion']),
69
80
  };
70
81
 
71
82
  export const defaultProverBrokerConfig: ProverBrokerConfig = getDefaultConfig(proverBrokerConfigMappings);
@@ -87,6 +98,10 @@ export const ProverAgentConfig = z.object({
87
98
  proverTestDelayMs: z.number(),
88
99
  /** If using realistic delays, what percentage of realistic times to apply. */
89
100
  proverTestDelayFactor: z.number(),
101
+ /** The delay (ms) to inject during fake proof verification */
102
+ proverTestVerificationDelayMs: z.number().optional(),
103
+ /** Whether to abort pending proving jobs when the orchestrator is cancelled */
104
+ cancelJobsOnStop: z.boolean(),
90
105
  });
91
106
 
92
107
  export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
@@ -100,7 +115,7 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
100
115
  proverAgentPollIntervalMs: {
101
116
  env: 'PROVER_AGENT_POLL_INTERVAL_MS',
102
117
  description: 'The interval agents poll for jobs at',
103
- ...numberConfigHelper(100),
118
+ ...numberConfigHelper(1000),
104
119
  },
105
120
  proverAgentProofTypes: {
106
121
  env: 'PROVER_AGENT_PROOF_TYPES',
@@ -118,7 +133,7 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
118
133
  realProofs: {
119
134
  env: 'PROVER_REAL_PROOFS',
120
135
  description: 'Whether to construct real proofs',
121
- ...booleanConfigHelper(false),
136
+ ...booleanConfigHelper(true),
122
137
  },
123
138
  proverTestDelayType: {
124
139
  env: 'PROVER_TEST_DELAY_TYPE',
@@ -135,4 +150,16 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
135
150
  description: 'If using realistic delays, what percentage of realistic times to apply.',
136
151
  ...numberConfigHelper(1),
137
152
  },
153
+ proverTestVerificationDelayMs: {
154
+ env: 'PROVER_TEST_VERIFICATION_DELAY_MS',
155
+ description: 'The delay (ms) to inject during fake proof verification',
156
+ ...numberConfigHelper(10),
157
+ },
158
+ cancelJobsOnStop: {
159
+ env: 'PROVER_CANCEL_JOBS_ON_STOP',
160
+ description:
161
+ 'Whether to abort pending proving jobs when the orchestrator is cancelled. ' +
162
+ 'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
163
+ ...booleanConfigHelper(false),
164
+ },
138
165
  };
@@ -6,9 +6,10 @@ import { InMemoryBrokerDatabase } from './proving_broker_database/memory.js';
6
6
  import { KVBrokerDatabase } from './proving_broker_database/persisted.js';
7
7
 
8
8
  export async function createAndStartProvingBroker(
9
- config: ProverBrokerConfig,
9
+ _config: ProverBrokerConfig,
10
10
  client: TelemetryClient,
11
11
  ): Promise<ProvingBroker> {
12
+ const config = { ..._config, dataStoreMapSizeKb: _config.proverBrokerStoreMapSizeKb ?? _config.dataStoreMapSizeKb };
12
13
  const database = config.dataDirectory ? await KVBrokerDatabase.new(config, client) : new InMemoryBrokerDatabase();
13
14
 
14
15
  const broker = new ProvingBroker(database, config, client);
@@ -1,9 +1,14 @@
1
- import { randomBytes } from '@aztec/foundation/crypto';
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
2
+ import { randomBytes } from '@aztec/foundation/crypto/random';
2
3
  import { type ProofUri, type ProvingJobId, makeProvingJobId } from '@aztec/stdlib/interfaces/server';
3
4
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
4
5
 
5
- export function makeRandomProvingJobId(epochNumber?: number): ProvingJobId {
6
- return makeProvingJobId(epochNumber ?? 1, ProvingRequestType.BASE_PARITY, randomBytes(8).toString('hex'));
6
+ export function makeRandomProvingJobId(epochNumber?: EpochNumber): ProvingJobId {
7
+ return makeProvingJobId(
8
+ epochNumber ?? EpochNumber(1),
9
+ ProvingRequestType.PARITY_BASE,
10
+ randomBytes(8).toString('hex'),
11
+ );
7
12
  }
8
13
 
9
14
  export function makeInputsUri(): ProofUri {
@@ -15,7 +15,7 @@ export function createProofStore(config: string | undefined, logger = createLogg
15
15
  const path = url.pathname.replace(/^\/+/, '');
16
16
  logger.info(`Creating google cloud proof store at ${bucket}`, { bucket, path });
17
17
  return new GoogleCloudStorageProofStore(bucket, path);
18
- } catch (err) {
18
+ } catch {
19
19
  throw new Error(
20
20
  `Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`,
21
21
  );
@@ -16,10 +16,14 @@ import type { ProofStore } from './proof_store.js';
16
16
 
17
17
  const INPUTS_PATH = 'inputs';
18
18
 
19
+ // REFACTOR(#13067): Use the stdlib/file-store instead of referencing google-cloud-storage directly.
19
20
  export class GoogleCloudStorageProofStore implements ProofStore {
20
21
  private readonly storage: Storage;
21
22
 
22
- constructor(private readonly bucketName: string, private readonly path: string) {
23
+ constructor(
24
+ private readonly bucketName: string,
25
+ private readonly path: string,
26
+ ) {
23
27
  this.storage = new Storage();
24
28
  }
25
29
 
@@ -1,3 +1,4 @@
1
1
  export * from './proof_store.js';
2
2
  export * from './inline_proof_store.js';
3
3
  export * from './factory.js';
4
+ export * from './gcs_proof_store.js';
@@ -52,7 +52,7 @@ export class InlineProofStore implements ProofStore {
52
52
  return (PREFIX + SEPARATOR + encoded) as ProofUri;
53
53
  }
54
54
 
55
- private decode<T>(uri: ProofUri, schema: ZodFor<T>): Promise<T> {
55
+ private decode<T>(uri: ProofUri, schema: ZodFor<T>): T {
56
56
  const [prefix, data] = uri.split(SEPARATOR);
57
57
  if (prefix !== PREFIX) {
58
58
  throw new Error('Invalid proof input URI: ' + prefix);