@aztec/prover-client 0.0.1-fake-ceab37513c → 0.0.2-commit.217f559981

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 (148) hide show
  1. package/dest/config.d.ts +2 -2
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +2 -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 +48 -0
  9. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  10. package/dest/light/lightweight_checkpoint_builder.js +202 -0
  11. package/dest/mocks/fixtures.d.ts +5 -5
  12. package/dest/mocks/fixtures.d.ts.map +1 -1
  13. package/dest/mocks/fixtures.js +35 -16
  14. package/dest/mocks/test_context.d.ts +39 -33
  15. package/dest/mocks/test_context.d.ts.map +1 -1
  16. package/dest/mocks/test_context.js +141 -82
  17. package/dest/orchestrator/block-building-helpers.d.ts +34 -34
  18. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  19. package/dest/orchestrator/block-building-helpers.js +151 -187
  20. package/dest/orchestrator/block-proving-state.d.ts +71 -55
  21. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  22. package/dest/orchestrator/block-proving-state.js +280 -185
  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 +40 -32
  27. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  28. package/dest/orchestrator/epoch-proving-state.js +165 -85
  29. package/dest/orchestrator/index.d.ts +1 -1
  30. package/dest/orchestrator/orchestrator.d.ts +51 -35
  31. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  32. package/dest/orchestrator/orchestrator.js +847 -329
  33. package/dest/orchestrator/orchestrator_metrics.d.ts +1 -3
  34. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
  35. package/dest/orchestrator/orchestrator_metrics.js +2 -15
  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 -33
  39. package/dest/prover-client/factory.d.ts +3 -3
  40. package/dest/prover-client/factory.d.ts.map +1 -1
  41. package/dest/prover-client/index.d.ts +1 -1
  42. package/dest/prover-client/prover-client.d.ts +5 -5
  43. package/dest/prover-client/prover-client.d.ts.map +1 -1
  44. package/dest/prover-client/prover-client.js +15 -10
  45. package/dest/prover-client/server-epoch-prover.d.ts +13 -11
  46. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  47. package/dest/prover-client/server-epoch-prover.js +9 -9
  48. package/dest/proving_broker/broker_prover_facade.d.ts +28 -21
  49. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  50. package/dest/proving_broker/broker_prover_facade.js +45 -36
  51. package/dest/proving_broker/config.d.ts +24 -8
  52. package/dest/proving_broker/config.d.ts.map +1 -1
  53. package/dest/proving_broker/config.js +26 -3
  54. package/dest/proving_broker/factory.d.ts +1 -1
  55. package/dest/proving_broker/fixtures.d.ts +3 -2
  56. package/dest/proving_broker/fixtures.d.ts.map +1 -1
  57. package/dest/proving_broker/fixtures.js +3 -2
  58. package/dest/proving_broker/index.d.ts +1 -1
  59. package/dest/proving_broker/proof_store/factory.d.ts +2 -5
  60. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
  61. package/dest/proving_broker/proof_store/factory.js +7 -30
  62. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
  63. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
  64. package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
  65. package/dest/proving_broker/proof_store/index.d.ts +2 -1
  66. package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
  67. package/dest/proving_broker/proof_store/index.js +1 -0
  68. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
  69. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
  70. package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
  71. package/dest/proving_broker/proving_agent.d.ts +5 -9
  72. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  73. package/dest/proving_broker/proving_agent.js +4 -19
  74. package/dest/proving_broker/proving_broker.d.ts +7 -4
  75. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  76. package/dest/proving_broker/proving_broker.js +64 -30
  77. package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
  78. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  79. package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
  80. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  81. package/dest/proving_broker/proving_broker_database/persisted.js +392 -3
  82. package/dest/proving_broker/proving_broker_database.d.ts +3 -2
  83. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  84. package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
  85. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  86. package/dest/proving_broker/proving_broker_instrumentation.js +15 -35
  87. package/dest/proving_broker/proving_job_controller.d.ts +5 -3
  88. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  89. package/dest/proving_broker/proving_job_controller.js +46 -24
  90. package/dest/proving_broker/rpc.d.ts +7 -5
  91. package/dest/proving_broker/rpc.d.ts.map +1 -1
  92. package/dest/proving_broker/rpc.js +8 -0
  93. package/dest/test/mock_proof_store.d.ts +1 -1
  94. package/dest/test/mock_proof_store.d.ts.map +1 -1
  95. package/dest/test/mock_prover.d.ts +23 -19
  96. package/dest/test/mock_prover.d.ts.map +1 -1
  97. package/dest/test/mock_prover.js +38 -23
  98. package/package.json +21 -20
  99. package/src/config.ts +2 -2
  100. package/src/light/index.ts +1 -0
  101. package/src/light/lightweight_checkpoint_builder.ts +294 -0
  102. package/src/mocks/fixtures.ts +43 -37
  103. package/src/mocks/test_context.ts +201 -114
  104. package/src/orchestrator/block-building-helpers.ts +233 -313
  105. package/src/orchestrator/block-proving-state.ts +324 -247
  106. package/src/orchestrator/checkpoint-proving-state.ts +349 -0
  107. package/src/orchestrator/epoch-proving-state.ts +229 -132
  108. package/src/orchestrator/orchestrator.ts +630 -385
  109. package/src/orchestrator/orchestrator_metrics.ts +2 -25
  110. package/src/orchestrator/tx-proving-state.ts +49 -60
  111. package/src/prover-client/factory.ts +6 -2
  112. package/src/prover-client/prover-client.ts +31 -23
  113. package/src/prover-client/server-epoch-prover.ts +30 -21
  114. package/src/proving_broker/broker_prover_facade.ts +183 -118
  115. package/src/proving_broker/config.ts +30 -1
  116. package/src/proving_broker/fixtures.ts +8 -3
  117. package/src/proving_broker/proof_store/factory.ts +10 -32
  118. package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
  119. package/src/proving_broker/proof_store/index.ts +1 -0
  120. package/src/proving_broker/proving_agent.ts +6 -19
  121. package/src/proving_broker/proving_broker.ts +72 -28
  122. package/src/proving_broker/proving_broker_database/memory.ts +2 -1
  123. package/src/proving_broker/proving_broker_database/persisted.ts +20 -5
  124. package/src/proving_broker/proving_broker_database.ts +2 -1
  125. package/src/proving_broker/proving_broker_instrumentation.ts +14 -35
  126. package/src/proving_broker/proving_job_controller.ts +51 -25
  127. package/src/proving_broker/rpc.ts +14 -0
  128. package/src/test/mock_prover.ts +144 -74
  129. package/dest/bin/get-proof-inputs.d.ts +0 -2
  130. package/dest/bin/get-proof-inputs.d.ts.map +0 -1
  131. package/dest/bin/get-proof-inputs.js +0 -51
  132. package/dest/block-factory/index.d.ts +0 -2
  133. package/dest/block-factory/index.d.ts.map +0 -1
  134. package/dest/block-factory/index.js +0 -1
  135. package/dest/block-factory/light.d.ts +0 -36
  136. package/dest/block-factory/light.d.ts.map +0 -1
  137. package/dest/block-factory/light.js +0 -87
  138. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
  139. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
  140. package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -52
  141. package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
  142. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
  143. package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
  144. package/src/bin/get-proof-inputs.ts +0 -59
  145. package/src/block-factory/index.ts +0 -1
  146. package/src/block-factory/light.ts +0 -114
  147. package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
  148. package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
@@ -3,16 +3,14 @@ import type {
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 { Fr } from '@aztec/foundation/fields';
10
- import { createLogger } from '@aztec/foundation/log';
7
+ import { EpochNumber } from '@aztec/foundation/branded-types';
8
+ import { sha256 } from '@aztec/foundation/crypto/sha256';
9
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
11
10
  import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
12
11
  import { truncate } from '@aztec/foundation/string';
13
12
  import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
14
13
  import {
15
- type ProofAndVerificationKey,
16
14
  type ProofUri,
17
15
  type ProvingJobId,
18
16
  type ProvingJobInputsMap,
@@ -23,22 +21,29 @@ import {
23
21
  type ServerCircuitProver,
24
22
  makeProvingJobId,
25
23
  } from '@aztec/stdlib/interfaces/server';
26
- import type { BaseParityInputs, ParityPublicInputs, RootParityInputs } from '@aztec/stdlib/parity';
27
- import { ProvingRequestType } from '@aztec/stdlib/proofs';
24
+ import type { ParityBasePrivateInputs, ParityPublicInputs, ParityRootPrivateInputs } from '@aztec/stdlib/parity';
25
+ import { ProvingRequestType, RecursiveProof } from '@aztec/stdlib/proofs';
28
26
  import type {
29
- BaseOrMergeRollupPublicInputs,
30
- BlockMergeRollupInputs,
31
- BlockRootOrBlockMergePublicInputs,
32
- BlockRootRollupInputs,
33
- EmptyBlockRootRollupInputs,
34
- MergeRollupInputs,
35
- PaddingBlockRootRollupInputs,
36
- PrivateBaseRollupInputs,
37
- PublicBaseRollupInputs,
38
- RootRollupInputs,
27
+ BlockMergeRollupPrivateInputs,
28
+ BlockRollupPublicInputs,
29
+ BlockRootEmptyTxFirstRollupPrivateInputs,
30
+ BlockRootFirstRollupPrivateInputs,
31
+ BlockRootRollupPrivateInputs,
32
+ BlockRootSingleTxFirstRollupPrivateInputs,
33
+ BlockRootSingleTxRollupPrivateInputs,
34
+ CheckpointMergeRollupPrivateInputs,
35
+ CheckpointPaddingRollupPrivateInputs,
36
+ CheckpointRollupPublicInputs,
37
+ CheckpointRootRollupPrivateInputs,
38
+ CheckpointRootSingleBlockRollupPrivateInputs,
39
+ PrivateTxBaseRollupPrivateInputs,
40
+ PublicChonkVerifierPrivateInputs,
41
+ PublicChonkVerifierPublicInputs,
42
+ PublicTxBaseRollupPrivateInputs,
43
+ RootRollupPrivateInputs,
39
44
  RootRollupPublicInputs,
40
- SingleTxBlockRootRollupInputs,
41
- TubeInputs,
45
+ TxMergeRollupPrivateInputs,
46
+ TxRollupPublicInputs,
42
47
  } from '@aztec/stdlib/rollup';
43
48
 
44
49
  import { InlineProofStore, type ProofStore } from './proof_store/index.js';
@@ -63,14 +68,17 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
63
68
  private runningPromise?: RunningPromise;
64
69
  private timeOfLastSnapshotSync = Date.now();
65
70
  private jobsToRetrieve: Set<ProvingJobId> = new Set();
71
+ private log: Logger;
66
72
 
67
73
  constructor(
68
74
  private broker: ProvingJobProducer,
69
75
  private proofStore: ProofStore = new InlineProofStore(),
70
76
  private failedProofStore?: ProofStore,
71
77
  private pollIntervalMs = 1000,
72
- private log = createLogger('prover-client:broker-circuit-prover-facade'),
73
- ) {}
78
+ bindings?: LoggerBindings,
79
+ ) {
80
+ this.log = createLogger('prover-client:broker-circuit-prover-facade', bindings);
81
+ }
74
82
 
75
83
  /**
76
84
  * This is a critical section. This function can not be async since it writes
@@ -124,7 +132,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
124
132
  id: ProvingJobId,
125
133
  type: T,
126
134
  inputs: ProvingJobInputsMap[T],
127
- epochNumber = 0,
135
+ epochNumber = EpochNumber.ZERO,
128
136
  signal?: AbortSignal,
129
137
  ): Promise<ProvingJobResultsMap[T]> {
130
138
  const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
@@ -391,210 +399,267 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
391
399
 
392
400
  getAvmProof(
393
401
  inputs: AvmCircuitInputs,
394
- skipPublicInputsValidation?: boolean, // TODO(#14234)[Unconditional PIs validation]: remove this argument
395
402
  signal?: AbortSignal,
396
- epochNumber?: number,
397
- ): Promise<ProofAndVerificationKey<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>> {
398
- this.log.info(`getAvmProof() called with skipPublicInputsValidation: ${skipPublicInputsValidation}`);
399
-
403
+ epochNumber?: EpochNumber,
404
+ ): Promise<RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>> {
400
405
  return this.enqueueJob(
401
406
  this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber),
402
407
  ProvingRequestType.PUBLIC_VM,
403
408
  inputs,
404
409
  epochNumber,
405
410
  signal,
406
- ).then(result => {
407
- // TODO(#14234)[Unconditional PIs validation]: Remove ".then()".
408
- // Override the default value of skipPublicInputsValidation potentially set in BBNativeRollupProver.getAvmProof().
409
- result.proof.proof[0] = skipPublicInputsValidation ? new Fr(1) : new Fr(0);
410
- return result;
411
- });
411
+ );
412
412
  }
413
413
 
414
414
  getBaseParityProof(
415
- inputs: BaseParityInputs,
415
+ inputs: ParityBasePrivateInputs,
416
416
  signal?: AbortSignal,
417
- epochNumber?: number,
417
+ epochNumber?: EpochNumber,
418
418
  ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
419
419
  return this.enqueueJob(
420
- this.generateId(ProvingRequestType.BASE_PARITY, inputs, epochNumber),
421
- ProvingRequestType.BASE_PARITY,
420
+ this.generateId(ProvingRequestType.PARITY_BASE, inputs, epochNumber),
421
+ ProvingRequestType.PARITY_BASE,
422
422
  inputs,
423
423
  epochNumber,
424
424
  signal,
425
425
  );
426
426
  }
427
427
 
428
- getBlockMergeRollupProof(
429
- input: BlockMergeRollupInputs,
428
+ getTxMergeRollupProof(
429
+ input: TxMergeRollupPrivateInputs,
430
430
  signal?: AbortSignal,
431
- epochNumber?: number,
432
- ): Promise<
433
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
434
- > {
431
+ epochNumber?: EpochNumber,
432
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
435
433
  return this.enqueueJob(
436
- this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
437
- ProvingRequestType.BLOCK_MERGE_ROLLUP,
434
+ this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber),
435
+ ProvingRequestType.TX_MERGE_ROLLUP,
438
436
  input,
439
437
  epochNumber,
440
438
  signal,
441
439
  );
442
440
  }
443
441
 
444
- getBlockRootRollupProof(
445
- input: BlockRootRollupInputs,
442
+ getPublicChonkVerifierProof(
443
+ inputs: PublicChonkVerifierPrivateInputs,
446
444
  signal?: AbortSignal,
447
- epochNumber?: number,
445
+ epochNumber?: EpochNumber,
448
446
  ): Promise<
449
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
447
+ PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
450
448
  > {
451
449
  return this.enqueueJob(
452
- this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
453
- ProvingRequestType.BLOCK_ROOT_ROLLUP,
450
+ this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber),
451
+ ProvingRequestType.PUBLIC_CHONK_VERIFIER,
452
+ inputs,
453
+ epochNumber,
454
+ signal,
455
+ );
456
+ }
457
+
458
+ getPrivateTxBaseRollupProof(
459
+ baseRollupInput: PrivateTxBaseRollupPrivateInputs,
460
+ signal?: AbortSignal,
461
+ epochNumber?: EpochNumber,
462
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
463
+ return this.enqueueJob(
464
+ this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber),
465
+ ProvingRequestType.PRIVATE_TX_BASE_ROLLUP,
466
+ baseRollupInput,
467
+ epochNumber,
468
+ signal,
469
+ );
470
+ }
471
+
472
+ getPublicTxBaseRollupProof(
473
+ inputs: PublicTxBaseRollupPrivateInputs,
474
+ signal?: AbortSignal,
475
+ epochNumber?: EpochNumber,
476
+ ): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
477
+ return this.enqueueJob(
478
+ this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber),
479
+ ProvingRequestType.PUBLIC_TX_BASE_ROLLUP,
480
+ inputs,
481
+ epochNumber,
482
+ signal,
483
+ );
484
+ }
485
+
486
+ getRootParityProof(
487
+ inputs: ParityRootPrivateInputs,
488
+ signal?: AbortSignal,
489
+ epochNumber?: EpochNumber,
490
+ ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
491
+ return this.enqueueJob(
492
+ this.generateId(ProvingRequestType.PARITY_ROOT, inputs, epochNumber),
493
+ ProvingRequestType.PARITY_ROOT,
494
+ inputs,
495
+ epochNumber,
496
+ signal,
497
+ );
498
+ }
499
+
500
+ getBlockRootFirstRollupProof(
501
+ input: BlockRootFirstRollupPrivateInputs,
502
+ signal?: AbortSignal,
503
+ epochNumber?: EpochNumber,
504
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
505
+ return this.enqueueJob(
506
+ this.generateId(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber),
507
+ ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP,
454
508
  input,
455
509
  epochNumber,
456
510
  signal,
457
511
  );
458
512
  }
459
513
 
460
- getSingleTxBlockRootRollupProof(
461
- input: SingleTxBlockRootRollupInputs,
514
+ getBlockRootSingleTxFirstRollupProof(
515
+ input: BlockRootSingleTxFirstRollupPrivateInputs,
462
516
  signal?: AbortSignal,
463
- epochNumber?: number,
464
- ): Promise<
465
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
466
- > {
517
+ epochNumber?: EpochNumber,
518
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
467
519
  return this.enqueueJob(
468
- this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
469
- ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP,
520
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber),
521
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP,
470
522
  input,
471
523
  epochNumber,
472
524
  signal,
473
525
  );
474
526
  }
475
527
 
476
- getEmptyBlockRootRollupProof(
477
- input: EmptyBlockRootRollupInputs,
528
+ getBlockRootEmptyTxFirstRollupProof(
529
+ input: BlockRootEmptyTxFirstRollupPrivateInputs,
478
530
  signal?: AbortSignal,
479
- epochNumber?: number,
480
- ): Promise<
481
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
482
- > {
531
+ epochNumber?: EpochNumber,
532
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
483
533
  return this.enqueueJob(
484
- this.generateId(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber),
485
- ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP,
534
+ this.generateId(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber),
535
+ ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP,
486
536
  input,
487
537
  epochNumber,
488
538
  signal,
489
539
  );
490
540
  }
491
541
 
492
- getPaddingBlockRootRollupProof(
493
- input: PaddingBlockRootRollupInputs,
542
+ getBlockRootRollupProof(
543
+ input: BlockRootRollupPrivateInputs,
494
544
  signal?: AbortSignal,
495
- epochNumber?: number,
496
- ): Promise<
497
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
498
- > {
545
+ epochNumber?: EpochNumber,
546
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
499
547
  return this.enqueueJob(
500
- this.generateId(ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP, input, epochNumber),
501
- ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP,
548
+ this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
549
+ ProvingRequestType.BLOCK_ROOT_ROLLUP,
502
550
  input,
503
551
  epochNumber,
504
552
  signal,
505
553
  );
506
554
  }
507
555
 
508
- getMergeRollupProof(
509
- input: MergeRollupInputs,
556
+ getBlockRootSingleTxRollupProof(
557
+ input: BlockRootSingleTxRollupPrivateInputs,
510
558
  signal?: AbortSignal,
511
- epochNumber?: number,
512
- ): Promise<
513
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
514
- > {
559
+ epochNumber?: EpochNumber,
560
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
515
561
  return this.enqueueJob(
516
- this.generateId(ProvingRequestType.MERGE_ROLLUP, input, epochNumber),
517
- ProvingRequestType.MERGE_ROLLUP,
562
+ this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber),
563
+ ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP,
518
564
  input,
519
565
  epochNumber,
520
566
  signal,
521
567
  );
522
568
  }
523
- getPrivateBaseRollupProof(
524
- baseRollupInput: PrivateBaseRollupInputs,
569
+
570
+ getBlockMergeRollupProof(
571
+ input: BlockMergeRollupPrivateInputs,
525
572
  signal?: AbortSignal,
526
- epochNumber?: number,
573
+ epochNumber?: EpochNumber,
574
+ ): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
575
+ return this.enqueueJob(
576
+ this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
577
+ ProvingRequestType.BLOCK_MERGE_ROLLUP,
578
+ input,
579
+ epochNumber,
580
+ signal,
581
+ );
582
+ }
583
+
584
+ getCheckpointRootRollupProof(
585
+ input: CheckpointRootRollupPrivateInputs,
586
+ signal?: AbortSignal,
587
+ epochNumber?: EpochNumber,
527
588
  ): Promise<
528
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
589
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
529
590
  > {
530
591
  return this.enqueueJob(
531
- this.generateId(ProvingRequestType.PRIVATE_BASE_ROLLUP, baseRollupInput, epochNumber),
532
- ProvingRequestType.PRIVATE_BASE_ROLLUP,
533
- baseRollupInput,
592
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber),
593
+ ProvingRequestType.CHECKPOINT_ROOT_ROLLUP,
594
+ input,
534
595
  epochNumber,
535
596
  signal,
536
597
  );
537
598
  }
538
599
 
539
- getPublicBaseRollupProof(
540
- inputs: PublicBaseRollupInputs,
600
+ getCheckpointRootSingleBlockRollupProof(
601
+ input: CheckpointRootSingleBlockRollupPrivateInputs,
541
602
  signal?: AbortSignal,
542
- epochNumber?: number,
603
+ epochNumber?: EpochNumber,
543
604
  ): Promise<
544
- PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
605
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
545
606
  > {
546
607
  return this.enqueueJob(
547
- this.generateId(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, epochNumber),
548
- ProvingRequestType.PUBLIC_BASE_ROLLUP,
549
- inputs,
608
+ this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber),
609
+ ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP,
610
+ input,
550
611
  epochNumber,
551
612
  signal,
552
613
  );
553
614
  }
554
615
 
555
- getRootParityProof(
556
- inputs: RootParityInputs,
616
+ getCheckpointPaddingRollupProof(
617
+ input: CheckpointPaddingRollupPrivateInputs,
557
618
  signal?: AbortSignal,
558
- epochNumber?: number,
559
- ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
619
+ epochNumber?: EpochNumber,
620
+ ): Promise<
621
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
622
+ > {
560
623
  return this.enqueueJob(
561
- this.generateId(ProvingRequestType.ROOT_PARITY, inputs, epochNumber),
562
- ProvingRequestType.ROOT_PARITY,
563
- inputs,
624
+ this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber),
625
+ ProvingRequestType.CHECKPOINT_PADDING_ROLLUP,
626
+ input,
564
627
  epochNumber,
565
628
  signal,
566
629
  );
567
630
  }
568
631
 
569
- getRootRollupProof(
570
- input: RootRollupInputs,
632
+ getCheckpointMergeRollupProof(
633
+ input: CheckpointMergeRollupPrivateInputs,
571
634
  signal?: AbortSignal,
572
- epochNumber?: number,
573
- ): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
635
+ epochNumber?: EpochNumber,
636
+ ): Promise<
637
+ PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
638
+ > {
574
639
  return this.enqueueJob(
575
- this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber),
576
- ProvingRequestType.ROOT_ROLLUP,
640
+ this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber),
641
+ ProvingRequestType.CHECKPOINT_MERGE_ROLLUP,
577
642
  input,
578
643
  epochNumber,
579
644
  signal,
580
645
  );
581
646
  }
582
647
 
583
- getTubeProof(
584
- tubeInput: TubeInputs,
648
+ getRootRollupProof(
649
+ input: RootRollupPrivateInputs,
585
650
  signal?: AbortSignal,
586
- epochNumber?: number,
587
- ): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>> {
651
+ epochNumber?: EpochNumber,
652
+ ): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
588
653
  return this.enqueueJob(
589
- this.generateId(ProvingRequestType.TUBE_PROOF, tubeInput, epochNumber),
590
- ProvingRequestType.TUBE_PROOF,
591
- tubeInput,
654
+ this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber),
655
+ ProvingRequestType.ROOT_ROLLUP,
656
+ input,
592
657
  epochNumber,
593
658
  signal,
594
659
  );
595
660
  }
596
661
 
597
- private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = 0) {
662
+ private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = EpochNumber.ZERO) {
598
663
  const inputsHash = sha256(inputs.toBuffer());
599
664
  return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
600
665
  }
@@ -1,4 +1,4 @@
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,
@@ -31,6 +31,8 @@ export const ProverBrokerConfig = z.object({
31
31
  proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
32
32
  /** The maximum number of epochs to keep results for */
33
33
  proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative(),
34
+ /** Enable debug replay mode for replaying proving jobs from stored inputs */
35
+ proverBrokerDebugReplayEnabled: z.boolean(),
34
36
  });
35
37
 
36
38
  export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> &
@@ -74,6 +76,11 @@ export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>
74
76
  parseEnv: (val: string | undefined) => (val ? +val : undefined),
75
77
  description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set.",
76
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
+ },
77
84
  ...dataConfigMappings,
78
85
  ...l1ReaderConfigMappings,
79
86
  ...pickConfigMappings(chainConfigMappings, ['rollupVersion']),
@@ -98,6 +105,12 @@ export const ProverAgentConfig = z.object({
98
105
  proverTestDelayMs: z.number(),
99
106
  /** If using realistic delays, what percentage of realistic times to apply. */
100
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(),
101
114
  });
102
115
 
103
116
  export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
@@ -146,4 +159,20 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
146
159
  description: 'If using realistic delays, what percentage of realistic times to apply.',
147
160
  ...numberConfigHelper(1),
148
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
+ },
149
178
  };
@@ -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 {
@@ -1,42 +1,20 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
+ import { createFileStore } from '@aztec/stdlib/file-store';
2
3
 
3
- import { GoogleCloudStorageProofStore } from './gcs_proof_store.js';
4
+ import { FileStoreProofStore } from './file_store_proof_store.js';
4
5
  import { InlineProofStore } from './inline_proof_store.js';
5
6
  import type { ProofStore } from './proof_store.js';
6
7
 
7
- export function createProofStore(config: string | undefined, logger = createLogger('prover-client:proof-store')) {
8
- if (config === undefined) {
8
+ export async function createProofStore(
9
+ config: string | undefined,
10
+ logger = createLogger('prover-client:proof-store'),
11
+ ): Promise<ProofStore> {
12
+ if (!config) {
9
13
  logger.info('Creating inline proof store');
10
14
  return new InlineProofStore();
11
- } else if (config.startsWith('gs://')) {
12
- try {
13
- const url = new URL(config);
14
- const bucket = url.host;
15
- const path = url.pathname.replace(/^\/+/, '');
16
- logger.info(`Creating google cloud proof store at ${bucket}`, { bucket, path });
17
- return new GoogleCloudStorageProofStore(bucket, path);
18
- } catch {
19
- throw new Error(
20
- `Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`,
21
- );
22
- }
23
- } else {
24
- throw new Error(`Unknown proof store config: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
25
15
  }
26
- }
27
16
 
28
- export function createProofStoreForUri(
29
- uri: string,
30
- logger = createLogger('prover-client:proof-store'),
31
- ): Pick<ProofStore, 'getProofInput' | 'getProofOutput'> {
32
- if (uri.startsWith('data://')) {
33
- return createProofStore(undefined, logger);
34
- } else if (uri.startsWith('gs://')) {
35
- const url = new URL(uri);
36
- const basePath = url.pathname.replace(/^\/+/, '').split('/').slice(0, -3);
37
- url.pathname = basePath.join('/');
38
- return createProofStore(uri, logger);
39
- } else {
40
- throw new Error(`Unknown proof store config: '${uri}'. Supported protocols are 'data://' and 'gs://'.`);
41
- }
17
+ const fileStore = await createFileStore(config, logger);
18
+ logger.info(`Creating file store proof store at ${config}`);
19
+ return new FileStoreProofStore(fileStore);
42
20
  }
@@ -0,0 +1,78 @@
1
+ import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
2
+ import type { FileStore } from '@aztec/stdlib/file-store';
3
+ import {
4
+ type ProofUri,
5
+ type ProvingJobId,
6
+ type ProvingJobInputs,
7
+ type ProvingJobInputsMap,
8
+ ProvingJobResult,
9
+ type ProvingJobResultsMap,
10
+ getProvingJobInputClassFor,
11
+ } from '@aztec/stdlib/interfaces/server';
12
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
13
+
14
+ import type { ProofStore } from './proof_store.js';
15
+
16
+ const INPUTS_PATH = 'inputs';
17
+ const OUTPUTS_PATH = 'outputs';
18
+
19
+ /**
20
+ * A proof store implementation backed by a generic FileStore.
21
+ * Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
22
+ */
23
+ export class FileStoreProofStore implements ProofStore {
24
+ constructor(private readonly fileStore: FileStore) {}
25
+
26
+ async saveProofInput<T extends ProvingRequestType>(
27
+ id: ProvingJobId,
28
+ type: T,
29
+ inputs: ProvingJobInputsMap[T],
30
+ ): Promise<ProofUri> {
31
+ const path = `${INPUTS_PATH}/${ProvingRequestType[type]}/${id}`;
32
+ const uri = await this.fileStore.save(path, inputs.toBuffer());
33
+ return uri as ProofUri;
34
+ }
35
+
36
+ async saveProofOutput<T extends ProvingRequestType>(
37
+ id: ProvingJobId,
38
+ type: T,
39
+ result: ProvingJobResultsMap[T],
40
+ ): Promise<ProofUri> {
41
+ const jobResult = { type, result } as ProvingJobResult;
42
+ const json = jsonStringify(jobResult);
43
+ const path = `${OUTPUTS_PATH}/${ProvingRequestType[type]}/${id}.json`;
44
+ const uri = await this.fileStore.save(path, Buffer.from(json, 'utf-8'));
45
+ return uri as ProofUri;
46
+ }
47
+
48
+ async getProofInput(uri: ProofUri): Promise<ProvingJobInputs> {
49
+ try {
50
+ const buffer = await this.fileStore.read(uri);
51
+ const type = this.extractTypeFromUri(uri);
52
+ const inputs = getProvingJobInputClassFor(type).fromBuffer(buffer);
53
+ return { inputs, type } as ProvingJobInputs;
54
+ } catch (err) {
55
+ throw new Error(`Error getting proof input at ${uri}: ${err}`);
56
+ }
57
+ }
58
+
59
+ async getProofOutput(uri: ProofUri): Promise<ProvingJobResult> {
60
+ try {
61
+ const buffer = await this.fileStore.read(uri);
62
+ return jsonParseWithSchema(buffer.toString('utf-8'), ProvingJobResult);
63
+ } catch (err) {
64
+ throw new Error(`Error getting proof output at ${uri}: ${err}`);
65
+ }
66
+ }
67
+
68
+ private extractTypeFromUri(uri: string): ProvingRequestType {
69
+ const url = new URL(uri);
70
+ const pathParts = url.pathname.split('/').filter(Boolean);
71
+ const typeString = pathParts.at(-2);
72
+ const type = typeString ? ProvingRequestType[typeString as keyof typeof ProvingRequestType] : undefined;
73
+ if (type === undefined) {
74
+ throw new Error(`Unrecognized proof type ${typeString} in URI ${uri}`);
75
+ }
76
+ return type;
77
+ }
78
+ }
@@ -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 './file_store_proof_store.js';