@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.
- package/dest/bond/bond-manager.d.ts.map +1 -1
- package/dest/bond/bond-manager.js +3 -3
- package/dest/bond/token-contract.d.ts.map +1 -1
- package/dest/bond/token-contract.js +3 -3
- package/dest/config.d.ts +4 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +6 -1
- package/dest/factory.d.ts +2 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +7 -6
- package/dest/job/epoch-proving-job.d.ts +7 -4
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +27 -34
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +2 -5
- package/dest/monitors/claims-monitor.d.ts.map +1 -1
- package/dest/monitors/claims-monitor.js +3 -3
- package/dest/monitors/epoch-monitor.d.ts.map +1 -1
- package/dest/monitors/epoch-monitor.js +3 -3
- package/dest/prover-cache/cache_manager.d.ts.map +1 -1
- package/dest/prover-cache/cache_manager.js +3 -3
- package/dest/prover-coordination/factory.js +3 -3
- package/dest/prover-node.d.ts +5 -2
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +19 -13
- package/package.json +20 -16
- package/src/bond/bond-manager.ts +2 -2
- package/src/bond/token-contract.ts +2 -2
- package/src/config.ts +14 -7
- package/src/factory.ts +9 -8
- package/src/job/epoch-proving-job.ts +26 -46
- package/src/metrics.ts +1 -4
- package/src/monitors/claims-monitor.ts +2 -2
- package/src/monitors/epoch-monitor.ts +2 -2
- package/src/prover-cache/cache_manager.ts +2 -2
- package/src/prover-coordination/factory.ts +2 -2
- 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 {
|
|
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 =
|
|
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');
|
package/src/prover-node.ts
CHANGED
|
@@ -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 {
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
291
|
+
this.worldState,
|
|
293
292
|
epochNumber,
|
|
294
293
|
blocks,
|
|
295
|
-
this.prover.createEpochProver(
|
|
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
|
}
|