@aztec/prover-node 0.86.0-starknet.1 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"rerun-epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/actions/rerun-epoch-proving-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,6BAA6B,CAAC;AAW9F;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,+IAoClE"}
1
+ {"version":3,"file":"rerun-epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/actions/rerun-epoch-proving-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,6BAA6B,CAAC;AAW9F;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,+IAqClE"}
@@ -30,7 +30,9 @@ import { ProverNodeJobMetrics } from '../metrics.js';
30
30
  // this out for a live proving broker with multiple agents that we can connect to.
31
31
  const broker = await createAndStartProvingBroker(config, telemetry);
32
32
  const prover = await createProverClient(config, worldState, broker, telemetry);
33
- const provingJob = new EpochProvingJob(jobData, worldState, prover.createEpochProver(), publicProcessorFactory, publisher, l2BlockSourceForReorgDetection, metrics, deadline);
33
+ const provingJob = new EpochProvingJob(jobData, worldState, prover.createEpochProver(), publicProcessorFactory, publisher, l2BlockSourceForReorgDetection, metrics, deadline, {
34
+ skipEpochCheck: true
35
+ });
34
36
  log.info(`Rerunning epoch proving job for epoch ${jobData.epochNumber}`);
35
37
  await provingJob.run();
36
38
  log.info(`Completed job for epoch ${jobData.epochNumber} with status ${provingJob.getState()}`);
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { Fr } from '@aztec/foundation/fields';
4
2
  import { L2Block } from '@aztec/stdlib/block';
5
3
  import { BlockHeader, Tx } from '@aztec/stdlib/tx';
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,GAAG,EAAE,EAAE,EAAE,CAAC;IACV,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;CAClC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,QAcpE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAmB9E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAgB/E"}
1
+ {"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,GAAG,EAAE,EAAE,EAAE,CAAC;IACV,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;CAClC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,QAcpE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAmB9E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAgB/E"}
@@ -27,8 +27,9 @@ export declare class EpochProvingJob implements Traceable {
27
27
  private epochCheckPromise;
28
28
  private deadlineTimeoutHandler;
29
29
  readonly tracer: Tracer;
30
- constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config?: {
31
- parallelBlockLimit: number;
30
+ constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: {
31
+ parallelBlockLimit?: number;
32
+ skipEpochCheck?: boolean;
32
33
  });
33
34
  getId(): string;
34
35
  getState(): EpochProvingJobState;
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,GAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAA+B;IAOtE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED;;OAEG;IAIU,GAAG;IAqGhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;YAiBR,MAAM;IAQpB,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED;;OAEG;IAIU,GAAG;IAuGhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;YAiBR,MAAM;IAQpB,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
@@ -33,9 +33,7 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
33
33
  epochCheckPromise;
34
34
  deadlineTimeoutHandler;
35
35
  tracer;
36
- constructor(data, dbProvider, prover, publicProcessorFactory, publisher, l2BlockSource, metrics, deadline, config = {
37
- parallelBlockLimit: 32
38
- }){
36
+ constructor(data, dbProvider, prover, publicProcessorFactory, publisher, l2BlockSource, metrics, deadline, config){
39
37
  this.data = data;
40
38
  this.dbProvider = dbProvider;
41
39
  this.prover = prover;
@@ -79,7 +77,9 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
79
77
  * Proves the given epoch and submits the proof to L1.
80
78
  */ async run() {
81
79
  this.scheduleDeadlineStop();
82
- await this.scheduleEpochCheck();
80
+ if (!this.config.skipEpochCheck) {
81
+ await this.scheduleEpochCheck();
82
+ }
83
83
  const epochNumber = Number(this.epochNumber);
84
84
  const epochSizeBlocks = this.blocks.length;
85
85
  const epochSizeTxs = this.blocks.reduce((total, current)=>total + current.body.txEffects.length, 0);
@@ -101,7 +101,7 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
101
101
  try {
102
102
  this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
103
103
  await this.prover.startTubeCircuits(this.txs);
104
- await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block)=>{
104
+ await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async (block)=>{
105
105
  this.checkState();
106
106
  const globalVariables = block.header.globalVariables;
107
107
  const txs = await this.getTxs(block);
package/dest/metrics.js CHANGED
@@ -217,7 +217,7 @@ export class ProverNodePublisherMetrics {
217
217
  this.txBlobDataGasUsed.record(Number(stats.blobGasUsed), attributes);
218
218
  try {
219
219
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
220
- } catch (e) {
220
+ } catch {
221
221
  // ignore
222
222
  }
223
223
  const executionFee = stats.gasUsed * stats.gasPrice;
@@ -225,7 +225,7 @@ export class ProverNodePublisherMetrics {
225
225
  const totalFee = executionFee + blobFee;
226
226
  try {
227
227
  this.txTotalFee.record(parseFloat(formatEther(totalFee)));
228
- } catch (e) {
228
+ } catch {
229
229
  // ignore
230
230
  }
231
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"combined-prover-coordination.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/combined-prover-coordination.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,2BAA2B,GAAG;IAExC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AASF,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAsCD,qBAAa,0BAA2B,YAAW,kBAAkB;;aAEjD,GAAG,EAAE,GAAG,GAAG,SAAS;aACpB,UAAU,EAAE,QAAQ,EAAE;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAIxB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBANJ,GAAG,EAAE,GAAG,GAAG,SAAS,EACpB,UAAU,EAAE,QAAQ,EAAE,EACrB,OAAO,GAAE,2BAGzB,EACgB,GAAG,yCAA2D;IAG1E,YAAY,IAAI,SAAS,GAAG,SAAS;IAI/B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAY/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyE1D"}
1
+ {"version":3,"file":"combined-prover-coordination.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/combined-prover-coordination.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,2BAA2B,GAAG;IAExC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AASF,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAsCD,qBAAa,0BAA2B,YAAW,kBAAkB;;aAEjD,GAAG,EAAE,GAAG,GAAG,SAAS;aACpB,UAAU,EAAE,QAAQ,EAAE;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAIxB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBANJ,GAAG,EAAE,GAAG,GAAG,SAAS,EACpB,UAAU,EAAE,QAAQ,EAAE,EACrB,OAAO,GAAE,2BAGzB,EACgB,GAAG,yCAA2D;IAG1E,YAAY,IAAI,SAAS,GAAG,SAAS;IAI/B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAY/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA4E1D"}
@@ -90,13 +90,16 @@ export class CombinedProverCoordination {
90
90
  const foundFromP2P = await pool.getTxsByHash([
91
91
  ...txsToFind
92
92
  ].map((tx)=>TxHash.fromString(tx)));
93
+ // TODO(!!): test for this
94
+ // getTxsByHash returns undefined for transactions that are not found, so it must be filtered to find the true length
95
+ const foundFromP2PLength = foundFromP2P.filter((tx)=>!!tx).length;
93
96
  const numFoundFromNodes = originalToFind - toFindFromP2P;
94
- const numNotFound = toFindFromP2P - foundFromP2P.length;
97
+ const numNotFound = toFindFromP2P - foundFromP2PLength;
95
98
  if (numNotFound === 0) {
96
- this.log.info(`Found all ${originalToFind} txs. ${numFoundFromNodes} from nodes, ${foundFromP2P.length} from p2p`);
99
+ this.log.info(`Found all ${originalToFind} txs. ${numFoundFromNodes} from nodes, ${foundFromP2PLength} from p2p`);
97
100
  return;
98
101
  }
99
- this.log.warn(`Failed to find ${numNotFound} txs from any source. Found ${foundFromP2P.length} from p2p and ${numFoundFromNodes} from nodes`);
102
+ this.log.warn(`Failed to find ${numNotFound} txs from any source. Found ${foundFromP2PLength} from p2p and ${numFoundFromNodes} from nodes`);
100
103
  }
101
104
  async #gatherTxsFromAllNodes(txsToFind, pool) {
102
105
  if (txsToFind.size === 0 || this.aztecNodes.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGlG,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,mCAAmC,CAAC;AAG3C,KAAK,sBAAsB,GAAG;IAC5B,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA4C7B"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIlG,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,mCAAmC,CAAC;AAG3C,KAAK,sBAAsB,GAAG;IAC5B,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA6C7B"}
@@ -5,6 +5,7 @@ import { createP2PClient } from '@aztec/p2p';
5
5
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
6
6
  import { createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
7
7
  import { P2PClientType } from '@aztec/stdlib/p2p';
8
+ import { getPackageVersion } from '@aztec/stdlib/update-checker';
8
9
  import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
9
10
  import { makeTracedFetch } from '@aztec/telemetry-client';
10
11
  import { CombinedProverCoordination } from './combined-prover-coordination.js';
@@ -45,7 +46,7 @@ import { CombinedProverCoordination } from './combined-prover-coordination.js';
45
46
  });
46
47
  }
47
48
  const proofVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier();
48
- const p2pClient = await createP2PClient(P2PClientType.Prover, config, deps.archiver, proofVerifier, deps.worldStateSynchronizer, deps.epochCache, deps.telemetry);
49
+ const p2pClient = await createP2PClient(P2PClientType.Prover, config, deps.archiver, proofVerifier, deps.worldStateSynchronizer, deps.epochCache, getPackageVersion() ?? '', deps.telemetry);
49
50
  await p2pClient.start();
50
51
  return new CombinedProverCoordination(p2pClient, nodes, coordinationConfig);
51
52
  }
@@ -1,5 +1,4 @@
1
1
  import type { Fr } from '@aztec/foundation/fields';
2
- import type { Maybe } from '@aztec/foundation/types';
3
2
  import type { DataStoreConfig } from '@aztec/kv-store/config';
4
3
  import { PublicProcessorFactory } from '@aztec/simulator/server';
5
4
  import type { L2BlockSource } from '@aztec/stdlib/block';
@@ -23,11 +22,11 @@ type DataStoreOptions = Pick<DataStoreConfig, 'dataDirectory'> & Pick<ChainConfi
23
22
  export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable {
24
23
  protected readonly prover: EpochProverManager;
25
24
  protected readonly publisher: ProverNodePublisher;
26
- protected readonly l2BlockSource: L2BlockSource & Maybe<Service>;
25
+ protected readonly l2BlockSource: L2BlockSource & Partial<Service>;
27
26
  protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
28
27
  protected readonly contractDataSource: ContractDataSource;
29
28
  protected readonly worldState: WorldStateSynchronizer;
30
- protected readonly coordination: ProverCoordination;
29
+ protected readonly coordination: ProverCoordination & Partial<Service>;
31
30
  protected readonly epochsMonitor: EpochMonitor;
32
31
  protected readonly telemetryClient: TelemetryClient;
33
32
  private log;
@@ -40,7 +39,7 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
40
39
  private txFetcher;
41
40
  private lastBlockNumber;
42
41
  readonly tracer: Tracer;
43
- constructor(prover: EpochProverManager, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource & Maybe<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, coordination: ProverCoordination, epochsMonitor: EpochMonitor, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient);
42
+ constructor(prover: EpochProverManager, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, coordination: ProverCoordination & Partial<Service>, epochsMonitor: EpochMonitor, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient);
44
43
  getProverId(): Fr;
45
44
  getP2P(): import("@aztec/stdlib/interfaces/server").P2PClient | undefined;
46
45
  /**
@@ -95,7 +94,9 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
95
94
  private gatherMessages;
96
95
  private gatherPreviousBlockHeader;
97
96
  /** Extracted for testing purposes. */
98
- protected doCreateEpochProvingJob(data: EpochProvingJobData, deadline: Date | undefined, publicProcessorFactory: PublicProcessorFactory): EpochProvingJob;
97
+ protected doCreateEpochProvingJob(data: EpochProvingJobData, deadline: Date | undefined, publicProcessorFactory: PublicProcessorFactory, opts?: {
98
+ skipEpochCheck?: boolean;
99
+ }): EpochProvingJob;
99
100
  /** Extracted for testing purposes. */
100
101
  protected triggerMonitors(): Promise<void>;
101
102
  private validateConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
@@ -144,7 +144,9 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
144
144
  /**
145
145
  * Starts a proving process and returns immediately.
146
146
  */ async startProof(epochNumber) {
147
- const job = await this.createProvingJob(BigInt(epochNumber));
147
+ const job = await this.createProvingJob(BigInt(epochNumber), {
148
+ skipEpochCheck: true
149
+ });
148
150
  void this.runJob(job);
149
151
  }
150
152
  async runJob(job) {
@@ -203,7 +205,7 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
203
205
  throw new Error(`Maximum pending proving jobs ${maxPendingJobs} reached. Cannot create new job.`);
204
206
  }
205
207
  }
206
- async createProvingJob(epochNumber) {
208
+ async createProvingJob(epochNumber, opts = {}) {
207
209
  this.checkMaximumPendingJobs();
208
210
  // Gather all data for this epoch
209
211
  const epochData = await this.gatherEpochData(epochNumber);
@@ -217,7 +219,7 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
217
219
  // Set deadline for this job to run. It will abort if it takes too long.
218
220
  const deadlineTs = getProofSubmissionDeadlineTimestamp(epochNumber, await this.getL1Constants());
219
221
  const deadline = new Date(Number(deadlineTs) * 1000);
220
- const job = this.doCreateEpochProvingJob(epochData, deadline, publicProcessorFactory);
222
+ const job = this.doCreateEpochProvingJob(epochData, deadline, publicProcessorFactory, opts);
221
223
  this.jobs.set(job.getId(), job);
222
224
  return job;
223
225
  }
@@ -291,10 +293,11 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
291
293
  this.log.verbose(`Gathered previous block header ${header.getBlockNumber()} for epoch ${epochNumber}`);
292
294
  return header;
293
295
  }
294
- /** Extracted for testing purposes. */ doCreateEpochProvingJob(data, deadline, publicProcessorFactory) {
296
+ /** Extracted for testing purposes. */ doCreateEpochProvingJob(data, deadline, publicProcessorFactory, opts = {}) {
295
297
  const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit } = this.config;
296
298
  return new EpochProvingJob(data, this.worldState, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.jobMetrics, deadline, {
297
- parallelBlockLimit
299
+ parallelBlockLimit,
300
+ ...opts
298
301
  });
299
302
  }
300
303
  /** Extracted for testing purposes. */ async triggerMonitors() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/prover-node",
3
- "version": "0.86.0-starknet.1",
3
+ "version": "0.87.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -52,25 +52,25 @@
52
52
  ]
53
53
  },
54
54
  "dependencies": {
55
- "@aztec/archiver": "0.86.0-starknet.1",
56
- "@aztec/bb-prover": "0.86.0-starknet.1",
57
- "@aztec/blob-sink": "0.86.0-starknet.1",
58
- "@aztec/constants": "0.86.0-starknet.1",
59
- "@aztec/epoch-cache": "0.86.0-starknet.1",
60
- "@aztec/ethereum": "0.86.0-starknet.1",
61
- "@aztec/foundation": "0.86.0-starknet.1",
62
- "@aztec/kv-store": "0.86.0-starknet.1",
63
- "@aztec/l1-artifacts": "0.86.0-starknet.1",
64
- "@aztec/node-lib": "0.86.0-starknet.1",
65
- "@aztec/noir-protocol-circuits-types": "0.86.0-starknet.1",
66
- "@aztec/p2p": "0.86.0-starknet.1",
67
- "@aztec/protocol-contracts": "0.86.0-starknet.1",
68
- "@aztec/prover-client": "0.86.0-starknet.1",
69
- "@aztec/sequencer-client": "0.86.0-starknet.1",
70
- "@aztec/simulator": "0.86.0-starknet.1",
71
- "@aztec/stdlib": "0.86.0-starknet.1",
72
- "@aztec/telemetry-client": "0.86.0-starknet.1",
73
- "@aztec/world-state": "0.86.0-starknet.1",
55
+ "@aztec/archiver": "0.87.0",
56
+ "@aztec/bb-prover": "0.87.0",
57
+ "@aztec/blob-sink": "0.87.0",
58
+ "@aztec/constants": "0.87.0",
59
+ "@aztec/epoch-cache": "0.87.0",
60
+ "@aztec/ethereum": "0.87.0",
61
+ "@aztec/foundation": "0.87.0",
62
+ "@aztec/kv-store": "0.87.0",
63
+ "@aztec/l1-artifacts": "0.87.0",
64
+ "@aztec/node-lib": "0.87.0",
65
+ "@aztec/noir-protocol-circuits-types": "0.87.0",
66
+ "@aztec/p2p": "0.87.0",
67
+ "@aztec/protocol-contracts": "0.87.0",
68
+ "@aztec/prover-client": "0.87.0",
69
+ "@aztec/sequencer-client": "0.87.0",
70
+ "@aztec/simulator": "0.87.0",
71
+ "@aztec/stdlib": "0.87.0",
72
+ "@aztec/telemetry-client": "0.87.0",
73
+ "@aztec/world-state": "0.87.0",
74
74
  "source-map-support": "^0.5.21",
75
75
  "tslib": "^2.4.0",
76
76
  "viem": "2.23.7"
@@ -78,12 +78,12 @@
78
78
  "devDependencies": {
79
79
  "@jest/globals": "^29.5.0",
80
80
  "@types/jest": "^29.5.0",
81
- "@types/node": "^18.7.23",
81
+ "@types/node": "^22.15.17",
82
82
  "@types/source-map-support": "^0.5.10",
83
83
  "jest": "^29.5.0",
84
84
  "jest-mock-extended": "^3.0.3",
85
85
  "ts-node": "^10.9.1",
86
- "typescript": "^5.0.4"
86
+ "typescript": "^5.3.3"
87
87
  },
88
88
  "files": [
89
89
  "dest",
@@ -92,6 +92,6 @@
92
92
  ],
93
93
  "types": "./dest/index.d.ts",
94
94
  "engines": {
95
- "node": ">=18"
95
+ "node": ">=20.10"
96
96
  }
97
97
  }
@@ -51,6 +51,7 @@ export async function rerunEpochProvingJob(
51
51
  l2BlockSourceForReorgDetection,
52
52
  metrics,
53
53
  deadline,
54
+ { skipEpochCheck: true },
54
55
  );
55
56
 
56
57
  log.info(`Rerunning epoch proving job for epoch ${jobData.epochNumber}`);
@@ -44,7 +44,7 @@ export class EpochProvingJob implements Traceable {
44
44
  private l2BlockSource: L2BlockSource | undefined,
45
45
  private metrics: ProverNodeJobMetrics,
46
46
  private deadline: Date | undefined,
47
- private config: { parallelBlockLimit: number } = { parallelBlockLimit: 32 },
47
+ private config: { parallelBlockLimit?: number; skipEpochCheck?: boolean },
48
48
  ) {
49
49
  validateEpochProvingJobData(data);
50
50
  this.uuid = crypto.randomUUID();
@@ -91,7 +91,9 @@ export class EpochProvingJob implements Traceable {
91
91
  })
92
92
  public async run() {
93
93
  this.scheduleDeadlineStop();
94
- await this.scheduleEpochCheck();
94
+ if (!this.config.skipEpochCheck) {
95
+ await this.scheduleEpochCheck();
96
+ }
95
97
 
96
98
  const epochNumber = Number(this.epochNumber);
97
99
  const epochSizeBlocks = this.blocks.length;
@@ -114,7 +116,7 @@ export class EpochProvingJob implements Traceable {
114
116
  this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
115
117
  await this.prover.startTubeCircuits(this.txs);
116
118
 
117
- await asyncPool(this.config.parallelBlockLimit, this.blocks, async block => {
119
+ await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async block => {
118
120
  this.checkState();
119
121
 
120
122
  const globalVariables = block.header.globalVariables;
package/src/metrics.ts CHANGED
@@ -242,7 +242,7 @@ export class ProverNodePublisherMetrics {
242
242
 
243
243
  try {
244
244
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
245
- } catch (e) {
245
+ } catch {
246
246
  // ignore
247
247
  }
248
248
 
@@ -252,7 +252,7 @@ export class ProverNodePublisherMetrics {
252
252
 
253
253
  try {
254
254
  this.txTotalFee.record(parseFloat(formatEther(totalFee)));
255
- } catch (e) {
255
+ } catch {
256
256
  // ignore
257
257
  }
258
258
  }
@@ -107,16 +107,19 @@ export class CombinedProverCoordination implements ProverCoordination {
107
107
  const toFindFromP2P = txsToFind.size;
108
108
  this.log.verbose(`Gathering ${toFindFromP2P} txs from p2p network`);
109
109
  const foundFromP2P = await pool.getTxsByHash([...txsToFind].map(tx => TxHash.fromString(tx)));
110
+
111
+ // TODO(!!): test for this
112
+ // getTxsByHash returns undefined for transactions that are not found, so it must be filtered to find the true length
113
+ const foundFromP2PLength = foundFromP2P.filter(tx => !!tx).length;
114
+
110
115
  const numFoundFromNodes = originalToFind - toFindFromP2P;
111
- const numNotFound = toFindFromP2P - foundFromP2P.length;
116
+ const numNotFound = toFindFromP2P - foundFromP2PLength;
112
117
  if (numNotFound === 0) {
113
- this.log.info(
114
- `Found all ${originalToFind} txs. ${numFoundFromNodes} from nodes, ${foundFromP2P.length} from p2p`,
115
- );
118
+ this.log.info(`Found all ${originalToFind} txs. ${numFoundFromNodes} from nodes, ${foundFromP2PLength} from p2p`);
116
119
  return;
117
120
  }
118
121
  this.log.warn(
119
- `Failed to find ${numNotFound} txs from any source. Found ${foundFromP2P.length} from p2p and ${numFoundFromNodes} from nodes`,
122
+ `Failed to find ${numNotFound} txs from any source. Found ${foundFromP2PLength} from p2p and ${numFoundFromNodes} from nodes`,
120
123
  );
121
124
  }
122
125
 
@@ -9,6 +9,7 @@ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
9
9
  import { type AztecNode, createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
10
10
  import type { ProverCoordination, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
11
11
  import { P2PClientType } from '@aztec/stdlib/p2p';
12
+ import { getPackageVersion } from '@aztec/stdlib/update-checker';
12
13
  import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
13
14
  import { type TelemetryClient, makeTracedFetch } from '@aztec/telemetry-client';
14
15
 
@@ -76,6 +77,7 @@ export async function createProverCoordination(
76
77
  proofVerifier,
77
78
  deps.worldStateSynchronizer,
78
79
  deps.epochCache,
80
+ getPackageVersion() ?? '',
79
81
  deps.telemetry,
80
82
  );
81
83
  await p2pClient.start();
@@ -7,7 +7,6 @@ import type { Fr } from '@aztec/foundation/fields';
7
7
  import { createLogger } from '@aztec/foundation/log';
8
8
  import { RunningPromise } from '@aztec/foundation/running-promise';
9
9
  import { DateProvider } from '@aztec/foundation/timer';
10
- import type { Maybe } from '@aztec/foundation/types';
11
10
  import type { DataStoreConfig } from '@aztec/kv-store/config';
12
11
  import { PublicProcessorFactory } from '@aztec/simulator/server';
13
12
  import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
@@ -70,11 +69,11 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
70
69
  constructor(
71
70
  protected readonly prover: EpochProverManager,
72
71
  protected readonly publisher: ProverNodePublisher,
73
- protected readonly l2BlockSource: L2BlockSource & Maybe<Service>,
72
+ protected readonly l2BlockSource: L2BlockSource & Partial<Service>,
74
73
  protected readonly l1ToL2MessageSource: L1ToL2MessageSource,
75
74
  protected readonly contractDataSource: ContractDataSource,
76
75
  protected readonly worldState: WorldStateSynchronizer,
77
- protected readonly coordination: ProverCoordination,
76
+ protected readonly coordination: ProverCoordination & Partial<Service>,
78
77
  protected readonly epochsMonitor: EpochMonitor,
79
78
  config: Partial<ProverNodeOptions> = {},
80
79
  protected readonly telemetryClient: TelemetryClient = getTelemetryClient(),
@@ -195,7 +194,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
195
194
  * Starts a proving process and returns immediately.
196
195
  */
197
196
  public async startProof(epochNumber: number | bigint) {
198
- const job = await this.createProvingJob(BigInt(epochNumber));
197
+ const job = await this.createProvingJob(BigInt(epochNumber), { skipEpochCheck: true });
199
198
  void this.runJob(job);
200
199
  }
201
200
 
@@ -274,7 +273,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
274
273
  }
275
274
 
276
275
  @trackSpan('ProverNode.createProvingJob', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))
277
- private async createProvingJob(epochNumber: bigint) {
276
+ private async createProvingJob(epochNumber: bigint, opts: { skipEpochCheck?: boolean } = {}) {
278
277
  this.checkMaximumPendingJobs();
279
278
 
280
279
  // Gather all data for this epoch
@@ -298,7 +297,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
298
297
  const deadlineTs = getProofSubmissionDeadlineTimestamp(epochNumber, await this.getL1Constants());
299
298
  const deadline = new Date(Number(deadlineTs) * 1000);
300
299
 
301
- const job = this.doCreateEpochProvingJob(epochData, deadline, publicProcessorFactory);
300
+ const job = this.doCreateEpochProvingJob(epochData, deadline, publicProcessorFactory, opts);
302
301
  this.jobs.set(job.getId(), job);
303
302
  return job;
304
303
  }
@@ -389,6 +388,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
389
388
  data: EpochProvingJobData,
390
389
  deadline: Date | undefined,
391
390
  publicProcessorFactory: PublicProcessorFactory,
391
+ opts: { skipEpochCheck?: boolean } = {},
392
392
  ) {
393
393
  const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit } = this.config;
394
394
  return new EpochProvingJob(
@@ -400,7 +400,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
400
400
  this.l2BlockSource,
401
401
  this.jobMetrics,
402
402
  deadline,
403
- { parallelBlockLimit },
403
+ { parallelBlockLimit, ...opts },
404
404
  );
405
405
  }
406
406
 
package/src/test/index.ts CHANGED
@@ -5,8 +5,8 @@ import type { ProverNodePublisher } from '../prover-node-publisher.js';
5
5
  import { ProverNode } from '../prover-node.js';
6
6
 
7
7
  abstract class TestProverNodeClass extends ProverNode {
8
- public declare prover: EpochProverManager;
9
- public declare publisher: ProverNodePublisher;
8
+ declare public prover: EpochProverManager;
9
+ declare public publisher: ProverNodePublisher;
10
10
 
11
11
  public abstract override tryUploadEpochFailure(job: EpochProvingJob): Promise<string | undefined>;
12
12
  }