@aztec/prover-client 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec5f612
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 +12 -5
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +42 -20
- 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/mocks/test_context.js +5 -2
- package/dest/orchestrator/block-building-helpers.d.ts +4 -4
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +3 -3
- package/dest/orchestrator/block-proving-state.d.ts +4 -1
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +7 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts +3 -3
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +3 -3
- package/dest/orchestrator/epoch-proving-state.d.ts +3 -3
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +5 -3
- package/dest/orchestrator/orchestrator.d.ts +5 -3
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +105 -113
- package/dest/prover-client/prover-client.d.ts +3 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +15 -10
- 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 +9 -1
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +13 -2
- package/dest/proving_broker/proof_store/factory.d.ts +2 -5
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/factory.js +7 -30
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
- package/dest/proving_broker/proof_store/index.d.ts +2 -2
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -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.d.ts +7 -4
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +36 -4
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +3 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +18 -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/dest/proving_broker/rpc.d.ts +4 -2
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +8 -0
- package/dest/test/mock_prover.d.ts +4 -4
- package/package.json +15 -16
- package/src/light/lightweight_checkpoint_builder.ts +48 -21
- package/src/mocks/fixtures.ts +2 -1
- package/src/mocks/test_context.ts +2 -2
- package/src/orchestrator/block-building-helpers.ts +3 -3
- package/src/orchestrator/block-proving-state.ts +9 -0
- package/src/orchestrator/checkpoint-proving-state.ts +4 -4
- package/src/orchestrator/epoch-proving-state.ts +6 -4
- package/src/orchestrator/orchestrator.ts +116 -121
- package/src/prover-client/prover-client.ts +22 -13
- package/src/proving_broker/broker_prover_facade.ts +6 -3
- package/src/proving_broker/config.ts +13 -0
- package/src/proving_broker/proof_store/factory.ts +10 -32
- package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
- package/src/proving_broker/proof_store/index.ts +1 -1
- package/src/proving_broker/proving_agent.ts +5 -2
- package/src/proving_broker/proving_broker.ts +37 -3
- package/src/proving_broker/proving_broker_instrumentation.ts +19 -6
- package/src/proving_broker/proving_job_controller.ts +9 -3
- package/src/proving_broker/rpc.ts +14 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -52
- package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
|
@@ -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)=>({
|
|
@@ -450,7 +449,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
450
449
|
metrics;
|
|
451
450
|
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
452
451
|
dbs;
|
|
453
|
-
|
|
452
|
+
logger;
|
|
453
|
+
constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, telemetryClient = getTelemetryClient(), bindings){
|
|
454
454
|
this.dbProvider = dbProvider;
|
|
455
455
|
this.prover = prover;
|
|
456
456
|
this.proverId = proverId;
|
|
@@ -459,6 +459,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
459
459
|
this.pendingProvingJobs = [];
|
|
460
460
|
this.provingPromise = undefined;
|
|
461
461
|
this.dbs = new Map();
|
|
462
|
+
this.logger = createLogger('prover-client:orchestrator', bindings);
|
|
462
463
|
this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
|
|
463
464
|
}
|
|
464
465
|
get tracer() {
|
|
@@ -483,7 +484,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
483
484
|
status: 'failure',
|
|
484
485
|
reason
|
|
485
486
|
}));
|
|
486
|
-
logger.info(`Starting epoch ${epochNumber} with ${totalNumCheckpoints} checkpoints.`);
|
|
487
|
+
this.logger.info(`Starting epoch ${epochNumber} with ${totalNumCheckpoints} checkpoints.`);
|
|
487
488
|
this.provingState = new EpochProvingState(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges, (provingState)=>this.checkAndEnqueueCheckpointRootRollup(provingState), resolve, reject);
|
|
488
489
|
this.provingPromise = promise;
|
|
489
490
|
}
|
|
@@ -505,10 +506,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
505
506
|
const lastBlockNumber = headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber;
|
|
506
507
|
const db = await this.dbProvider.fork(lastBlockNumber);
|
|
507
508
|
const firstBlockNumber = BlockNumber(lastBlockNumber + 1);
|
|
508
|
-
this.dbs.set(firstBlockNumber,
|
|
509
|
-
fork: db,
|
|
510
|
-
cleanupPromise: undefined
|
|
511
|
-
});
|
|
509
|
+
this.dbs.set(firstBlockNumber, db);
|
|
512
510
|
// Get archive sibling path before any block in this checkpoint lands.
|
|
513
511
|
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
514
512
|
// Insert all the l1 to l2 messages into the db. And get the states before and after the insertion.
|
|
@@ -533,17 +531,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
533
531
|
throw new Error(`Checkpoint not accepting further blocks.`);
|
|
534
532
|
}
|
|
535
533
|
const constants = checkpointProvingState.constants;
|
|
536
|
-
logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
534
|
+
this.logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
537
535
|
// Fork the db only when it's not already set. The db for the first block is set in `startNewCheckpoint`.
|
|
538
536
|
if (!this.dbs.has(blockNumber)) {
|
|
539
537
|
// Fork world state at the end of the immediately previous block
|
|
540
538
|
const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
|
|
541
|
-
this.dbs.set(blockNumber,
|
|
542
|
-
fork: db,
|
|
543
|
-
cleanupPromise: undefined
|
|
544
|
-
});
|
|
539
|
+
this.dbs.set(blockNumber, db);
|
|
545
540
|
}
|
|
546
|
-
const db = this.
|
|
541
|
+
const db = this.getDbForBlock(blockNumber);
|
|
547
542
|
// Get archive snapshot and sibling path before any txs in this block lands.
|
|
548
543
|
const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
549
544
|
const lastArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
@@ -578,7 +573,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
578
573
|
if (!txs.length) {
|
|
579
574
|
// To avoid an ugly throw below. If we require an empty block, we can just call setBlockCompleted
|
|
580
575
|
// on a block with no txs. We cannot do that here because we cannot find the blockNumber without any txs.
|
|
581
|
-
logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
576
|
+
this.logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
582
577
|
return;
|
|
583
578
|
}
|
|
584
579
|
const blockNumber = BlockNumber(txs[0].globalVariables.blockNumber);
|
|
@@ -592,8 +587,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
592
587
|
if (!provingState.isAcceptingTxs()) {
|
|
593
588
|
throw new Error(`Block ${blockNumber} has been initialized with transactions.`);
|
|
594
589
|
}
|
|
595
|
-
logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
596
|
-
const db = this.
|
|
590
|
+
this.logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
591
|
+
const db = this.getDbForBlock(blockNumber);
|
|
597
592
|
const lastArchive = provingState.lastArchiveTreeSnapshot;
|
|
598
593
|
const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
|
|
599
594
|
const spongeBlobState = provingState.getStartSpongeBlob().clone();
|
|
@@ -603,7 +598,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
603
598
|
throw new Error(`Invalid proving state when adding a tx`);
|
|
604
599
|
}
|
|
605
600
|
validateTx(tx);
|
|
606
|
-
logger.debug(`Received transaction: ${tx.hash}`);
|
|
601
|
+
this.logger.debug(`Received transaction: ${tx.hash}`);
|
|
607
602
|
const startSpongeBlob = spongeBlobState.clone();
|
|
608
603
|
const [hints, treeSnapshots] = await this.prepareBaseRollupInputs(tx, lastArchive, newL1ToL2MessageTreeSnapshot, startSpongeBlob, db);
|
|
609
604
|
if (!provingState.verifyState()) {
|
|
@@ -614,10 +609,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
614
609
|
const txIndex = provingState.addNewTx(txProvingState);
|
|
615
610
|
if (txProvingState.requireAvmProof) {
|
|
616
611
|
this.getOrEnqueueChonkVerifier(provingState, txIndex);
|
|
617
|
-
logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
612
|
+
this.logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
618
613
|
this.enqueueVM(provingState, txIndex);
|
|
619
614
|
} else {
|
|
620
|
-
logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
615
|
+
this.logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
621
616
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
622
617
|
}
|
|
623
618
|
} catch (err) {
|
|
@@ -647,7 +642,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
647
642
|
const txHash = tx.getTxHash().toString();
|
|
648
643
|
const privateInputs = getPublicChonkVerifierPrivateInputsFromTx(tx, this.proverId.toField());
|
|
649
644
|
const tubeProof = promiseWithResolvers();
|
|
650
|
-
logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
645
|
+
this.logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
651
646
|
this.doEnqueueChonkVerifier(txHash, privateInputs, (proof)=>{
|
|
652
647
|
tubeProof.resolve(proof);
|
|
653
648
|
});
|
|
@@ -676,17 +671,23 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
676
671
|
throw new Error(`Block ${blockNumber} is still accepting txs. Call setBlockCompleted after all txs have been added.`);
|
|
677
672
|
}
|
|
678
673
|
// Given we've applied every change from this block, now assemble the block header:
|
|
679
|
-
logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
674
|
+
this.logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
680
675
|
const header = await provingState.buildBlockHeader();
|
|
681
676
|
if (expectedHeader && !header.equals(expectedHeader)) {
|
|
682
|
-
logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
677
|
+
this.logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
683
678
|
throw new Error('Block header mismatch');
|
|
684
679
|
}
|
|
685
|
-
// Get db for this block
|
|
686
|
-
const db = this.
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
680
|
+
// Get db for this block and remove from map — no other code should use it after this point.
|
|
681
|
+
const db = this.getDbForBlock(provingState.blockNumber);
|
|
682
|
+
this.dbs.delete(provingState.blockNumber);
|
|
683
|
+
// Update the archive tree, capture the snapshot, and close the fork deterministically.
|
|
684
|
+
try {
|
|
685
|
+
this.logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${(await header.hash()).toString()}`);
|
|
686
|
+
await db.updateArchive(header);
|
|
687
|
+
provingState.setBuiltArchive(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db));
|
|
688
|
+
} finally{
|
|
689
|
+
await db.close();
|
|
690
|
+
}
|
|
690
691
|
await this.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
691
692
|
return header;
|
|
692
693
|
}
|
|
@@ -694,41 +695,38 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
694
695
|
async verifyBuiltBlockAgainstSyncedState(provingState) {
|
|
695
696
|
const builtBlockHeader = provingState.getBuiltBlockHeader();
|
|
696
697
|
if (!builtBlockHeader) {
|
|
697
|
-
logger.debug('Block header not built yet, skipping header check.');
|
|
698
|
+
this.logger.debug('Block header not built yet, skipping header check.');
|
|
698
699
|
return;
|
|
699
700
|
}
|
|
700
701
|
const output = provingState.getBlockRootRollupOutput();
|
|
701
702
|
if (!output) {
|
|
702
|
-
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.');
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
const newArchive = provingState.getBuiltArchive();
|
|
707
|
+
if (!newArchive) {
|
|
708
|
+
this.logger.debug('Archive snapshot not yet captured, skipping header check.');
|
|
703
709
|
return;
|
|
704
710
|
}
|
|
705
711
|
const header = await buildHeaderFromCircuitOutputs(output);
|
|
706
712
|
if (!(await header.hash()).equals(await builtBlockHeader.hash())) {
|
|
707
|
-
logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
713
|
+
this.logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
708
714
|
provingState.reject(`Block header hash mismatch.`);
|
|
709
715
|
return;
|
|
710
716
|
}
|
|
711
|
-
// Get db for this block
|
|
712
717
|
const blockNumber = provingState.blockNumber;
|
|
713
|
-
const db = this.dbs.get(blockNumber).fork;
|
|
714
|
-
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
715
718
|
const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
|
|
716
719
|
if (!syncedArchive.equals(newArchive)) {
|
|
717
|
-
logger.error(`Archive tree mismatch for block ${blockNumber}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
|
|
720
|
+
this.logger.error(`Archive tree mismatch for block ${blockNumber}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
|
|
718
721
|
provingState.reject(`Archive tree mismatch.`);
|
|
719
722
|
return;
|
|
720
723
|
}
|
|
721
724
|
const circuitArchive = output.newArchive;
|
|
722
725
|
if (!newArchive.equals(circuitArchive)) {
|
|
723
|
-
logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
726
|
+
this.logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
724
727
|
provingState.reject(`New archive mismatch.`);
|
|
725
728
|
return;
|
|
726
729
|
}
|
|
727
|
-
// TODO(palla/prover): This closes the fork only on the happy path. If this epoch orchestrator
|
|
728
|
-
// is aborted and never reaches this point, it will leak the fork. We need to add a global cleanup,
|
|
729
|
-
// but have to make sure it only runs once all operations are completed, otherwise some function here
|
|
730
|
-
// will attempt to access the fork after it was closed.
|
|
731
|
-
void this.cleanupDBFork(blockNumber);
|
|
732
730
|
}
|
|
733
731
|
/**
|
|
734
732
|
* Cancel any further proving.
|
|
@@ -741,6 +739,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
741
739
|
}
|
|
742
740
|
}
|
|
743
741
|
this.provingState?.cancel();
|
|
742
|
+
for (const [blockNumber, db] of this.dbs.entries()){
|
|
743
|
+
void db.close().catch((err)=>this.logger.error(`Error closing db for block ${blockNumber}`, err));
|
|
744
|
+
}
|
|
745
|
+
this.dbs.clear();
|
|
746
|
+
}
|
|
747
|
+
getDbForBlock(blockNumber) {
|
|
748
|
+
const db = this.dbs.get(blockNumber);
|
|
749
|
+
if (!db) {
|
|
750
|
+
throw new Error(`World state fork for block ${blockNumber} not found.`);
|
|
751
|
+
}
|
|
752
|
+
return db;
|
|
744
753
|
}
|
|
745
754
|
/**
|
|
746
755
|
* Returns the proof for the current epoch.
|
|
@@ -760,22 +769,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
760
769
|
});
|
|
761
770
|
return epochProofResult;
|
|
762
771
|
}
|
|
763
|
-
async cleanupDBFork(blockNumber) {
|
|
764
|
-
logger.debug(`Cleaning up world state fork for ${blockNumber}`);
|
|
765
|
-
const fork = this.dbs.get(blockNumber);
|
|
766
|
-
if (!fork) {
|
|
767
|
-
return;
|
|
768
|
-
}
|
|
769
|
-
try {
|
|
770
|
-
if (!fork.cleanupPromise) {
|
|
771
|
-
fork.cleanupPromise = fork.fork.close();
|
|
772
|
-
}
|
|
773
|
-
await fork.cleanupPromise;
|
|
774
|
-
this.dbs.delete(blockNumber);
|
|
775
|
-
} catch (err) {
|
|
776
|
-
logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
772
|
/**
|
|
780
773
|
* Enqueue a job to be scheduled
|
|
781
774
|
* @param provingState - The proving state object being operated on
|
|
@@ -783,7 +776,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
783
776
|
* @param job - The actual job, returns a promise notifying of the job's completion
|
|
784
777
|
*/ deferredProving(provingState, request, callback) {
|
|
785
778
|
if (!provingState.verifyState()) {
|
|
786
|
-
logger.debug(`Not enqueuing job, state no longer valid`);
|
|
779
|
+
this.logger.debug(`Not enqueuing job, state no longer valid`);
|
|
787
780
|
return;
|
|
788
781
|
}
|
|
789
782
|
const controller = new AbortController();
|
|
@@ -798,7 +791,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
798
791
|
}
|
|
799
792
|
const result = await request(controller.signal);
|
|
800
793
|
if (!provingState.verifyState()) {
|
|
801
|
-
logger.debug(`State no longer valid, discarding result`);
|
|
794
|
+
this.logger.debug(`State no longer valid, discarding result`);
|
|
802
795
|
return;
|
|
803
796
|
}
|
|
804
797
|
// we could have been cancelled whilst waiting for the result
|
|
@@ -813,7 +806,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
813
806
|
// drop this result
|
|
814
807
|
return;
|
|
815
808
|
}
|
|
816
|
-
logger.error(`Error thrown when proving job`, err);
|
|
809
|
+
this.logger.error(`Error thrown when proving job`, err);
|
|
817
810
|
provingState.reject(`${err}`);
|
|
818
811
|
} finally{
|
|
819
812
|
const index = this.pendingProvingJobs.indexOf(controller);
|
|
@@ -869,17 +862,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
869
862
|
// Executes the next level of merge if all inputs are available
|
|
870
863
|
enqueueBaseRollup(provingState, txIndex) {
|
|
871
864
|
if (!provingState.verifyState()) {
|
|
872
|
-
logger.debug('Not running base rollup, state invalid');
|
|
865
|
+
this.logger.debug('Not running base rollup, state invalid');
|
|
873
866
|
return;
|
|
874
867
|
}
|
|
875
868
|
if (!provingState.tryStartProvingBase(txIndex)) {
|
|
876
|
-
logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
869
|
+
this.logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
877
870
|
return;
|
|
878
871
|
}
|
|
879
872
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
880
873
|
const { processedTx } = txProvingState;
|
|
881
874
|
const { rollupType, inputs } = txProvingState.getBaseRollupTypeAndInputs();
|
|
882
|
-
logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
875
|
+
this.logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
883
876
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, `ProvingOrchestrator.prover.${inputs instanceof PrivateTxBaseRollupPrivateInputs ? 'getPrivateTxBaseRollupProof' : 'getPublicTxBaseRollupProof'}`, {
|
|
884
877
|
[Attributes.TX_HASH]: processedTx.hash.toString(),
|
|
885
878
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
@@ -890,7 +883,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
890
883
|
return this.prover.getPublicTxBaseRollupProof(inputs, signal, provingState.epochNumber);
|
|
891
884
|
}
|
|
892
885
|
}), (result)=>{
|
|
893
|
-
logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
886
|
+
this.logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
894
887
|
validatePartialState(result.inputs.endTreeSnapshots, txProvingState.treeSnapshots);
|
|
895
888
|
const leafLocation = provingState.setBaseRollupProof(txIndex, result);
|
|
896
889
|
if (provingState.totalNumTxs === 1) {
|
|
@@ -904,14 +897,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
904
897
|
// Once completed, will enqueue the the public tx base rollup.
|
|
905
898
|
getOrEnqueueChonkVerifier(provingState, txIndex) {
|
|
906
899
|
if (!provingState.verifyState()) {
|
|
907
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
900
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
908
901
|
return;
|
|
909
902
|
}
|
|
910
903
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
911
904
|
const txHash = txProvingState.processedTx.hash.toString();
|
|
912
905
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH;
|
|
913
906
|
const handleResult = (result)=>{
|
|
914
|
-
logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
907
|
+
this.logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
915
908
|
txHash
|
|
916
909
|
});
|
|
917
910
|
txProvingState.setPublicChonkVerifierProof(result);
|
|
@@ -919,18 +912,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
919
912
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
920
913
|
};
|
|
921
914
|
if (this.provingState?.cachedChonkVerifierProofs.has(txHash)) {
|
|
922
|
-
logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
915
|
+
this.logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
923
916
|
txHash
|
|
924
917
|
});
|
|
925
918
|
void this.provingState.cachedChonkVerifierProofs.get(txHash).then(handleResult);
|
|
926
919
|
return;
|
|
927
920
|
}
|
|
928
|
-
logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
921
|
+
this.logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
929
922
|
this.doEnqueueChonkVerifier(txHash, txProvingState.getPublicChonkVerifierPrivateInputs(), handleResult);
|
|
930
923
|
}
|
|
931
924
|
doEnqueueChonkVerifier(txHash, inputs, handler, provingState = this.provingState) {
|
|
932
925
|
if (!provingState.verifyState()) {
|
|
933
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
926
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
934
927
|
return;
|
|
935
928
|
}
|
|
936
929
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getPublicChonkVerifierProof', {
|
|
@@ -942,11 +935,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
942
935
|
// Enqueues the next level of merge if all inputs are available
|
|
943
936
|
enqueueMergeRollup(provingState, location) {
|
|
944
937
|
if (!provingState.verifyState()) {
|
|
945
|
-
logger.debug('Not running merge rollup. State no longer valid.');
|
|
938
|
+
this.logger.debug('Not running merge rollup. State no longer valid.');
|
|
946
939
|
return;
|
|
947
940
|
}
|
|
948
941
|
if (!provingState.tryStartProvingMerge(location)) {
|
|
949
|
-
logger.debug('Merge rollup already started.');
|
|
942
|
+
this.logger.debug('Merge rollup already started.');
|
|
950
943
|
return;
|
|
951
944
|
}
|
|
952
945
|
const inputs = provingState.getMergeRollupInputs(location);
|
|
@@ -960,15 +953,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
960
953
|
// Executes the block root rollup circuit
|
|
961
954
|
enqueueBlockRootRollup(provingState) {
|
|
962
955
|
if (!provingState.verifyState()) {
|
|
963
|
-
logger.debug('Not running block root rollup, state no longer valid');
|
|
956
|
+
this.logger.debug('Not running block root rollup, state no longer valid');
|
|
964
957
|
return;
|
|
965
958
|
}
|
|
966
959
|
if (!provingState.tryStartProvingBlockRoot()) {
|
|
967
|
-
logger.debug('Block root rollup already started.');
|
|
960
|
+
this.logger.debug('Block root rollup already started.');
|
|
968
961
|
return;
|
|
969
962
|
}
|
|
970
963
|
const { rollupType, inputs } = provingState.getBlockRootRollupTypeAndInputs();
|
|
971
|
-
logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
964
|
+
this.logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
972
965
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockRootRollupProof', {
|
|
973
966
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
974
967
|
}, (signal)=>{
|
|
@@ -984,29 +977,28 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
984
977
|
return this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber);
|
|
985
978
|
}
|
|
986
979
|
}), async (result)=>{
|
|
987
|
-
logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
980
|
+
this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
988
981
|
const leafLocation = provingState.setBlockRootRollupProof(result);
|
|
989
982
|
const checkpointProvingState = provingState.parentCheckpoint;
|
|
990
|
-
//
|
|
983
|
+
// Verification is called from both here and setBlockCompleted. Whichever runs last
|
|
984
|
+
// will be the first to see all three pieces (header, proof output, archive) and run the checks.
|
|
991
985
|
await this.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
992
986
|
if (checkpointProvingState.totalNumBlocks === 1) {
|
|
993
|
-
this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
|
|
987
|
+
await this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
|
|
994
988
|
} else {
|
|
995
|
-
this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
|
|
989
|
+
await this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
|
|
996
990
|
}
|
|
997
|
-
// We are finished with the block at this point, ensure the fork is cleaned up
|
|
998
|
-
void this.cleanupDBFork(provingState.blockNumber);
|
|
999
991
|
});
|
|
1000
992
|
}
|
|
1001
993
|
// Executes the base parity circuit and stores the intermediate state for the root parity circuit
|
|
1002
994
|
// Enqueues the root parity circuit if all inputs are available
|
|
1003
995
|
enqueueBaseParityCircuit(checkpointProvingState, provingState, baseParityIndex) {
|
|
1004
996
|
if (!provingState.verifyState()) {
|
|
1005
|
-
logger.debug('Not running base parity. State no longer valid.');
|
|
997
|
+
this.logger.debug('Not running base parity. State no longer valid.');
|
|
1006
998
|
return;
|
|
1007
999
|
}
|
|
1008
1000
|
if (!provingState.tryStartProvingBaseParity(baseParityIndex)) {
|
|
1009
|
-
logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
1001
|
+
this.logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
1010
1002
|
return;
|
|
1011
1003
|
}
|
|
1012
1004
|
const inputs = checkpointProvingState.getBaseParityInputs(baseParityIndex);
|
|
@@ -1027,11 +1019,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1027
1019
|
// Enqueues the root rollup proof if all inputs are available
|
|
1028
1020
|
enqueueRootParityCircuit(provingState) {
|
|
1029
1021
|
if (!provingState.verifyState()) {
|
|
1030
|
-
logger.debug('Not running root parity. State no longer valid.');
|
|
1022
|
+
this.logger.debug('Not running root parity. State no longer valid.');
|
|
1031
1023
|
return;
|
|
1032
1024
|
}
|
|
1033
1025
|
if (!provingState.tryStartProvingRootParity()) {
|
|
1034
|
-
logger.debug('Root parity already started.');
|
|
1026
|
+
this.logger.debug('Root parity already started.');
|
|
1035
1027
|
return;
|
|
1036
1028
|
}
|
|
1037
1029
|
const inputs = provingState.getParityRootInputs();
|
|
@@ -1046,33 +1038,33 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1046
1038
|
// Enqueues the next level of merge if all inputs are available
|
|
1047
1039
|
enqueueBlockMergeRollup(provingState, location) {
|
|
1048
1040
|
if (!provingState.verifyState()) {
|
|
1049
|
-
logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1041
|
+
this.logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1050
1042
|
return;
|
|
1051
1043
|
}
|
|
1052
1044
|
if (!provingState.tryStartProvingBlockMerge(location)) {
|
|
1053
|
-
logger.debug('Block merge rollup already started.');
|
|
1045
|
+
this.logger.debug('Block merge rollup already started.');
|
|
1054
1046
|
return;
|
|
1055
1047
|
}
|
|
1056
1048
|
const inputs = provingState.getBlockMergeRollupInputs(location);
|
|
1057
1049
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockMergeRollupProof', {
|
|
1058
1050
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-block-merge'
|
|
1059
|
-
}, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1051
|
+
}, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), async (result)=>{
|
|
1060
1052
|
provingState.setBlockMergeRollupProof(location, result);
|
|
1061
|
-
this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
|
|
1053
|
+
await this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
|
|
1062
1054
|
});
|
|
1063
1055
|
}
|
|
1064
|
-
enqueueCheckpointRootRollup(provingState) {
|
|
1056
|
+
async enqueueCheckpointRootRollup(provingState) {
|
|
1065
1057
|
if (!provingState.verifyState()) {
|
|
1066
|
-
logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1058
|
+
this.logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1067
1059
|
return;
|
|
1068
1060
|
}
|
|
1069
1061
|
if (!provingState.tryStartProvingCheckpointRoot()) {
|
|
1070
|
-
logger.debug('Checkpoint root rollup already started.');
|
|
1062
|
+
this.logger.debug('Checkpoint root rollup already started.');
|
|
1071
1063
|
return;
|
|
1072
1064
|
}
|
|
1073
1065
|
const rollupType = provingState.getCheckpointRootRollupType();
|
|
1074
|
-
logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1075
|
-
const inputs = provingState.getCheckpointRootRollupInputs();
|
|
1066
|
+
this.logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1067
|
+
const inputs = await provingState.getCheckpointRootRollupInputs();
|
|
1076
1068
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointRootRollupProof', {
|
|
1077
1069
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
1078
1070
|
}, (signal)=>{
|
|
@@ -1085,11 +1077,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1085
1077
|
const computedEndBlobAccumulatorState = provingState.getEndBlobAccumulator().toBlobAccumulator();
|
|
1086
1078
|
const circuitEndBlobAccumulatorState = result.inputs.endBlobAccumulator;
|
|
1087
1079
|
if (!circuitEndBlobAccumulatorState.equals(computedEndBlobAccumulatorState)) {
|
|
1088
|
-
logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(computedEndBlobAccumulatorState)}`);
|
|
1080
|
+
this.logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(computedEndBlobAccumulatorState)}`);
|
|
1089
1081
|
provingState.reject(`Blob accumulator state mismatch.`);
|
|
1090
1082
|
return;
|
|
1091
1083
|
}
|
|
1092
|
-
logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1084
|
+
this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1093
1085
|
const leafLocation = provingState.setCheckpointRootRollupProof(result);
|
|
1094
1086
|
const epochProvingState = provingState.parentEpoch;
|
|
1095
1087
|
if (epochProvingState.totalNumCheckpoints === 1) {
|
|
@@ -1101,37 +1093,37 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1101
1093
|
}
|
|
1102
1094
|
enqueueCheckpointMergeRollup(provingState, location) {
|
|
1103
1095
|
if (!provingState.verifyState()) {
|
|
1104
|
-
logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1096
|
+
this.logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1105
1097
|
return;
|
|
1106
1098
|
}
|
|
1107
1099
|
if (!provingState.tryStartProvingCheckpointMerge(location)) {
|
|
1108
|
-
logger.debug('Checkpoint merge rollup already started.');
|
|
1100
|
+
this.logger.debug('Checkpoint merge rollup already started.');
|
|
1109
1101
|
return;
|
|
1110
1102
|
}
|
|
1111
1103
|
const inputs = provingState.getCheckpointMergeRollupInputs(location);
|
|
1112
1104
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointMergeRollupProof', {
|
|
1113
1105
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-merge'
|
|
1114
1106
|
}, (signal)=>this.prover.getCheckpointMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1115
|
-
logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1107
|
+
this.logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1116
1108
|
provingState.setCheckpointMergeRollupProof(location, result);
|
|
1117
1109
|
this.checkAndEnqueueNextCheckpointMergeRollup(provingState, location);
|
|
1118
1110
|
});
|
|
1119
1111
|
}
|
|
1120
1112
|
enqueueEpochPadding(provingState) {
|
|
1121
1113
|
if (!provingState.verifyState()) {
|
|
1122
|
-
logger.debug('Not running epoch padding. State no longer valid.');
|
|
1114
|
+
this.logger.debug('Not running epoch padding. State no longer valid.');
|
|
1123
1115
|
return;
|
|
1124
1116
|
}
|
|
1125
1117
|
if (!provingState.tryStartProvingPaddingCheckpoint()) {
|
|
1126
|
-
logger.debug('Padding checkpoint already started.');
|
|
1118
|
+
this.logger.debug('Padding checkpoint already started.');
|
|
1127
1119
|
return;
|
|
1128
1120
|
}
|
|
1129
|
-
logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1121
|
+
this.logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1130
1122
|
const inputs = provingState.getPaddingCheckpointInputs();
|
|
1131
1123
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointPaddingRollupProof', {
|
|
1132
1124
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-padding'
|
|
1133
1125
|
}, (signal)=>this.prover.getCheckpointPaddingRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1134
|
-
logger.debug('Completed proof for padding checkpoint.');
|
|
1126
|
+
this.logger.debug('Completed proof for padding checkpoint.');
|
|
1135
1127
|
provingState.setCheckpointPaddingProof(result);
|
|
1136
1128
|
this.checkAndEnqueueRootRollup(provingState);
|
|
1137
1129
|
});
|
|
@@ -1139,15 +1131,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1139
1131
|
// Executes the root rollup circuit
|
|
1140
1132
|
enqueueRootRollup(provingState) {
|
|
1141
1133
|
if (!provingState.verifyState()) {
|
|
1142
|
-
logger.debug('Not running root rollup, state no longer valid');
|
|
1134
|
+
this.logger.debug('Not running root rollup, state no longer valid');
|
|
1143
1135
|
return;
|
|
1144
1136
|
}
|
|
1145
|
-
logger.debug(`Preparing root rollup`);
|
|
1137
|
+
this.logger.debug(`Preparing root rollup`);
|
|
1146
1138
|
const inputs = provingState.getRootRollupInputs();
|
|
1147
1139
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
|
|
1148
1140
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-root'
|
|
1149
1141
|
}, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1150
|
-
logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1142
|
+
this.logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1151
1143
|
provingState.setRootRollupProof(result);
|
|
1152
1144
|
provingState.resolve({
|
|
1153
1145
|
status: 'success'
|
|
@@ -1167,27 +1159,27 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1167
1159
|
}
|
|
1168
1160
|
checkAndEnqueueBlockRootRollup(provingState) {
|
|
1169
1161
|
if (!provingState.isReadyForBlockRootRollup()) {
|
|
1170
|
-
logger.debug('Not ready for block root rollup');
|
|
1162
|
+
this.logger.debug('Not ready for block root rollup');
|
|
1171
1163
|
return;
|
|
1172
1164
|
}
|
|
1173
1165
|
this.enqueueBlockRootRollup(provingState);
|
|
1174
1166
|
}
|
|
1175
|
-
checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
|
|
1167
|
+
async checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
|
|
1176
1168
|
if (!provingState.isReadyForBlockMerge(currentLocation)) {
|
|
1177
1169
|
return;
|
|
1178
1170
|
}
|
|
1179
1171
|
const parentLocation = provingState.getParentLocation(currentLocation);
|
|
1180
1172
|
if (parentLocation.level === 0) {
|
|
1181
|
-
this.checkAndEnqueueCheckpointRootRollup(provingState);
|
|
1173
|
+
await this.checkAndEnqueueCheckpointRootRollup(provingState);
|
|
1182
1174
|
} else {
|
|
1183
1175
|
this.enqueueBlockMergeRollup(provingState, parentLocation);
|
|
1184
1176
|
}
|
|
1185
1177
|
}
|
|
1186
|
-
checkAndEnqueueCheckpointRootRollup(provingState) {
|
|
1178
|
+
async checkAndEnqueueCheckpointRootRollup(provingState) {
|
|
1187
1179
|
if (!provingState.isReadyForCheckpointRoot()) {
|
|
1188
1180
|
return;
|
|
1189
1181
|
}
|
|
1190
|
-
this.enqueueCheckpointRootRollup(provingState);
|
|
1182
|
+
await this.enqueueCheckpointRootRollup(provingState);
|
|
1191
1183
|
}
|
|
1192
1184
|
checkAndEnqueueNextCheckpointMergeRollup(provingState, currentLocation) {
|
|
1193
1185
|
if (!provingState.isReadyForCheckpointMerge(currentLocation)) {
|
|
@@ -1202,7 +1194,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1202
1194
|
}
|
|
1203
1195
|
checkAndEnqueueRootRollup(provingState) {
|
|
1204
1196
|
if (!provingState.isReadyForRootRollup()) {
|
|
1205
|
-
logger.debug('Not ready for root rollup');
|
|
1197
|
+
this.logger.debug('Not ready for root rollup');
|
|
1206
1198
|
return;
|
|
1207
1199
|
}
|
|
1208
1200
|
this.enqueueRootRollup(provingState);
|
|
@@ -1214,7 +1206,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1214
1206
|
* @param txIndex - The index of the transaction being proven
|
|
1215
1207
|
*/ enqueueVM(provingState, txIndex) {
|
|
1216
1208
|
if (!provingState.verifyState()) {
|
|
1217
|
-
logger.debug(`Not running VM circuit as state is no longer valid`);
|
|
1209
|
+
this.logger.debug(`Not running VM circuit as state is no longer valid`);
|
|
1218
1210
|
return;
|
|
1219
1211
|
}
|
|
1220
1212
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
@@ -1225,7 +1217,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1225
1217
|
return await this.prover.getAvmProof(inputs, signal, provingState.epochNumber);
|
|
1226
1218
|
});
|
|
1227
1219
|
this.deferredProving(provingState, doAvmProving, (proof)=>{
|
|
1228
|
-
logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1220
|
+
this.logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1229
1221
|
txProvingState.setAvmProof(proof);
|
|
1230
1222
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
1231
1223
|
});
|
|
@@ -1236,7 +1228,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1236
1228
|
return;
|
|
1237
1229
|
}
|
|
1238
1230
|
// We must have completed all proving (chonk verifier proof and (if required) vm proof are generated), we now move to the base rollup.
|
|
1239
|
-
logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
|
|
1231
|
+
this.logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
|
|
1240
1232
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
1241
1233
|
}
|
|
1242
1234
|
}
|
|
@@ -8,13 +8,13 @@ export declare class ProverClient implements EpochProverManager {
|
|
|
8
8
|
private config;
|
|
9
9
|
private worldState;
|
|
10
10
|
private orchestratorClient;
|
|
11
|
+
private proofStore;
|
|
12
|
+
private failedProofStore;
|
|
11
13
|
private agentClient?;
|
|
12
14
|
private telemetry;
|
|
13
15
|
private log;
|
|
14
16
|
private running;
|
|
15
17
|
private agents;
|
|
16
|
-
private proofStore;
|
|
17
|
-
private failedProofStore;
|
|
18
18
|
private constructor();
|
|
19
19
|
createEpochProver(): EpochProver;
|
|
20
20
|
getProverId(): EthAddress;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWNsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1jbGllbnQvcHJvdmVyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxRQUFRLEVBQTJDLE1BQU0sa0JBQWtCLENBQUM7QUFFM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHaEUsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNoQixLQUFLLGtCQUFrQixFQUN2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLGdCQUFnQixFQUNyQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLHdCQUF3QixFQUM3QixLQUFLLG1CQUFtQixFQUV6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU92RCxzSEFBc0g7QUFDdEgscUJBQWEsWUFBYSxZQUFXLGtCQUFrQjtJQUtuRCxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxrQkFBa0I7SUFDMUIsT0FBTyxDQUFDLFVBQVU7SUFDbEIsT0FBTyxDQUFDLGdCQUFnQjtJQUN4QixPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHO0lBWGIsT0FBTyxDQUFDLE9BQU8sQ0FBUztJQUN4QixPQUFPLENBQUMsTUFBTSxDQUFzQjtJQUVwQyxPQUFPLGVBU0g7SUFFRyxpQkFBaUIsSUFBSSxXQUFXLENBa0J0QztJQUVNLFdBQVcsSUFBSSxVQUFVLENBRS9CO0lBRUssa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FZM0U7SUFFRDs7T0FFRztJQUNVLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBT2xDO0lBRUQ7O09BRUc7SUFDVSxJQUFJLGtCQU9oQjtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBb0IsR0FBRyxDQUNyQixNQUFNLEVBQUUsa0JBQWtCLEVBQzFCLFVBQVUsRUFBRSx3QkFBd0IsR0FBRyx3QkFBd0IsRUFDL0QsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixTQUFTLEdBQUUsZUFBc0MseUJBT2xEO0lBRU0sbUJBQW1CLElBQUksa0JBQWtCLENBTS9DO1lBRWEsb0JBQW9CO1lBcUJwQixVQUFVO0NBR3pCO0FBRUQsd0JBQWdCLHdCQUF3QixDQUN0QyxNQUFNLEVBQUUsa0JBQWtCLEdBQUcsVUFBVSxHQUFHLFFBQVEsRUFDbEQsU0FBUyxFQUFFLGVBQWUsR0FDekIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBVzlCIn0=
|
|
@@ -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;
|
|
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;IAKnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAXb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,eASH;IAEG,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,yBAOlD;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"}
|