@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.
- package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
- package/dest/actions/rerun-epoch-proving-job.js +3 -1
- package/dest/job/epoch-proving-job-data.d.ts +0 -2
- package/dest/job/epoch-proving-job-data.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.d.ts +3 -2
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +5 -5
- package/dest/metrics.js +2 -2
- package/dest/prover-coordination/combined-prover-coordination.d.ts.map +1 -1
- package/dest/prover-coordination/combined-prover-coordination.js +6 -3
- package/dest/prover-coordination/factory.d.ts.map +1 -1
- package/dest/prover-coordination/factory.js +2 -1
- package/dest/prover-node.d.ts +6 -5
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +8 -5
- package/package.json +23 -23
- package/src/actions/rerun-epoch-proving-job.ts +1 -0
- package/src/job/epoch-proving-job.ts +5 -3
- package/src/metrics.ts +2 -2
- package/src/prover-coordination/combined-prover-coordination.ts +8 -5
- package/src/prover-coordination/factory.ts +2 -0
- package/src/prover-node.ts +7 -7
- package/src/test/index.ts +2 -2
|
@@ -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,+
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
|
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 -
|
|
97
|
+
const numNotFound = toFindFromP2P - foundFromP2PLength;
|
|
95
98
|
if (numNotFound === 0) {
|
|
96
|
-
this.log.info(`Found all ${originalToFind} txs. ${numFoundFromNodes} from nodes, ${
|
|
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 ${
|
|
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;
|
|
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
|
}
|
package/dest/prover-node.d.ts
CHANGED
|
@@ -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 &
|
|
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 &
|
|
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
|
|
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":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
|
package/dest/prover-node.js
CHANGED
|
@@ -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.
|
|
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.
|
|
56
|
-
"@aztec/bb-prover": "0.
|
|
57
|
-
"@aztec/blob-sink": "0.
|
|
58
|
-
"@aztec/constants": "0.
|
|
59
|
-
"@aztec/epoch-cache": "0.
|
|
60
|
-
"@aztec/ethereum": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/kv-store": "0.
|
|
63
|
-
"@aztec/l1-artifacts": "0.
|
|
64
|
-
"@aztec/node-lib": "0.
|
|
65
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
66
|
-
"@aztec/p2p": "0.
|
|
67
|
-
"@aztec/protocol-contracts": "0.
|
|
68
|
-
"@aztec/prover-client": "0.
|
|
69
|
-
"@aztec/sequencer-client": "0.
|
|
70
|
-
"@aztec/simulator": "0.
|
|
71
|
-
"@aztec/stdlib": "0.
|
|
72
|
-
"@aztec/telemetry-client": "0.
|
|
73
|
-
"@aztec/world-state": "0.
|
|
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": "^
|
|
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.
|
|
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": ">=
|
|
95
|
+
"node": ">=20.10"
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|
|
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 -
|
|
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 ${
|
|
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();
|
package/src/prover-node.ts
CHANGED
|
@@ -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 &
|
|
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
|
|
9
|
-
public
|
|
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
|
}
|