@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.0208eb9

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 (155) 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 +7 -7
  43. package/dest/prover-client/prover-client.d.ts.map +1 -1
  44. package/dest/prover-client/prover-client.js +19 -13
  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 +31 -10
  52. package/dest/proving_broker/config.d.ts.map +1 -1
  53. package/dest/proving_broker/config.js +41 -7
  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 -5
  62. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
  63. package/dest/proving_broker/proof_store/factory.js +7 -30
  64. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
  65. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
  66. package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
  67. package/dest/proving_broker/proof_store/index.d.ts +2 -1
  68. package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
  69. package/dest/proving_broker/proof_store/index.js +1 -0
  70. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
  71. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
  72. package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
  73. package/dest/proving_broker/proving_agent.d.ts +8 -12
  74. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  75. package/dest/proving_broker/proving_agent.js +86 -65
  76. package/dest/proving_broker/proving_broker.d.ts +17 -5
  77. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  78. package/dest/proving_broker/proving_broker.js +69 -34
  79. package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
  80. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  81. package/dest/proving_broker/proving_broker_database/memory.js +1 -1
  82. package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
  83. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  84. package/dest/proving_broker/proving_broker_database/persisted.js +401 -11
  85. package/dest/proving_broker/proving_broker_database.d.ts +3 -2
  86. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  87. package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
  88. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  89. package/dest/proving_broker/proving_broker_instrumentation.js +15 -35
  90. package/dest/proving_broker/proving_job_controller.d.ts +11 -10
  91. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  92. package/dest/proving_broker/proving_job_controller.js +92 -62
  93. package/dest/proving_broker/rpc.d.ts +7 -7
  94. package/dest/proving_broker/rpc.d.ts.map +1 -1
  95. package/dest/proving_broker/rpc.js +9 -4
  96. package/dest/test/mock_proof_store.d.ts +9 -0
  97. package/dest/test/mock_proof_store.d.ts.map +1 -0
  98. package/dest/test/mock_proof_store.js +10 -0
  99. package/dest/test/mock_prover.d.ts +23 -17
  100. package/dest/test/mock_prover.d.ts.map +1 -1
  101. package/dest/test/mock_prover.js +38 -20
  102. package/package.json +33 -31
  103. package/src/config.ts +25 -9
  104. package/src/light/index.ts +1 -0
  105. package/src/light/lightweight_checkpoint_builder.ts +289 -0
  106. package/src/mocks/fixtures.ts +46 -40
  107. package/src/mocks/test_context.ts +223 -116
  108. package/src/orchestrator/block-building-helpers.ts +258 -334
  109. package/src/orchestrator/block-proving-state.ts +325 -231
  110. package/src/orchestrator/checkpoint-proving-state.ts +349 -0
  111. package/src/orchestrator/epoch-proving-state.ts +237 -111
  112. package/src/orchestrator/orchestrator.ts +653 -343
  113. package/src/orchestrator/orchestrator_metrics.ts +2 -6
  114. package/src/orchestrator/tx-proving-state.ts +48 -66
  115. package/src/prover-client/factory.ts +6 -2
  116. package/src/prover-client/prover-client.ts +47 -37
  117. package/src/prover-client/server-epoch-prover.ts +40 -22
  118. package/src/proving_broker/broker_prover_facade.ts +212 -131
  119. package/src/proving_broker/config.ts +47 -7
  120. package/src/proving_broker/factory.ts +2 -1
  121. package/src/proving_broker/fixtures.ts +8 -3
  122. package/src/proving_broker/proof_store/factory.ts +10 -32
  123. package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
  124. package/src/proving_broker/proof_store/index.ts +1 -0
  125. package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
  126. package/src/proving_broker/proving_agent.ts +95 -66
  127. package/src/proving_broker/proving_broker.ts +87 -42
  128. package/src/proving_broker/proving_broker_database/memory.ts +3 -2
  129. package/src/proving_broker/proving_broker_database/persisted.ts +29 -13
  130. package/src/proving_broker/proving_broker_database.ts +2 -1
  131. package/src/proving_broker/proving_broker_instrumentation.ts +14 -35
  132. package/src/proving_broker/proving_job_controller.ts +100 -83
  133. package/src/proving_broker/rpc.ts +14 -5
  134. package/src/test/mock_proof_store.ts +14 -0
  135. package/src/test/mock_prover.ts +156 -64
  136. package/dest/bin/get-proof-inputs.d.ts +0 -2
  137. package/dest/bin/get-proof-inputs.d.ts.map +0 -1
  138. package/dest/bin/get-proof-inputs.js +0 -51
  139. package/dest/block_builder/index.d.ts +0 -6
  140. package/dest/block_builder/index.d.ts.map +0 -1
  141. package/dest/block_builder/index.js +0 -1
  142. package/dest/block_builder/light.d.ts +0 -33
  143. package/dest/block_builder/light.d.ts.map +0 -1
  144. package/dest/block_builder/light.js +0 -82
  145. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
  146. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
  147. package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -51
  148. package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
  149. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
  150. package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
  151. package/src/bin/get-proof-inputs.ts +0 -59
  152. package/src/block_builder/index.ts +0 -6
  153. package/src/block_builder/light.ts +0 -101
  154. package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -72
  155. 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,18 +22,23 @@ 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 */
27
31
  proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
28
32
  /** The maximum number of epochs to keep results for */
29
33
  proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative(),
34
+ /** Enable debug replay mode for replaying proving jobs from stored inputs */
35
+ proverBrokerDebugReplayEnabled: z.boolean(),
30
36
  });
31
37
 
32
38
  export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> &
33
- Pick<DataStoreConfig, 'dataStoreMapSizeKB' | 'dataDirectory'> &
34
- L1ReaderConfig;
39
+ Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> &
40
+ L1ReaderConfig &
41
+ Pick<ChainConfig, 'rollupVersion'>;
35
42
 
36
43
  export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig> = {
37
44
  proverBrokerJobTimeoutMs: {
@@ -64,8 +71,19 @@ export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>
64
71
  description: 'The maximum number of epochs to keep results for',
65
72
  ...numberConfigHelper(1),
66
73
  },
67
- ...l1ReaderConfigMappings,
74
+ proverBrokerStoreMapSizeKb: {
75
+ env: 'PROVER_BROKER_STORE_MAP_SIZE_KB',
76
+ parseEnv: (val: string | undefined) => (val ? +val : undefined),
77
+ description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set.",
78
+ },
79
+ proverBrokerDebugReplayEnabled: {
80
+ env: 'PROVER_BROKER_DEBUG_REPLAY_ENABLED',
81
+ description: 'Enable debug replay mode for replaying proving jobs from stored inputs',
82
+ ...booleanConfigHelper(false),
83
+ },
68
84
  ...dataConfigMappings,
85
+ ...l1ReaderConfigMappings,
86
+ ...pickConfigMappings(chainConfigMappings, ['rollupVersion']),
69
87
  };
70
88
 
71
89
  export const defaultProverBrokerConfig: ProverBrokerConfig = getDefaultConfig(proverBrokerConfigMappings);
@@ -87,6 +105,12 @@ export const ProverAgentConfig = z.object({
87
105
  proverTestDelayMs: z.number(),
88
106
  /** If using realistic delays, what percentage of realistic times to apply. */
89
107
  proverTestDelayFactor: z.number(),
108
+ /** The delay (ms) to inject during fake proof verification */
109
+ proverTestVerificationDelayMs: z.number().optional(),
110
+ /** Whether to abort pending proving jobs when the orchestrator is cancelled */
111
+ cancelJobsOnStop: z.boolean(),
112
+ /** Where to store proving results. Must be accessible to both prover node and agents. If not set will inline-encode the parameters */
113
+ proofStore: z.string().optional(),
90
114
  });
91
115
 
92
116
  export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
@@ -100,7 +124,7 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
100
124
  proverAgentPollIntervalMs: {
101
125
  env: 'PROVER_AGENT_POLL_INTERVAL_MS',
102
126
  description: 'The interval agents poll for jobs at',
103
- ...numberConfigHelper(100),
127
+ ...numberConfigHelper(1000),
104
128
  },
105
129
  proverAgentProofTypes: {
106
130
  env: 'PROVER_AGENT_PROOF_TYPES',
@@ -118,7 +142,7 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
118
142
  realProofs: {
119
143
  env: 'PROVER_REAL_PROOFS',
120
144
  description: 'Whether to construct real proofs',
121
- ...booleanConfigHelper(false),
145
+ ...booleanConfigHelper(true),
122
146
  },
123
147
  proverTestDelayType: {
124
148
  env: 'PROVER_TEST_DELAY_TYPE',
@@ -135,4 +159,20 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
135
159
  description: 'If using realistic delays, what percentage of realistic times to apply.',
136
160
  ...numberConfigHelper(1),
137
161
  },
162
+ proverTestVerificationDelayMs: {
163
+ env: 'PROVER_TEST_VERIFICATION_DELAY_MS',
164
+ description: 'The delay (ms) to inject during fake proof verification',
165
+ ...numberConfigHelper(10),
166
+ },
167
+ cancelJobsOnStop: {
168
+ env: 'PROVER_CANCEL_JOBS_ON_STOP',
169
+ description:
170
+ 'Whether to abort pending proving jobs when the orchestrator is cancelled. ' +
171
+ 'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
172
+ ...booleanConfigHelper(false),
173
+ },
174
+ proofStore: {
175
+ env: 'PROVER_PROOF_STORE',
176
+ description: 'Optional proof input store for the prover',
177
+ },
138
178
  };
@@ -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 {