@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.03f7ef2

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