@aztec/prover-client 0.0.1-commit.e558bd1c → 0.0.1-commit.e57c76e

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 (92) hide show
  1. package/dest/config.d.ts +1 -1
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +16 -2
  4. package/dest/light/lightweight_checkpoint_builder.d.ts +10 -5
  5. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
  6. package/dest/light/lightweight_checkpoint_builder.js +53 -22
  7. package/dest/mocks/test_context.d.ts +3 -1
  8. package/dest/mocks/test_context.d.ts.map +1 -1
  9. package/dest/mocks/test_context.js +18 -9
  10. package/dest/orchestrator/block-building-helpers.d.ts +4 -4
  11. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  12. package/dest/orchestrator/block-building-helpers.js +2 -2
  13. package/dest/orchestrator/block-proving-state.d.ts +4 -1
  14. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  15. package/dest/orchestrator/block-proving-state.js +7 -0
  16. package/dest/orchestrator/checkpoint-proving-state.d.ts +10 -3
  17. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
  18. package/dest/orchestrator/checkpoint-proving-state.js +13 -4
  19. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +107 -0
  20. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
  21. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +151 -0
  22. package/dest/orchestrator/epoch-proving-context.d.ts +51 -0
  23. package/dest/orchestrator/epoch-proving-context.d.ts.map +1 -0
  24. package/dest/orchestrator/epoch-proving-context.js +81 -0
  25. package/dest/orchestrator/epoch-proving-state.d.ts +3 -3
  26. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  27. package/dest/orchestrator/epoch-proving-state.js +5 -3
  28. package/dest/orchestrator/index.d.ts +4 -1
  29. package/dest/orchestrator/index.d.ts.map +1 -1
  30. package/dest/orchestrator/index.js +3 -0
  31. package/dest/orchestrator/orchestrator.d.ts +16 -26
  32. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  33. package/dest/orchestrator/orchestrator.js +76 -206
  34. package/dest/orchestrator/proving-scheduler.d.ts +72 -0
  35. package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
  36. package/dest/orchestrator/proving-scheduler.js +117 -0
  37. package/dest/orchestrator/top-tree-orchestrator.d.ts +83 -0
  38. package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
  39. package/dest/orchestrator/top-tree-orchestrator.js +182 -0
  40. package/dest/orchestrator/top-tree-proving-scheduler.d.ts +62 -0
  41. package/dest/orchestrator/top-tree-proving-scheduler.d.ts.map +1 -0
  42. package/dest/orchestrator/top-tree-proving-scheduler.js +73 -0
  43. package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
  44. package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
  45. package/dest/orchestrator/top-tree-proving-state.js +185 -0
  46. package/dest/prover-client/prover-client.d.ts +62 -3
  47. package/dest/prover-client/prover-client.d.ts.map +1 -1
  48. package/dest/prover-client/prover-client.js +50 -2
  49. package/dest/proving_broker/broker_prover_facade.d.ts +1 -1
  50. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  51. package/dest/proving_broker/broker_prover_facade.js +13 -19
  52. package/dest/proving_broker/config.d.ts +9 -73
  53. package/dest/proving_broker/config.d.ts.map +1 -1
  54. package/dest/proving_broker/config.js +3 -3
  55. package/dest/proving_broker/index.d.ts +2 -1
  56. package/dest/proving_broker/index.d.ts.map +1 -1
  57. package/dest/proving_broker/index.js +1 -0
  58. package/dest/proving_broker/proving_broker.d.ts +2 -2
  59. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  60. package/dest/proving_broker/proving_broker.js +39 -10
  61. package/dest/proving_broker/proving_broker_database/persisted.js +2 -2
  62. package/dest/proving_broker/proving_broker_instrumentation.d.ts +3 -1
  63. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  64. package/dest/proving_broker/proving_broker_instrumentation.js +7 -0
  65. package/dest/proving_broker/rpc.d.ts +3 -1
  66. package/dest/proving_broker/rpc.d.ts.map +1 -1
  67. package/dest/proving_broker/rpc.js +80 -24
  68. package/dest/test/mock_prover.d.ts +4 -4
  69. package/package.json +18 -19
  70. package/src/config.ts +18 -2
  71. package/src/light/lightweight_checkpoint_builder.ts +56 -25
  72. package/src/mocks/test_context.ts +13 -10
  73. package/src/orchestrator/block-building-helpers.ts +2 -2
  74. package/src/orchestrator/block-proving-state.ts +9 -0
  75. package/src/orchestrator/checkpoint-proving-state.ts +18 -5
  76. package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +271 -0
  77. package/src/orchestrator/epoch-proving-context.ts +101 -0
  78. package/src/orchestrator/epoch-proving-state.ts +6 -4
  79. package/src/orchestrator/index.ts +8 -0
  80. package/src/orchestrator/orchestrator.ts +98 -268
  81. package/src/orchestrator/proving-scheduler.ts +156 -0
  82. package/src/orchestrator/top-tree-orchestrator.ts +314 -0
  83. package/src/orchestrator/top-tree-proving-scheduler.ts +154 -0
  84. package/src/orchestrator/top-tree-proving-state.ts +220 -0
  85. package/src/prover-client/prover-client.ts +127 -2
  86. package/src/proving_broker/broker_prover_facade.ts +17 -20
  87. package/src/proving_broker/config.ts +3 -2
  88. package/src/proving_broker/index.ts +1 -0
  89. package/src/proving_broker/proving_broker.ts +34 -7
  90. package/src/proving_broker/proving_broker_database/persisted.ts +2 -2
  91. package/src/proving_broker/proving_broker_instrumentation.ts +9 -0
  92. package/src/proving_broker/rpc.ts +36 -24
@@ -1,7 +1,7 @@
1
1
  import { BatchedBlob, FinalBlobBatchingChallenges } from '@aztec/blob-lib/types';
2
2
  import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
- import { type LoggerBindings } from '@aztec/foundation/log';
4
+ import type { LoggerBindings } from '@aztec/foundation/log';
5
5
  import { EthAddress } from '@aztec/stdlib/block';
6
6
  import type { EpochProver, ForkMerkleTreeOperations, ReadonlyWorldStateAccess, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
7
7
  import type { Proof } from '@aztec/stdlib/proofs';
@@ -10,6 +10,9 @@ import type { BlockHeader, ProcessedTx, Tx } from '@aztec/stdlib/tx';
10
10
  import type { UInt64 } from '@aztec/stdlib/types';
11
11
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
12
12
  import type { BlockProvingState } from './block-proving-state.js';
13
+ import type { CheckpointProvingState } from './checkpoint-proving-state.js';
14
+ import { EpochProvingState, type ProvingResult } from './epoch-proving-state.js';
15
+ import { TopTreeProvingScheduler } from './top-tree-proving-scheduler.js';
13
16
  /**
14
17
  * Implements an event driven proving scheduler to build the recursive proof tree. The idea being:
15
18
  * 1. Transactions are provided to the scheduler post simulation.
@@ -23,22 +26,21 @@ import type { BlockProvingState } from './block-proving-state.js';
23
26
  /**
24
27
  * The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree.
25
28
  */
26
- export declare class ProvingOrchestrator implements EpochProver {
29
+ export declare class ProvingOrchestrator extends TopTreeProvingScheduler implements EpochProver {
27
30
  private dbProvider;
28
- private prover;
29
31
  private readonly proverId;
30
32
  private readonly cancelJobsOnStop;
31
- private provingState;
32
- private pendingProvingJobs;
33
- private provingPromise;
33
+ protected provingState: EpochProvingState | undefined;
34
+ protected provingPromise: Promise<ProvingResult> | undefined;
34
35
  private metrics;
35
36
  private dbs;
36
- private logger;
37
- constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, cancelJobsOnStop?: boolean, telemetryClient?: TelemetryClient, bindings?: LoggerBindings);
37
+ constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, cancelJobsOnStop: boolean | undefined, enqueueConcurrency: number, telemetryClient?: TelemetryClient, bindings?: LoggerBindings);
38
38
  get tracer(): Tracer;
39
39
  getProverId(): EthAddress;
40
40
  getNumActiveForks(): number;
41
- stop(): Promise<void>;
41
+ protected cancelInternal(): void;
42
+ protected wrapCircuitCall<T>(circuitName: string, fn: (signal: AbortSignal) => Promise<T>): (signal: AbortSignal) => Promise<T>;
43
+ protected onRootRollupComplete(state: EpochProvingState): void;
42
44
  startNewEpoch(epochNumber: EpochNumber, totalNumCheckpoints: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges): void;
43
45
  /**
44
46
  * Starts a new checkpoint.
@@ -79,6 +81,7 @@ export declare class ProvingOrchestrator implements EpochProver {
79
81
  * If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
80
82
  */
81
83
  cancel(): void;
84
+ private getDbForBlock;
82
85
  /**
83
86
  * Returns the proof for the current epoch.
84
87
  */
@@ -87,18 +90,10 @@ export declare class ProvingOrchestrator implements EpochProver {
87
90
  proof: Proof;
88
91
  batchedBlobInputs: BatchedBlob;
89
92
  }>;
90
- private cleanupDBFork;
91
- /**
92
- * Enqueue a job to be scheduled
93
- * @param provingState - The proving state object being operated on
94
- * @param jobType - The type of job to be queued
95
- * @param job - The actual job, returns a promise notifying of the job's completion
96
- */
97
- private deferredProving;
98
93
  private updateL1ToL2MessageTree;
99
94
  private prepareBaseRollupInputs;
100
95
  private enqueueBaseRollup;
101
- private getOrEnqueueChonkVerifier;
96
+ protected getOrEnqueueChonkVerifier(provingState: BlockProvingState, txIndex: number): void;
102
97
  private doEnqueueChonkVerifier;
103
98
  private enqueueMergeRollup;
104
99
  private enqueueBlockRootRollup;
@@ -107,15 +102,10 @@ export declare class ProvingOrchestrator implements EpochProver {
107
102
  private enqueueRootParityCircuit;
108
103
  private enqueueBlockMergeRollup;
109
104
  private enqueueCheckpointRootRollup;
110
- private enqueueCheckpointMergeRollup;
111
- private enqueueEpochPadding;
112
- private enqueueRootRollup;
113
105
  private checkAndEnqueueNextMergeRollup;
114
106
  private checkAndEnqueueBlockRootRollup;
115
107
  private checkAndEnqueueNextBlockMergeRollup;
116
- private checkAndEnqueueCheckpointRootRollup;
117
- private checkAndEnqueueNextCheckpointMergeRollup;
118
- private checkAndEnqueueRootRollup;
108
+ protected checkAndEnqueueCheckpointRootRollup(provingState: CheckpointProvingState): Promise<void>;
119
109
  /**
120
110
  * Executes the VM circuit for a public function, will enqueue the corresponding kernel if the
121
111
  * previous kernel is ready
@@ -123,6 +113,6 @@ export declare class ProvingOrchestrator implements EpochProver {
123
113
  * @param txIndex - The index of the transaction being proven
124
114
  */
125
115
  private enqueueVM;
126
- private checkAndEnqueueBaseRollup;
116
+ protected checkAndEnqueueBaseRollup(provingState: BlockProvingState, txIndex: number): void;
127
117
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL29yY2hlc3RyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFRN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBTXZGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFDVixXQUFXLEVBQ1gsd0JBQXdCLEVBR3hCLHdCQUF3QixFQUN4QixtQkFBbUIsRUFDcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBTUwsc0JBQXNCLEVBS3RCLHNCQUFzQixFQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUVMLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFJWixNQUFNLHlCQUF5QixDQUFDO0FBZWpDLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFXbEU7Ozs7Ozs7OztHQVNHO0FBRUg7O0dBRUc7QUFDSCxxQkFBYSxtQkFBb0IsWUFBVyxXQUFXO0lBV25ELE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxNQUFNO0lB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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL29yY2hlc3RyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFPN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUNWLFdBQVcsRUFDWCx3QkFBd0IsRUFHeEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFNTCxzQkFBc0IsRUFLdEIsc0JBQXNCLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBRUwsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUlaLE1BQU0seUJBQXlCLENBQUM7QUFlakMsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLGFBQWEsRUFBc0IsTUFBTSwwQkFB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
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -371,16 +371,13 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
371
  return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
372
372
  }
373
373
  var _dec, _dec1, _dec2, _dec3, _dec4, _initProto;
374
- import { L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
374
+ import { L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
375
375
  import { BlockNumber } from '@aztec/foundation/branded-types';
376
- import { padArrayEnd } from '@aztec/foundation/collection';
377
- import { Fr } from '@aztec/foundation/curves/bn254';
378
- import { AbortError } from '@aztec/foundation/error';
379
- import { createLogger } from '@aztec/foundation/log';
380
376
  import { promiseWithResolvers } from '@aztec/foundation/promise';
381
377
  import { assertLength } from '@aztec/foundation/serialize';
382
378
  import { pushTestData } from '@aztec/foundation/testing';
383
379
  import { elapsed } from '@aztec/foundation/timer';
380
+ import { appendL1ToL2MessagesToTree } from '@aztec/stdlib/messaging';
384
381
  import { BlockRootEmptyTxFirstRollupPrivateInputs, BlockRootFirstRollupPrivateInputs, BlockRootSingleTxFirstRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs, CheckpointRootSingleBlockRollupPrivateInputs, PrivateTxBaseRollupPrivateInputs } from '@aztec/stdlib/rollup';
385
382
  import { MerkleTreeId } from '@aztec/stdlib/trees';
386
383
  import { Attributes, getTelemetryClient, trackSpan, wrapCallbackInSpan } from '@aztec/telemetry-client';
@@ -388,6 +385,7 @@ import { inspect } from 'util';
388
385
  import { buildHeaderFromCircuitOutputs, getLastSiblingPath, getPublicChonkVerifierPrivateInputsFromTx, getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, insertSideEffectsAndBuildBaseRollupHints, validatePartialState, validateTx } from './block-building-helpers.js';
389
386
  import { EpochProvingState } from './epoch-proving-state.js';
390
387
  import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js';
388
+ import { TopTreeProvingScheduler } from './top-tree-proving-scheduler.js';
391
389
  import { TxProvingState } from './tx-proving-state.js';
392
390
  _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
393
391
  [Attributes.BLOCK_NUMBER]: blockNumber
@@ -409,9 +407,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
409
407
  * The proving implementation is determined by the provided prover. This could be for example a local prover or a remote prover pool.
410
408
  */ /**
411
409
  * The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree.
412
- */ export class ProvingOrchestrator {
410
+ */ export class ProvingOrchestrator extends TopTreeProvingScheduler {
413
411
  dbProvider;
414
- prover;
415
412
  proverId;
416
413
  cancelJobsOnStop;
417
414
  static{
@@ -444,22 +441,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
444
441
  ], []));
445
442
  }
446
443
  provingState;
447
- pendingProvingJobs;
448
444
  provingPromise;
449
445
  metrics;
450
- // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
451
446
  dbs;
452
- logger;
453
- constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, telemetryClient = getTelemetryClient(), bindings){
454
- this.dbProvider = dbProvider;
455
- this.prover = prover;
456
- this.proverId = proverId;
457
- this.cancelJobsOnStop = cancelJobsOnStop;
458
- this.provingState = (_initProto(this), undefined);
459
- this.pendingProvingJobs = [];
460
- this.provingPromise = undefined;
461
- this.dbs = new Map();
462
- this.logger = createLogger('prover-client:orchestrator', bindings);
447
+ constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, enqueueConcurrency, telemetryClient = getTelemetryClient(), bindings){
448
+ super(prover, enqueueConcurrency, 'prover-client:orchestrator', bindings), this.dbProvider = dbProvider, this.proverId = proverId, this.cancelJobsOnStop = cancelJobsOnStop, this.provingState = (_initProto(this), undefined), this.provingPromise = undefined, this.dbs = new Map();
463
449
  this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
464
450
  }
465
451
  get tracer() {
@@ -471,9 +457,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
471
457
  getNumActiveForks() {
472
458
  return this.dbs.size;
473
459
  }
474
- stop() {
460
+ cancelInternal() {
475
461
  this.cancel();
476
- return Promise.resolve();
462
+ }
463
+ wrapCircuitCall(circuitName, fn) {
464
+ return wrapCallbackInSpan(this.tracer, `ProvingOrchestrator.prover.${circuitName}`, {
465
+ [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName
466
+ }, fn);
467
+ }
468
+ onRootRollupComplete(state) {
469
+ state.resolve({
470
+ status: 'success'
471
+ });
477
472
  }
478
473
  startNewEpoch(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges) {
479
474
  if (this.provingState?.verifyState()) {
@@ -506,10 +501,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
506
501
  const lastBlockNumber = headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber;
507
502
  const db = await this.dbProvider.fork(lastBlockNumber);
508
503
  const firstBlockNumber = BlockNumber(lastBlockNumber + 1);
509
- this.dbs.set(firstBlockNumber, {
510
- fork: db,
511
- cleanupPromise: undefined
512
- });
504
+ this.dbs.set(firstBlockNumber, db);
513
505
  // Get archive sibling path before any block in this checkpoint lands.
514
506
  const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
515
507
  // Insert all the l1 to l2 messages into the db. And get the states before and after the insertion.
@@ -539,12 +531,9 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
539
531
  if (!this.dbs.has(blockNumber)) {
540
532
  // Fork world state at the end of the immediately previous block
541
533
  const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
542
- this.dbs.set(blockNumber, {
543
- fork: db,
544
- cleanupPromise: undefined
545
- });
534
+ this.dbs.set(blockNumber, db);
546
535
  }
547
- const db = this.dbs.get(blockNumber).fork;
536
+ const db = this.getDbForBlock(blockNumber);
548
537
  // Get archive snapshot and sibling path before any txs in this block lands.
549
538
  const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
550
539
  const lastArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
@@ -594,7 +583,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
594
583
  throw new Error(`Block ${blockNumber} has been initialized with transactions.`);
595
584
  }
596
585
  this.logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
597
- const db = this.dbs.get(blockNumber).fork;
586
+ const db = this.getDbForBlock(blockNumber);
598
587
  const lastArchive = provingState.lastArchiveTreeSnapshot;
599
588
  const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
600
589
  const spongeBlobState = provingState.getStartSpongeBlob().clone();
@@ -683,11 +672,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
683
672
  this.logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
684
673
  throw new Error('Block header mismatch');
685
674
  }
686
- // Get db for this block
687
- const db = this.dbs.get(provingState.blockNumber).fork;
688
- // Update the archive tree, so we're ready to start processing the next block:
689
- this.logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
690
- await db.updateArchive(header);
675
+ // Get db for this block and remove from map — no other code should use it after this point.
676
+ const db = this.getDbForBlock(provingState.blockNumber);
677
+ this.dbs.delete(provingState.blockNumber);
678
+ // Update the archive tree, capture the snapshot, and close the fork deterministically.
679
+ try {
680
+ this.logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
681
+ await db.updateArchive(header);
682
+ provingState.setBuiltArchive(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db));
683
+ } finally{
684
+ await db.close();
685
+ }
691
686
  await this.verifyBuiltBlockAgainstSyncedState(provingState);
692
687
  return header;
693
688
  }
@@ -703,16 +698,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
703
698
  this.logger.debug('Block root rollup proof not built yet, skipping header check.');
704
699
  return;
705
700
  }
701
+ const newArchive = provingState.getBuiltArchive();
702
+ if (!newArchive) {
703
+ this.logger.debug('Archive snapshot not yet captured, skipping header check.');
704
+ return;
705
+ }
706
706
  const header = await buildHeaderFromCircuitOutputs(output);
707
707
  if (!(await header.hash()).equals(await builtBlockHeader.hash())) {
708
708
  this.logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
709
709
  provingState.reject(`Block header hash mismatch.`);
710
710
  return;
711
711
  }
712
- // Get db for this block
713
712
  const blockNumber = provingState.blockNumber;
714
- const db = this.dbs.get(blockNumber).fork;
715
- const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
716
713
  const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
717
714
  if (!syncedArchive.equals(newArchive)) {
718
715
  this.logger.error(`Archive tree mismatch for block ${blockNumber}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
@@ -725,23 +722,25 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
725
722
  provingState.reject(`New archive mismatch.`);
726
723
  return;
727
724
  }
728
- // TODO(palla/prover): This closes the fork only on the happy path. If this epoch orchestrator
729
- // is aborted and never reaches this point, it will leak the fork. We need to add a global cleanup,
730
- // but have to make sure it only runs once all operations are completed, otherwise some function here
731
- // will attempt to access the fork after it was closed.
732
- void this.cleanupDBFork(blockNumber);
733
725
  }
734
726
  /**
735
727
  * Cancel any further proving.
736
728
  * If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
737
729
  * If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
738
730
  */ cancel() {
739
- if (this.cancelJobsOnStop) {
740
- for (const controller of this.pendingProvingJobs){
741
- controller.abort();
742
- }
743
- }
731
+ this.resetSchedulerState(this.cancelJobsOnStop);
744
732
  this.provingState?.cancel();
733
+ for (const [blockNumber, db] of this.dbs.entries()){
734
+ void db.close().catch((err)=>this.logger.error(`Error closing db for block ${blockNumber}`, err));
735
+ }
736
+ this.dbs.clear();
737
+ }
738
+ getDbForBlock(blockNumber) {
739
+ const db = this.dbs.get(blockNumber);
740
+ if (!db) {
741
+ throw new Error(`World state fork for block ${blockNumber} not found.`);
742
+ }
743
+ return db;
745
744
  }
746
745
  /**
747
746
  * Returns the proof for the current epoch.
@@ -761,77 +760,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
761
760
  });
762
761
  return epochProofResult;
763
762
  }
764
- async cleanupDBFork(blockNumber) {
765
- this.logger.debug(`Cleaning up world state fork for ${blockNumber}`);
766
- const fork = this.dbs.get(blockNumber);
767
- if (!fork) {
768
- return;
769
- }
770
- try {
771
- if (!fork.cleanupPromise) {
772
- fork.cleanupPromise = fork.fork.close();
773
- }
774
- await fork.cleanupPromise;
775
- this.dbs.delete(blockNumber);
776
- } catch (err) {
777
- this.logger.error(`Error closing db for block ${blockNumber}`, err);
778
- }
779
- }
780
- /**
781
- * Enqueue a job to be scheduled
782
- * @param provingState - The proving state object being operated on
783
- * @param jobType - The type of job to be queued
784
- * @param job - The actual job, returns a promise notifying of the job's completion
785
- */ deferredProving(provingState, request, callback) {
786
- if (!provingState.verifyState()) {
787
- this.logger.debug(`Not enqueuing job, state no longer valid`);
788
- return;
789
- }
790
- const controller = new AbortController();
791
- this.pendingProvingJobs.push(controller);
792
- // We use a 'safeJob'. We don't want promise rejections in the proving pool, we want to capture the error here
793
- // and reject the proving job whilst keeping the event loop free of rejections
794
- const safeJob = async ()=>{
795
- try {
796
- // there's a delay between enqueueing this job and it actually running
797
- if (controller.signal.aborted) {
798
- return;
799
- }
800
- const result = await request(controller.signal);
801
- if (!provingState.verifyState()) {
802
- this.logger.debug(`State no longer valid, discarding result`);
803
- return;
804
- }
805
- // we could have been cancelled whilst waiting for the result
806
- // and the prover ignored the signal. Drop the result in that case
807
- if (controller.signal.aborted) {
808
- return;
809
- }
810
- await callback(result);
811
- } catch (err) {
812
- if (err instanceof AbortError) {
813
- // operation was cancelled, probably because the block was cancelled
814
- // drop this result
815
- return;
816
- }
817
- this.logger.error(`Error thrown when proving job`, err);
818
- provingState.reject(`${err}`);
819
- } finally{
820
- const index = this.pendingProvingJobs.indexOf(controller);
821
- if (index > -1) {
822
- this.pendingProvingJobs.splice(index, 1);
823
- }
824
- }
825
- };
826
- // let the callstack unwind before adding the job to the queue
827
- setImmediate(()=>void safeJob());
828
- }
829
763
  async updateL1ToL2MessageTree(l1ToL2Messages, db) {
830
- const l1ToL2MessagesPadded = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 'Too many L1 to L2 messages');
831
764
  const lastL1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
832
765
  const lastL1ToL2MessageSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db), L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
833
766
  // Update the local trees to include the new l1 to l2 messages
834
- await db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded);
767
+ await appendL1ToL2MessagesToTree(db, l1ToL2Messages);
835
768
  const newL1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
836
769
  const newL1ToL2MessageSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db), L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
837
770
  return {
@@ -910,7 +843,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
910
843
  }
911
844
  const txProvingState = provingState.getTxProvingState(txIndex);
912
845
  const txHash = txProvingState.processedTx.hash.toString();
913
- NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH;
914
846
  const handleResult = (result)=>{
915
847
  this.logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
916
848
  txHash
@@ -985,18 +917,21 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
985
917
  return this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber);
986
918
  }
987
919
  }), async (result)=>{
988
- this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
920
+ this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`, {
921
+ blockNumber: provingState.blockNumber,
922
+ checkpointIndex: provingState.parentCheckpoint.index,
923
+ ...result.inputs.toInspect()
924
+ });
989
925
  const leafLocation = provingState.setBlockRootRollupProof(result);
990
926
  const checkpointProvingState = provingState.parentCheckpoint;
991
- // If the proofs were slower than the block header building, then we need to try validating the block header hashes here.
927
+ // Verification is called from both here and setBlockCompleted. Whichever runs last
928
+ // will be the first to see all three pieces (header, proof output, archive) and run the checks.
992
929
  await this.verifyBuiltBlockAgainstSyncedState(provingState);
993
930
  if (checkpointProvingState.totalNumBlocks === 1) {
994
- this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
931
+ await this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
995
932
  } else {
996
- this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
933
+ await this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
997
934
  }
998
- // We are finished with the block at this point, ensure the fork is cleaned up
999
- void this.cleanupDBFork(provingState.blockNumber);
1000
935
  });
1001
936
  }
1002
937
  // Executes the base parity circuit and stores the intermediate state for the root parity circuit
@@ -1057,12 +992,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
1057
992
  const inputs = provingState.getBlockMergeRollupInputs(location);
1058
993
  this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockMergeRollupProof', {
1059
994
  [Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-block-merge'
1060
- }, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
995
+ }, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), async (result)=>{
996
+ this.logger.debug(`Completed block merge rollup proof for checkpoint ${provingState.index}`, {
997
+ checkpointIndex: provingState.index,
998
+ mergeLocation: location,
999
+ ...result.inputs.toInspect()
1000
+ });
1061
1001
  provingState.setBlockMergeRollupProof(location, result);
1062
- this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
1002
+ await this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
1063
1003
  });
1064
1004
  }
1065
- enqueueCheckpointRootRollup(provingState) {
1005
+ async enqueueCheckpointRootRollup(provingState) {
1066
1006
  if (!provingState.verifyState()) {
1067
1007
  this.logger.debug('Not running checkpoint root rollup. State no longer valid.');
1068
1008
  return;
@@ -1073,7 +1013,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
1073
1013
  }
1074
1014
  const rollupType = provingState.getCheckpointRootRollupType();
1075
1015
  this.logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
1076
- const inputs = provingState.getCheckpointRootRollupInputs();
1016
+ const inputs = await provingState.getCheckpointRootRollupInputs();
1077
1017
  this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointRootRollupProof', {
1078
1018
  [Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
1079
1019
  }, (signal)=>{
@@ -1090,7 +1030,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
1090
1030
  provingState.reject(`Blob accumulator state mismatch.`);
1091
1031
  return;
1092
1032
  }
1093
- this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
1033
+ this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}`, {
1034
+ checkpointIndex: provingState.index,
1035
+ ...result.inputs.toInspect()
1036
+ });
1094
1037
  const leafLocation = provingState.setCheckpointRootRollupProof(result);
1095
1038
  const epochProvingState = provingState.parentEpoch;
1096
1039
  if (epochProvingState.totalNumCheckpoints === 1) {
@@ -1100,61 +1043,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
1100
1043
  }
1101
1044
  });
1102
1045
  }
1103
- enqueueCheckpointMergeRollup(provingState, location) {
1104
- if (!provingState.verifyState()) {
1105
- this.logger.debug('Not running checkpoint merge rollup. State no longer valid.');
1106
- return;
1107
- }
1108
- if (!provingState.tryStartProvingCheckpointMerge(location)) {
1109
- this.logger.debug('Checkpoint merge rollup already started.');
1110
- return;
1111
- }
1112
- const inputs = provingState.getCheckpointMergeRollupInputs(location);
1113
- this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointMergeRollupProof', {
1114
- [Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-merge'
1115
- }, (signal)=>this.prover.getCheckpointMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
1116
- this.logger.debug('Completed proof for checkpoint merge rollup.');
1117
- provingState.setCheckpointMergeRollupProof(location, result);
1118
- this.checkAndEnqueueNextCheckpointMergeRollup(provingState, location);
1119
- });
1120
- }
1121
- enqueueEpochPadding(provingState) {
1122
- if (!provingState.verifyState()) {
1123
- this.logger.debug('Not running epoch padding. State no longer valid.');
1124
- return;
1125
- }
1126
- if (!provingState.tryStartProvingPaddingCheckpoint()) {
1127
- this.logger.debug('Padding checkpoint already started.');
1128
- return;
1129
- }
1130
- this.logger.debug('Padding epoch proof with a padding block root proof.');
1131
- const inputs = provingState.getPaddingCheckpointInputs();
1132
- this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointPaddingRollupProof', {
1133
- [Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-padding'
1134
- }, (signal)=>this.prover.getCheckpointPaddingRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
1135
- this.logger.debug('Completed proof for padding checkpoint.');
1136
- provingState.setCheckpointPaddingProof(result);
1137
- this.checkAndEnqueueRootRollup(provingState);
1138
- });
1139
- }
1140
- // Executes the root rollup circuit
1141
- enqueueRootRollup(provingState) {
1142
- if (!provingState.verifyState()) {
1143
- this.logger.debug('Not running root rollup, state no longer valid');
1144
- return;
1145
- }
1146
- this.logger.debug(`Preparing root rollup`);
1147
- const inputs = provingState.getRootRollupInputs();
1148
- this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
1149
- [Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-root'
1150
- }, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
1151
- this.logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
1152
- provingState.setRootRollupProof(result);
1153
- provingState.resolve({
1154
- status: 'success'
1155
- });
1156
- });
1157
- }
1158
1046
  checkAndEnqueueNextMergeRollup(provingState, currentLocation) {
1159
1047
  if (!provingState.isReadyForMergeRollup(currentLocation)) {
1160
1048
  return;
@@ -1173,40 +1061,22 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
1173
1061
  }
1174
1062
  this.enqueueBlockRootRollup(provingState);
1175
1063
  }
1176
- checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
1064
+ async checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
1177
1065
  if (!provingState.isReadyForBlockMerge(currentLocation)) {
1178
1066
  return;
1179
1067
  }
1180
1068
  const parentLocation = provingState.getParentLocation(currentLocation);
1181
1069
  if (parentLocation.level === 0) {
1182
- this.checkAndEnqueueCheckpointRootRollup(provingState);
1070
+ await this.checkAndEnqueueCheckpointRootRollup(provingState);
1183
1071
  } else {
1184
1072
  this.enqueueBlockMergeRollup(provingState, parentLocation);
1185
1073
  }
1186
1074
  }
1187
- checkAndEnqueueCheckpointRootRollup(provingState) {
1075
+ async checkAndEnqueueCheckpointRootRollup(provingState) {
1188
1076
  if (!provingState.isReadyForCheckpointRoot()) {
1189
1077
  return;
1190
1078
  }
1191
- this.enqueueCheckpointRootRollup(provingState);
1192
- }
1193
- checkAndEnqueueNextCheckpointMergeRollup(provingState, currentLocation) {
1194
- if (!provingState.isReadyForCheckpointMerge(currentLocation)) {
1195
- return;
1196
- }
1197
- const parentLocation = provingState.getParentLocation(currentLocation);
1198
- if (parentLocation.level === 0) {
1199
- this.checkAndEnqueueRootRollup(provingState);
1200
- } else {
1201
- this.enqueueCheckpointMergeRollup(provingState, parentLocation);
1202
- }
1203
- }
1204
- checkAndEnqueueRootRollup(provingState) {
1205
- if (!provingState.isReadyForRootRollup()) {
1206
- this.logger.debug('Not ready for root rollup');
1207
- return;
1208
- }
1209
- this.enqueueRootRollup(provingState);
1079
+ await this.enqueueCheckpointRootRollup(provingState);
1210
1080
  }
1211
1081
  /**
1212
1082
  * Executes the VM circuit for a public function, will enqueue the corresponding kernel if the