@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.001888fc

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