@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.023c3e5

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 +47 -0
  9. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  10. package/dest/light/lightweight_checkpoint_builder.js +200 -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 +36 -17
  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 +53 -35
  31. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  32. package/dest/orchestrator/orchestrator.js +855 -302
  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 +11 -7
  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 +28 -19
  49. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  50. package/dest/proving_broker/broker_prover_facade.js +62 -43
  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 +8 -12
  73. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  74. package/dest/proving_broker/proving_agent.js +86 -65
  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 +15 -35
  89. package/dest/proving_broker/proving_job_controller.d.ts +11 -10
  90. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  91. package/dest/proving_broker/proving_job_controller.js +92 -62
  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 +289 -0
  105. package/src/mocks/fixtures.ts +46 -40
  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 +653 -343
  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 +41 -29
  116. package/src/prover-client/server-epoch-prover.ts +40 -22
  117. package/src/proving_broker/broker_prover_facade.ts +212 -131
  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 +95 -66
  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 +14 -35
  131. package/src/proving_broker/proving_job_controller.ts +100 -83
  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';
9
- import { createLogger } from '@aztec/foundation/log';
7
+ import { EpochNumber } from '@aztec/foundation/branded-types';
8
+ import { sha256 } from '@aztec/foundation/crypto/sha256';
9
+ import { type Logger, type LoggerBindings, 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';
@@ -61,14 +68,17 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
61
68
  private runningPromise?: RunningPromise;
62
69
  private timeOfLastSnapshotSync = Date.now();
63
70
  private jobsToRetrieve: Set<ProvingJobId> = new Set();
71
+ private log: Logger;
64
72
 
65
73
  constructor(
66
74
  private broker: ProvingJobProducer,
67
75
  private proofStore: ProofStore = new InlineProofStore(),
68
76
  private failedProofStore?: ProofStore,
69
77
  private pollIntervalMs = 1000,
70
- private log = createLogger('prover-client:broker-circuit-prover-facade'),
71
- ) {}
78
+ bindings?: LoggerBindings,
79
+ ) {
80
+ this.log = createLogger('prover-client:broker-circuit-prover-facade', bindings);
81
+ }
72
82
 
73
83
  /**
74
84
  * This is a critical section. This function can not be async since it writes
@@ -93,7 +103,15 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
93
103
 
94
104
  // Create a promise for this job id, regardless of whether it was enqueued at the broker
95
105
  // The running promise will monitor for the job to be completed and resolve it either way
106
+ // We install an error handler to prevent unhandled rejections in the process before the
107
+ // job promise is awaited by the caller (see #13166)
96
108
  const promise = promiseWithResolvers<ProvingJobResultsMap[T]>();
109
+ promise.promise.catch(err =>
110
+ this.log.error(`Job errored with '${err.message ?? err}' id=${id} type=${ProvingRequestType[type]}`, {
111
+ provingJobId: id,
112
+ provingJobType: ProvingRequestType[type],
113
+ }),
114
+ );
97
115
  const abortFn = () => {
98
116
  signal?.removeEventListener('abort', abortFn);
99
117
  void this.broker.cancelProvingJob(id).catch(err => this.log.warn(`Error cancelling job id=${id}`, err));
@@ -114,7 +132,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
114
132
  id: ProvingJobId,
115
133
  type: T,
116
134
  inputs: ProvingJobInputsMap[T],
117
- epochNumber = 0,
135
+ epochNumber = EpochNumber.ZERO,
118
136
  signal?: AbortSignal,
119
137
  ): Promise<ProvingJobResultsMap[T]> {
120
138
  const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
@@ -125,27 +143,26 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
125
143
  try {
126
144
  const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
127
145
  job.inputsUri = inputsUri;
128
- const jobStatus = await this.broker.enqueueProvingJob({
129
- id,
130
- type,
131
- inputsUri,
146
+
147
+ // Send the job to the broker
148
+ const jobStatus = await this.broker.enqueueProvingJob({ id, type, inputsUri, epochNumber });
149
+
150
+ const jobLogText = `id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`;
151
+ const jobLogData = {
152
+ provingJobId: id,
153
+ provingJobType: ProvingRequestType[type],
132
154
  epochNumber,
133
- });
155
+ inputsUri: truncate(inputsUri),
156
+ status: jobStatus.status,
157
+ numOutstandingJobs: this.jobs.size,
158
+ };
134
159
 
135
160
  // If we are here then the job was successfully accepted by the broker
136
161
  // the returned status is for before any action was performed
137
162
  if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
138
163
  // Job was already completed by the broker
139
164
  // 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
- );
165
+ this.log.verbose(`Job already completed when sent to broker ${jobLogText}`, jobLogData);
149
166
 
150
167
  // Job was not enqueued. It must be completed already, add to our set of already completed jobs
151
168
  this.jobsToRetrieve.add(id);
@@ -155,27 +172,10 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
155
172
 
156
173
  // Job added for the first time
157
174
  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
- );
175
+ this.log.verbose(`Job enqueued with broker ${jobLogText}`, jobLogData);
168
176
  } else {
169
177
  // 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
- );
178
+ this.log.verbose(`Job already in queue or in progress when sent to broker ${jobLogText}`, jobLogData);
179
179
  }
180
180
  }
181
181
  } catch (err) {
@@ -400,8 +400,8 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
400
400
  getAvmProof(
401
401
  inputs: AvmCircuitInputs,
402
402
  signal?: AbortSignal,
403
- epochNumber?: number,
404
- ): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>> {
403
+ epochNumber?: EpochNumber,
404
+ ): Promise<RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>> {
405
405
  return this.enqueueJob(
406
406
  this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber),
407
407
  ProvingRequestType.PUBLIC_VM,
@@ -412,29 +412,127 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
412
412
  }
413
413
 
414
414
  getBaseParityProof(
415
- inputs: BaseParityInputs,
415
+ inputs: ParityBasePrivateInputs,
416
416
  signal?: AbortSignal,
417
- epochNumber?: number,
417
+ epochNumber?: EpochNumber,
418
418
  ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
419
419
  return this.enqueueJob(
420
- this.generateId(ProvingRequestType.BASE_PARITY, inputs, epochNumber),
421
- ProvingRequestType.BASE_PARITY,
420
+ this.generateId(ProvingRequestType.PARITY_BASE, inputs, epochNumber),
421
+ ProvingRequestType.PARITY_BASE,
422
422
  inputs,
423
423
  epochNumber,
424
424
  signal,
425
425
  );
426
426
  }
427
427
 
428
- getBlockMergeRollupProof(
429
- input: BlockMergeRollupInputs,
428
+ getTxMergeRollupProof(
429
+ input: TxMergeRollupPrivateInputs,
430
430
  signal?: AbortSignal,
431
- epochNumber?: number,
431
+ epochNumber?: EpochNumber,
432
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
433
+ return this.enqueueJob(
434
+ this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber),
435
+ ProvingRequestType.TX_MERGE_ROLLUP,
436
+ input,
437
+ epochNumber,
438
+ signal,
439
+ );
440
+ }
441
+
442
+ getPublicChonkVerifierProof(
443
+ inputs: PublicChonkVerifierPrivateInputs,
444
+ signal?: AbortSignal,
445
+ epochNumber?: EpochNumber,
432
446
  ): Promise<
433
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
447
+ PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
434
448
  > {
435
449
  return this.enqueueJob(
436
- this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
437
- ProvingRequestType.BLOCK_MERGE_ROLLUP,
450
+ this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber),
451
+ ProvingRequestType.PUBLIC_CHONK_VERIFIER,
452
+ inputs,
453
+ epochNumber,
454
+ signal,
455
+ );
456
+ }
457
+
458
+ getPrivateTxBaseRollupProof(
459
+ baseRollupInput: PrivateTxBaseRollupPrivateInputs,
460
+ signal?: AbortSignal,
461
+ epochNumber?: EpochNumber,
462
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
463
+ return this.enqueueJob(
464
+ this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber),
465
+ ProvingRequestType.PRIVATE_TX_BASE_ROLLUP,
466
+ baseRollupInput,
467
+ epochNumber,
468
+ signal,
469
+ );
470
+ }
471
+
472
+ getPublicTxBaseRollupProof(
473
+ inputs: PublicTxBaseRollupPrivateInputs,
474
+ signal?: AbortSignal,
475
+ epochNumber?: EpochNumber,
476
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
477
+ return this.enqueueJob(
478
+ this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber),
479
+ ProvingRequestType.PUBLIC_TX_BASE_ROLLUP,
480
+ inputs,
481
+ epochNumber,
482
+ signal,
483
+ );
484
+ }
485
+
486
+ getRootParityProof(
487
+ inputs: ParityRootPrivateInputs,
488
+ signal?: AbortSignal,
489
+ epochNumber?: EpochNumber,
490
+ ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
491
+ return this.enqueueJob(
492
+ this.generateId(ProvingRequestType.PARITY_ROOT, inputs, epochNumber),
493
+ ProvingRequestType.PARITY_ROOT,
494
+ inputs,
495
+ epochNumber,
496
+ signal,
497
+ );
498
+ }
499
+
500
+ getBlockRootFirstRollupProof(
501
+ input: BlockRootFirstRollupPrivateInputs,
502
+ signal?: AbortSignal,
503
+ epochNumber?: EpochNumber,
504
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
505
+ return this.enqueueJob(
506
+ this.generateId(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber),
507
+ ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP,
508
+ input,
509
+ epochNumber,
510
+ signal,
511
+ );
512
+ }
513
+
514
+ getBlockRootSingleTxFirstRollupProof(
515
+ input: BlockRootSingleTxFirstRollupPrivateInputs,
516
+ signal?: AbortSignal,
517
+ epochNumber?: EpochNumber,
518
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
519
+ return this.enqueueJob(
520
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber),
521
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP,
522
+ input,
523
+ epochNumber,
524
+ signal,
525
+ );
526
+ }
527
+
528
+ getBlockRootEmptyTxFirstRollupProof(
529
+ input: BlockRootEmptyTxFirstRollupPrivateInputs,
530
+ signal?: AbortSignal,
531
+ epochNumber?: EpochNumber,
532
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
533
+ return this.enqueueJob(
534
+ this.generateId(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber),
535
+ ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP,
438
536
  input,
439
537
  epochNumber,
440
538
  signal,
@@ -442,12 +540,10 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
442
540
  }
443
541
 
444
542
  getBlockRootRollupProof(
445
- input: BlockRootRollupInputs,
543
+ input: BlockRootRollupPrivateInputs,
446
544
  signal?: AbortSignal,
447
- epochNumber?: number,
448
- ): Promise<
449
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
450
- > {
545
+ epochNumber?: EpochNumber,
546
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
451
547
  return this.enqueueJob(
452
548
  this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
453
549
  ProvingRequestType.BLOCK_ROOT_ROLLUP,
@@ -457,103 +553,102 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
457
553
  );
458
554
  }
459
555
 
460
- getSingleTxBlockRootRollupProof(
461
- input: SingleTxBlockRootRollupInputs,
556
+ getBlockRootSingleTxRollupProof(
557
+ input: BlockRootSingleTxRollupPrivateInputs,
462
558
  signal?: AbortSignal,
463
- epochNumber?: number,
464
- ): Promise<
465
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
466
- > {
559
+ epochNumber?: EpochNumber,
560
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
467
561
  return this.enqueueJob(
468
- this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
469
- ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP,
562
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber),
563
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP,
470
564
  input,
471
565
  epochNumber,
472
566
  signal,
473
567
  );
474
568
  }
475
569
 
476
- getEmptyBlockRootRollupProof(
477
- input: EmptyBlockRootRollupInputs,
570
+ getBlockMergeRollupProof(
571
+ input: BlockMergeRollupPrivateInputs,
478
572
  signal?: AbortSignal,
479
- epochNumber?: number,
480
- ): Promise<
481
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
482
- > {
573
+ epochNumber?: EpochNumber,
574
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
483
575
  return this.enqueueJob(
484
- this.generateId(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber),
485
- ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP,
576
+ this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
577
+ ProvingRequestType.BLOCK_MERGE_ROLLUP,
486
578
  input,
487
579
  epochNumber,
488
580
  signal,
489
581
  );
490
582
  }
491
583
 
492
- getMergeRollupProof(
493
- input: MergeRollupInputs,
584
+ getCheckpointRootRollupProof(
585
+ input: CheckpointRootRollupPrivateInputs,
494
586
  signal?: AbortSignal,
495
- epochNumber?: number,
587
+ epochNumber?: EpochNumber,
496
588
  ): Promise<
497
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
589
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
498
590
  > {
499
591
  return this.enqueueJob(
500
- this.generateId(ProvingRequestType.MERGE_ROLLUP, input, epochNumber),
501
- ProvingRequestType.MERGE_ROLLUP,
592
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber),
593
+ ProvingRequestType.CHECKPOINT_ROOT_ROLLUP,
502
594
  input,
503
595
  epochNumber,
504
596
  signal,
505
597
  );
506
598
  }
507
- getPrivateBaseRollupProof(
508
- baseRollupInput: PrivateBaseRollupInputs,
599
+
600
+ getCheckpointRootSingleBlockRollupProof(
601
+ input: CheckpointRootSingleBlockRollupPrivateInputs,
509
602
  signal?: AbortSignal,
510
- epochNumber?: number,
603
+ epochNumber?: EpochNumber,
511
604
  ): Promise<
512
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
605
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
513
606
  > {
514
607
  return this.enqueueJob(
515
- this.generateId(ProvingRequestType.PRIVATE_BASE_ROLLUP, baseRollupInput, epochNumber),
516
- ProvingRequestType.PRIVATE_BASE_ROLLUP,
517
- baseRollupInput,
608
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber),
609
+ ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP,
610
+ input,
518
611
  epochNumber,
519
612
  signal,
520
613
  );
521
614
  }
522
615
 
523
- getPublicBaseRollupProof(
524
- inputs: PublicBaseRollupInputs,
616
+ getCheckpointPaddingRollupProof(
617
+ input: CheckpointPaddingRollupPrivateInputs,
525
618
  signal?: AbortSignal,
526
- epochNumber?: number,
619
+ epochNumber?: EpochNumber,
527
620
  ): Promise<
528
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
621
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
529
622
  > {
530
623
  return this.enqueueJob(
531
- this.generateId(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, epochNumber),
532
- ProvingRequestType.PUBLIC_BASE_ROLLUP,
533
- inputs,
624
+ this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber),
625
+ ProvingRequestType.CHECKPOINT_PADDING_ROLLUP,
626
+ input,
534
627
  epochNumber,
535
628
  signal,
536
629
  );
537
630
  }
538
631
 
539
- getRootParityProof(
540
- inputs: RootParityInputs,
632
+ getCheckpointMergeRollupProof(
633
+ input: CheckpointMergeRollupPrivateInputs,
541
634
  signal?: AbortSignal,
542
- epochNumber?: number,
543
- ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
635
+ epochNumber?: EpochNumber,
636
+ ): Promise<
637
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
638
+ > {
544
639
  return this.enqueueJob(
545
- this.generateId(ProvingRequestType.ROOT_PARITY, inputs, epochNumber),
546
- ProvingRequestType.ROOT_PARITY,
547
- inputs,
640
+ this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber),
641
+ ProvingRequestType.CHECKPOINT_MERGE_ROLLUP,
642
+ input,
548
643
  epochNumber,
549
644
  signal,
550
645
  );
551
646
  }
552
647
 
553
648
  getRootRollupProof(
554
- input: RootRollupInputs,
649
+ input: RootRollupPrivateInputs,
555
650
  signal?: AbortSignal,
556
- epochNumber?: number,
651
+ epochNumber?: EpochNumber,
557
652
  ): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
558
653
  return this.enqueueJob(
559
654
  this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber),
@@ -564,21 +659,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
564
659
  );
565
660
  }
566
661
 
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) {
662
+ private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = EpochNumber.ZERO) {
582
663
  const inputsHash = sha256(inputs.toBuffer());
583
664
  return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
584
665
  }
@@ -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';