@aztec/prover-node 0.0.0-test.0 → 0.0.1-commit.21caa21

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 (82) hide show
  1. package/dest/actions/download-epoch-proving-job.d.ts +18 -0
  2. package/dest/actions/download-epoch-proving-job.d.ts.map +1 -0
  3. package/dest/actions/download-epoch-proving-job.js +37 -0
  4. package/dest/actions/index.d.ts +3 -0
  5. package/dest/actions/index.d.ts.map +1 -0
  6. package/dest/actions/index.js +2 -0
  7. package/dest/actions/rerun-epoch-proving-job.d.ts +11 -0
  8. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -0
  9. package/dest/actions/rerun-epoch-proving-job.js +40 -0
  10. package/dest/actions/upload-epoch-proof-failure.d.ts +15 -0
  11. package/dest/actions/upload-epoch-proof-failure.d.ts.map +1 -0
  12. package/dest/actions/upload-epoch-proof-failure.js +78 -0
  13. package/dest/bin/run-failed-epoch.d.ts +2 -0
  14. package/dest/bin/run-failed-epoch.d.ts.map +1 -0
  15. package/dest/bin/run-failed-epoch.js +67 -0
  16. package/dest/config.d.ts +13 -10
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +81 -14
  19. package/dest/factory.d.ts +13 -9
  20. package/dest/factory.d.ts.map +1 -1
  21. package/dest/factory.js +95 -31
  22. package/dest/index.d.ts +2 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +1 -1
  25. package/dest/job/epoch-proving-job-data.d.ts +17 -0
  26. package/dest/job/epoch-proving-job-data.d.ts.map +1 -0
  27. package/dest/job/epoch-proving-job-data.js +53 -0
  28. package/dest/job/epoch-proving-job.d.ts +25 -17
  29. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  30. package/dest/job/epoch-proving-job.js +155 -51
  31. package/dest/metrics.d.ts +29 -5
  32. package/dest/metrics.d.ts.map +1 -1
  33. package/dest/metrics.js +141 -35
  34. package/dest/monitors/epoch-monitor.d.ts +5 -2
  35. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  36. package/dest/monitors/epoch-monitor.js +15 -2
  37. package/dest/monitors/index.d.ts +1 -1
  38. package/dest/prover-node-publisher.d.ts +10 -12
  39. package/dest/prover-node-publisher.d.ts.map +1 -1
  40. package/dest/prover-node-publisher.js +62 -62
  41. package/dest/prover-node.d.ts +48 -43
  42. package/dest/prover-node.d.ts.map +1 -1
  43. package/dest/prover-node.js +175 -105
  44. package/dest/prover-publisher-factory.d.ts +21 -0
  45. package/dest/prover-publisher-factory.d.ts.map +1 -0
  46. package/dest/prover-publisher-factory.js +26 -0
  47. package/dest/test/index.d.ts +5 -3
  48. package/dest/test/index.d.ts.map +1 -1
  49. package/dest/test/index.js +1 -3
  50. package/package.json +39 -33
  51. package/src/actions/download-epoch-proving-job.ts +44 -0
  52. package/src/actions/index.ts +2 -0
  53. package/src/actions/rerun-epoch-proving-job.ts +61 -0
  54. package/src/actions/upload-epoch-proof-failure.ts +88 -0
  55. package/src/bin/run-failed-epoch.ts +77 -0
  56. package/src/config.ts +108 -24
  57. package/src/factory.ts +163 -43
  58. package/src/index.ts +1 -1
  59. package/src/job/epoch-proving-job-data.ts +77 -0
  60. package/src/job/epoch-proving-job.ts +222 -52
  61. package/src/metrics.ts +135 -37
  62. package/src/monitors/epoch-monitor.ts +18 -6
  63. package/src/prover-node-publisher.ts +96 -88
  64. package/src/prover-node.ts +213 -136
  65. package/src/prover-publisher-factory.ts +37 -0
  66. package/src/test/index.ts +7 -4
  67. package/dest/http.d.ts +0 -8
  68. package/dest/http.d.ts.map +0 -1
  69. package/dest/http.js +0 -9
  70. package/dest/prover-coordination/config.d.ts +0 -7
  71. package/dest/prover-coordination/config.d.ts.map +0 -1
  72. package/dest/prover-coordination/config.js +0 -11
  73. package/dest/prover-coordination/factory.d.ts +0 -22
  74. package/dest/prover-coordination/factory.d.ts.map +0 -1
  75. package/dest/prover-coordination/factory.js +0 -42
  76. package/dest/prover-coordination/index.d.ts +0 -3
  77. package/dest/prover-coordination/index.d.ts.map +0 -1
  78. package/dest/prover-coordination/index.js +0 -2
  79. package/src/http.ts +0 -13
  80. package/src/prover-coordination/config.ts +0 -17
  81. package/src/prover-coordination/factory.ts +0 -72
  82. package/src/prover-coordination/index.ts +0 -2
@@ -4,57 +4,59 @@ function _ts_decorate(decorators, target, key, desc) {
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
+ import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
7
8
  import { asyncPool } from '@aztec/foundation/async-pool';
9
+ import { padArrayEnd } from '@aztec/foundation/collection';
10
+ import { Fr } from '@aztec/foundation/fields';
8
11
  import { createLogger } from '@aztec/foundation/log';
9
- import { promiseWithResolvers } from '@aztec/foundation/promise';
12
+ import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
10
13
  import { Timer } from '@aztec/foundation/timer';
14
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
16
+ import { buildFinalBlobChallenges } from '@aztec/prover-client/helpers';
17
+ import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
11
18
  import { EpochProvingJobTerminalState } from '@aztec/stdlib/interfaces/server';
19
+ import { CheckpointConstantData } from '@aztec/stdlib/rollup';
20
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
12
21
  import { Attributes, trackSpan } from '@aztec/telemetry-client';
13
22
  import * as crypto from 'node:crypto';
23
+ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
14
24
  /**
15
- * Job that grabs a range of blocks from the unfinalised chain from L1, gets their txs given their hashes,
25
+ * Job that grabs a range of blocks from the unfinalized chain from L1, gets their txs given their hashes,
16
26
  * re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
17
27
  * world state as part of public call execution via the public processor.
18
28
  */ export class EpochProvingJob {
29
+ data;
19
30
  dbProvider;
20
- epochNumber;
21
- blocks;
22
- txs;
23
31
  prover;
24
32
  publicProcessorFactory;
25
33
  publisher;
26
34
  l2BlockSource;
27
- l1ToL2MessageSource;
28
35
  metrics;
29
36
  deadline;
30
37
  config;
31
- cleanUp;
32
38
  state;
33
39
  log;
34
40
  uuid;
35
41
  runPromise;
42
+ epochCheckPromise;
36
43
  deadlineTimeoutHandler;
37
44
  tracer;
38
- constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, deadline, config = {
39
- parallelBlockLimit: 32
40
- }, cleanUp = ()=>Promise.resolve()){
45
+ constructor(data, dbProvider, prover, publicProcessorFactory, publisher, l2BlockSource, metrics, deadline, config){
46
+ this.data = data;
41
47
  this.dbProvider = dbProvider;
42
- this.epochNumber = epochNumber;
43
- this.blocks = blocks;
44
- this.txs = txs;
45
48
  this.prover = prover;
46
49
  this.publicProcessorFactory = publicProcessorFactory;
47
50
  this.publisher = publisher;
48
51
  this.l2BlockSource = l2BlockSource;
49
- this.l1ToL2MessageSource = l1ToL2MessageSource;
50
52
  this.metrics = metrics;
51
53
  this.deadline = deadline;
52
54
  this.config = config;
53
- this.cleanUp = cleanUp;
54
55
  this.state = 'initialized';
55
56
  this.log = createLogger('prover-node:epoch-proving-job');
57
+ validateEpochProvingJobData(data);
56
58
  this.uuid = crypto.randomUUID();
57
- this.tracer = metrics.client.getTracer('EpochProvingJob');
59
+ this.tracer = metrics.tracer;
58
60
  }
59
61
  getId() {
60
62
  return this.uuid;
@@ -63,13 +65,35 @@ import * as crypto from 'node:crypto';
63
65
  return this.state;
64
66
  }
65
67
  getEpochNumber() {
66
- return this.epochNumber;
68
+ return this.data.epochNumber;
69
+ }
70
+ getDeadline() {
71
+ return this.deadline;
72
+ }
73
+ getProvingData() {
74
+ return this.data;
75
+ }
76
+ get epochNumber() {
77
+ return this.data.epochNumber;
78
+ }
79
+ get blocks() {
80
+ return this.data.blocks;
81
+ }
82
+ get txs() {
83
+ return this.data.txs;
84
+ }
85
+ get attestations() {
86
+ return this.data.attestations;
67
87
  }
68
88
  /**
69
89
  * Proves the given epoch and submits the proof to L1.
70
90
  */ async run() {
71
91
  this.scheduleDeadlineStop();
72
- const epochNumber = Number(this.epochNumber);
92
+ if (!this.config.skipEpochCheck) {
93
+ await this.scheduleEpochCheck();
94
+ }
95
+ const attestations = this.attestations.map((attestation)=>attestation.toViem());
96
+ const epochNumber = this.epochNumber;
73
97
  const epochSizeBlocks = this.blocks.length;
74
98
  const epochSizeTxs = this.blocks.reduce((total, current)=>total + current.body.txEffects.length, 0);
75
99
  const [fromBlock, toBlock] = [
@@ -88,14 +112,19 @@ import * as crypto from 'node:crypto';
88
112
  const { promise, resolve } = promiseWithResolvers();
89
113
  this.runPromise = promise;
90
114
  try {
91
- this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
92
- await this.prover.startTubeCircuits(this.txs);
93
- await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block)=>{
115
+ const blobFieldsPerCheckpoint = this.blocks.map((block)=>block.getCheckpointBlobFields());
116
+ const finalBlobBatchingChallenges = await buildFinalBlobChallenges(blobFieldsPerCheckpoint);
117
+ // TODO(#17027): Enable multiple blocks per checkpoint.
118
+ // Total number of checkpoints equals number of blocks because we currently build a checkpoint with only one block.
119
+ const totalNumCheckpoints = epochSizeBlocks;
120
+ this.prover.startNewEpoch(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges);
121
+ await this.prover.startChonkVerifierCircuits(Array.from(this.txs.values()));
122
+ await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async (block)=>{
94
123
  this.checkState();
95
124
  const globalVariables = block.header.globalVariables;
96
- const txs = await this.getTxs(block);
97
- const l1ToL2Messages = await this.getL1ToL2Messages(block);
98
- const previousHeader = await this.getBlockHeader(block.number - 1);
125
+ const txs = this.getTxs(block);
126
+ const l1ToL2Messages = this.getL1ToL2Messages(block);
127
+ const previousHeader = this.getBlockHeader(block.number - 1);
99
128
  this.log.verbose(`Starting processing block ${block.number}`, {
100
129
  number: block.number,
101
130
  blockHash: (await block.hash()).toString(),
@@ -107,11 +136,35 @@ import * as crypto from 'node:crypto';
107
136
  uuid: this.uuid,
108
137
  ...globalVariables
109
138
  });
139
+ const checkpointConstants = CheckpointConstantData.from({
140
+ chainId: globalVariables.chainId,
141
+ version: globalVariables.version,
142
+ vkTreeRoot: getVKTreeRoot(),
143
+ protocolContractsHash: protocolContractsHash,
144
+ proverId: this.prover.getProverId().toField(),
145
+ slotNumber: globalVariables.slotNumber,
146
+ coinbase: globalVariables.coinbase,
147
+ feeRecipient: globalVariables.feeRecipient,
148
+ gasFees: globalVariables.gasFees
149
+ });
150
+ // TODO(#17027): Enable multiple blocks per checkpoint.
151
+ // Each checkpoint has only one block.
152
+ const totalNumBlocks = 1;
153
+ const checkpointIndex = block.number - fromBlock;
154
+ await this.prover.startNewCheckpoint(checkpointIndex, checkpointConstants, l1ToL2Messages, totalNumBlocks, previousHeader);
110
155
  // Start block proving
111
- await this.prover.startNewBlock(globalVariables, l1ToL2Messages, previousHeader);
156
+ await this.prover.startNewBlock(block.number, globalVariables.timestamp, txs.length);
112
157
  // Process public fns
113
- const db = await this.dbProvider.fork(block.number - 1);
114
- const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
158
+ const db = await this.createFork(block.number - 1, l1ToL2Messages);
159
+ const config = PublicSimulatorConfig.from({
160
+ proverId: this.prover.getProverId().toField(),
161
+ skipFeeEnforcement: false,
162
+ collectDebugLogs: false,
163
+ collectHints: true,
164
+ maxDebugLogMemoryReads: 0,
165
+ collectStatistics: false
166
+ });
167
+ const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, config);
115
168
  const processed = await this.processTxs(publicProcessor, txs);
116
169
  await this.prover.addTxs(processed);
117
170
  await db.close();
@@ -121,23 +174,32 @@ import * as crypto from 'node:crypto';
121
174
  uuid: this.uuid
122
175
  });
123
176
  // Mark block as completed to pad it
124
- await this.prover.setBlockCompleted(block.number, block.header);
177
+ const expectedBlockHeader = block.getBlockHeader();
178
+ await this.prover.setBlockCompleted(block.number, expectedBlockHeader);
125
179
  });
126
180
  const executionTime = timer.ms();
127
181
  this.progressState('awaiting-prover');
128
- const { publicInputs, proof } = await this.prover.finaliseEpoch();
129
- this.log.info(`Finalised proof for epoch ${epochNumber}`, {
182
+ const { publicInputs, proof, batchedBlobInputs } = await this.prover.finalizeEpoch();
183
+ this.log.info(`Finalized proof for epoch ${epochNumber}`, {
130
184
  epochNumber,
131
185
  uuid: this.uuid,
132
186
  duration: timer.ms()
133
187
  });
134
188
  this.progressState('publishing-proof');
189
+ if (this.config.skipSubmitProof) {
190
+ this.log.info(`Proof publishing is disabled. Dropping valid proof for epoch ${epochNumber} (blocks ${fromBlock} to ${toBlock})`);
191
+ this.state = 'completed';
192
+ this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
193
+ return;
194
+ }
135
195
  const success = await this.publisher.submitEpochProof({
136
196
  fromBlock,
137
197
  toBlock,
138
198
  epochNumber,
139
199
  publicInputs,
140
- proof
200
+ proof,
201
+ batchedBlobInputs,
202
+ attestations
141
203
  });
142
204
  if (!success) {
143
205
  throw new Error('Failed to submit epoch proof to L1');
@@ -152,7 +214,8 @@ import * as crypto from 'node:crypto';
152
214
  if (err && err.name === 'HaltExecutionError') {
153
215
  this.log.warn(`Halted execution of epoch ${epochNumber} prover job`, {
154
216
  uuid: this.uuid,
155
- epochNumber
217
+ epochNumber,
218
+ details: err.message
156
219
  });
157
220
  return;
158
221
  }
@@ -160,27 +223,41 @@ import * as crypto from 'node:crypto';
160
223
  uuid: this.uuid,
161
224
  epochNumber
162
225
  });
163
- this.state = 'failed';
226
+ if (this.state === 'processing' || this.state === 'awaiting-prover' || this.state === 'publishing-proof') {
227
+ this.state = 'failed';
228
+ }
164
229
  } finally{
165
230
  clearTimeout(this.deadlineTimeoutHandler);
166
- await this.cleanUp(this);
231
+ await this.epochCheckPromise?.stop();
167
232
  await this.prover.stop();
168
233
  resolve();
169
234
  }
170
235
  }
236
+ /**
237
+ * Create a new db fork for tx processing, inserting all L1 to L2.
238
+ * REFACTOR: The prover already spawns a db fork of its own for each block, so we may be able to do away with just one fork.
239
+ */ async createFork(blockNumber, l1ToL2Messages) {
240
+ const db = await this.dbProvider.fork(blockNumber);
241
+ const l1ToL2MessagesPadded = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 'Too many L1 to L2 messages');
242
+ this.log.verbose(`Creating fork at ${blockNumber} with ${l1ToL2Messages.length} L1 to L2 messages`, {
243
+ blockNumber,
244
+ l1ToL2Messages: l1ToL2Messages.map((m)=>m.toString())
245
+ });
246
+ await db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded);
247
+ return db;
248
+ }
171
249
  progressState(state) {
172
250
  this.checkState();
173
251
  this.state = state;
174
252
  }
175
253
  checkState() {
176
- if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed') {
254
+ if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed' || this.state === 'reorg') {
177
255
  throw new HaltExecutionError(this.state);
178
256
  }
179
257
  }
180
258
  async stop(state = 'stopped') {
181
259
  this.state = state;
182
260
  this.prover.cancel();
183
- // TODO(palla/prover): Stop the publisher as well
184
261
  if (this.runPromise) {
185
262
  await this.runPromise;
186
263
  }
@@ -209,22 +286,47 @@ import * as crypto from 'node:crypto';
209
286
  }, timeout);
210
287
  }
211
288
  }
212
- /* Returns the header for the given block number, or the genesis block for block zero. */ async getBlockHeader(blockNumber) {
213
- if (blockNumber === 0) {
214
- return (await this.dbProvider.fork()).getInitialHeader();
289
+ /**
290
+ * Kicks off a running promise that queries the archiver for the set of L2 blocks of the current epoch.
291
+ * If those change, stops the proving job with a `rerun` state, so the node re-enqueues it.
292
+ */ async scheduleEpochCheck() {
293
+ const l2BlockSource = this.l2BlockSource;
294
+ if (!l2BlockSource) {
295
+ this.log.warn(`No L2 block source available, skipping epoch check`);
296
+ return;
215
297
  }
216
- return this.l2BlockSource.getBlockHeader(blockNumber);
298
+ const intervalMs = Math.ceil((await l2BlockSource.getL1Constants()).ethereumSlotDuration / 2) * 1000;
299
+ this.epochCheckPromise = new RunningPromise(async ()=>{
300
+ const blocks = await l2BlockSource.getBlockHeadersForEpoch(this.epochNumber);
301
+ const blockHashes = await Promise.all(blocks.map((block)=>block.hash()));
302
+ const thisBlockHashes = await Promise.all(this.blocks.map((block)=>block.hash()));
303
+ if (blocks.length !== this.blocks.length || !blockHashes.every((block, i)=>block.equals(thisBlockHashes[i]))) {
304
+ this.log.warn('Epoch blocks changed underfoot', {
305
+ uuid: this.uuid,
306
+ epochNumber: this.epochNumber,
307
+ oldBlockHashes: thisBlockHashes,
308
+ newBlockHashes: blockHashes
309
+ });
310
+ void this.stop('reorg');
311
+ }
312
+ }, this.log, intervalMs).start();
313
+ this.log.verbose(`Scheduled epoch check for epoch ${this.epochNumber} every ${intervalMs}ms`);
217
314
  }
218
- async getTxs(block) {
219
- const txHashes = block.body.txEffects.map((tx)=>tx.txHash.toBigInt());
220
- const txsAndHashes = await Promise.all(this.txs.map(async (tx)=>({
221
- tx,
222
- hash: await tx.getTxHash()
223
- })));
224
- return txsAndHashes.filter((txAndHash)=>txHashes.includes(txAndHash.hash.toBigInt())).map((txAndHash)=>txAndHash.tx);
315
+ /* Returns the header for the given block number based on the epoch proving job data. */ getBlockHeader(blockNumber) {
316
+ const block = this.blocks.find((b)=>b.number === blockNumber);
317
+ if (block) {
318
+ return block.getBlockHeader();
319
+ }
320
+ if (blockNumber === Number(this.data.previousBlockHeader.getBlockNumber())) {
321
+ return this.data.previousBlockHeader;
322
+ }
323
+ throw new Error(`Block header not found for block number ${blockNumber} (got ${this.blocks.map((b)=>b.number).join(', ')} and previous header ${this.data.previousBlockHeader.getBlockNumber()})`);
324
+ }
325
+ getTxs(block) {
326
+ return block.body.txEffects.map((txEffect)=>this.txs.get(txEffect.txHash.toString()));
225
327
  }
226
328
  getL1ToL2Messages(block) {
227
- return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
329
+ return this.data.l1ToL2Messages[block.number];
228
330
  }
229
331
  async processTxs(publicProcessor, txs) {
230
332
  const { deadline } = this;
@@ -232,7 +334,8 @@ import * as crypto from 'node:crypto';
232
334
  deadline
233
335
  });
234
336
  if (failedTxs.length) {
235
- throw new Error(`Txs failed processing: ${failedTxs.map(({ tx, error })=>`${tx.getTxHash()} (${error})`).join(', ')}`);
337
+ const failedTxHashes = await Promise.all(failedTxs.map(({ tx })=>tx.getTxHash()));
338
+ throw new Error(`Txs failed processing: ${failedTxs.map(({ error }, index)=>`${failedTxHashes[index]} (${error})`).join(', ')}`);
236
339
  }
237
340
  if (processedTxs.length !== txs.length) {
238
341
  throw new Error(`Failed to process all txs: processed ${processedTxs.length} out of ${txs.length}`);
@@ -243,13 +346,14 @@ import * as crypto from 'node:crypto';
243
346
  _ts_decorate([
244
347
  trackSpan('EpochProvingJob.run', function() {
245
348
  return {
246
- [Attributes.EPOCH_NUMBER]: Number(this.epochNumber)
349
+ [Attributes.EPOCH_NUMBER]: this.data.epochNumber
247
350
  };
248
351
  })
249
352
  ], EpochProvingJob.prototype, "run", null);
250
353
  class HaltExecutionError extends Error {
354
+ state;
251
355
  constructor(state){
252
- super(`Halted execution due to state ${state}`);
356
+ super(`Halted execution due to state ${state}`), this.state = state;
253
357
  this.name = 'HaltExecutionError';
254
358
  }
255
359
  }
package/dest/metrics.d.ts CHANGED
@@ -1,12 +1,35 @@
1
+ import type { RollupContract } from '@aztec/ethereum';
2
+ import type { EthAddress } from '@aztec/foundation/eth-address';
1
3
  import type { L1PublishProofStats } from '@aztec/stdlib/stats';
2
- import { type Gauge, type Histogram, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
3
- export declare class ProverNodeMetrics {
4
- readonly client: TelemetryClient;
4
+ import { type Gauge, type Histogram, type Meter, type TelemetryClient, type Tracer, type UpDownCounter } from '@aztec/telemetry-client';
5
+ export declare class ProverNodeJobMetrics {
6
+ private meter;
7
+ readonly tracer: Tracer;
5
8
  private logger;
6
9
  proverEpochExecutionDuration: Histogram;
7
10
  provingJobDuration: Histogram;
8
11
  provingJobBlocks: Gauge;
9
12
  provingJobTransactions: Gauge;
13
+ constructor(meter: Meter, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
14
+ recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
15
+ }
16
+ export declare class ProverNodeRewardsMetrics {
17
+ private meter;
18
+ private coinbase;
19
+ private rollup;
20
+ private logger;
21
+ private rewards;
22
+ private accumulatedRewards;
23
+ private prevEpoch;
24
+ private proofSubmissionEpochs;
25
+ constructor(meter: Meter, coinbase: EthAddress, rollup: RollupContract, logger?: import("@aztec/foundation/log").Logger);
26
+ start(): Promise<void>;
27
+ stop(): void;
28
+ private observe;
29
+ }
30
+ export declare class ProverNodePublisherMetrics {
31
+ readonly client: TelemetryClient;
32
+ private logger;
10
33
  gasPrice: Histogram;
11
34
  txCount: UpDownCounter;
12
35
  txDuration: Histogram;
@@ -15,12 +38,13 @@ export declare class ProverNodeMetrics {
15
38
  txCalldataGas: Histogram;
16
39
  txBlobDataGasUsed: Histogram;
17
40
  txBlobDataGasCost: Histogram;
41
+ txTotalFee: Histogram;
18
42
  private senderBalance;
43
+ private meter;
19
44
  constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/foundation/log").Logger);
20
45
  recordFailedTx(): void;
21
46
  recordSubmitProof(durationMs: number, stats: L1PublishProofStats): void;
22
- recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
23
47
  recordSenderBalance(wei: bigint, senderAddress: string): void;
24
48
  private recordTx;
25
49
  }
26
- //# sourceMappingURL=metrics.d.ts.map
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxxQkFBYSxvQkFBb0I7SUFPN0IsT0FBTyxDQUFDLEtBQUs7YUFDRyxNQUFNLEVBQUUsTUFBTTtJQUM5QixPQUFPLENBQUMsTUFBTTtJQVJoQiw0QkFBNEIsRUFBRSxTQUFTLENBQUM7SUFDeEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQzlCLGdCQUFnQixFQUFFLEtBQUssQ0FBQztJQUN4QixzQkFBc0IsRUFBRSxLQUFLLENBQUM7SUFFOUIsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNKLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLE1BQU0seUNBQWdELEVBb0IvRDtJQUVNLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBS3RHO0NBQ0Y7QUFFRCxxQkFBYSx3QkFBd0I7SUFPakMsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxNQUFNO0lBVGhCLE9BQU8sQ0FBQyxPQUFPLENBQWtCO0lBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBTztJQUN4QixPQUFPLENBQUMscUJBQXFCLENBQUs7SUFFbEMsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLE1BQU0seUNBQWdELEVBVy9EO0lBRVksS0FBSyxrQkFJakI7SUFFTSxJQUFJLFNBRVY7SUFFRCxPQUFPLENBQUMsT0FBTyxDQXdCYjtDQUNIO0FBRUQscUJBQWEsMEJBQTBCO2FBZW5CLE1BQU0sRUFBRSxlQUFlO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBaEJoQixRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdkIsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDMUIsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixpQkFBaUIsRUFBRSxTQUFTLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQzdCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFFdEIsT0FBTyxDQUFDLGFBQWEsQ0FBUTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFRO0lBRXJCLFlBQ2tCLE1BQU0sRUFBRSxlQUFlLEVBQ3ZDLElBQUksU0FBZSxFQUNYLE1BQU0seUNBQWdELEVBa0UvRDtJQUVELGNBQWMsU0FLYjtJQUVELGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixRQUUvRDtJQUVNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFLNUQ7SUFFRCxPQUFPLENBQUMsUUFBUTtDQXVDakIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,iBAAiB;aAkBV,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IAnBhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,SAAS,CAAC;IAE7B,OAAO,CAAC,aAAa,CAAQ;gBAGX,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD;IA2EhE,cAAc;IAOd,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;IAIzD,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOhG,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO7D,OAAO,CAAC,QAAQ;CA6BjB"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAGV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IARhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,YACU,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD,EAoB/D;IAEM,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAKtG;CACF;AAED,qBAAa,wBAAwB;IAOjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACU,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,yCAAgD,EAW/D;IAEY,KAAK,kBAIjB;IAEM,IAAI,SAEV;IAED,OAAO,CAAC,OAAO,CAwBb;CACH;AAED,qBAAa,0BAA0B;aAenB,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IAhBhB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,SAAS,CAAC;IAEtB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAQ;IAErB,YACkB,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD,EAkE/D;IAED,cAAc,SAKb;IAED,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,QAE/D;IAEM,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAK5D;IAED,OAAO,CAAC,QAAQ;CAuCjB"}