@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.
Files changed (45) hide show
  1. package/dest/config.d.ts +5 -2
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +24 -30
  4. package/dest/factory.d.ts +6 -3
  5. package/dest/factory.d.ts.map +1 -1
  6. package/dest/factory.js +21 -14
  7. package/dest/http.d.ts +1 -1
  8. package/dest/http.d.ts.map +1 -1
  9. package/dest/http.js +2 -4
  10. package/dest/index.js +0 -1
  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 +233 -193
  14. package/dest/metrics.d.ts +5 -2
  15. package/dest/metrics.d.ts.map +1 -1
  16. package/dest/metrics.js +50 -25
  17. package/dest/monitors/epoch-monitor.d.ts +22 -3
  18. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  19. package/dest/monitors/epoch-monitor.js +102 -48
  20. package/dest/monitors/index.js +0 -1
  21. package/dest/prover-coordination/config.js +2 -3
  22. package/dest/prover-coordination/factory.d.ts +5 -5
  23. package/dest/prover-coordination/factory.d.ts.map +1 -1
  24. package/dest/prover-coordination/factory.js +11 -8
  25. package/dest/prover-coordination/index.js +0 -1
  26. package/dest/prover-node-publisher.d.ts +5 -4
  27. package/dest/prover-node-publisher.d.ts.map +1 -1
  28. package/dest/prover-node-publisher.js +60 -52
  29. package/dest/prover-node.d.ts +12 -7
  30. package/dest/prover-node.d.ts.map +1 -1
  31. package/dest/prover-node.js +237 -224
  32. package/dest/test/index.d.ts +2 -2
  33. package/dest/test/index.d.ts.map +1 -1
  34. package/dest/test/index.js +2 -1
  35. package/package.json +21 -22
  36. package/src/config.ts +23 -31
  37. package/src/factory.ts +17 -8
  38. package/src/http.ts +2 -2
  39. package/src/job/epoch-proving-job.ts +11 -13
  40. package/src/metrics.ts +26 -5
  41. package/src/monitors/epoch-monitor.ts +57 -12
  42. package/src/prover-coordination/factory.ts +9 -12
  43. package/src/prover-node-publisher.ts +21 -14
  44. package/src/prover-node.ts +24 -22
  45. package/src/test/index.ts +2 -2
@@ -1,12 +1,18 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { EpochProvingJobTerminalState, getTimestampRangeForEpoch, tryStop, } from '@aztec/circuit-types';
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 { Attributes, getTelemetryClient, trackSpan, } from '@aztec/telemetry-client';
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
- let ProverNode = (() => {
19
- var _a;
20
- let _instanceExtraInitializers = [];
21
- let _createProvingJob_decorators;
22
- let _getL1Constants_decorators;
23
- let _checkForTxs_decorators;
24
- let _gatherEpochData_decorators;
25
- return _a = class ProverNode {
26
- constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, epochsMonitor, options = {}, telemetryClient = getTelemetryClient()) {
27
- this.prover = (__runInitializers(this, _instanceExtraInitializers), prover);
28
- this.publisher = publisher;
29
- this.l2BlockSource = l2BlockSource;
30
- this.l1ToL2MessageSource = l1ToL2MessageSource;
31
- this.contractDataSource = contractDataSource;
32
- this.worldState = worldState;
33
- this.coordination = coordination;
34
- this.epochsMonitor = epochsMonitor;
35
- this.telemetryClient = telemetryClient;
36
- this.log = createLogger('prover-node');
37
- this.dateProvider = new DateProvider();
38
- this.jobs = new Map();
39
- this.cachedEpochData = undefined;
40
- this.options = {
41
- pollingIntervalMs: 1000,
42
- maxPendingJobs: 100,
43
- maxParallelBlocksPerEpoch: 32,
44
- txGatheringTimeoutMs: 60000,
45
- txGatheringIntervalMs: 1000,
46
- txGatheringMaxParallelRequests: 100,
47
- ...compact(options),
48
- };
49
- this.metrics = new ProverNodeMetrics(telemetryClient, 'ProverNode');
50
- this.tracer = telemetryClient.getTracer('ProverNode');
51
- this.txFetcher = new RunningPromise(() => this.checkForTxs(), this.log, this.options.txGatheringIntervalMs);
52
- }
53
- getP2P() {
54
- const asP2PClient = this.coordination;
55
- if (typeof asP2PClient.isP2PClient === 'function' && asP2PClient.isP2PClient()) {
56
- return asP2PClient;
57
- }
58
- return undefined;
59
- }
60
- /**
61
- * Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
62
- * @param epochNumber - The epoch number that was just completed.
63
- */
64
- async handleEpochCompleted(epochNumber) {
65
- try {
66
- this.log.debug('jobs', JSON.stringify(this.jobs, null, 2));
67
- const activeJobs = await this.getActiveJobsForEpoch(epochNumber);
68
- if (activeJobs.length > 0) {
69
- this.log.info(`Not starting proof for ${epochNumber} since there are active jobs`);
70
- return;
71
- }
72
- // TODO: we probably want to skip starting a proof if we are too far into the current epoch
73
- await this.startProof(epochNumber);
74
- }
75
- catch (err) {
76
- if (err instanceof EmptyEpochError) {
77
- this.log.info(`Not starting proof for ${epochNumber} since no blocks were found`);
78
- }
79
- else {
80
- this.log.error(`Error handling epoch completed`, err);
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
- /** Extracted for testing purposes. */
216
- doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp) {
217
- return new EpochProvingJob(this.worldState, epochNumber, blocks, txs, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.metrics, deadline, { parallelBlockLimit: this.options.maxParallelBlocksPerEpoch }, cleanUp);
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
- /** Extracted for testing purposes. */
220
- async triggerMonitors() {
221
- await this.epochsMonitor.work();
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
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
226
- _createProvingJob_decorators = [trackSpan('ProverNode.createProvingJob', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
227
- _getL1Constants_decorators = [memoize];
228
- _checkForTxs_decorators = [trackSpan('ProverNode.checkForTxs')];
229
- _gatherEpochData_decorators = [trackSpan('ProverNode.gatherEpochData', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
230
- __esDecorate(_a, null, _createProvingJob_decorators, { kind: "method", name: "createProvingJob", static: false, private: false, access: { has: obj => "createProvingJob" in obj, get: obj => obj.createProvingJob }, metadata: _metadata }, null, _instanceExtraInitializers);
231
- __esDecorate(_a, null, _getL1Constants_decorators, { kind: "method", name: "getL1Constants", static: false, private: false, access: { has: obj => "getL1Constants" in obj, get: obj => obj.getL1Constants }, metadata: _metadata }, null, _instanceExtraInitializers);
232
- __esDecorate(_a, null, _checkForTxs_decorators, { kind: "method", name: "checkForTxs", static: false, private: false, access: { has: obj => "checkForTxs" in obj, get: obj => obj.checkForTxs }, metadata: _metadata }, null, _instanceExtraInitializers);
233
- __esDecorate(_a, null, _gatherEpochData_decorators, { kind: "method", name: "gatherEpochData", static: false, private: false, access: { has: obj => "gatherEpochData" in obj, get: obj => obj.gatherEpochData }, metadata: _metadata }, null, _instanceExtraInitializers);
234
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
235
- })(),
236
- _a;
237
- })();
238
- export { ProverNode };
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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
@@ -1,5 +1,5 @@
1
- import { type EpochProverManager } from '@aztec/circuit-types';
2
- import { type ProverNodePublisher } from '../prover-node-publisher.js';
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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,KAAK,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"}
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"}
@@ -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.76.4",
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": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
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": 30000,
50
+ "testTimeout": 120000,
51
51
  "setupFiles": [
52
52
  "../../foundation/src/jest/setup.mjs"
53
53
  ]
54
54
  },
55
55
  "dependencies": {
56
- "@aztec/archiver": "0.76.4",
57
- "@aztec/bb-prover": "0.76.4",
58
- "@aztec/blob-sink": "0.76.4",
59
- "@aztec/circuit-types": "0.76.4",
60
- "@aztec/circuits.js": "0.76.4",
61
- "@aztec/epoch-cache": "0.76.4",
62
- "@aztec/ethereum": "0.76.4",
63
- "@aztec/foundation": "0.76.4",
64
- "@aztec/kv-store": "0.76.4",
65
- "@aztec/l1-artifacts": "0.76.4",
66
- "@aztec/noir-protocol-circuits-types": "0.76.4",
67
- "@aztec/p2p": "0.76.4",
68
- "@aztec/protocol-contracts": "0.76.4",
69
- "@aztec/prover-client": "0.76.4",
70
- "@aztec/sequencer-client": "0.76.4",
71
- "@aztec/simulator": "0.76.4",
72
- "@aztec/telemetry-client": "0.76.4",
73
- "@aztec/types": "0.76.4",
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"