@aztec/prover-client 0.0.1-commit.d431d1c → 0.0.1-commit.e3c1de76
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/light/lightweight_checkpoint_builder.d.ts +9 -6
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +15 -9
- package/dest/mocks/fixtures.d.ts +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -1
- package/dest/orchestrator/block-building-helpers.js +1 -1
- package/dest/orchestrator/orchestrator.d.ts +8 -3
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +90 -74
- 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 +7 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +4 -3
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +3 -3
- 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/dest/proving_broker/proving_agent.d.ts +4 -3
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +4 -4
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +11 -7
- package/dest/proving_broker/proving_job_controller.d.ts +4 -3
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +6 -3
- package/package.json +15 -15
- package/src/light/lightweight_checkpoint_builder.ts +22 -7
- package/src/mocks/fixtures.ts +2 -1
- package/src/orchestrator/block-building-helpers.ts +1 -1
- package/src/orchestrator/orchestrator.ts +89 -75
- package/src/prover-client/prover-client.ts +23 -6
- package/src/proving_broker/broker_prover_facade.ts +6 -3
- package/src/proving_broker/config.ts +9 -0
- package/src/proving_broker/proving_agent.ts +5 -2
- package/src/proving_broker/proving_broker_instrumentation.ts +10 -6
- package/src/proving_broker/proving_job_controller.ts +9 -3
|
@@ -389,7 +389,6 @@ import { buildHeaderFromCircuitOutputs, getLastSiblingPath, getPublicChonkVerifi
|
|
|
389
389
|
import { EpochProvingState } from './epoch-proving-state.js';
|
|
390
390
|
import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js';
|
|
391
391
|
import { TxProvingState } from './tx-proving-state.js';
|
|
392
|
-
const logger = createLogger('prover-client:orchestrator');
|
|
393
392
|
_dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
394
393
|
[Attributes.BLOCK_NUMBER]: blockNumber
|
|
395
394
|
})), _dec1 = trackSpan('ProvingOrchestrator.addTxs', (txs)=>({
|
|
@@ -414,6 +413,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
414
413
|
dbProvider;
|
|
415
414
|
prover;
|
|
416
415
|
proverId;
|
|
416
|
+
cancelJobsOnStop;
|
|
417
417
|
static{
|
|
418
418
|
({ e: [_initProto] } = _apply_decs_2203_r(this, [
|
|
419
419
|
[
|
|
@@ -449,14 +449,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
449
449
|
metrics;
|
|
450
450
|
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
451
451
|
dbs;
|
|
452
|
-
|
|
452
|
+
logger;
|
|
453
|
+
constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, telemetryClient = getTelemetryClient(), bindings){
|
|
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;
|
|
459
461
|
this.dbs = new Map();
|
|
462
|
+
this.logger = createLogger('prover-client:orchestrator', bindings);
|
|
460
463
|
this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
|
|
461
464
|
}
|
|
462
465
|
get tracer() {
|
|
@@ -481,7 +484,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
481
484
|
status: 'failure',
|
|
482
485
|
reason
|
|
483
486
|
}));
|
|
484
|
-
logger.info(`Starting epoch ${epochNumber} with ${totalNumCheckpoints} checkpoints.`);
|
|
487
|
+
this.logger.info(`Starting epoch ${epochNumber} with ${totalNumCheckpoints} checkpoints.`);
|
|
485
488
|
this.provingState = new EpochProvingState(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges, (provingState)=>this.checkAndEnqueueCheckpointRootRollup(provingState), resolve, reject);
|
|
486
489
|
this.provingPromise = promise;
|
|
487
490
|
}
|
|
@@ -503,7 +506,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
503
506
|
const lastBlockNumber = headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber;
|
|
504
507
|
const db = await this.dbProvider.fork(lastBlockNumber);
|
|
505
508
|
const firstBlockNumber = BlockNumber(lastBlockNumber + 1);
|
|
506
|
-
this.dbs.set(firstBlockNumber,
|
|
509
|
+
this.dbs.set(firstBlockNumber, {
|
|
510
|
+
fork: db,
|
|
511
|
+
cleanupPromise: undefined
|
|
512
|
+
});
|
|
507
513
|
// Get archive sibling path before any block in this checkpoint lands.
|
|
508
514
|
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
509
515
|
// Insert all the l1 to l2 messages into the db. And get the states before and after the insertion.
|
|
@@ -528,14 +534,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
528
534
|
throw new Error(`Checkpoint not accepting further blocks.`);
|
|
529
535
|
}
|
|
530
536
|
const constants = checkpointProvingState.constants;
|
|
531
|
-
logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
537
|
+
this.logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
532
538
|
// Fork the db only when it's not already set. The db for the first block is set in `startNewCheckpoint`.
|
|
533
539
|
if (!this.dbs.has(blockNumber)) {
|
|
534
540
|
// Fork world state at the end of the immediately previous block
|
|
535
541
|
const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
|
|
536
|
-
this.dbs.set(blockNumber,
|
|
542
|
+
this.dbs.set(blockNumber, {
|
|
543
|
+
fork: db,
|
|
544
|
+
cleanupPromise: undefined
|
|
545
|
+
});
|
|
537
546
|
}
|
|
538
|
-
const db = this.dbs.get(blockNumber);
|
|
547
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
539
548
|
// Get archive snapshot and sibling path before any txs in this block lands.
|
|
540
549
|
const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
541
550
|
const lastArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
@@ -570,7 +579,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
570
579
|
if (!txs.length) {
|
|
571
580
|
// To avoid an ugly throw below. If we require an empty block, we can just call setBlockCompleted
|
|
572
581
|
// on a block with no txs. We cannot do that here because we cannot find the blockNumber without any txs.
|
|
573
|
-
logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
582
|
+
this.logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
574
583
|
return;
|
|
575
584
|
}
|
|
576
585
|
const blockNumber = BlockNumber(txs[0].globalVariables.blockNumber);
|
|
@@ -584,8 +593,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
584
593
|
if (!provingState.isAcceptingTxs()) {
|
|
585
594
|
throw new Error(`Block ${blockNumber} has been initialized with transactions.`);
|
|
586
595
|
}
|
|
587
|
-
logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
588
|
-
const db = this.dbs.get(blockNumber);
|
|
596
|
+
this.logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
597
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
589
598
|
const lastArchive = provingState.lastArchiveTreeSnapshot;
|
|
590
599
|
const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
|
|
591
600
|
const spongeBlobState = provingState.getStartSpongeBlob().clone();
|
|
@@ -595,7 +604,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
595
604
|
throw new Error(`Invalid proving state when adding a tx`);
|
|
596
605
|
}
|
|
597
606
|
validateTx(tx);
|
|
598
|
-
logger.debug(`Received transaction: ${tx.hash}`);
|
|
607
|
+
this.logger.debug(`Received transaction: ${tx.hash}`);
|
|
599
608
|
const startSpongeBlob = spongeBlobState.clone();
|
|
600
609
|
const [hints, treeSnapshots] = await this.prepareBaseRollupInputs(tx, lastArchive, newL1ToL2MessageTreeSnapshot, startSpongeBlob, db);
|
|
601
610
|
if (!provingState.verifyState()) {
|
|
@@ -606,10 +615,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
606
615
|
const txIndex = provingState.addNewTx(txProvingState);
|
|
607
616
|
if (txProvingState.requireAvmProof) {
|
|
608
617
|
this.getOrEnqueueChonkVerifier(provingState, txIndex);
|
|
609
|
-
logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
618
|
+
this.logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
610
619
|
this.enqueueVM(provingState, txIndex);
|
|
611
620
|
} else {
|
|
612
|
-
logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
621
|
+
this.logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
613
622
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
614
623
|
}
|
|
615
624
|
} catch (err) {
|
|
@@ -639,7 +648,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
639
648
|
const txHash = tx.getTxHash().toString();
|
|
640
649
|
const privateInputs = getPublicChonkVerifierPrivateInputsFromTx(tx, this.proverId.toField());
|
|
641
650
|
const tubeProof = promiseWithResolvers();
|
|
642
|
-
logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
651
|
+
this.logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
643
652
|
this.doEnqueueChonkVerifier(txHash, privateInputs, (proof)=>{
|
|
644
653
|
tubeProof.resolve(proof);
|
|
645
654
|
});
|
|
@@ -668,16 +677,16 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
668
677
|
throw new Error(`Block ${blockNumber} is still accepting txs. Call setBlockCompleted after all txs have been added.`);
|
|
669
678
|
}
|
|
670
679
|
// Given we've applied every change from this block, now assemble the block header:
|
|
671
|
-
logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
680
|
+
this.logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
672
681
|
const header = await provingState.buildBlockHeader();
|
|
673
682
|
if (expectedHeader && !header.equals(expectedHeader)) {
|
|
674
|
-
logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
683
|
+
this.logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
675
684
|
throw new Error('Block header mismatch');
|
|
676
685
|
}
|
|
677
686
|
// Get db for this block
|
|
678
|
-
const db = this.dbs.get(provingState.blockNumber);
|
|
687
|
+
const db = this.dbs.get(provingState.blockNumber).fork;
|
|
679
688
|
// Update the archive tree, so we're ready to start processing the next block:
|
|
680
|
-
logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
|
|
689
|
+
this.logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
|
|
681
690
|
await db.updateArchive(header);
|
|
682
691
|
await this.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
683
692
|
return header;
|
|
@@ -686,33 +695,33 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
686
695
|
async verifyBuiltBlockAgainstSyncedState(provingState) {
|
|
687
696
|
const builtBlockHeader = provingState.getBuiltBlockHeader();
|
|
688
697
|
if (!builtBlockHeader) {
|
|
689
|
-
logger.debug('Block header not built yet, skipping header check.');
|
|
698
|
+
this.logger.debug('Block header not built yet, skipping header check.');
|
|
690
699
|
return;
|
|
691
700
|
}
|
|
692
701
|
const output = provingState.getBlockRootRollupOutput();
|
|
693
702
|
if (!output) {
|
|
694
|
-
logger.debug('Block root rollup proof not built yet, skipping header check.');
|
|
703
|
+
this.logger.debug('Block root rollup proof not built yet, skipping header check.');
|
|
695
704
|
return;
|
|
696
705
|
}
|
|
697
706
|
const header = await buildHeaderFromCircuitOutputs(output);
|
|
698
707
|
if (!(await header.hash()).equals(await builtBlockHeader.hash())) {
|
|
699
|
-
logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
708
|
+
this.logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
700
709
|
provingState.reject(`Block header hash mismatch.`);
|
|
701
710
|
return;
|
|
702
711
|
}
|
|
703
712
|
// Get db for this block
|
|
704
713
|
const blockNumber = provingState.blockNumber;
|
|
705
|
-
const db = this.dbs.get(blockNumber);
|
|
714
|
+
const db = this.dbs.get(blockNumber).fork;
|
|
706
715
|
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
707
716
|
const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
|
|
708
717
|
if (!syncedArchive.equals(newArchive)) {
|
|
709
|
-
logger.error(`Archive tree mismatch for block ${blockNumber}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
|
|
718
|
+
this.logger.error(`Archive tree mismatch for block ${blockNumber}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
|
|
710
719
|
provingState.reject(`Archive tree mismatch.`);
|
|
711
720
|
return;
|
|
712
721
|
}
|
|
713
722
|
const circuitArchive = output.newArchive;
|
|
714
723
|
if (!newArchive.equals(circuitArchive)) {
|
|
715
|
-
logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
724
|
+
this.logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
716
725
|
provingState.reject(`New archive mismatch.`);
|
|
717
726
|
return;
|
|
718
727
|
}
|
|
@@ -723,10 +732,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
723
732
|
void this.cleanupDBFork(blockNumber);
|
|
724
733
|
}
|
|
725
734
|
/**
|
|
726
|
-
* Cancel any further proving
|
|
735
|
+
* Cancel any further proving.
|
|
736
|
+
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
737
|
+
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
727
738
|
*/ cancel() {
|
|
728
|
-
|
|
729
|
-
controller.
|
|
739
|
+
if (this.cancelJobsOnStop) {
|
|
740
|
+
for (const controller of this.pendingProvingJobs){
|
|
741
|
+
controller.abort();
|
|
742
|
+
}
|
|
730
743
|
}
|
|
731
744
|
this.provingState?.cancel();
|
|
732
745
|
}
|
|
@@ -749,16 +762,19 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
749
762
|
return epochProofResult;
|
|
750
763
|
}
|
|
751
764
|
async cleanupDBFork(blockNumber) {
|
|
752
|
-
logger.debug(`Cleaning up world state fork for ${blockNumber}`);
|
|
765
|
+
this.logger.debug(`Cleaning up world state fork for ${blockNumber}`);
|
|
753
766
|
const fork = this.dbs.get(blockNumber);
|
|
754
767
|
if (!fork) {
|
|
755
768
|
return;
|
|
756
769
|
}
|
|
757
770
|
try {
|
|
758
|
-
|
|
771
|
+
if (!fork.cleanupPromise) {
|
|
772
|
+
fork.cleanupPromise = fork.fork.close();
|
|
773
|
+
}
|
|
774
|
+
await fork.cleanupPromise;
|
|
759
775
|
this.dbs.delete(blockNumber);
|
|
760
776
|
} catch (err) {
|
|
761
|
-
logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
777
|
+
this.logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
762
778
|
}
|
|
763
779
|
}
|
|
764
780
|
/**
|
|
@@ -768,7 +784,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
768
784
|
* @param job - The actual job, returns a promise notifying of the job's completion
|
|
769
785
|
*/ deferredProving(provingState, request, callback) {
|
|
770
786
|
if (!provingState.verifyState()) {
|
|
771
|
-
logger.debug(`Not enqueuing job, state no longer valid`);
|
|
787
|
+
this.logger.debug(`Not enqueuing job, state no longer valid`);
|
|
772
788
|
return;
|
|
773
789
|
}
|
|
774
790
|
const controller = new AbortController();
|
|
@@ -783,7 +799,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
783
799
|
}
|
|
784
800
|
const result = await request(controller.signal);
|
|
785
801
|
if (!provingState.verifyState()) {
|
|
786
|
-
logger.debug(`State no longer valid, discarding result`);
|
|
802
|
+
this.logger.debug(`State no longer valid, discarding result`);
|
|
787
803
|
return;
|
|
788
804
|
}
|
|
789
805
|
// we could have been cancelled whilst waiting for the result
|
|
@@ -798,7 +814,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
798
814
|
// drop this result
|
|
799
815
|
return;
|
|
800
816
|
}
|
|
801
|
-
logger.error(`Error thrown when proving job`, err);
|
|
817
|
+
this.logger.error(`Error thrown when proving job`, err);
|
|
802
818
|
provingState.reject(`${err}`);
|
|
803
819
|
} finally{
|
|
804
820
|
const index = this.pendingProvingJobs.indexOf(controller);
|
|
@@ -854,17 +870,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
854
870
|
// Executes the next level of merge if all inputs are available
|
|
855
871
|
enqueueBaseRollup(provingState, txIndex) {
|
|
856
872
|
if (!provingState.verifyState()) {
|
|
857
|
-
logger.debug('Not running base rollup, state invalid');
|
|
873
|
+
this.logger.debug('Not running base rollup, state invalid');
|
|
858
874
|
return;
|
|
859
875
|
}
|
|
860
876
|
if (!provingState.tryStartProvingBase(txIndex)) {
|
|
861
|
-
logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
877
|
+
this.logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
862
878
|
return;
|
|
863
879
|
}
|
|
864
880
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
865
881
|
const { processedTx } = txProvingState;
|
|
866
882
|
const { rollupType, inputs } = txProvingState.getBaseRollupTypeAndInputs();
|
|
867
|
-
logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
883
|
+
this.logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
868
884
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, `ProvingOrchestrator.prover.${inputs instanceof PrivateTxBaseRollupPrivateInputs ? 'getPrivateTxBaseRollupProof' : 'getPublicTxBaseRollupProof'}`, {
|
|
869
885
|
[Attributes.TX_HASH]: processedTx.hash.toString(),
|
|
870
886
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
@@ -875,7 +891,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
875
891
|
return this.prover.getPublicTxBaseRollupProof(inputs, signal, provingState.epochNumber);
|
|
876
892
|
}
|
|
877
893
|
}), (result)=>{
|
|
878
|
-
logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
894
|
+
this.logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
879
895
|
validatePartialState(result.inputs.endTreeSnapshots, txProvingState.treeSnapshots);
|
|
880
896
|
const leafLocation = provingState.setBaseRollupProof(txIndex, result);
|
|
881
897
|
if (provingState.totalNumTxs === 1) {
|
|
@@ -889,14 +905,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
889
905
|
// Once completed, will enqueue the the public tx base rollup.
|
|
890
906
|
getOrEnqueueChonkVerifier(provingState, txIndex) {
|
|
891
907
|
if (!provingState.verifyState()) {
|
|
892
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
908
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
893
909
|
return;
|
|
894
910
|
}
|
|
895
911
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
896
912
|
const txHash = txProvingState.processedTx.hash.toString();
|
|
897
913
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH;
|
|
898
914
|
const handleResult = (result)=>{
|
|
899
|
-
logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
915
|
+
this.logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
900
916
|
txHash
|
|
901
917
|
});
|
|
902
918
|
txProvingState.setPublicChonkVerifierProof(result);
|
|
@@ -904,18 +920,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
904
920
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
905
921
|
};
|
|
906
922
|
if (this.provingState?.cachedChonkVerifierProofs.has(txHash)) {
|
|
907
|
-
logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
923
|
+
this.logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
908
924
|
txHash
|
|
909
925
|
});
|
|
910
926
|
void this.provingState.cachedChonkVerifierProofs.get(txHash).then(handleResult);
|
|
911
927
|
return;
|
|
912
928
|
}
|
|
913
|
-
logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
929
|
+
this.logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
914
930
|
this.doEnqueueChonkVerifier(txHash, txProvingState.getPublicChonkVerifierPrivateInputs(), handleResult);
|
|
915
931
|
}
|
|
916
932
|
doEnqueueChonkVerifier(txHash, inputs, handler, provingState = this.provingState) {
|
|
917
933
|
if (!provingState.verifyState()) {
|
|
918
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
934
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
919
935
|
return;
|
|
920
936
|
}
|
|
921
937
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getPublicChonkVerifierProof', {
|
|
@@ -927,11 +943,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
927
943
|
// Enqueues the next level of merge if all inputs are available
|
|
928
944
|
enqueueMergeRollup(provingState, location) {
|
|
929
945
|
if (!provingState.verifyState()) {
|
|
930
|
-
logger.debug('Not running merge rollup. State no longer valid.');
|
|
946
|
+
this.logger.debug('Not running merge rollup. State no longer valid.');
|
|
931
947
|
return;
|
|
932
948
|
}
|
|
933
949
|
if (!provingState.tryStartProvingMerge(location)) {
|
|
934
|
-
logger.debug('Merge rollup already started.');
|
|
950
|
+
this.logger.debug('Merge rollup already started.');
|
|
935
951
|
return;
|
|
936
952
|
}
|
|
937
953
|
const inputs = provingState.getMergeRollupInputs(location);
|
|
@@ -945,15 +961,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
945
961
|
// Executes the block root rollup circuit
|
|
946
962
|
enqueueBlockRootRollup(provingState) {
|
|
947
963
|
if (!provingState.verifyState()) {
|
|
948
|
-
logger.debug('Not running block root rollup, state no longer valid');
|
|
964
|
+
this.logger.debug('Not running block root rollup, state no longer valid');
|
|
949
965
|
return;
|
|
950
966
|
}
|
|
951
967
|
if (!provingState.tryStartProvingBlockRoot()) {
|
|
952
|
-
logger.debug('Block root rollup already started.');
|
|
968
|
+
this.logger.debug('Block root rollup already started.');
|
|
953
969
|
return;
|
|
954
970
|
}
|
|
955
971
|
const { rollupType, inputs } = provingState.getBlockRootRollupTypeAndInputs();
|
|
956
|
-
logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
972
|
+
this.logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
957
973
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockRootRollupProof', {
|
|
958
974
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
959
975
|
}, (signal)=>{
|
|
@@ -969,7 +985,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
969
985
|
return this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber);
|
|
970
986
|
}
|
|
971
987
|
}), async (result)=>{
|
|
972
|
-
logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
988
|
+
this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
973
989
|
const leafLocation = provingState.setBlockRootRollupProof(result);
|
|
974
990
|
const checkpointProvingState = provingState.parentCheckpoint;
|
|
975
991
|
// If the proofs were slower than the block header building, then we need to try validating the block header hashes here.
|
|
@@ -987,11 +1003,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
987
1003
|
// Enqueues the root parity circuit if all inputs are available
|
|
988
1004
|
enqueueBaseParityCircuit(checkpointProvingState, provingState, baseParityIndex) {
|
|
989
1005
|
if (!provingState.verifyState()) {
|
|
990
|
-
logger.debug('Not running base parity. State no longer valid.');
|
|
1006
|
+
this.logger.debug('Not running base parity. State no longer valid.');
|
|
991
1007
|
return;
|
|
992
1008
|
}
|
|
993
1009
|
if (!provingState.tryStartProvingBaseParity(baseParityIndex)) {
|
|
994
|
-
logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
1010
|
+
this.logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
995
1011
|
return;
|
|
996
1012
|
}
|
|
997
1013
|
const inputs = checkpointProvingState.getBaseParityInputs(baseParityIndex);
|
|
@@ -1012,11 +1028,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1012
1028
|
// Enqueues the root rollup proof if all inputs are available
|
|
1013
1029
|
enqueueRootParityCircuit(provingState) {
|
|
1014
1030
|
if (!provingState.verifyState()) {
|
|
1015
|
-
logger.debug('Not running root parity. State no longer valid.');
|
|
1031
|
+
this.logger.debug('Not running root parity. State no longer valid.');
|
|
1016
1032
|
return;
|
|
1017
1033
|
}
|
|
1018
1034
|
if (!provingState.tryStartProvingRootParity()) {
|
|
1019
|
-
logger.debug('Root parity already started.');
|
|
1035
|
+
this.logger.debug('Root parity already started.');
|
|
1020
1036
|
return;
|
|
1021
1037
|
}
|
|
1022
1038
|
const inputs = provingState.getParityRootInputs();
|
|
@@ -1031,11 +1047,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1031
1047
|
// Enqueues the next level of merge if all inputs are available
|
|
1032
1048
|
enqueueBlockMergeRollup(provingState, location) {
|
|
1033
1049
|
if (!provingState.verifyState()) {
|
|
1034
|
-
logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1050
|
+
this.logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1035
1051
|
return;
|
|
1036
1052
|
}
|
|
1037
1053
|
if (!provingState.tryStartProvingBlockMerge(location)) {
|
|
1038
|
-
logger.debug('Block merge rollup already started.');
|
|
1054
|
+
this.logger.debug('Block merge rollup already started.');
|
|
1039
1055
|
return;
|
|
1040
1056
|
}
|
|
1041
1057
|
const inputs = provingState.getBlockMergeRollupInputs(location);
|
|
@@ -1048,15 +1064,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1048
1064
|
}
|
|
1049
1065
|
enqueueCheckpointRootRollup(provingState) {
|
|
1050
1066
|
if (!provingState.verifyState()) {
|
|
1051
|
-
logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1067
|
+
this.logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1052
1068
|
return;
|
|
1053
1069
|
}
|
|
1054
1070
|
if (!provingState.tryStartProvingCheckpointRoot()) {
|
|
1055
|
-
logger.debug('Checkpoint root rollup already started.');
|
|
1071
|
+
this.logger.debug('Checkpoint root rollup already started.');
|
|
1056
1072
|
return;
|
|
1057
1073
|
}
|
|
1058
1074
|
const rollupType = provingState.getCheckpointRootRollupType();
|
|
1059
|
-
logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1075
|
+
this.logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1060
1076
|
const inputs = provingState.getCheckpointRootRollupInputs();
|
|
1061
1077
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointRootRollupProof', {
|
|
1062
1078
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
@@ -1070,11 +1086,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1070
1086
|
const computedEndBlobAccumulatorState = provingState.getEndBlobAccumulator().toBlobAccumulator();
|
|
1071
1087
|
const circuitEndBlobAccumulatorState = result.inputs.endBlobAccumulator;
|
|
1072
1088
|
if (!circuitEndBlobAccumulatorState.equals(computedEndBlobAccumulatorState)) {
|
|
1073
|
-
logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(computedEndBlobAccumulatorState)}`);
|
|
1089
|
+
this.logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(computedEndBlobAccumulatorState)}`);
|
|
1074
1090
|
provingState.reject(`Blob accumulator state mismatch.`);
|
|
1075
1091
|
return;
|
|
1076
1092
|
}
|
|
1077
|
-
logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1093
|
+
this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1078
1094
|
const leafLocation = provingState.setCheckpointRootRollupProof(result);
|
|
1079
1095
|
const epochProvingState = provingState.parentEpoch;
|
|
1080
1096
|
if (epochProvingState.totalNumCheckpoints === 1) {
|
|
@@ -1086,37 +1102,37 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1086
1102
|
}
|
|
1087
1103
|
enqueueCheckpointMergeRollup(provingState, location) {
|
|
1088
1104
|
if (!provingState.verifyState()) {
|
|
1089
|
-
logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1105
|
+
this.logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1090
1106
|
return;
|
|
1091
1107
|
}
|
|
1092
1108
|
if (!provingState.tryStartProvingCheckpointMerge(location)) {
|
|
1093
|
-
logger.debug('Checkpoint merge rollup already started.');
|
|
1109
|
+
this.logger.debug('Checkpoint merge rollup already started.');
|
|
1094
1110
|
return;
|
|
1095
1111
|
}
|
|
1096
1112
|
const inputs = provingState.getCheckpointMergeRollupInputs(location);
|
|
1097
1113
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointMergeRollupProof', {
|
|
1098
1114
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-merge'
|
|
1099
1115
|
}, (signal)=>this.prover.getCheckpointMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1100
|
-
logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1116
|
+
this.logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1101
1117
|
provingState.setCheckpointMergeRollupProof(location, result);
|
|
1102
1118
|
this.checkAndEnqueueNextCheckpointMergeRollup(provingState, location);
|
|
1103
1119
|
});
|
|
1104
1120
|
}
|
|
1105
1121
|
enqueueEpochPadding(provingState) {
|
|
1106
1122
|
if (!provingState.verifyState()) {
|
|
1107
|
-
logger.debug('Not running epoch padding. State no longer valid.');
|
|
1123
|
+
this.logger.debug('Not running epoch padding. State no longer valid.');
|
|
1108
1124
|
return;
|
|
1109
1125
|
}
|
|
1110
1126
|
if (!provingState.tryStartProvingPaddingCheckpoint()) {
|
|
1111
|
-
logger.debug('Padding checkpoint already started.');
|
|
1127
|
+
this.logger.debug('Padding checkpoint already started.');
|
|
1112
1128
|
return;
|
|
1113
1129
|
}
|
|
1114
|
-
logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1130
|
+
this.logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1115
1131
|
const inputs = provingState.getPaddingCheckpointInputs();
|
|
1116
1132
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointPaddingRollupProof', {
|
|
1117
1133
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-padding'
|
|
1118
1134
|
}, (signal)=>this.prover.getCheckpointPaddingRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1119
|
-
logger.debug('Completed proof for padding checkpoint.');
|
|
1135
|
+
this.logger.debug('Completed proof for padding checkpoint.');
|
|
1120
1136
|
provingState.setCheckpointPaddingProof(result);
|
|
1121
1137
|
this.checkAndEnqueueRootRollup(provingState);
|
|
1122
1138
|
});
|
|
@@ -1124,15 +1140,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1124
1140
|
// Executes the root rollup circuit
|
|
1125
1141
|
enqueueRootRollup(provingState) {
|
|
1126
1142
|
if (!provingState.verifyState()) {
|
|
1127
|
-
logger.debug('Not running root rollup, state no longer valid');
|
|
1143
|
+
this.logger.debug('Not running root rollup, state no longer valid');
|
|
1128
1144
|
return;
|
|
1129
1145
|
}
|
|
1130
|
-
logger.debug(`Preparing root rollup`);
|
|
1146
|
+
this.logger.debug(`Preparing root rollup`);
|
|
1131
1147
|
const inputs = provingState.getRootRollupInputs();
|
|
1132
1148
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
|
|
1133
1149
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-root'
|
|
1134
1150
|
}, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1135
|
-
logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1151
|
+
this.logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1136
1152
|
provingState.setRootRollupProof(result);
|
|
1137
1153
|
provingState.resolve({
|
|
1138
1154
|
status: 'success'
|
|
@@ -1152,7 +1168,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1152
1168
|
}
|
|
1153
1169
|
checkAndEnqueueBlockRootRollup(provingState) {
|
|
1154
1170
|
if (!provingState.isReadyForBlockRootRollup()) {
|
|
1155
|
-
logger.debug('Not ready for block root rollup');
|
|
1171
|
+
this.logger.debug('Not ready for block root rollup');
|
|
1156
1172
|
return;
|
|
1157
1173
|
}
|
|
1158
1174
|
this.enqueueBlockRootRollup(provingState);
|
|
@@ -1187,7 +1203,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1187
1203
|
}
|
|
1188
1204
|
checkAndEnqueueRootRollup(provingState) {
|
|
1189
1205
|
if (!provingState.isReadyForRootRollup()) {
|
|
1190
|
-
logger.debug('Not ready for root rollup');
|
|
1206
|
+
this.logger.debug('Not ready for root rollup');
|
|
1191
1207
|
return;
|
|
1192
1208
|
}
|
|
1193
1209
|
this.enqueueRootRollup(provingState);
|
|
@@ -1199,7 +1215,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1199
1215
|
* @param txIndex - The index of the transaction being proven
|
|
1200
1216
|
*/ enqueueVM(provingState, txIndex) {
|
|
1201
1217
|
if (!provingState.verifyState()) {
|
|
1202
|
-
logger.debug(`Not running VM circuit as state is no longer valid`);
|
|
1218
|
+
this.logger.debug(`Not running VM circuit as state is no longer valid`);
|
|
1203
1219
|
return;
|
|
1204
1220
|
}
|
|
1205
1221
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
@@ -1210,7 +1226,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1210
1226
|
return await this.prover.getAvmProof(inputs, signal, provingState.epochNumber);
|
|
1211
1227
|
});
|
|
1212
1228
|
this.deferredProving(provingState, doAvmProving, (proof)=>{
|
|
1213
|
-
logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1229
|
+
this.logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1214
1230
|
txProvingState.setAvmProof(proof);
|
|
1215
1231
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
1216
1232
|
});
|
|
@@ -1221,7 +1237,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1221
1237
|
return;
|
|
1222
1238
|
}
|
|
1223
1239
|
// We must have completed all proving (chonk verifier proof and (if required) vm proof are generated), we now move to the base rollup.
|
|
1224
|
-
logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
|
|
1240
|
+
this.logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
|
|
1225
1241
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
1226
1242
|
}
|
|
1227
1243
|
}
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWNsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1jbGllbnQvcHJvdmVyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxRQUFRLEVBQTJDLE1BQU0sa0JBQWtCLENBQUM7QUFFM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHaEUsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNoQixLQUFLLGtCQUFrQixFQUN2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLGdCQUFnQixFQUNyQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLG1CQUFtQixFQUV6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU92RCxzSEFBc0g7QUFDdEgscUJBQWEsWUFBYSxZQUFXLGtCQUFrQjtJQVFuRCxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxrQkFBa0I7SUFDMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNwQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsR0FBRztJQVpiLE9BQU8sQ0FBQyxPQUFPLENBQVM7SUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBc0I7SUFFcEMsT0FBTyxDQUFDLFVBQVUsQ0FBYTtJQUMvQixPQUFPLENBQUMsZ0JBQWdCLENBQXlCO0lBRWpELE9BQU8sZUFVTjtJQUVNLGlCQUFpQixJQUFJLFdBQVcsQ0FrQnRDO0lBRU0sV0FBVyxJQUFJLFVBQVUsQ0FFL0I7SUFFSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVkzRTtJQUVEOztPQUVHO0lBQ1UsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FPbEM7SUFFRDs7T0FFRztJQUNVLElBQUksa0JBT2hCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFvQixHQUFHLENBQ3JCLE1BQU0sRUFBRSxrQkFBa0IsRUFDMUIsVUFBVSxFQUFFLHdCQUF3QixHQUFHLHdCQUF3QixFQUMvRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLFNBQVMsR0FBRSxlQUFzQyx5QkFLbEQ7SUFFTSxtQkFBbUIsSUFBSSxrQkFBa0IsQ0FNL0M7WUFFYSxvQkFBb0I7WUFxQnBCLFVBQVU7Q0FHekI7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQ3RDLE1BQU0sRUFBRSxrQkFBa0IsR0FBRyxVQUFVLEdBQUcsUUFBUSxFQUNsRCxTQUFTLEVBQUUsZUFBZSxHQUN6QixPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FXOUIifQ==
|
|
@@ -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,CAkBtC;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;YAqBpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAW9B"}
|
|
@@ -33,8 +33,9 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
33
33
|
this.failedProofStore = this.config.failedProofStore ? createProofStore(this.config.failedProofStore) : undefined;
|
|
34
34
|
}
|
|
35
35
|
createEpochProver() {
|
|
36
|
-
const
|
|
37
|
-
const
|
|
36
|
+
const bindings = this.log.getBindings();
|
|
37
|
+
const facade = new BrokerCircuitProverFacade(this.orchestratorClient, this.proofStore, this.failedProofStore, undefined, bindings);
|
|
38
|
+
const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.config.proverId, this.config.cancelJobsOnStop, this.telemetry, bindings);
|
|
38
39
|
return new ServerEpochProver(facade, orchestrator);
|
|
39
40
|
}
|
|
40
41
|
getProverId() {
|
|
@@ -95,7 +96,8 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
95
96
|
}
|
|
96
97
|
const proofStore = new InlineProofStore();
|
|
97
98
|
const prover = await buildServerCircuitProver(this.config, this.telemetry);
|
|
98
|
-
|
|
99
|
+
const bindings = this.log.getBindings();
|
|
100
|
+
this.agents = times(this.config.proverAgentCount, ()=>new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs, bindings));
|
|
99
101
|
await Promise.all(this.agents.map((agent)=>agent.start()));
|
|
100
102
|
}
|
|
101
103
|
async stopAgents() {
|
|
@@ -106,6 +108,7 @@ export function buildServerCircuitProver(config, telemetry) {
|
|
|
106
108
|
if (config.realProofs) {
|
|
107
109
|
return BBNativeRollupProver.new(config, telemetry);
|
|
108
110
|
}
|
|
109
|
-
const
|
|
111
|
+
const logger = createLogger('prover-client:acvm-native');
|
|
112
|
+
const simulator = config.acvmBinaryPath ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath, undefined, logger) : undefined;
|
|
110
113
|
return Promise.resolve(new TestCircuitProver(simulator, config, telemetry));
|
|
111
114
|
}
|