@aztec/prover-node 0.76.4 → 0.77.0-testnet-ignition.21
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/config.d.ts +5 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +24 -30
- package/dest/factory.d.ts +6 -3
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +21 -14
- package/dest/http.d.ts +1 -1
- package/dest/http.d.ts.map +1 -1
- package/dest/http.js +2 -4
- package/dest/index.js +0 -1
- 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 +233 -193
- package/dest/metrics.d.ts +5 -2
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +50 -25
- package/dest/monitors/epoch-monitor.d.ts +22 -3
- package/dest/monitors/epoch-monitor.d.ts.map +1 -1
- package/dest/monitors/epoch-monitor.js +102 -48
- package/dest/monitors/index.js +0 -1
- package/dest/prover-coordination/config.js +2 -3
- package/dest/prover-coordination/factory.d.ts +5 -5
- package/dest/prover-coordination/factory.d.ts.map +1 -1
- package/dest/prover-coordination/factory.js +11 -8
- package/dest/prover-coordination/index.js +0 -1
- package/dest/prover-node-publisher.d.ts +5 -4
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +60 -52
- package/dest/prover-node.d.ts +12 -7
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +237 -224
- package/dest/test/index.d.ts +2 -2
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +2 -1
- package/package.json +21 -22
- package/src/config.ts +23 -31
- package/src/factory.ts +17 -8
- package/src/http.ts +2 -2
- package/src/job/epoch-proving-job.ts +11 -13
- package/src/metrics.ts +26 -5
- package/src/monitors/epoch-monitor.ts +57 -12
- package/src/prover-coordination/factory.ts +9 -12
- package/src/prover-node-publisher.ts +21 -14
- package/src/prover-node.ts +24 -22
- package/src/test/index.ts +2 -2
package/dest/prover-node.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
}
|
|
3
7
|
import { compact } from '@aztec/foundation/collection';
|
|
4
8
|
import { memoize } from '@aztec/foundation/decorators';
|
|
5
9
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
10
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
7
11
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
8
12
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
9
|
-
import {
|
|
13
|
+
import { getTimestampRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
14
|
+
import { EpochProvingJobTerminalState, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
15
|
+
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
10
16
|
import { EpochProvingJob } from './job/epoch-proving-job.js';
|
|
11
17
|
import { ProverNodeMetrics } from './metrics.js';
|
|
12
18
|
/**
|
|
@@ -14,232 +20,239 @@ import { ProverNodeMetrics } from './metrics.js';
|
|
|
14
20
|
* submits bids for proving them, and monitors if they are accepted. If so, the prover node fetches the txs
|
|
15
21
|
* from a tx source in the p2p network or an external node, re-executes their public functions, creates a rollup
|
|
16
22
|
* proof for the epoch, and submits it to L1.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
|
|
86
|
-
* starts proving jobs for them.
|
|
87
|
-
*/
|
|
88
|
-
start() {
|
|
89
|
-
this.txFetcher.start();
|
|
90
|
-
this.epochsMonitor.start(this);
|
|
91
|
-
this.log.info('Started ProverNode', this.options);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Stops the prover node and all its dependencies.
|
|
95
|
-
*/
|
|
96
|
-
async stop() {
|
|
97
|
-
this.log.info('Stopping ProverNode');
|
|
98
|
-
await this.txFetcher.stop();
|
|
99
|
-
await this.epochsMonitor.stop();
|
|
100
|
-
await this.prover.stop();
|
|
101
|
-
await tryStop(this.l2BlockSource);
|
|
102
|
-
this.publisher.interrupt();
|
|
103
|
-
await Promise.all(Array.from(this.jobs.values()).map(job => job.stop()));
|
|
104
|
-
await this.worldState.stop();
|
|
105
|
-
await tryStop(this.coordination);
|
|
106
|
-
await this.telemetryClient.stop();
|
|
107
|
-
this.log.info('Stopped ProverNode');
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Creates a proof for a block range. Returns once the proof has been submitted to L1.
|
|
111
|
-
*/
|
|
112
|
-
async prove(epochNumber) {
|
|
113
|
-
const job = await this.createProvingJob(BigInt(epochNumber));
|
|
114
|
-
return job.run();
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Starts a proving process and returns immediately.
|
|
118
|
-
*/
|
|
119
|
-
async startProof(epochNumber) {
|
|
120
|
-
const job = await this.createProvingJob(BigInt(epochNumber));
|
|
121
|
-
void job.run().catch(err => this.log.error(`Error proving epoch ${epochNumber}`, err));
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Returns the prover instance.
|
|
125
|
-
*/
|
|
126
|
-
getProver() {
|
|
127
|
-
return this.prover;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Returns an array of jobs being processed.
|
|
131
|
-
*/
|
|
132
|
-
getJobs() {
|
|
133
|
-
return Promise.resolve(Array.from(this.jobs.entries()).map(([uuid, job]) => ({
|
|
134
|
-
uuid,
|
|
135
|
-
status: job.getState(),
|
|
136
|
-
epochNumber: Number(job.getEpochNumber()),
|
|
137
|
-
})));
|
|
138
|
-
}
|
|
139
|
-
async getActiveJobsForEpoch(epochBigInt) {
|
|
140
|
-
const jobs = await this.getJobs();
|
|
141
|
-
const epochNumber = Number(epochBigInt);
|
|
142
|
-
return jobs.filter(job => job.epochNumber === epochNumber && !EpochProvingJobTerminalState.includes(job.status));
|
|
143
|
-
}
|
|
144
|
-
checkMaximumPendingJobs() {
|
|
145
|
-
const { maxPendingJobs } = this.options;
|
|
146
|
-
return maxPendingJobs === 0 || this.jobs.size < maxPendingJobs;
|
|
147
|
-
}
|
|
148
|
-
async createProvingJob(epochNumber) {
|
|
149
|
-
if (!this.checkMaximumPendingJobs()) {
|
|
150
|
-
throw new Error(`Maximum pending proving jobs ${this.options.maxPendingJobs} reached. Cannot create new job.`);
|
|
151
|
-
}
|
|
152
|
-
// Gather blocks for this epoch
|
|
153
|
-
const cachedEpochData = this.cachedEpochData?.epochNumber === epochNumber ? this.cachedEpochData : undefined;
|
|
154
|
-
const { blocks, txs } = cachedEpochData ?? (await this.gatherEpochData(epochNumber));
|
|
155
|
-
const fromBlock = blocks[0].number;
|
|
156
|
-
const toBlock = blocks.at(-1).number;
|
|
157
|
-
// Fast forward world state to right before the target block and get a fork
|
|
158
|
-
this.log.verbose(`Creating proving job for epoch ${epochNumber} for block range ${fromBlock} to ${toBlock}`);
|
|
159
|
-
await this.worldState.syncImmediate(fromBlock - 1);
|
|
160
|
-
// Create a processor using the forked world state
|
|
161
|
-
const publicProcessorFactory = new PublicProcessorFactory(this.contractDataSource, this.dateProvider, this.telemetryClient);
|
|
162
|
-
const cleanUp = () => {
|
|
163
|
-
this.jobs.delete(job.getId());
|
|
164
|
-
return Promise.resolve();
|
|
165
|
-
};
|
|
166
|
-
const [_, endTimestamp] = getTimestampRangeForEpoch(epochNumber + 1n, await this.getL1Constants());
|
|
167
|
-
const deadline = new Date(Number(endTimestamp) * 1000);
|
|
168
|
-
const job = this.doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp);
|
|
169
|
-
this.jobs.set(job.getId(), job);
|
|
170
|
-
return job;
|
|
171
|
-
}
|
|
172
|
-
getL1Constants() {
|
|
173
|
-
return this.l2BlockSource.getL1Constants();
|
|
174
|
-
}
|
|
175
|
-
/** Monitors for new blocks and requests their txs from the p2p layer to ensure they are available for proving. */
|
|
176
|
-
async checkForTxs() {
|
|
177
|
-
const blockNumber = await this.l2BlockSource.getBlockNumber();
|
|
178
|
-
if (this.lastBlockNumber === undefined || blockNumber > this.lastBlockNumber) {
|
|
179
|
-
const block = await this.l2BlockSource.getBlock(blockNumber);
|
|
180
|
-
if (!block) {
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
const txHashes = block.body.txEffects.map(tx => tx.txHash);
|
|
184
|
-
this.log.verbose(`Fetching ${txHashes.length} for block number ${blockNumber} from coordination`);
|
|
185
|
-
await this.coordination.getTxsByHash(txHashes); // This stores the txs in the tx pool, no need to persist them here
|
|
186
|
-
this.lastBlockNumber = blockNumber;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
async gatherEpochData(epochNumber) {
|
|
190
|
-
// Gather blocks for this epoch and their txs
|
|
191
|
-
const blocks = await this.gatherBlocks(epochNumber);
|
|
192
|
-
const txs = await this.gatherTxs(epochNumber, blocks);
|
|
193
|
-
return { blocks, txs };
|
|
194
|
-
}
|
|
195
|
-
async gatherBlocks(epochNumber) {
|
|
196
|
-
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
197
|
-
if (blocks.length === 0) {
|
|
198
|
-
throw new EmptyEpochError(epochNumber);
|
|
199
|
-
}
|
|
200
|
-
return blocks;
|
|
201
|
-
}
|
|
202
|
-
async gatherTxs(epochNumber, blocks) {
|
|
203
|
-
const txsToFind = blocks.flatMap(block => block.body.txEffects.map(tx => tx.txHash));
|
|
204
|
-
const txs = await this.coordination.getTxsByHash(txsToFind);
|
|
205
|
-
if (txs.length === txsToFind.length) {
|
|
206
|
-
this.log.verbose(`Gathered all ${txs.length} txs for epoch ${epochNumber}`, { epochNumber });
|
|
207
|
-
return txs;
|
|
208
|
-
}
|
|
209
|
-
const txHashesFound = await Promise.all(txs.map(tx => tx.getTxHash()));
|
|
210
|
-
const missingTxHashes = txsToFind
|
|
211
|
-
.filter(txHashToFind => !txHashesFound.some(txHashFound => txHashToFind.equals(txHashFound)))
|
|
212
|
-
.join(', ');
|
|
213
|
-
throw new Error(`Txs not found for epoch ${epochNumber}: ${missingTxHashes}`);
|
|
23
|
+
*/ export class ProverNode {
|
|
24
|
+
prover;
|
|
25
|
+
publisher;
|
|
26
|
+
l2BlockSource;
|
|
27
|
+
l1ToL2MessageSource;
|
|
28
|
+
contractDataSource;
|
|
29
|
+
worldState;
|
|
30
|
+
coordination;
|
|
31
|
+
epochsMonitor;
|
|
32
|
+
telemetryClient;
|
|
33
|
+
log;
|
|
34
|
+
dateProvider;
|
|
35
|
+
latestEpochWeAreProving;
|
|
36
|
+
jobs;
|
|
37
|
+
cachedEpochData;
|
|
38
|
+
options;
|
|
39
|
+
metrics;
|
|
40
|
+
txFetcher;
|
|
41
|
+
lastBlockNumber;
|
|
42
|
+
tracer;
|
|
43
|
+
constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, epochsMonitor, options = {}, telemetryClient = getTelemetryClient()){
|
|
44
|
+
this.prover = prover;
|
|
45
|
+
this.publisher = publisher;
|
|
46
|
+
this.l2BlockSource = l2BlockSource;
|
|
47
|
+
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
48
|
+
this.contractDataSource = contractDataSource;
|
|
49
|
+
this.worldState = worldState;
|
|
50
|
+
this.coordination = coordination;
|
|
51
|
+
this.epochsMonitor = epochsMonitor;
|
|
52
|
+
this.telemetryClient = telemetryClient;
|
|
53
|
+
this.log = createLogger('prover-node');
|
|
54
|
+
this.dateProvider = new DateProvider();
|
|
55
|
+
this.jobs = new Map();
|
|
56
|
+
this.cachedEpochData = undefined;
|
|
57
|
+
this.options = {
|
|
58
|
+
pollingIntervalMs: 1_000,
|
|
59
|
+
maxPendingJobs: 100,
|
|
60
|
+
maxParallelBlocksPerEpoch: 32,
|
|
61
|
+
txGatheringTimeoutMs: 60_000,
|
|
62
|
+
txGatheringIntervalMs: 1_000,
|
|
63
|
+
txGatheringMaxParallelRequests: 100,
|
|
64
|
+
...compact(options)
|
|
65
|
+
};
|
|
66
|
+
this.metrics = new ProverNodeMetrics(telemetryClient, 'ProverNode');
|
|
67
|
+
this.tracer = telemetryClient.getTracer('ProverNode');
|
|
68
|
+
this.txFetcher = new RunningPromise(()=>this.checkForTxs(), this.log, this.options.txGatheringIntervalMs);
|
|
69
|
+
}
|
|
70
|
+
getProverId() {
|
|
71
|
+
return this.prover.getProverId();
|
|
72
|
+
}
|
|
73
|
+
getP2P() {
|
|
74
|
+
const asP2PClient = this.coordination;
|
|
75
|
+
if (typeof asP2PClient.isP2PClient === 'function' && asP2PClient.isP2PClient()) {
|
|
76
|
+
return asP2PClient;
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
|
|
82
|
+
* @param epochNumber - The epoch number that was just completed.
|
|
83
|
+
*/ async handleEpochReadyToProve(epochNumber) {
|
|
84
|
+
try {
|
|
85
|
+
this.log.debug('jobs', JSON.stringify(this.jobs, null, 2));
|
|
86
|
+
const activeJobs = await this.getActiveJobsForEpoch(epochNumber);
|
|
87
|
+
if (activeJobs.length > 0) {
|
|
88
|
+
this.log.info(`Not starting proof for ${epochNumber} since there are active jobs`);
|
|
89
|
+
return;
|
|
214
90
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
91
|
+
// TODO: we probably want to skip starting a proof if we are too far into the current epoch
|
|
92
|
+
await this.startProof(epochNumber);
|
|
93
|
+
} catch (err) {
|
|
94
|
+
if (err instanceof EmptyEpochError) {
|
|
95
|
+
this.log.info(`Not starting proof for ${epochNumber} since no blocks were found`);
|
|
96
|
+
} else {
|
|
97
|
+
this.log.error(`Error handling epoch completed`, err);
|
|
218
98
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
|
|
103
|
+
* starts proving jobs for them.
|
|
104
|
+
*/ start() {
|
|
105
|
+
this.txFetcher.start();
|
|
106
|
+
this.epochsMonitor.start(this);
|
|
107
|
+
this.log.info('Started ProverNode', this.options);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Stops the prover node and all its dependencies.
|
|
111
|
+
*/ async stop() {
|
|
112
|
+
this.log.info('Stopping ProverNode');
|
|
113
|
+
await this.txFetcher.stop();
|
|
114
|
+
await this.epochsMonitor.stop();
|
|
115
|
+
await this.prover.stop();
|
|
116
|
+
await tryStop(this.l2BlockSource);
|
|
117
|
+
this.publisher.interrupt();
|
|
118
|
+
await Promise.all(Array.from(this.jobs.values()).map((job)=>job.stop()));
|
|
119
|
+
await this.worldState.stop();
|
|
120
|
+
await tryStop(this.coordination);
|
|
121
|
+
await this.telemetryClient.stop();
|
|
122
|
+
this.log.info('Stopped ProverNode');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Creates a proof for a block range. Returns once the proof has been submitted to L1.
|
|
126
|
+
*/ async prove(epochNumber) {
|
|
127
|
+
const job = await this.createProvingJob(BigInt(epochNumber));
|
|
128
|
+
return job.run();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Starts a proving process and returns immediately.
|
|
132
|
+
*/ async startProof(epochNumber) {
|
|
133
|
+
const job = await this.createProvingJob(BigInt(epochNumber));
|
|
134
|
+
void job.run().catch((err)=>this.log.error(`Error proving epoch ${epochNumber}`, err));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Returns the prover instance.
|
|
138
|
+
*/ getProver() {
|
|
139
|
+
return this.prover;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Returns an array of jobs being processed.
|
|
143
|
+
*/ getJobs() {
|
|
144
|
+
return Promise.resolve(Array.from(this.jobs.entries()).map(([uuid, job])=>({
|
|
145
|
+
uuid,
|
|
146
|
+
status: job.getState(),
|
|
147
|
+
epochNumber: Number(job.getEpochNumber())
|
|
148
|
+
})));
|
|
149
|
+
}
|
|
150
|
+
async getActiveJobsForEpoch(epochBigInt) {
|
|
151
|
+
const jobs = await this.getJobs();
|
|
152
|
+
const epochNumber = Number(epochBigInt);
|
|
153
|
+
return jobs.filter((job)=>job.epochNumber === epochNumber && !EpochProvingJobTerminalState.includes(job.status));
|
|
154
|
+
}
|
|
155
|
+
checkMaximumPendingJobs() {
|
|
156
|
+
const { maxPendingJobs } = this.options;
|
|
157
|
+
return maxPendingJobs === 0 || this.jobs.size < maxPendingJobs;
|
|
158
|
+
}
|
|
159
|
+
async createProvingJob(epochNumber) {
|
|
160
|
+
if (!this.checkMaximumPendingJobs()) {
|
|
161
|
+
throw new Error(`Maximum pending proving jobs ${this.options.maxPendingJobs} reached. Cannot create new job.`);
|
|
162
|
+
}
|
|
163
|
+
// Gather blocks for this epoch
|
|
164
|
+
const cachedEpochData = this.cachedEpochData?.epochNumber === epochNumber ? this.cachedEpochData : undefined;
|
|
165
|
+
const { blocks, txs } = cachedEpochData ?? await this.gatherEpochData(epochNumber);
|
|
166
|
+
const fromBlock = blocks[0].number;
|
|
167
|
+
const toBlock = blocks.at(-1).number;
|
|
168
|
+
// Fast forward world state to right before the target block and get a fork
|
|
169
|
+
this.log.verbose(`Creating proving job for epoch ${epochNumber} for block range ${fromBlock} to ${toBlock}`);
|
|
170
|
+
await this.worldState.syncImmediate(toBlock);
|
|
171
|
+
// Create a processor using the forked world state
|
|
172
|
+
const publicProcessorFactory = new PublicProcessorFactory(this.contractDataSource, this.dateProvider, this.telemetryClient);
|
|
173
|
+
const cleanUp = ()=>{
|
|
174
|
+
this.jobs.delete(job.getId());
|
|
175
|
+
return Promise.resolve();
|
|
176
|
+
};
|
|
177
|
+
const [_, endTimestamp] = getTimestampRangeForEpoch(epochNumber + 1n, await this.getL1Constants());
|
|
178
|
+
const deadline = new Date(Number(endTimestamp) * 1000);
|
|
179
|
+
const job = this.doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp);
|
|
180
|
+
this.jobs.set(job.getId(), job);
|
|
181
|
+
return job;
|
|
182
|
+
}
|
|
183
|
+
getL1Constants() {
|
|
184
|
+
return this.l2BlockSource.getL1Constants();
|
|
185
|
+
}
|
|
186
|
+
/** Monitors for new blocks and requests their txs from the p2p layer to ensure they are available for proving. */ async checkForTxs() {
|
|
187
|
+
const blockNumber = await this.l2BlockSource.getBlockNumber();
|
|
188
|
+
if (this.lastBlockNumber === undefined || blockNumber > this.lastBlockNumber) {
|
|
189
|
+
const block = await this.l2BlockSource.getBlock(blockNumber);
|
|
190
|
+
if (!block) {
|
|
191
|
+
return;
|
|
222
192
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
238
|
-
|
|
193
|
+
const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
|
|
194
|
+
this.log.verbose(`Fetching ${txHashes.length} tx hashes for block number ${blockNumber} from coordination`);
|
|
195
|
+
await this.coordination.getTxsByHash(txHashes); // This stores the txs in the tx pool, no need to persist them here
|
|
196
|
+
this.lastBlockNumber = blockNumber;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async gatherEpochData(epochNumber) {
|
|
200
|
+
// Gather blocks for this epoch and their txs
|
|
201
|
+
const blocks = await this.gatherBlocks(epochNumber);
|
|
202
|
+
const txs = await this.gatherTxs(epochNumber, blocks);
|
|
203
|
+
return {
|
|
204
|
+
blocks,
|
|
205
|
+
txs
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
async gatherBlocks(epochNumber) {
|
|
209
|
+
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
210
|
+
if (blocks.length === 0) {
|
|
211
|
+
throw new EmptyEpochError(epochNumber);
|
|
212
|
+
}
|
|
213
|
+
return blocks;
|
|
214
|
+
}
|
|
215
|
+
async gatherTxs(epochNumber, blocks) {
|
|
216
|
+
const txsToFind = blocks.flatMap((block)=>block.body.txEffects.map((tx)=>tx.txHash));
|
|
217
|
+
const txs = await this.coordination.getTxsByHash(txsToFind);
|
|
218
|
+
if (txs.length === txsToFind.length) {
|
|
219
|
+
this.log.verbose(`Gathered all ${txs.length} txs for epoch ${epochNumber}`, {
|
|
220
|
+
epochNumber
|
|
221
|
+
});
|
|
222
|
+
return txs;
|
|
223
|
+
}
|
|
224
|
+
const txHashesFound = await Promise.all(txs.map((tx)=>tx.getTxHash()));
|
|
225
|
+
const missingTxHashes = txsToFind.filter((txHashToFind)=>!txHashesFound.some((txHashFound)=>txHashToFind.equals(txHashFound))).join(', ');
|
|
226
|
+
throw new Error(`Txs not found for epoch ${epochNumber}: ${missingTxHashes}`);
|
|
227
|
+
}
|
|
228
|
+
/** Extracted for testing purposes. */ doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp) {
|
|
229
|
+
return new EpochProvingJob(this.worldState, epochNumber, blocks, txs, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.metrics, deadline, {
|
|
230
|
+
parallelBlockLimit: this.options.maxParallelBlocksPerEpoch
|
|
231
|
+
}, cleanUp);
|
|
232
|
+
}
|
|
233
|
+
/** Extracted for testing purposes. */ async triggerMonitors() {
|
|
234
|
+
await this.epochsMonitor.work();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
_ts_decorate([
|
|
238
|
+
trackSpan('ProverNode.createProvingJob', (epochNumber)=>({
|
|
239
|
+
[Attributes.EPOCH_NUMBER]: Number(epochNumber)
|
|
240
|
+
}))
|
|
241
|
+
], ProverNode.prototype, "createProvingJob", null);
|
|
242
|
+
_ts_decorate([
|
|
243
|
+
memoize
|
|
244
|
+
], ProverNode.prototype, "getL1Constants", null);
|
|
245
|
+
_ts_decorate([
|
|
246
|
+
trackSpan('ProverNode.checkForTxs')
|
|
247
|
+
], ProverNode.prototype, "checkForTxs", null);
|
|
248
|
+
_ts_decorate([
|
|
249
|
+
trackSpan('ProverNode.gatherEpochData', (epochNumber)=>({
|
|
250
|
+
[Attributes.EPOCH_NUMBER]: Number(epochNumber)
|
|
251
|
+
}))
|
|
252
|
+
], ProverNode.prototype, "gatherEpochData", null);
|
|
239
253
|
class EmptyEpochError extends Error {
|
|
240
|
-
constructor(epochNumber)
|
|
254
|
+
constructor(epochNumber){
|
|
241
255
|
super(`No blocks found for epoch ${epochNumber}`);
|
|
242
256
|
this.name = 'EmptyEpochError';
|
|
243
257
|
}
|
|
244
258
|
}
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCw0QkFBNEIsRUFXNUIseUJBQXlCLEVBQ3pCLE9BQU8sR0FDUixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUNMLFVBQVUsRUFJVixrQkFBa0IsRUFDbEIsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFhakQ7Ozs7O0dBS0c7SUFDVSxVQUFVOzs7Ozs7O3NCQUFWLFVBQVU7WUFlckIsWUFDcUIsTUFBMEIsRUFDMUIsU0FBOEIsRUFDOUIsYUFBNkMsRUFDN0MsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxVQUFrQyxFQUNsQyxZQUFpRCxFQUNqRCxhQUEyQixFQUM5QyxVQUFzQyxFQUFFLEVBQ3JCLGtCQUFtQyxrQkFBa0IsRUFBRTtnQkFUdkQsV0FBTSxJQWhCaEIsbURBQVUsRUFnQkEsTUFBTSxFQUFvQjtnQkFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7Z0JBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQztnQkFDN0Msd0JBQW1CLEdBQW5C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
|
package/dest/test/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { EpochProverManager } from '@aztec/stdlib/interfaces/server';
|
|
2
|
+
import type { ProverNodePublisher } from '../prover-node-publisher.js';
|
|
3
3
|
import { ProverNode } from '../prover-node.js';
|
|
4
4
|
declare class TestProverNode_ extends ProverNode {
|
|
5
5
|
prover: EpochProverManager;
|
package/dest/test/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,cAAM,eAAgB,SAAQ,UAAU;IACtB,MAAM,EAAG,kBAAkB,CAAC;IAC5B,SAAS,EAAG,mBAAmB,CAAC;CACjD;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC"}
|
package/dest/test/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProverNode } from '../prover-node.js';
|
|
2
2
|
class TestProverNode_ extends ProverNode {
|
|
3
|
+
prover;
|
|
4
|
+
publisher;
|
|
3
5
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsTUFBTSxlQUFnQixTQUFRLFVBQVU7Q0FHdkMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.77.0-testnet-ignition.21",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
18
18
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
19
19
|
"bb": "node --no-warnings ./dest/bb/index.js",
|
|
20
|
-
"test": "
|
|
20
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
21
21
|
},
|
|
22
22
|
"jest": {
|
|
23
23
|
"moduleNameMapper": {
|
|
@@ -47,31 +47,30 @@
|
|
|
47
47
|
"reporters": [
|
|
48
48
|
"default"
|
|
49
49
|
],
|
|
50
|
-
"testTimeout":
|
|
50
|
+
"testTimeout": 120000,
|
|
51
51
|
"setupFiles": [
|
|
52
52
|
"../../foundation/src/jest/setup.mjs"
|
|
53
53
|
]
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@aztec/archiver": "0.
|
|
57
|
-
"@aztec/bb-prover": "0.
|
|
58
|
-
"@aztec/blob-sink": "0.
|
|
59
|
-
"@aztec/
|
|
60
|
-
"@aztec/
|
|
61
|
-
"@aztec/
|
|
62
|
-
"@aztec/
|
|
63
|
-
"@aztec/
|
|
64
|
-
"@aztec/
|
|
65
|
-
"@aztec/
|
|
66
|
-
"@aztec/
|
|
67
|
-
"@aztec/
|
|
68
|
-
"@aztec/
|
|
69
|
-
"@aztec/
|
|
70
|
-
"@aztec/
|
|
71
|
-
"@aztec/
|
|
72
|
-
"@aztec/telemetry-client": "0.
|
|
73
|
-
"@aztec/
|
|
74
|
-
"@aztec/world-state": "0.76.4",
|
|
56
|
+
"@aztec/archiver": "0.77.0-testnet-ignition.21",
|
|
57
|
+
"@aztec/bb-prover": "0.77.0-testnet-ignition.21",
|
|
58
|
+
"@aztec/blob-sink": "0.77.0-testnet-ignition.21",
|
|
59
|
+
"@aztec/constants": "0.77.0-testnet-ignition.21",
|
|
60
|
+
"@aztec/epoch-cache": "0.77.0-testnet-ignition.21",
|
|
61
|
+
"@aztec/ethereum": "0.77.0-testnet-ignition.21",
|
|
62
|
+
"@aztec/foundation": "0.77.0-testnet-ignition.21",
|
|
63
|
+
"@aztec/kv-store": "0.77.0-testnet-ignition.21",
|
|
64
|
+
"@aztec/l1-artifacts": "0.77.0-testnet-ignition.21",
|
|
65
|
+
"@aztec/noir-protocol-circuits-types": "0.77.0-testnet-ignition.21",
|
|
66
|
+
"@aztec/p2p": "0.77.0-testnet-ignition.21",
|
|
67
|
+
"@aztec/protocol-contracts": "0.77.0-testnet-ignition.21",
|
|
68
|
+
"@aztec/prover-client": "0.77.0-testnet-ignition.21",
|
|
69
|
+
"@aztec/sequencer-client": "0.77.0-testnet-ignition.21",
|
|
70
|
+
"@aztec/simulator": "0.77.0-testnet-ignition.21",
|
|
71
|
+
"@aztec/stdlib": "0.77.0-testnet-ignition.21",
|
|
72
|
+
"@aztec/telemetry-client": "0.77.0-testnet-ignition.21",
|
|
73
|
+
"@aztec/world-state": "0.77.0-testnet-ignition.21",
|
|
75
74
|
"source-map-support": "^0.5.21",
|
|
76
75
|
"tslib": "^2.4.0",
|
|
77
76
|
"viem": "2.22.8"
|