@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.21caa21

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