@aztec/prover-node 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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 (80) hide show
  1. package/dest/bond/bond-manager.js +10 -12
  2. package/dest/bond/config.js +3 -4
  3. package/dest/bond/escrow-contract.js +23 -15
  4. package/dest/bond/factory.js +4 -2
  5. package/dest/bond/index.js +0 -1
  6. package/dest/bond/token-contract.js +52 -29
  7. package/dest/config.js +20 -21
  8. package/dest/factory.js +26 -14
  9. package/dest/http.js +1 -3
  10. package/dest/index.js +0 -1
  11. package/dest/job/epoch-proving-job.js +230 -190
  12. package/dest/metrics.js +33 -23
  13. package/dest/monitors/claims-monitor.js +52 -51
  14. package/dest/monitors/epoch-monitor.js +48 -47
  15. package/dest/monitors/index.js +0 -1
  16. package/dest/prover-coordination/config.js +2 -3
  17. package/dest/prover-coordination/factory.js +8 -7
  18. package/dest/prover-coordination/index.js +0 -1
  19. package/dest/prover-node-publisher.js +46 -43
  20. package/dest/prover-node.js +303 -308
  21. package/dest/quote-provider/http.js +11 -5
  22. package/dest/quote-provider/index.js +1 -2
  23. package/dest/quote-provider/simple.js +7 -3
  24. package/dest/quote-provider/utils.js +2 -3
  25. package/dest/quote-signer.js +6 -3
  26. package/dest/test/index.js +2 -1
  27. package/package.json +19 -19
  28. package/src/prover-node.ts +34 -62
  29. package/dest/bond/bond-manager.d.ts +0 -22
  30. package/dest/bond/bond-manager.d.ts.map +0 -1
  31. package/dest/bond/config.d.ts +0 -8
  32. package/dest/bond/config.d.ts.map +0 -1
  33. package/dest/bond/escrow-contract.d.ts +0 -19
  34. package/dest/bond/escrow-contract.d.ts.map +0 -1
  35. package/dest/bond/factory.d.ts +0 -6
  36. package/dest/bond/factory.d.ts.map +0 -1
  37. package/dest/bond/index.d.ts +0 -3
  38. package/dest/bond/index.d.ts.map +0 -1
  39. package/dest/bond/token-contract.d.ts +0 -26
  40. package/dest/bond/token-contract.d.ts.map +0 -1
  41. package/dest/config.d.ts +0 -31
  42. package/dest/config.d.ts.map +0 -1
  43. package/dest/factory.d.ts +0 -22
  44. package/dest/factory.d.ts.map +0 -1
  45. package/dest/http.d.ts +0 -8
  46. package/dest/http.d.ts.map +0 -1
  47. package/dest/index.d.ts +0 -6
  48. package/dest/index.d.ts.map +0 -1
  49. package/dest/job/epoch-proving-job.d.ts +0 -50
  50. package/dest/job/epoch-proving-job.d.ts.map +0 -1
  51. package/dest/metrics.d.ts +0 -23
  52. package/dest/metrics.d.ts.map +0 -1
  53. package/dest/monitors/claims-monitor.d.ts +0 -24
  54. package/dest/monitors/claims-monitor.d.ts.map +0 -1
  55. package/dest/monitors/epoch-monitor.d.ts +0 -22
  56. package/dest/monitors/epoch-monitor.d.ts.map +0 -1
  57. package/dest/monitors/index.d.ts +0 -3
  58. package/dest/monitors/index.d.ts.map +0 -1
  59. package/dest/prover-coordination/config.d.ts +0 -7
  60. package/dest/prover-coordination/config.d.ts.map +0 -1
  61. package/dest/prover-coordination/factory.d.ts +0 -22
  62. package/dest/prover-coordination/factory.d.ts.map +0 -1
  63. package/dest/prover-coordination/index.d.ts +0 -3
  64. package/dest/prover-coordination/index.d.ts.map +0 -1
  65. package/dest/prover-node-publisher.d.ts +0 -67
  66. package/dest/prover-node-publisher.d.ts.map +0 -1
  67. package/dest/prover-node.d.ts +0 -107
  68. package/dest/prover-node.d.ts.map +0 -1
  69. package/dest/quote-provider/http.d.ts +0 -15
  70. package/dest/quote-provider/http.d.ts.map +0 -1
  71. package/dest/quote-provider/index.d.ts +0 -6
  72. package/dest/quote-provider/index.d.ts.map +0 -1
  73. package/dest/quote-provider/simple.d.ts +0 -9
  74. package/dest/quote-provider/simple.d.ts.map +0 -1
  75. package/dest/quote-provider/utils.d.ts +0 -4
  76. package/dest/quote-provider/utils.d.ts.map +0 -1
  77. package/dest/quote-signer.d.ts +0 -13
  78. package/dest/quote-signer.d.ts.map +0 -1
  79. package/dest/test/index.d.ts +0 -10
  80. package/dest/test/index.d.ts.map +0 -1
@@ -1,5 +1,10 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { EpochProvingJobTerminalState, } 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
+ }
7
+ import { EpochProvingJobTerminalState } from '@aztec/circuit-types';
3
8
  import { asyncPool } from '@aztec/foundation/async-pool';
4
9
  import { createLogger } from '@aztec/foundation/log';
5
10
  import { promiseWithResolvers } from '@aztec/foundation/promise';
@@ -10,203 +15,238 @@ import * as crypto from 'node:crypto';
10
15
  * Job that grabs a range of blocks from the unfinalised chain from L1, gets their txs given their hashes,
11
16
  * re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
12
17
  * world state as part of public call execution via the public processor.
13
- */
14
- let EpochProvingJob = (() => {
15
- var _a;
16
- let _instanceExtraInitializers = [];
17
- let _run_decorators;
18
- return _a = class EpochProvingJob {
19
- constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, deadline, config = { parallelBlockLimit: 32 }, cleanUp = () => Promise.resolve()) {
20
- this.dbProvider = (__runInitializers(this, _instanceExtraInitializers), dbProvider);
21
- this.epochNumber = epochNumber;
22
- this.blocks = blocks;
23
- this.txs = txs;
24
- this.prover = prover;
25
- this.publicProcessorFactory = publicProcessorFactory;
26
- this.publisher = publisher;
27
- this.l2BlockSource = l2BlockSource;
28
- this.l1ToL2MessageSource = l1ToL2MessageSource;
29
- this.metrics = metrics;
30
- this.deadline = deadline;
31
- this.config = config;
32
- this.cleanUp = cleanUp;
33
- this.state = 'initialized';
34
- this.log = createLogger('prover-node:epoch-proving-job');
35
- this.uuid = crypto.randomUUID();
36
- this.tracer = metrics.client.getTracer('EpochProvingJob');
18
+ */ export class EpochProvingJob {
19
+ dbProvider;
20
+ epochNumber;
21
+ blocks;
22
+ txs;
23
+ prover;
24
+ publicProcessorFactory;
25
+ publisher;
26
+ l2BlockSource;
27
+ l1ToL2MessageSource;
28
+ metrics;
29
+ deadline;
30
+ config;
31
+ cleanUp;
32
+ state;
33
+ log;
34
+ uuid;
35
+ runPromise;
36
+ deadlineTimeoutHandler;
37
+ tracer;
38
+ constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, deadline, config = {
39
+ parallelBlockLimit: 32
40
+ }, cleanUp = ()=>Promise.resolve()){
41
+ this.dbProvider = dbProvider;
42
+ this.epochNumber = epochNumber;
43
+ this.blocks = blocks;
44
+ this.txs = txs;
45
+ this.prover = prover;
46
+ this.publicProcessorFactory = publicProcessorFactory;
47
+ this.publisher = publisher;
48
+ this.l2BlockSource = l2BlockSource;
49
+ this.l1ToL2MessageSource = l1ToL2MessageSource;
50
+ this.metrics = metrics;
51
+ this.deadline = deadline;
52
+ this.config = config;
53
+ this.cleanUp = cleanUp;
54
+ this.state = 'initialized';
55
+ this.log = createLogger('prover-node:epoch-proving-job');
56
+ this.uuid = crypto.randomUUID();
57
+ this.tracer = metrics.client.getTracer('EpochProvingJob');
58
+ }
59
+ getId() {
60
+ return this.uuid;
61
+ }
62
+ getState() {
63
+ return this.state;
64
+ }
65
+ /**
66
+ * Proves the given epoch and submits the proof to L1.
67
+ */ async run() {
68
+ this.scheduleDeadlineStop();
69
+ const epochNumber = Number(this.epochNumber);
70
+ const epochSizeBlocks = this.blocks.length;
71
+ const epochSizeTxs = this.blocks.reduce((total, current)=>total + current.body.txEffects.length, 0);
72
+ const [fromBlock, toBlock] = [
73
+ this.blocks[0].number,
74
+ this.blocks.at(-1).number
75
+ ];
76
+ this.log.info(`Starting epoch ${epochNumber} proving job with blocks ${fromBlock} to ${toBlock}`, {
77
+ fromBlock,
78
+ toBlock,
79
+ epochSizeBlocks,
80
+ epochNumber,
81
+ uuid: this.uuid
82
+ });
83
+ this.progressState('processing');
84
+ const timer = new Timer();
85
+ const { promise, resolve } = promiseWithResolvers();
86
+ this.runPromise = promise;
87
+ try {
88
+ this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
89
+ await this.prover.startTubeCircuits(this.txs);
90
+ await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block)=>{
91
+ this.checkState();
92
+ const globalVariables = block.header.globalVariables;
93
+ const txs = await this.getTxs(block);
94
+ const l1ToL2Messages = await this.getL1ToL2Messages(block);
95
+ const previousHeader = await this.getBlockHeader(block.number - 1);
96
+ this.log.verbose(`Starting processing block ${block.number}`, {
97
+ number: block.number,
98
+ blockHash: (await block.hash()).toString(),
99
+ lastArchive: block.header.lastArchive.root,
100
+ noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
101
+ nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
102
+ publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
103
+ previousHeader: previousHeader.hash(),
104
+ uuid: this.uuid,
105
+ ...globalVariables
106
+ });
107
+ // Start block proving
108
+ await this.prover.startNewBlock(globalVariables, l1ToL2Messages, previousHeader);
109
+ // Process public fns
110
+ const db = await this.dbProvider.fork(block.number - 1);
111
+ const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
112
+ const processed = await this.processTxs(publicProcessor, txs);
113
+ await this.prover.addTxs(processed);
114
+ await db.close();
115
+ this.log.verbose(`Processed all ${txs.length} txs for block ${block.number}`, {
116
+ blockNumber: block.number,
117
+ blockHash: (await block.hash()).toString(),
118
+ uuid: this.uuid
119
+ });
120
+ // Mark block as completed to pad it
121
+ await this.prover.setBlockCompleted(block.number, block.header);
122
+ });
123
+ const executionTime = timer.ms();
124
+ this.progressState('awaiting-prover');
125
+ const { publicInputs, proof } = await this.prover.finaliseEpoch();
126
+ this.log.info(`Finalised proof for epoch ${epochNumber}`, {
127
+ epochNumber,
128
+ uuid: this.uuid,
129
+ duration: timer.ms()
130
+ });
131
+ this.progressState('publishing-proof');
132
+ const success = await this.publisher.submitEpochProof({
133
+ fromBlock,
134
+ toBlock,
135
+ epochNumber,
136
+ publicInputs,
137
+ proof
138
+ });
139
+ if (!success) {
140
+ throw new Error('Failed to submit epoch proof to L1');
37
141
  }
38
- getId() {
39
- return this.uuid;
142
+ this.log.info(`Submitted proof for epoch ${epochNumber} (blocks ${fromBlock} to ${toBlock})`, {
143
+ epochNumber,
144
+ uuid: this.uuid
145
+ });
146
+ this.state = 'completed';
147
+ this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
148
+ } catch (err) {
149
+ if (err && err.name === 'HaltExecutionError') {
150
+ this.log.warn(`Halted execution of epoch ${epochNumber} prover job`, {
151
+ uuid: this.uuid,
152
+ epochNumber
153
+ });
154
+ return;
40
155
  }
41
- getState() {
42
- return this.state;
156
+ this.log.error(`Error running epoch ${epochNumber} prover job`, err, {
157
+ uuid: this.uuid,
158
+ epochNumber
159
+ });
160
+ this.state = 'failed';
161
+ } finally{
162
+ clearTimeout(this.deadlineTimeoutHandler);
163
+ await this.cleanUp(this);
164
+ await this.prover.stop();
165
+ resolve();
166
+ }
167
+ }
168
+ progressState(state) {
169
+ this.checkState();
170
+ this.state = state;
171
+ }
172
+ checkState() {
173
+ if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed') {
174
+ throw new HaltExecutionError(this.state);
175
+ }
176
+ }
177
+ async stop(state = 'stopped') {
178
+ this.state = state;
179
+ this.prover.cancel();
180
+ // TODO(palla/prover): Stop the publisher as well
181
+ if (this.runPromise) {
182
+ await this.runPromise;
183
+ }
184
+ }
185
+ scheduleDeadlineStop() {
186
+ const deadline = this.deadline;
187
+ if (deadline) {
188
+ const timeout = deadline.getTime() - Date.now();
189
+ if (timeout <= 0) {
190
+ throw new Error('Cannot start job with deadline in the past');
43
191
  }
44
- /**
45
- * Proves the given epoch and submits the proof to L1.
46
- */
47
- async run() {
48
- this.scheduleDeadlineStop();
49
- const epochNumber = Number(this.epochNumber);
50
- const epochSizeBlocks = this.blocks.length;
51
- const epochSizeTxs = this.blocks.reduce((total, current) => total + current.body.txEffects.length, 0);
52
- const [fromBlock, toBlock] = [this.blocks[0].number, this.blocks.at(-1).number];
53
- this.log.info(`Starting epoch ${epochNumber} proving job with blocks ${fromBlock} to ${toBlock}`, {
54
- fromBlock,
55
- toBlock,
56
- epochSizeBlocks,
57
- epochNumber,
192
+ this.deadlineTimeoutHandler = setTimeout(()=>{
193
+ if (EpochProvingJobTerminalState.includes(this.state)) {
194
+ return;
195
+ }
196
+ this.log.warn('Stopping job due to deadline hit', {
58
197
  uuid: this.uuid,
198
+ epochNumber: this.epochNumber
59
199
  });
60
- this.progressState('processing');
61
- const timer = new Timer();
62
- const { promise, resolve } = promiseWithResolvers();
63
- this.runPromise = promise;
64
- try {
65
- this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
66
- await this.prover.startTubeCircuits(this.txs);
67
- await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block) => {
68
- this.checkState();
69
- const globalVariables = block.header.globalVariables;
70
- const txs = await this.getTxs(block);
71
- const l1ToL2Messages = await this.getL1ToL2Messages(block);
72
- const previousHeader = (await this.getBlockHeader(block.number - 1));
73
- this.log.verbose(`Starting processing block ${block.number}`, {
74
- number: block.number,
75
- blockHash: (await block.hash()).toString(),
76
- lastArchive: block.header.lastArchive.root,
77
- noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
78
- nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
79
- publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
80
- previousHeader: previousHeader.hash(),
81
- uuid: this.uuid,
82
- ...globalVariables,
83
- });
84
- // Start block proving
85
- await this.prover.startNewBlock(globalVariables, l1ToL2Messages, previousHeader);
86
- // Process public fns
87
- const db = await this.dbProvider.fork(block.number - 1);
88
- const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
89
- const processed = await this.processTxs(publicProcessor, txs);
90
- await this.prover.addTxs(processed);
91
- await db.close();
92
- this.log.verbose(`Processed all ${txs.length} txs for block ${block.number}`, {
93
- blockNumber: block.number,
94
- blockHash: (await block.hash()).toString(),
95
- uuid: this.uuid,
96
- });
97
- // Mark block as completed to pad it
98
- await this.prover.setBlockCompleted(block.number, block.header);
99
- });
100
- const executionTime = timer.ms();
101
- this.progressState('awaiting-prover');
102
- const { publicInputs, proof } = await this.prover.finaliseEpoch();
103
- this.log.info(`Finalised proof for epoch ${epochNumber}`, { epochNumber, uuid: this.uuid, duration: timer.ms() });
104
- this.progressState('publishing-proof');
105
- const success = await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
106
- if (!success) {
107
- throw new Error('Failed to submit epoch proof to L1');
108
- }
109
- this.log.info(`Submitted proof for epoch ${epochNumber} (blocks ${fromBlock} to ${toBlock})`, {
110
- epochNumber,
200
+ this.stop('timed-out').catch((err)=>{
201
+ this.log.error('Error stopping job', err, {
111
202
  uuid: this.uuid,
203
+ epochNumber: this.epochNumber
112
204
  });
113
- this.state = 'completed';
114
- this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
115
- }
116
- catch (err) {
117
- if (err && err.name === 'HaltExecutionError') {
118
- this.log.warn(`Halted execution of epoch ${epochNumber} prover job`, { uuid: this.uuid, epochNumber });
119
- return;
120
- }
121
- this.log.error(`Error running epoch ${epochNumber} prover job`, err, { uuid: this.uuid, epochNumber });
122
- this.state = 'failed';
123
- }
124
- finally {
125
- clearTimeout(this.deadlineTimeoutHandler);
126
- await this.cleanUp(this);
127
- await this.prover.stop();
128
- resolve();
129
- }
130
- }
131
- progressState(state) {
132
- this.checkState();
133
- this.state = state;
134
- }
135
- checkState() {
136
- if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed') {
137
- throw new HaltExecutionError(this.state);
138
- }
139
- }
140
- async stop(state = 'stopped') {
141
- this.state = state;
142
- this.prover.cancel();
143
- // TODO(palla/prover): Stop the publisher as well
144
- if (this.runPromise) {
145
- await this.runPromise;
146
- }
147
- }
148
- scheduleDeadlineStop() {
149
- const deadline = this.deadline;
150
- if (deadline) {
151
- const timeout = deadline.getTime() - Date.now();
152
- if (timeout <= 0) {
153
- throw new Error('Cannot start job with deadline in the past');
154
- }
155
- this.deadlineTimeoutHandler = setTimeout(() => {
156
- if (EpochProvingJobTerminalState.includes(this.state)) {
157
- return;
158
- }
159
- this.log.warn('Stopping job due to deadline hit', { uuid: this.uuid, epochNumber: this.epochNumber });
160
- this.stop('timed-out').catch(err => {
161
- this.log.error('Error stopping job', err, { uuid: this.uuid, epochNumber: this.epochNumber });
162
- });
163
- }, timeout);
164
- }
165
- }
166
- /* Returns the header for the given block number, or the genesis block for block zero. */
167
- async getBlockHeader(blockNumber) {
168
- if (blockNumber === 0) {
169
- return (await this.dbProvider.fork()).getInitialHeader();
170
- }
171
- return this.l2BlockSource.getBlockHeader(blockNumber);
172
- }
173
- async getTxs(block) {
174
- const txHashes = block.body.txEffects.map(tx => tx.txHash.toBigInt());
175
- const txsAndHashes = await Promise.all(this.txs.map(async (tx) => ({ tx, hash: await tx.getTxHash() })));
176
- return txsAndHashes
177
- .filter(txAndHash => txHashes.includes(txAndHash.hash.toBigInt()))
178
- .map(txAndHash => txAndHash.tx);
179
- }
180
- getL1ToL2Messages(block) {
181
- return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
182
- }
183
- async processTxs(publicProcessor, txs) {
184
- const { deadline } = this;
185
- const [processedTxs, failedTxs] = await publicProcessor.process(txs, { deadline });
186
- if (failedTxs.length) {
187
- throw new Error(`Txs failed processing: ${failedTxs.map(({ tx, error }) => `${tx.getTxHash()} (${error})`).join(', ')}`);
188
- }
189
- if (processedTxs.length !== txs.length) {
190
- throw new Error(`Failed to process all txs: processed ${processedTxs.length} out of ${txs.length}`);
191
- }
192
- return processedTxs;
193
- }
194
- },
195
- (() => {
196
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
197
- _run_decorators = [trackSpan('EpochProvingJob.run', function () {
198
- return { [Attributes.EPOCH_NUMBER]: Number(this.epochNumber) };
199
- })];
200
- __esDecorate(_a, null, _run_decorators, { kind: "method", name: "run", static: false, private: false, access: { has: obj => "run" in obj, get: obj => obj.run }, metadata: _metadata }, null, _instanceExtraInitializers);
201
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
202
- })(),
203
- _a;
204
- })();
205
- export { EpochProvingJob };
205
+ });
206
+ }, timeout);
207
+ }
208
+ }
209
+ /* Returns the header for the given block number, or the genesis block for block zero. */ async getBlockHeader(blockNumber) {
210
+ if (blockNumber === 0) {
211
+ return (await this.dbProvider.fork()).getInitialHeader();
212
+ }
213
+ return this.l2BlockSource.getBlockHeader(blockNumber);
214
+ }
215
+ async getTxs(block) {
216
+ const txHashes = block.body.txEffects.map((tx)=>tx.txHash.toBigInt());
217
+ const txsAndHashes = await Promise.all(this.txs.map(async (tx)=>({
218
+ tx,
219
+ hash: await tx.getTxHash()
220
+ })));
221
+ return txsAndHashes.filter((txAndHash)=>txHashes.includes(txAndHash.hash.toBigInt())).map((txAndHash)=>txAndHash.tx);
222
+ }
223
+ getL1ToL2Messages(block) {
224
+ return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
225
+ }
226
+ async processTxs(publicProcessor, txs) {
227
+ const { deadline } = this;
228
+ const [processedTxs, failedTxs] = await publicProcessor.process(txs, {
229
+ deadline
230
+ });
231
+ if (failedTxs.length) {
232
+ throw new Error(`Txs failed processing: ${failedTxs.map(({ tx, error })=>`${tx.getTxHash()} (${error})`).join(', ')}`);
233
+ }
234
+ if (processedTxs.length !== txs.length) {
235
+ throw new Error(`Failed to process all txs: processed ${processedTxs.length} out of ${txs.length}`);
236
+ }
237
+ return processedTxs;
238
+ }
239
+ }
240
+ _ts_decorate([
241
+ trackSpan('EpochProvingJob.run', function() {
242
+ return {
243
+ [Attributes.EPOCH_NUMBER]: Number(this.epochNumber)
244
+ };
245
+ })
246
+ ], EpochProvingJob.prototype, "run", null);
206
247
  class HaltExecutionError extends Error {
207
- constructor(state) {
248
+ constructor(state){
208
249
  super(`Halted execution due to state ${state}`);
209
250
  this.name = 'HaltExecutionError';
210
251
  }
211
252
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Vwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBR0wsNEJBQTRCLEdBTzdCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFVBQVUsRUFBK0IsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0YsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFLdEM7Ozs7R0FJRztJQUNVLGVBQWU7Ozs7c0JBQWYsZUFBZTtZQVUxQixZQUNVLFVBQW9DLEVBQ3BDLFdBQW1CLEVBQ25CLE1BQWlCLEVBQ2pCLEdBQVMsRUFDVCxNQUFtQixFQUNuQixzQkFBOEMsRUFDOUMsU0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLE9BQTBCLEVBQzFCLFFBQTBCLEVBQzFCLFNBQXlDLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLEVBQ25FLFVBQW1ELEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBWjFFLGVBQVUsSUFYVCxtREFBZSxFQVdoQixVQUFVLEVBQTBCO2dCQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtnQkFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztnQkFDakIsUUFBRyxHQUFILEdBQUcsQ0FBTTtnQkFDVCxXQUFNLEdBQU4sTUFBTSxDQUFhO2dCQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO2dCQUM5QyxjQUFTLEdBQVQs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
package/dest/metrics.js CHANGED
@@ -1,70 +1,83 @@
1
- import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
1
+ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
2
  import { formatEther } from 'viem';
3
3
  export class ProverNodeMetrics {
4
- constructor(client, name = 'ProverNode') {
4
+ client;
5
+ proverEpochExecutionDuration;
6
+ provingJobDuration;
7
+ provingJobBlocks;
8
+ provingJobTransactions;
9
+ gasPrice;
10
+ txCount;
11
+ txDuration;
12
+ txGas;
13
+ txCalldataSize;
14
+ txCalldataGas;
15
+ txBlobDataGasUsed;
16
+ txBlobDataGasCost;
17
+ constructor(client, name = 'ProverNode'){
5
18
  this.client = client;
6
19
  const meter = client.getMeter(name);
7
20
  this.proverEpochExecutionDuration = meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
8
21
  description: 'Duration of execution of an epoch by the prover',
9
22
  unit: 'ms',
10
- valueType: ValueType.INT,
23
+ valueType: ValueType.INT
11
24
  });
12
25
  this.provingJobDuration = meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
13
26
  description: 'Duration of proving job',
14
27
  unit: 'ms',
15
- valueType: ValueType.INT,
28
+ valueType: ValueType.INT
16
29
  });
17
30
  this.provingJobBlocks = meter.createHistogram(Metrics.PROVER_NODE_JOB_BLOCKS, {
18
31
  description: 'Number of blocks in a proven epoch',
19
- valueType: ValueType.INT,
32
+ valueType: ValueType.INT
20
33
  });
21
34
  this.provingJobTransactions = meter.createHistogram(Metrics.PROVER_NODE_JOB_TRANSACTIONS, {
22
35
  description: 'Number of transactions in a proven epoch',
23
- valueType: ValueType.INT,
36
+ valueType: ValueType.INT
24
37
  });
25
38
  this.gasPrice = meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE, {
26
39
  description: 'The gas price used for transactions',
27
40
  unit: 'gwei',
28
- valueType: ValueType.DOUBLE,
41
+ valueType: ValueType.DOUBLE
29
42
  });
30
43
  this.txCount = meter.createUpDownCounter(Metrics.L1_PUBLISHER_TX_COUNT, {
31
- description: 'The number of transactions processed',
44
+ description: 'The number of transactions processed'
32
45
  });
33
46
  this.txDuration = meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION, {
34
47
  description: 'The duration of transaction processing',
35
48
  unit: 'ms',
36
- valueType: ValueType.INT,
49
+ valueType: ValueType.INT
37
50
  });
38
51
  this.txGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
39
52
  description: 'The gas consumed by transactions',
40
53
  unit: 'gas',
41
- valueType: ValueType.INT,
54
+ valueType: ValueType.INT
42
55
  });
43
56
  this.txCalldataSize = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
44
57
  description: 'The size of the calldata in transactions',
45
58
  unit: 'By',
46
- valueType: ValueType.INT,
59
+ valueType: ValueType.INT
47
60
  });
48
61
  this.txCalldataGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
49
62
  description: 'The gas consumed by the calldata in transactions',
50
63
  unit: 'gas',
51
- valueType: ValueType.INT,
64
+ valueType: ValueType.INT
52
65
  });
53
66
  this.txBlobDataGasUsed = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
54
67
  description: 'The amount of blob gas used in transactions',
55
68
  unit: 'gas',
56
- valueType: ValueType.INT,
69
+ valueType: ValueType.INT
57
70
  });
58
71
  this.txBlobDataGasCost = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
59
72
  description: 'The gas cost of blobs in transactions',
60
73
  unit: 'gwei',
61
- valueType: ValueType.INT,
74
+ valueType: ValueType.INT
62
75
  });
63
76
  }
64
77
  recordFailedTx() {
65
78
  this.txCount.add(1, {
66
79
  [Attributes.L1_TX_TYPE]: 'submitProof',
67
- [Attributes.OK]: false,
80
+ [Attributes.OK]: false
68
81
  });
69
82
  }
70
83
  recordSubmitProof(durationMs, stats) {
@@ -79,15 +92,14 @@ export class ProverNodeMetrics {
79
92
  recordTx(durationMs, stats) {
80
93
  const attributes = {
81
94
  [Attributes.L1_TX_TYPE]: 'submitProof',
82
- [Attributes.L1_SENDER]: stats.sender,
95
+ [Attributes.L1_SENDER]: stats.sender
83
96
  };
84
97
  this.txCount.add(1, {
85
98
  ...attributes,
86
- [Attributes.OK]: true,
99
+ [Attributes.OK]: true
87
100
  });
88
101
  this.txDuration.record(Math.ceil(durationMs), attributes);
89
- this.txGas.record(
90
- // safe to downcast - total block limit is 30M gas which fits in a JS number
102
+ this.txGas.record(// safe to downcast - total block limit is 30M gas which fits in a JS number
91
103
  Number(stats.gasUsed), attributes);
92
104
  this.txCalldataGas.record(stats.calldataGas, attributes);
93
105
  this.txCalldataSize.record(stats.calldataSize, attributes);
@@ -95,10 +107,8 @@ export class ProverNodeMetrics {
95
107
  this.txBlobDataGasUsed.record(Number(stats.blobGasUsed), attributes);
96
108
  try {
97
109
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
98
- }
99
- catch (e) {
100
- // ignore
110
+ } catch (e) {
111
+ // ignore
101
112
  }
102
113
  }
103
114
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxVQUFVLEVBRVYsT0FBTyxFQUdQLFNBQVMsR0FDVixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkMsTUFBTSxPQUFPLGlCQUFpQjtJQWU1QixZQUE0QixNQUF1QixFQUFFLElBQUksR0FBRyxZQUFZO1FBQTVDLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFO1lBQ2hHLFdBQVcsRUFBRSxpREFBaUQ7WUFDOUQsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO1lBQ2hGLFdBQVcsRUFBRSx5QkFBeUI7WUFDdEMsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO1lBQzVFLFdBQVcsRUFBRSxvQ0FBb0M7WUFDakQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUN4RixXQUFXLEVBQUUsMENBQTBD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