@aztec/prover-node 0.65.2 → 0.67.0

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 (37) hide show
  1. package/dest/bond/bond-manager.d.ts.map +1 -1
  2. package/dest/bond/bond-manager.js +3 -3
  3. package/dest/bond/token-contract.d.ts.map +1 -1
  4. package/dest/bond/token-contract.js +3 -3
  5. package/dest/config.d.ts +4 -1
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +6 -1
  8. package/dest/factory.d.ts +2 -2
  9. package/dest/factory.d.ts.map +1 -1
  10. package/dest/factory.js +7 -6
  11. package/dest/job/epoch-proving-job.d.ts +7 -4
  12. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  13. package/dest/job/epoch-proving-job.js +27 -34
  14. package/dest/metrics.d.ts.map +1 -1
  15. package/dest/metrics.js +2 -5
  16. package/dest/monitors/claims-monitor.d.ts.map +1 -1
  17. package/dest/monitors/claims-monitor.js +3 -3
  18. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  19. package/dest/monitors/epoch-monitor.js +3 -3
  20. package/dest/prover-cache/cache_manager.d.ts.map +1 -1
  21. package/dest/prover-cache/cache_manager.js +3 -3
  22. package/dest/prover-coordination/factory.js +3 -3
  23. package/dest/prover-node.d.ts +5 -2
  24. package/dest/prover-node.d.ts.map +1 -1
  25. package/dest/prover-node.js +19 -13
  26. package/package.json +20 -16
  27. package/src/bond/bond-manager.ts +2 -2
  28. package/src/bond/token-contract.ts +2 -2
  29. package/src/config.ts +14 -7
  30. package/src/factory.ts +9 -8
  31. package/src/job/epoch-proving-job.ts +26 -46
  32. package/src/metrics.ts +1 -4
  33. package/src/monitors/claims-monitor.ts +2 -2
  34. package/src/monitors/epoch-monitor.ts +2 -2
  35. package/src/prover-cache/cache_manager.ts +2 -2
  36. package/src/prover-coordination/factory.ts +2 -2
  37. package/src/prover-node.ts +23 -23
@@ -1,7 +1,7 @@
1
1
  import { type ArchiveSource, type Archiver } from '@aztec/archiver';
2
2
  import { BBCircuitVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
3
3
  import { type ProverCoordination, type WorldStateSynchronizer, createAztecNodeClient } from '@aztec/circuit-types';
4
- import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { createLogger } from '@aztec/foundation/log';
5
5
  import { type DataStoreConfig } from '@aztec/kv-store/config';
6
6
  import { createP2PClient } from '@aztec/p2p';
7
7
  import { type TelemetryClient } from '@aztec/telemetry-client';
@@ -26,7 +26,7 @@ export async function createProverCoordination(
26
26
  config: ProverNodeConfig & DataStoreConfig,
27
27
  deps: ProverCoordinationDeps,
28
28
  ): Promise<ProverCoordination> {
29
- const log = createDebugLogger('aztec:createProverCoordination');
29
+ const log = createLogger('prover-node:prover-coordination');
30
30
 
31
31
  if (deps.aztecNodeTxProvider) {
32
32
  log.info('Using prover coordination via aztec node');
@@ -6,7 +6,6 @@ import {
6
6
  type L1ToL2MessageSource,
7
7
  type L2Block,
8
8
  type L2BlockSource,
9
- type MerkleTreeWriteOperations,
10
9
  type ProverCache,
11
10
  type ProverCoordination,
12
11
  type ProverNodeApi,
@@ -17,8 +16,9 @@ import {
17
16
  import { type ContractDataSource } from '@aztec/circuits.js';
18
17
  import { compact } from '@aztec/foundation/collection';
19
18
  import { sha256 } from '@aztec/foundation/crypto';
20
- import { createDebugLogger } from '@aztec/foundation/log';
19
+ import { createLogger } from '@aztec/foundation/log';
21
20
  import { type Maybe } from '@aztec/foundation/types';
21
+ import { type P2P } from '@aztec/p2p';
22
22
  import { type L1Publisher } from '@aztec/sequencer-client';
23
23
  import { PublicProcessorFactory } from '@aztec/simulator';
24
24
  import { type TelemetryClient } from '@aztec/telemetry-client';
@@ -35,6 +35,7 @@ import { type QuoteSigner } from './quote-signer.js';
35
35
  export type ProverNodeOptions = {
36
36
  pollingIntervalMs: number;
37
37
  maxPendingJobs: number;
38
+ maxParallelBlocksPerEpoch: number;
38
39
  };
39
40
 
40
41
  /**
@@ -44,7 +45,7 @@ export type ProverNodeOptions = {
44
45
  * proof for the epoch, and submits it to L1.
45
46
  */
46
47
  export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, ProverNodeApi {
47
- private log = createDebugLogger('aztec:prover-node');
48
+ private log = createLogger('prover-node');
48
49
 
49
50
  private latestEpochWeAreProving: bigint | undefined;
50
51
  private jobs: Map<string, EpochProvingJob> = new Map();
@@ -71,12 +72,21 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
71
72
  this.options = {
72
73
  pollingIntervalMs: 1_000,
73
74
  maxPendingJobs: 100,
75
+ maxParallelBlocksPerEpoch: 32,
74
76
  ...compact(options),
75
77
  };
76
78
 
77
79
  this.metrics = new ProverNodeMetrics(telemetryClient, 'ProverNode');
78
80
  }
79
81
 
82
+ public getP2P() {
83
+ const asP2PClient = this.coordination as P2P;
84
+ if (typeof asP2PClient.isP2PClient === 'function' && asP2PClient.isP2PClient()) {
85
+ return asP2PClient;
86
+ }
87
+ return undefined;
88
+ }
89
+
80
90
  async handleClaim(proofClaim: EpochProofClaim): Promise<void> {
81
91
  if (proofClaim.epochToProve === this.latestEpochWeAreProving) {
82
92
  this.log.verbose(`Already proving claim for epoch ${proofClaim.epochToProve}`);
@@ -127,9 +137,14 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
127
137
  try {
128
138
  // Construct a quote for the epoch
129
139
  const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
140
+ if (blocks.length === 0) {
141
+ this.log.info(`No blocks found for epoch ${epochNumber}`);
142
+ return;
143
+ }
144
+
130
145
  const partialQuote = await this.quoteProvider.getQuote(Number(epochNumber), blocks);
131
146
  if (!partialQuote) {
132
- this.log.verbose(`No quote produced for epoch ${epochNumber}`);
147
+ this.log.info(`No quote produced for epoch ${epochNumber}`);
133
148
  return;
134
149
  }
135
150
 
@@ -246,10 +261,6 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
246
261
  // Fast forward world state to right before the target block and get a fork
247
262
  this.log.verbose(`Creating proving job for epoch ${epochNumber} for block range ${fromBlock} to ${toBlock}`);
248
263
  await this.worldState.syncImmediate(fromBlock - 1);
249
- // NB: separated the dbs as both a block builder and public processor need to track and update tree state
250
- // see public_processor.ts for context
251
- const publicDb = await this.worldState.fork(fromBlock - 1);
252
- const proverDb = await this.worldState.fork(fromBlock - 1);
253
264
 
254
265
  // Create a processor using the forked world state
255
266
  const publicProcessorFactory = new PublicProcessorFactory(this.contractDataSource, this.telemetryClient);
@@ -258,22 +269,12 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
258
269
  const proverCache = await this.proverCacheManager.openCache(epochNumber, epochHash);
259
270
 
260
271
  const cleanUp = async () => {
261
- await publicDb.close();
262
- await proverDb.close();
263
272
  await proverCache.close();
264
273
  await this.proverCacheManager.removeStaleCaches(epochNumber);
265
274
  this.jobs.delete(job.getId());
266
275
  };
267
276
 
268
- const job = this.doCreateEpochProvingJob(
269
- epochNumber,
270
- blocks,
271
- publicDb,
272
- proverDb,
273
- proverCache,
274
- publicProcessorFactory,
275
- cleanUp,
276
- );
277
+ const job = this.doCreateEpochProvingJob(epochNumber, blocks, proverCache, publicProcessorFactory, cleanUp);
277
278
  this.jobs.set(job.getId(), job);
278
279
  return job;
279
280
  }
@@ -282,23 +283,22 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
282
283
  protected doCreateEpochProvingJob(
283
284
  epochNumber: bigint,
284
285
  blocks: L2Block[],
285
- publicDb: MerkleTreeWriteOperations,
286
- proverDb: MerkleTreeWriteOperations,
287
286
  proverCache: ProverCache,
288
287
  publicProcessorFactory: PublicProcessorFactory,
289
288
  cleanUp: () => Promise<void>,
290
289
  ) {
291
290
  return new EpochProvingJob(
292
- publicDb,
291
+ this.worldState,
293
292
  epochNumber,
294
293
  blocks,
295
- this.prover.createEpochProver(proverDb, proverCache),
294
+ this.prover.createEpochProver(proverCache),
296
295
  publicProcessorFactory,
297
296
  this.publisher,
298
297
  this.l2BlockSource,
299
298
  this.l1ToL2MessageSource,
300
299
  this.coordination,
301
300
  this.metrics,
301
+ { parallelBlockLimit: this.options.maxParallelBlocksPerEpoch },
302
302
  cleanUp,
303
303
  );
304
304
  }