@aztec/prover-client 4.0.0-nightly.20260121 → 4.0.0-nightly.20260122
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/orchestrator/orchestrator.d.ts +6 -3
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +26 -11
- package/dest/prover-client/prover-client.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +1 -1
- package/dest/proving_broker/config.d.ts +5 -1
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +7 -1
- package/package.json +15 -15
- package/src/orchestrator/orchestrator.ts +24 -11
- package/src/prover-client/prover-client.ts +7 -1
- package/src/proving_broker/config.ts +9 -0
|
@@ -26,12 +26,13 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
26
26
|
private dbProvider;
|
|
27
27
|
private prover;
|
|
28
28
|
private readonly proverId;
|
|
29
|
+
private readonly cancelJobsOnStop;
|
|
29
30
|
private provingState;
|
|
30
31
|
private pendingProvingJobs;
|
|
31
32
|
private provingPromise;
|
|
32
33
|
private metrics;
|
|
33
34
|
private dbs;
|
|
34
|
-
constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, telemetryClient?: TelemetryClient);
|
|
35
|
+
constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, cancelJobsOnStop?: boolean, telemetryClient?: TelemetryClient);
|
|
35
36
|
get tracer(): Tracer;
|
|
36
37
|
getProverId(): EthAddress;
|
|
37
38
|
getNumActiveForks(): number;
|
|
@@ -71,7 +72,9 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
71
72
|
setBlockCompleted(blockNumber: BlockNumber, expectedHeader?: BlockHeader): Promise<BlockHeader>;
|
|
72
73
|
protected verifyBuiltBlockAgainstSyncedState(provingState: BlockProvingState): Promise<void>;
|
|
73
74
|
/**
|
|
74
|
-
* Cancel any further proving
|
|
75
|
+
* Cancel any further proving.
|
|
76
|
+
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
77
|
+
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
75
78
|
*/
|
|
76
79
|
cancel(): void;
|
|
77
80
|
/**
|
|
@@ -120,4 +123,4 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
120
123
|
private enqueueVM;
|
|
121
124
|
private checkAndEnqueueBaseRollup;
|
|
122
125
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL29yY2hlc3RyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFRN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFRcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUNWLFdBQVcsRUFDWCx3QkFBd0IsRUFHeEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFNTCxzQkFBc0IsRUFLdEIsc0JBQXNCLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBRUwsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUlaLE1BQU0seUJBQXlCLENBQUM7QUFlakMsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWFsRTs7Ozs7Ozs7O0dBU0c7QUFFSDs7R0FFRztBQUNILHFCQUFhLG1CQUFvQixZQUFXLFdBQVc7SUFVbkQsT0FBTyxDQUFDLFVBQVU7SUFDbEIsT0FBTyxDQUFDLE1BQU07SUFDZCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAc,MAAM,uBAAuB,CAAC;AAQ7F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAQpD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAML,sBAAsB,EAKtB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAejC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -414,6 +414,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
414
414
|
dbProvider;
|
|
415
415
|
prover;
|
|
416
416
|
proverId;
|
|
417
|
+
cancelJobsOnStop;
|
|
417
418
|
static{
|
|
418
419
|
({ e: [_initProto] } = _apply_decs_2203_r(this, [
|
|
419
420
|
[
|
|
@@ -449,10 +450,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
449
450
|
metrics;
|
|
450
451
|
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
451
452
|
dbs;
|
|
452
|
-
constructor(dbProvider, prover, proverId, telemetryClient = getTelemetryClient()){
|
|
453
|
+
constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, telemetryClient = getTelemetryClient()){
|
|
453
454
|
this.dbProvider = dbProvider;
|
|
454
455
|
this.prover = prover;
|
|
455
456
|
this.proverId = proverId;
|
|
457
|
+
this.cancelJobsOnStop = cancelJobsOnStop;
|
|
456
458
|
this.provingState = (_initProto(this), undefined);
|
|
457
459
|
this.pendingProvingJobs = [];
|
|
458
460
|
this.provingPromise = undefined;
|
|
@@ -503,7 +505,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
503
505
|
const lastBlockNumber = headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber;
|
|
504
506
|
const db = await this.dbProvider.fork(lastBlockNumber);
|
|
505
507
|
const firstBlockNumber = BlockNumber(lastBlockNumber + 1);
|
|
506
|
-
this.dbs.set(firstBlockNumber,
|
|
508
|
+
this.dbs.set(firstBlockNumber, {
|
|
509
|
+
fork: db,
|
|
510
|
+
cleanupPromise: undefined
|
|
511
|
+
});
|
|
507
512
|
// Get archive sibling path before any block in this checkpoint lands.
|
|
508
513
|
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
509
514
|
// Insert all the l1 to l2 messages into the db. And get the states before and after the insertion.
|
|
@@ -533,9 +538,12 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
533
538
|
if (!this.dbs.has(blockNumber)) {
|
|
534
539
|
// Fork world state at the end of the immediately previous block
|
|
535
540
|
const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
|
|
536
|
-
this.dbs.set(blockNumber,
|
|
541
|
+
this.dbs.set(blockNumber, {
|
|
542
|
+
fork: db,
|
|
543
|
+
cleanupPromise: undefined
|
|
544
|
+
});
|
|
537
545
|
}
|
|
538
|
-
const db = this.dbs.get(blockNumber);
|
|
546
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
539
547
|
// Get archive snapshot and sibling path before any txs in this block lands.
|
|
540
548
|
const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
541
549
|
const lastArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
@@ -585,7 +593,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
585
593
|
throw new Error(`Block ${blockNumber} has been initialized with transactions.`);
|
|
586
594
|
}
|
|
587
595
|
logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
588
|
-
const db = this.dbs.get(blockNumber);
|
|
596
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
589
597
|
const lastArchive = provingState.lastArchiveTreeSnapshot;
|
|
590
598
|
const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
|
|
591
599
|
const spongeBlobState = provingState.getStartSpongeBlob().clone();
|
|
@@ -675,7 +683,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
675
683
|
throw new Error('Block header mismatch');
|
|
676
684
|
}
|
|
677
685
|
// Get db for this block
|
|
678
|
-
const db = this.dbs.get(provingState.blockNumber);
|
|
686
|
+
const db = this.dbs.get(provingState.blockNumber).fork;
|
|
679
687
|
// Update the archive tree, so we're ready to start processing the next block:
|
|
680
688
|
logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
|
|
681
689
|
await db.updateArchive(header);
|
|
@@ -702,7 +710,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
702
710
|
}
|
|
703
711
|
// Get db for this block
|
|
704
712
|
const blockNumber = provingState.blockNumber;
|
|
705
|
-
const db = this.dbs.get(blockNumber);
|
|
713
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
706
714
|
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
707
715
|
const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
|
|
708
716
|
if (!syncedArchive.equals(newArchive)) {
|
|
@@ -723,10 +731,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
723
731
|
void this.cleanupDBFork(blockNumber);
|
|
724
732
|
}
|
|
725
733
|
/**
|
|
726
|
-
* Cancel any further proving
|
|
734
|
+
* Cancel any further proving.
|
|
735
|
+
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
736
|
+
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
727
737
|
*/ cancel() {
|
|
728
|
-
|
|
729
|
-
controller.
|
|
738
|
+
if (this.cancelJobsOnStop) {
|
|
739
|
+
for (const controller of this.pendingProvingJobs){
|
|
740
|
+
controller.abort();
|
|
741
|
+
}
|
|
730
742
|
}
|
|
731
743
|
this.provingState?.cancel();
|
|
732
744
|
}
|
|
@@ -755,7 +767,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
755
767
|
return;
|
|
756
768
|
}
|
|
757
769
|
try {
|
|
758
|
-
|
|
770
|
+
if (!fork.cleanupPromise) {
|
|
771
|
+
fork.cleanupPromise = fork.fork.close();
|
|
772
|
+
}
|
|
773
|
+
await fork.cleanupPromise;
|
|
759
774
|
this.dbs.delete(blockNumber);
|
|
760
775
|
} catch (err) {
|
|
761
776
|
logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
@@ -39,4 +39,4 @@ export declare class ProverClient implements EpochProverManager {
|
|
|
39
39
|
private stopAgents;
|
|
40
40
|
}
|
|
41
41
|
export declare function buildServerCircuitProver(config: ActualProverConfig & ACVMConfig & BBConfig, telemetry: TelemetryClient): Promise<ServerCircuitProver>;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWNsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1jbGllbnQvcHJvdmVyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxRQUFRLEVBQTJDLE1BQU0sa0JBQWtCLENBQUM7QUFFM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHaEUsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNoQixLQUFLLGtCQUFrQixFQUN2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLGdCQUFnQixFQUNyQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLG1CQUFtQixFQUV6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU92RCxzSEFBc0g7QUFDdEgscUJBQWEsWUFBYSxZQUFXLGtCQUFrQjtJQVFuRCxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxrQkFBa0I7SUFDMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNwQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsR0FBRztJQVpiLE9BQU8sQ0FBQyxPQUFPLENBQVM7SUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBc0I7SUFFcEMsT0FBTyxDQUFDLFVBQVUsQ0FBYTtJQUMvQixPQUFPLENBQUMsZ0JBQWdCLENBQXlCO0lBRWpELE9BQU8sZUFVTjtJQUVNLGlCQUFpQixJQUFJLFdBQVcsQ0FVdEM7SUFFTSxXQUFXLElBQUksVUFBVSxDQUUvQjtJQUVLLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBWTNFO0lBRUQ7O09BRUc7SUFDVSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQU9sQztJQUVEOztPQUVHO0lBQ1UsSUFBSSxrQkFPaEI7SUFFRDs7Ozs7T0FLRztJQUNILE9BQW9CLEdBQUcsQ0FDckIsTUFBTSxFQUFFLGtCQUFrQixFQUMxQixVQUFVLEVBQUUsd0JBQXdCLEdBQUcsd0JBQXdCLEVBQy9ELE1BQU0sRUFBRSxnQkFBZ0IsRUFDeEIsU0FBUyxHQUFFLGVBQXNDLHlCQUtsRDtJQUVNLG1CQUFtQixJQUFJLGtCQUFrQixDQU0vQztZQUVhLG9CQUFvQjtZQW1CcEIsVUFBVTtDQUd6QjtBQUVELHdCQUFnQix3QkFBd0IsQ0FDdEMsTUFBTSxFQUFFLGtCQUFrQixHQUFHLFVBQVUsR0FBRyxRQUFRLEVBQ2xELFNBQVMsRUFBRSxlQUFlLEdBQ3pCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQVU5QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-client.d.ts","sourceRoot":"","sources":["../../src/prover-client/prover-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD,sHAAsH;AACtH,qBAAa,YAAa,YAAW,kBAAkB;IAQnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO,eAUN;IAEM,iBAAiB,IAAI,WAAW,
|
|
1
|
+
{"version":3,"file":"prover-client.d.ts","sourceRoot":"","sources":["../../src/prover-client/prover-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD,sHAAsH;AACtH,qBAAa,YAAa,YAAW,kBAAkB;IAQnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO,eAUN;IAEM,iBAAiB,IAAI,WAAW,CAUtC;IAEM,WAAW,IAAI,UAAU,CAE/B;IAEK,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3E;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlC;IAED;;OAEG;IACU,IAAI,kBAOhB;IAED;;;;;OAKG;IACH,OAAoB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,wBAAwB,GAAG,wBAAwB,EAC/D,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,eAAsC,yBAKlD;IAEM,mBAAmB,IAAI,kBAAkB,CAM/C;YAEa,oBAAoB;YAmBpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
|
|
@@ -34,7 +34,7 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
34
34
|
}
|
|
35
35
|
createEpochProver() {
|
|
36
36
|
const facade = new BrokerCircuitProverFacade(this.orchestratorClient, this.proofStore, this.failedProofStore);
|
|
37
|
-
const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.config.proverId, this.telemetry);
|
|
37
|
+
const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.config.proverId, this.config.cancelJobsOnStop, this.telemetry);
|
|
38
38
|
return new ServerEpochProver(facade, orchestrator);
|
|
39
39
|
}
|
|
40
40
|
getProverId() {
|
|
@@ -66,6 +66,8 @@ export declare const ProverAgentConfig: z.ZodObject<{
|
|
|
66
66
|
proverTestDelayFactor: z.ZodNumber;
|
|
67
67
|
/** The delay (ms) to inject during fake proof verification */
|
|
68
68
|
proverTestVerificationDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
69
|
+
/** Whether to abort pending proving jobs when the orchestrator is cancelled */
|
|
70
|
+
cancelJobsOnStop: z.ZodBoolean;
|
|
69
71
|
}, "strip", z.ZodTypeAny, {
|
|
70
72
|
proverAgentCount: number;
|
|
71
73
|
proverAgentProofTypes: ProvingRequestType[];
|
|
@@ -76,6 +78,7 @@ export declare const ProverAgentConfig: z.ZodObject<{
|
|
|
76
78
|
proverTestDelayMs: number;
|
|
77
79
|
proverTestDelayFactor: number;
|
|
78
80
|
proverTestVerificationDelayMs?: number | undefined;
|
|
81
|
+
cancelJobsOnStop: boolean;
|
|
79
82
|
}, {
|
|
80
83
|
proverAgentCount: number;
|
|
81
84
|
proverAgentProofTypes: ProvingRequestType[];
|
|
@@ -86,7 +89,8 @@ export declare const ProverAgentConfig: z.ZodObject<{
|
|
|
86
89
|
proverTestDelayMs: number;
|
|
87
90
|
proverTestDelayFactor: number;
|
|
88
91
|
proverTestVerificationDelayMs?: number | undefined;
|
|
92
|
+
cancelJobsOnStop: boolean;
|
|
89
93
|
}>;
|
|
90
94
|
export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
|
|
91
95
|
export declare const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig>;
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFJeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsZUFBTyxNQUFNLGtCQUFrQjtJQUM3QixxRkFBcUY7O0lBRXJGLHVIQUF1SDs7SUFFdkgsNkZBQTZGOztJQUU3Riw4RUFBOEU7O0lBRTlFLHFDQUFxQzs7SUFFckMsNkZBQTZGOztJQUU3RiwrRUFBK0U7O0lBRS9FLDRDQUE0Qzs7SUFFNUMsdURBQXVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBRXZELENBQUM7QUFFSCxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLGtCQUFrQixDQUFDLEdBQ2pFLElBQUksQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLEdBQUcsZUFBZSxDQUFDLEdBQzdELGNBQWMsR0FDZCxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRXJDLGVBQU8sTUFBTSwwQkFBMEIsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0F1QzdFLENBQUM7QUFFRixlQUFPLE1BQU0seUJBQXlCLEVBQUUsa0JBQWlFLENBQUM7QUFFMUcsZUFBTyxNQUFNLGlCQUFpQjtJQUM1QiwyQ0FBMkM7O0lBRTNDLHdEQUF3RDs7SUFFeEQsZ0RBQWdEOztJQUVoRCwrQ0FBK0M7O0lBRS9DLHVDQUF1Qzs7SUFFdkMsZ0RBQWdEOztJQUVoRCwyREFBMkQ7O0lBRTNELDhFQUE4RTs7SUFFOUUsOERBQThEOztJQUU5RCwrRUFBK0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUUvRSxDQUFDO0FBRUgsTUFBTSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDO0FBRWxFLGVBQU8sTUFBTSx5QkFBeUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0F3RDNFLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,qFAAqF;;IAErF,uHAAuH;;IAEvH,6FAA6F;;IAE7F,8EAA8E;;IAE9E,qCAAqC;;IAErC,6FAA6F;;IAE7F,+EAA+E;;IAE/E,4CAA4C;;IAE5C,uDAAuD;;;;;;;;;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,GAC7D,cAAc,GACd,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErC,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAuC7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;IAC5B,2CAA2C;;IAE3C,wDAAwD;;IAExD,gDAAgD;;IAEhD,+CAA+C;;IAE/C,uCAAuC;;IAEvC,gDAAgD;;IAEhD,2DAA2D;;IAE3D,8EAA8E;;IAE9E,8DAA8D
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,qFAAqF;;IAErF,uHAAuH;;IAEvH,6FAA6F;;IAE7F,8EAA8E;;IAE9E,qCAAqC;;IAErC,6FAA6F;;IAE7F,+EAA+E;;IAE/E,4CAA4C;;IAE5C,uDAAuD;;;;;;;;;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,GAC7D,cAAc,GACd,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErC,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAuC7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;IAC5B,2CAA2C;;IAE3C,wDAAwD;;IAExD,gDAAgD;;IAEhD,+CAA+C;;IAE/C,uCAAuC;;IAEvC,gDAAgD;;IAEhD,2DAA2D;;IAE3D,8EAA8E;;IAE9E,8DAA8D;;IAE9D,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;EAE/E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAwD3E,CAAC"}
|
|
@@ -71,7 +71,8 @@ export const ProverAgentConfig = z.object({
|
|
|
71
71
|
]),
|
|
72
72
|
/** If using fixed delay, the time each operation takes. */ proverTestDelayMs: z.number(),
|
|
73
73
|
/** If using realistic delays, what percentage of realistic times to apply. */ proverTestDelayFactor: z.number(),
|
|
74
|
-
/** The delay (ms) to inject during fake proof verification */ proverTestVerificationDelayMs: z.number().optional()
|
|
74
|
+
/** The delay (ms) to inject during fake proof verification */ proverTestVerificationDelayMs: z.number().optional(),
|
|
75
|
+
/** Whether to abort pending proving jobs when the orchestrator is cancelled */ cancelJobsOnStop: z.boolean()
|
|
75
76
|
});
|
|
76
77
|
export const proverAgentConfigMappings = {
|
|
77
78
|
proverAgentCount: {
|
|
@@ -117,5 +118,10 @@ export const proverAgentConfigMappings = {
|
|
|
117
118
|
env: 'PROVER_TEST_VERIFICATION_DELAY_MS',
|
|
118
119
|
description: 'The delay (ms) to inject during fake proof verification',
|
|
119
120
|
...numberConfigHelper(10)
|
|
121
|
+
},
|
|
122
|
+
cancelJobsOnStop: {
|
|
123
|
+
env: 'PROVER_CANCEL_JOBS_ON_STOP',
|
|
124
|
+
description: 'Whether to abort pending proving jobs when the orchestrator is cancelled. ' + 'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
|
|
125
|
+
...booleanConfigHelper(false)
|
|
120
126
|
}
|
|
121
127
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260122",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -68,19 +68,19 @@
|
|
|
68
68
|
]
|
|
69
69
|
},
|
|
70
70
|
"dependencies": {
|
|
71
|
-
"@aztec/bb-prover": "4.0.0-nightly.
|
|
72
|
-
"@aztec/blob-lib": "4.0.0-nightly.
|
|
73
|
-
"@aztec/constants": "4.0.0-nightly.
|
|
74
|
-
"@aztec/ethereum": "4.0.0-nightly.
|
|
75
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
76
|
-
"@aztec/kv-store": "4.0.0-nightly.
|
|
77
|
-
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.
|
|
78
|
-
"@aztec/noir-types": "4.0.0-nightly.
|
|
79
|
-
"@aztec/protocol-contracts": "4.0.0-nightly.
|
|
80
|
-
"@aztec/simulator": "4.0.0-nightly.
|
|
81
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
82
|
-
"@aztec/telemetry-client": "4.0.0-nightly.
|
|
83
|
-
"@aztec/world-state": "4.0.0-nightly.
|
|
71
|
+
"@aztec/bb-prover": "4.0.0-nightly.20260122",
|
|
72
|
+
"@aztec/blob-lib": "4.0.0-nightly.20260122",
|
|
73
|
+
"@aztec/constants": "4.0.0-nightly.20260122",
|
|
74
|
+
"@aztec/ethereum": "4.0.0-nightly.20260122",
|
|
75
|
+
"@aztec/foundation": "4.0.0-nightly.20260122",
|
|
76
|
+
"@aztec/kv-store": "4.0.0-nightly.20260122",
|
|
77
|
+
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260122",
|
|
78
|
+
"@aztec/noir-types": "4.0.0-nightly.20260122",
|
|
79
|
+
"@aztec/protocol-contracts": "4.0.0-nightly.20260122",
|
|
80
|
+
"@aztec/simulator": "4.0.0-nightly.20260122",
|
|
81
|
+
"@aztec/stdlib": "4.0.0-nightly.20260122",
|
|
82
|
+
"@aztec/telemetry-client": "4.0.0-nightly.20260122",
|
|
83
|
+
"@aztec/world-state": "4.0.0-nightly.20260122",
|
|
84
84
|
"@google-cloud/storage": "^7.15.0",
|
|
85
85
|
"@iarna/toml": "^2.2.5",
|
|
86
86
|
"commander": "^12.1.0",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"zod": "^3.23.8"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
|
-
"@aztec/noir-contracts.js": "4.0.0-nightly.
|
|
93
|
+
"@aztec/noir-contracts.js": "4.0.0-nightly.20260122",
|
|
94
94
|
"@jest/globals": "^30.0.0",
|
|
95
95
|
"@types/jest": "^30.0.0",
|
|
96
96
|
"@types/node": "^22.15.17",
|
|
@@ -73,6 +73,11 @@ import { TxProvingState } from './tx-proving-state.js';
|
|
|
73
73
|
|
|
74
74
|
const logger = createLogger('prover-client:orchestrator');
|
|
75
75
|
|
|
76
|
+
type WorldStateFork = {
|
|
77
|
+
fork: MerkleTreeWriteOperations;
|
|
78
|
+
cleanupPromise: Promise<void> | undefined;
|
|
79
|
+
};
|
|
80
|
+
|
|
76
81
|
/**
|
|
77
82
|
* Implements an event driven proving scheduler to build the recursive proof tree. The idea being:
|
|
78
83
|
* 1. Transactions are provided to the scheduler post simulation.
|
|
@@ -94,12 +99,13 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
94
99
|
private provingPromise: Promise<ProvingResult> | undefined = undefined;
|
|
95
100
|
private metrics: ProvingOrchestratorMetrics;
|
|
96
101
|
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
97
|
-
private dbs: Map<BlockNumber,
|
|
102
|
+
private dbs: Map<BlockNumber, WorldStateFork> = new Map();
|
|
98
103
|
|
|
99
104
|
constructor(
|
|
100
105
|
private dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations,
|
|
101
106
|
private prover: ServerCircuitProver,
|
|
102
107
|
private readonly proverId: EthAddress,
|
|
108
|
+
private readonly cancelJobsOnStop: boolean = false,
|
|
103
109
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
104
110
|
) {
|
|
105
111
|
this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
|
|
@@ -175,7 +181,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
175
181
|
const db = await this.dbProvider.fork(lastBlockNumber);
|
|
176
182
|
|
|
177
183
|
const firstBlockNumber = BlockNumber(lastBlockNumber + 1);
|
|
178
|
-
this.dbs.set(firstBlockNumber, db);
|
|
184
|
+
this.dbs.set(firstBlockNumber, { fork: db, cleanupPromise: undefined });
|
|
179
185
|
|
|
180
186
|
// Get archive sibling path before any block in this checkpoint lands.
|
|
181
187
|
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
@@ -233,9 +239,9 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
233
239
|
if (!this.dbs.has(blockNumber)) {
|
|
234
240
|
// Fork world state at the end of the immediately previous block
|
|
235
241
|
const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
|
|
236
|
-
this.dbs.set(blockNumber, db);
|
|
242
|
+
this.dbs.set(blockNumber, { fork: db, cleanupPromise: undefined });
|
|
237
243
|
}
|
|
238
|
-
const db = this.dbs.get(blockNumber)
|
|
244
|
+
const db = this.dbs.get(blockNumber)!.fork;
|
|
239
245
|
|
|
240
246
|
// Get archive snapshot and sibling path before any txs in this block lands.
|
|
241
247
|
const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
@@ -310,7 +316,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
310
316
|
|
|
311
317
|
logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
312
318
|
|
|
313
|
-
const db = this.dbs.get(blockNumber)
|
|
319
|
+
const db = this.dbs.get(blockNumber)!.fork;
|
|
314
320
|
const lastArchive = provingState.lastArchiveTreeSnapshot;
|
|
315
321
|
const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
|
|
316
322
|
const spongeBlobState = provingState.getStartSpongeBlob().clone();
|
|
@@ -439,7 +445,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
439
445
|
}
|
|
440
446
|
|
|
441
447
|
// Get db for this block
|
|
442
|
-
const db = this.dbs.get(provingState.blockNumber)
|
|
448
|
+
const db = this.dbs.get(provingState.blockNumber)!.fork;
|
|
443
449
|
|
|
444
450
|
// Update the archive tree, so we're ready to start processing the next block:
|
|
445
451
|
logger.verbose(
|
|
@@ -475,7 +481,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
475
481
|
|
|
476
482
|
// Get db for this block
|
|
477
483
|
const blockNumber = provingState.blockNumber;
|
|
478
|
-
const db = this.dbs.get(blockNumber)
|
|
484
|
+
const db = this.dbs.get(blockNumber)!.fork;
|
|
479
485
|
|
|
480
486
|
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
481
487
|
const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
|
|
@@ -504,11 +510,15 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
504
510
|
}
|
|
505
511
|
|
|
506
512
|
/**
|
|
507
|
-
* Cancel any further proving
|
|
513
|
+
* Cancel any further proving.
|
|
514
|
+
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
515
|
+
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
508
516
|
*/
|
|
509
517
|
public cancel() {
|
|
510
|
-
|
|
511
|
-
controller.
|
|
518
|
+
if (this.cancelJobsOnStop) {
|
|
519
|
+
for (const controller of this.pendingProvingJobs) {
|
|
520
|
+
controller.abort();
|
|
521
|
+
}
|
|
512
522
|
}
|
|
513
523
|
|
|
514
524
|
this.provingState?.cancel();
|
|
@@ -551,7 +561,10 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
551
561
|
}
|
|
552
562
|
|
|
553
563
|
try {
|
|
554
|
-
|
|
564
|
+
if (!fork.cleanupPromise) {
|
|
565
|
+
fork.cleanupPromise = fork.fork.close();
|
|
566
|
+
}
|
|
567
|
+
await fork.cleanupPromise;
|
|
555
568
|
this.dbs.delete(blockNumber);
|
|
556
569
|
} catch (err) {
|
|
557
570
|
logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
@@ -46,7 +46,13 @@ export class ProverClient implements EpochProverManager {
|
|
|
46
46
|
|
|
47
47
|
public createEpochProver(): EpochProver {
|
|
48
48
|
const facade = new BrokerCircuitProverFacade(this.orchestratorClient, this.proofStore, this.failedProofStore);
|
|
49
|
-
const orchestrator = new ProvingOrchestrator(
|
|
49
|
+
const orchestrator = new ProvingOrchestrator(
|
|
50
|
+
this.worldState,
|
|
51
|
+
facade,
|
|
52
|
+
this.config.proverId,
|
|
53
|
+
this.config.cancelJobsOnStop,
|
|
54
|
+
this.telemetry,
|
|
55
|
+
);
|
|
50
56
|
return new ServerEpochProver(facade, orchestrator);
|
|
51
57
|
}
|
|
52
58
|
|
|
@@ -100,6 +100,8 @@ export const ProverAgentConfig = z.object({
|
|
|
100
100
|
proverTestDelayFactor: z.number(),
|
|
101
101
|
/** The delay (ms) to inject during fake proof verification */
|
|
102
102
|
proverTestVerificationDelayMs: z.number().optional(),
|
|
103
|
+
/** Whether to abort pending proving jobs when the orchestrator is cancelled */
|
|
104
|
+
cancelJobsOnStop: z.boolean(),
|
|
103
105
|
});
|
|
104
106
|
|
|
105
107
|
export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
|
|
@@ -153,4 +155,11 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
|
|
|
153
155
|
description: 'The delay (ms) to inject during fake proof verification',
|
|
154
156
|
...numberConfigHelper(10),
|
|
155
157
|
},
|
|
158
|
+
cancelJobsOnStop: {
|
|
159
|
+
env: 'PROVER_CANCEL_JOBS_ON_STOP',
|
|
160
|
+
description:
|
|
161
|
+
'Whether to abort pending proving jobs when the orchestrator is cancelled. ' +
|
|
162
|
+
'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
|
|
163
|
+
...booleanConfigHelper(false),
|
|
164
|
+
},
|
|
156
165
|
};
|