@aztec/prover-client 0.0.1-commit.f295ac2 → 0.0.1-commit.f504929
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 +13 -6
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +44 -22
- 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 +9 -4
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +112 -105
- 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 +13 -1
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +19 -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 +17 -18
- package/src/light/lightweight_checkpoint_builder.ts +52 -25
- 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 +121 -113
- package/src/prover-client/prover-client.ts +29 -14
- package/src/proving_broker/broker_prover_facade.ts +6 -3
- package/src/proving_broker/config.ts +22 -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)=>({
|
|
@@ -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
|
}
|
|
@@ -528,14 +531,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
528
531
|
throw new Error(`Checkpoint not accepting further blocks.`);
|
|
529
532
|
}
|
|
530
533
|
const constants = checkpointProvingState.constants;
|
|
531
|
-
logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
534
|
+
this.logger.info(`Starting block ${blockNumber} for slot ${constants.slotNumber}.`);
|
|
532
535
|
// Fork the db only when it's not already set. The db for the first block is set in `startNewCheckpoint`.
|
|
533
536
|
if (!this.dbs.has(blockNumber)) {
|
|
534
537
|
// Fork world state at the end of the immediately previous block
|
|
535
538
|
const db = await this.dbProvider.fork(BlockNumber(blockNumber - 1));
|
|
536
539
|
this.dbs.set(blockNumber, db);
|
|
537
540
|
}
|
|
538
|
-
const db = this.
|
|
541
|
+
const db = this.getDbForBlock(blockNumber);
|
|
539
542
|
// Get archive snapshot and sibling path before any txs in this block lands.
|
|
540
543
|
const lastArchiveTreeSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
541
544
|
const lastArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
@@ -570,7 +573,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
570
573
|
if (!txs.length) {
|
|
571
574
|
// To avoid an ugly throw below. If we require an empty block, we can just call setBlockCompleted
|
|
572
575
|
// 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.`);
|
|
576
|
+
this.logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
574
577
|
return;
|
|
575
578
|
}
|
|
576
579
|
const blockNumber = BlockNumber(txs[0].globalVariables.blockNumber);
|
|
@@ -584,8 +587,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
584
587
|
if (!provingState.isAcceptingTxs()) {
|
|
585
588
|
throw new Error(`Block ${blockNumber} has been initialized with transactions.`);
|
|
586
589
|
}
|
|
587
|
-
logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
588
|
-
const db = this.
|
|
590
|
+
this.logger.info(`Adding ${txs.length} transactions to block ${blockNumber}`);
|
|
591
|
+
const db = this.getDbForBlock(blockNumber);
|
|
589
592
|
const lastArchive = provingState.lastArchiveTreeSnapshot;
|
|
590
593
|
const newL1ToL2MessageTreeSnapshot = provingState.newL1ToL2MessageTreeSnapshot;
|
|
591
594
|
const spongeBlobState = provingState.getStartSpongeBlob().clone();
|
|
@@ -595,7 +598,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
595
598
|
throw new Error(`Invalid proving state when adding a tx`);
|
|
596
599
|
}
|
|
597
600
|
validateTx(tx);
|
|
598
|
-
logger.debug(`Received transaction: ${tx.hash}`);
|
|
601
|
+
this.logger.debug(`Received transaction: ${tx.hash}`);
|
|
599
602
|
const startSpongeBlob = spongeBlobState.clone();
|
|
600
603
|
const [hints, treeSnapshots] = await this.prepareBaseRollupInputs(tx, lastArchive, newL1ToL2MessageTreeSnapshot, startSpongeBlob, db);
|
|
601
604
|
if (!provingState.verifyState()) {
|
|
@@ -606,10 +609,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
606
609
|
const txIndex = provingState.addNewTx(txProvingState);
|
|
607
610
|
if (txProvingState.requireAvmProof) {
|
|
608
611
|
this.getOrEnqueueChonkVerifier(provingState, txIndex);
|
|
609
|
-
logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
612
|
+
this.logger.debug(`Enqueueing public VM for tx ${txIndex}`);
|
|
610
613
|
this.enqueueVM(provingState, txIndex);
|
|
611
614
|
} else {
|
|
612
|
-
logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
615
|
+
this.logger.debug(`Enqueueing base rollup for private-only tx ${txIndex}`);
|
|
613
616
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
614
617
|
}
|
|
615
618
|
} catch (err) {
|
|
@@ -639,7 +642,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
639
642
|
const txHash = tx.getTxHash().toString();
|
|
640
643
|
const privateInputs = getPublicChonkVerifierPrivateInputsFromTx(tx, this.proverId.toField());
|
|
641
644
|
const tubeProof = promiseWithResolvers();
|
|
642
|
-
logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
645
|
+
this.logger.debug(`Starting chonk verifier circuit for tx ${txHash}`);
|
|
643
646
|
this.doEnqueueChonkVerifier(txHash, privateInputs, (proof)=>{
|
|
644
647
|
tubeProof.resolve(proof);
|
|
645
648
|
});
|
|
@@ -668,17 +671,23 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
668
671
|
throw new Error(`Block ${blockNumber} is still accepting txs. Call setBlockCompleted after all txs have been added.`);
|
|
669
672
|
}
|
|
670
673
|
// Given we've applied every change from this block, now assemble the block header:
|
|
671
|
-
logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
674
|
+
this.logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
672
675
|
const header = await provingState.buildBlockHeader();
|
|
673
676
|
if (expectedHeader && !header.equals(expectedHeader)) {
|
|
674
|
-
logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
677
|
+
this.logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
|
|
675
678
|
throw new Error('Block header mismatch');
|
|
676
679
|
}
|
|
677
|
-
// Get db for this block
|
|
678
|
-
const db = this.
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
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
|
+
}
|
|
682
691
|
await this.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
683
692
|
return header;
|
|
684
693
|
}
|
|
@@ -686,49 +695,61 @@ _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.');
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
const newArchive = provingState.getBuiltArchive();
|
|
707
|
+
if (!newArchive) {
|
|
708
|
+
this.logger.debug('Archive snapshot not yet captured, skipping header check.');
|
|
695
709
|
return;
|
|
696
710
|
}
|
|
697
711
|
const header = await buildHeaderFromCircuitOutputs(output);
|
|
698
712
|
if (!(await header.hash()).equals(await builtBlockHeader.hash())) {
|
|
699
|
-
logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
713
|
+
this.logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(builtBlockHeader)}`);
|
|
700
714
|
provingState.reject(`Block header hash mismatch.`);
|
|
701
715
|
return;
|
|
702
716
|
}
|
|
703
|
-
// Get db for this block
|
|
704
717
|
const blockNumber = provingState.blockNumber;
|
|
705
|
-
const db = this.dbs.get(blockNumber);
|
|
706
|
-
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
707
718
|
const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(blockNumber));
|
|
708
719
|
if (!syncedArchive.equals(newArchive)) {
|
|
709
|
-
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)}`);
|
|
710
721
|
provingState.reject(`Archive tree mismatch.`);
|
|
711
722
|
return;
|
|
712
723
|
}
|
|
713
724
|
const circuitArchive = output.newArchive;
|
|
714
725
|
if (!newArchive.equals(circuitArchive)) {
|
|
715
|
-
logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
726
|
+
this.logger.error(`New archive mismatch.\nCircuit: ${output.newArchive}\nComputed: ${newArchive}`);
|
|
716
727
|
provingState.reject(`New archive mismatch.`);
|
|
717
728
|
return;
|
|
718
729
|
}
|
|
719
|
-
// TODO(palla/prover): This closes the fork only on the happy path. If this epoch orchestrator
|
|
720
|
-
// is aborted and never reaches this point, it will leak the fork. We need to add a global cleanup,
|
|
721
|
-
// but have to make sure it only runs once all operations are completed, otherwise some function here
|
|
722
|
-
// will attempt to access the fork after it was closed.
|
|
723
|
-
void this.cleanupDBFork(blockNumber);
|
|
724
730
|
}
|
|
725
731
|
/**
|
|
726
|
-
* Cancel any further proving
|
|
732
|
+
* Cancel any further proving.
|
|
733
|
+
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
734
|
+
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
727
735
|
*/ cancel() {
|
|
728
|
-
|
|
729
|
-
controller.
|
|
736
|
+
if (this.cancelJobsOnStop) {
|
|
737
|
+
for (const controller of this.pendingProvingJobs){
|
|
738
|
+
controller.abort();
|
|
739
|
+
}
|
|
730
740
|
}
|
|
731
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;
|
|
732
753
|
}
|
|
733
754
|
/**
|
|
734
755
|
* Returns the proof for the current epoch.
|
|
@@ -748,19 +769,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
748
769
|
});
|
|
749
770
|
return epochProofResult;
|
|
750
771
|
}
|
|
751
|
-
async cleanupDBFork(blockNumber) {
|
|
752
|
-
logger.debug(`Cleaning up world state fork for ${blockNumber}`);
|
|
753
|
-
const fork = this.dbs.get(blockNumber);
|
|
754
|
-
if (!fork) {
|
|
755
|
-
return;
|
|
756
|
-
}
|
|
757
|
-
try {
|
|
758
|
-
await fork.close();
|
|
759
|
-
this.dbs.delete(blockNumber);
|
|
760
|
-
} catch (err) {
|
|
761
|
-
logger.error(`Error closing db for block ${blockNumber}`, err);
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
772
|
/**
|
|
765
773
|
* Enqueue a job to be scheduled
|
|
766
774
|
* @param provingState - The proving state object being operated on
|
|
@@ -768,7 +776,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
768
776
|
* @param job - The actual job, returns a promise notifying of the job's completion
|
|
769
777
|
*/ deferredProving(provingState, request, callback) {
|
|
770
778
|
if (!provingState.verifyState()) {
|
|
771
|
-
logger.debug(`Not enqueuing job, state no longer valid`);
|
|
779
|
+
this.logger.debug(`Not enqueuing job, state no longer valid`);
|
|
772
780
|
return;
|
|
773
781
|
}
|
|
774
782
|
const controller = new AbortController();
|
|
@@ -783,7 +791,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
783
791
|
}
|
|
784
792
|
const result = await request(controller.signal);
|
|
785
793
|
if (!provingState.verifyState()) {
|
|
786
|
-
logger.debug(`State no longer valid, discarding result`);
|
|
794
|
+
this.logger.debug(`State no longer valid, discarding result`);
|
|
787
795
|
return;
|
|
788
796
|
}
|
|
789
797
|
// we could have been cancelled whilst waiting for the result
|
|
@@ -798,7 +806,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
798
806
|
// drop this result
|
|
799
807
|
return;
|
|
800
808
|
}
|
|
801
|
-
logger.error(`Error thrown when proving job`, err);
|
|
809
|
+
this.logger.error(`Error thrown when proving job`, err);
|
|
802
810
|
provingState.reject(`${err}`);
|
|
803
811
|
} finally{
|
|
804
812
|
const index = this.pendingProvingJobs.indexOf(controller);
|
|
@@ -854,17 +862,17 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
854
862
|
// Executes the next level of merge if all inputs are available
|
|
855
863
|
enqueueBaseRollup(provingState, txIndex) {
|
|
856
864
|
if (!provingState.verifyState()) {
|
|
857
|
-
logger.debug('Not running base rollup, state invalid');
|
|
865
|
+
this.logger.debug('Not running base rollup, state invalid');
|
|
858
866
|
return;
|
|
859
867
|
}
|
|
860
868
|
if (!provingState.tryStartProvingBase(txIndex)) {
|
|
861
|
-
logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
869
|
+
this.logger.debug(`Base rollup for tx ${txIndex} already started.`);
|
|
862
870
|
return;
|
|
863
871
|
}
|
|
864
872
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
865
873
|
const { processedTx } = txProvingState;
|
|
866
874
|
const { rollupType, inputs } = txProvingState.getBaseRollupTypeAndInputs();
|
|
867
|
-
logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
875
|
+
this.logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
|
|
868
876
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, `ProvingOrchestrator.prover.${inputs instanceof PrivateTxBaseRollupPrivateInputs ? 'getPrivateTxBaseRollupProof' : 'getPublicTxBaseRollupProof'}`, {
|
|
869
877
|
[Attributes.TX_HASH]: processedTx.hash.toString(),
|
|
870
878
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
@@ -875,7 +883,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
875
883
|
return this.prover.getPublicTxBaseRollupProof(inputs, signal, provingState.epochNumber);
|
|
876
884
|
}
|
|
877
885
|
}), (result)=>{
|
|
878
|
-
logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
886
|
+
this.logger.debug(`Completed proof for ${rollupType} for tx ${processedTx.hash.toString()}`);
|
|
879
887
|
validatePartialState(result.inputs.endTreeSnapshots, txProvingState.treeSnapshots);
|
|
880
888
|
const leafLocation = provingState.setBaseRollupProof(txIndex, result);
|
|
881
889
|
if (provingState.totalNumTxs === 1) {
|
|
@@ -889,14 +897,14 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
889
897
|
// Once completed, will enqueue the the public tx base rollup.
|
|
890
898
|
getOrEnqueueChonkVerifier(provingState, txIndex) {
|
|
891
899
|
if (!provingState.verifyState()) {
|
|
892
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
900
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
893
901
|
return;
|
|
894
902
|
}
|
|
895
903
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
896
904
|
const txHash = txProvingState.processedTx.hash.toString();
|
|
897
905
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH;
|
|
898
906
|
const handleResult = (result)=>{
|
|
899
|
-
logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
907
|
+
this.logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
900
908
|
txHash
|
|
901
909
|
});
|
|
902
910
|
txProvingState.setPublicChonkVerifierProof(result);
|
|
@@ -904,18 +912,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
904
912
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
905
913
|
};
|
|
906
914
|
if (this.provingState?.cachedChonkVerifierProofs.has(txHash)) {
|
|
907
|
-
logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
915
|
+
this.logger.debug(`Chonk verifier proof already enqueued for tx index: ${txIndex}`, {
|
|
908
916
|
txHash
|
|
909
917
|
});
|
|
910
918
|
void this.provingState.cachedChonkVerifierProofs.get(txHash).then(handleResult);
|
|
911
919
|
return;
|
|
912
920
|
}
|
|
913
|
-
logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
921
|
+
this.logger.debug(`Enqueuing chonk verifier circuit for tx index: ${txIndex}`);
|
|
914
922
|
this.doEnqueueChonkVerifier(txHash, txProvingState.getPublicChonkVerifierPrivateInputs(), handleResult);
|
|
915
923
|
}
|
|
916
924
|
doEnqueueChonkVerifier(txHash, inputs, handler, provingState = this.provingState) {
|
|
917
925
|
if (!provingState.verifyState()) {
|
|
918
|
-
logger.debug('Not running chonk verifier circuit, state invalid');
|
|
926
|
+
this.logger.debug('Not running chonk verifier circuit, state invalid');
|
|
919
927
|
return;
|
|
920
928
|
}
|
|
921
929
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getPublicChonkVerifierProof', {
|
|
@@ -927,11 +935,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
927
935
|
// Enqueues the next level of merge if all inputs are available
|
|
928
936
|
enqueueMergeRollup(provingState, location) {
|
|
929
937
|
if (!provingState.verifyState()) {
|
|
930
|
-
logger.debug('Not running merge rollup. State no longer valid.');
|
|
938
|
+
this.logger.debug('Not running merge rollup. State no longer valid.');
|
|
931
939
|
return;
|
|
932
940
|
}
|
|
933
941
|
if (!provingState.tryStartProvingMerge(location)) {
|
|
934
|
-
logger.debug('Merge rollup already started.');
|
|
942
|
+
this.logger.debug('Merge rollup already started.');
|
|
935
943
|
return;
|
|
936
944
|
}
|
|
937
945
|
const inputs = provingState.getMergeRollupInputs(location);
|
|
@@ -945,15 +953,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
945
953
|
// Executes the block root rollup circuit
|
|
946
954
|
enqueueBlockRootRollup(provingState) {
|
|
947
955
|
if (!provingState.verifyState()) {
|
|
948
|
-
logger.debug('Not running block root rollup, state no longer valid');
|
|
956
|
+
this.logger.debug('Not running block root rollup, state no longer valid');
|
|
949
957
|
return;
|
|
950
958
|
}
|
|
951
959
|
if (!provingState.tryStartProvingBlockRoot()) {
|
|
952
|
-
logger.debug('Block root rollup already started.');
|
|
960
|
+
this.logger.debug('Block root rollup already started.');
|
|
953
961
|
return;
|
|
954
962
|
}
|
|
955
963
|
const { rollupType, inputs } = provingState.getBlockRootRollupTypeAndInputs();
|
|
956
|
-
logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
964
|
+
this.logger.debug(`Enqueuing ${rollupType} for block ${provingState.blockNumber}.`);
|
|
957
965
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockRootRollupProof', {
|
|
958
966
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
959
967
|
}, (signal)=>{
|
|
@@ -969,29 +977,28 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
969
977
|
return this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber);
|
|
970
978
|
}
|
|
971
979
|
}), async (result)=>{
|
|
972
|
-
logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
980
|
+
this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`);
|
|
973
981
|
const leafLocation = provingState.setBlockRootRollupProof(result);
|
|
974
982
|
const checkpointProvingState = provingState.parentCheckpoint;
|
|
975
|
-
//
|
|
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.
|
|
976
985
|
await this.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
977
986
|
if (checkpointProvingState.totalNumBlocks === 1) {
|
|
978
|
-
this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
|
|
987
|
+
await this.checkAndEnqueueCheckpointRootRollup(checkpointProvingState);
|
|
979
988
|
} else {
|
|
980
|
-
this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
|
|
989
|
+
await this.checkAndEnqueueNextBlockMergeRollup(checkpointProvingState, leafLocation);
|
|
981
990
|
}
|
|
982
|
-
// We are finished with the block at this point, ensure the fork is cleaned up
|
|
983
|
-
void this.cleanupDBFork(provingState.blockNumber);
|
|
984
991
|
});
|
|
985
992
|
}
|
|
986
993
|
// Executes the base parity circuit and stores the intermediate state for the root parity circuit
|
|
987
994
|
// Enqueues the root parity circuit if all inputs are available
|
|
988
995
|
enqueueBaseParityCircuit(checkpointProvingState, provingState, baseParityIndex) {
|
|
989
996
|
if (!provingState.verifyState()) {
|
|
990
|
-
logger.debug('Not running base parity. State no longer valid.');
|
|
997
|
+
this.logger.debug('Not running base parity. State no longer valid.');
|
|
991
998
|
return;
|
|
992
999
|
}
|
|
993
1000
|
if (!provingState.tryStartProvingBaseParity(baseParityIndex)) {
|
|
994
|
-
logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
1001
|
+
this.logger.warn(`Base parity ${baseParityIndex} already started.`);
|
|
995
1002
|
return;
|
|
996
1003
|
}
|
|
997
1004
|
const inputs = checkpointProvingState.getBaseParityInputs(baseParityIndex);
|
|
@@ -1012,11 +1019,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1012
1019
|
// Enqueues the root rollup proof if all inputs are available
|
|
1013
1020
|
enqueueRootParityCircuit(provingState) {
|
|
1014
1021
|
if (!provingState.verifyState()) {
|
|
1015
|
-
logger.debug('Not running root parity. State no longer valid.');
|
|
1022
|
+
this.logger.debug('Not running root parity. State no longer valid.');
|
|
1016
1023
|
return;
|
|
1017
1024
|
}
|
|
1018
1025
|
if (!provingState.tryStartProvingRootParity()) {
|
|
1019
|
-
logger.debug('Root parity already started.');
|
|
1026
|
+
this.logger.debug('Root parity already started.');
|
|
1020
1027
|
return;
|
|
1021
1028
|
}
|
|
1022
1029
|
const inputs = provingState.getParityRootInputs();
|
|
@@ -1031,33 +1038,33 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1031
1038
|
// Enqueues the next level of merge if all inputs are available
|
|
1032
1039
|
enqueueBlockMergeRollup(provingState, location) {
|
|
1033
1040
|
if (!provingState.verifyState()) {
|
|
1034
|
-
logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1041
|
+
this.logger.debug('Not running block merge rollup. State no longer valid.');
|
|
1035
1042
|
return;
|
|
1036
1043
|
}
|
|
1037
1044
|
if (!provingState.tryStartProvingBlockMerge(location)) {
|
|
1038
|
-
logger.debug('Block merge rollup already started.');
|
|
1045
|
+
this.logger.debug('Block merge rollup already started.');
|
|
1039
1046
|
return;
|
|
1040
1047
|
}
|
|
1041
1048
|
const inputs = provingState.getBlockMergeRollupInputs(location);
|
|
1042
1049
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockMergeRollupProof', {
|
|
1043
1050
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-block-merge'
|
|
1044
|
-
}, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1051
|
+
}, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), async (result)=>{
|
|
1045
1052
|
provingState.setBlockMergeRollupProof(location, result);
|
|
1046
|
-
this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
|
|
1053
|
+
await this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
|
|
1047
1054
|
});
|
|
1048
1055
|
}
|
|
1049
|
-
enqueueCheckpointRootRollup(provingState) {
|
|
1056
|
+
async enqueueCheckpointRootRollup(provingState) {
|
|
1050
1057
|
if (!provingState.verifyState()) {
|
|
1051
|
-
logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1058
|
+
this.logger.debug('Not running checkpoint root rollup. State no longer valid.');
|
|
1052
1059
|
return;
|
|
1053
1060
|
}
|
|
1054
1061
|
if (!provingState.tryStartProvingCheckpointRoot()) {
|
|
1055
|
-
logger.debug('Checkpoint root rollup already started.');
|
|
1062
|
+
this.logger.debug('Checkpoint root rollup already started.');
|
|
1056
1063
|
return;
|
|
1057
1064
|
}
|
|
1058
1065
|
const rollupType = provingState.getCheckpointRootRollupType();
|
|
1059
|
-
logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1060
|
-
const inputs = provingState.getCheckpointRootRollupInputs();
|
|
1066
|
+
this.logger.debug(`Enqueuing ${rollupType} for checkpoint ${provingState.index}.`);
|
|
1067
|
+
const inputs = await provingState.getCheckpointRootRollupInputs();
|
|
1061
1068
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointRootRollupProof', {
|
|
1062
1069
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType
|
|
1063
1070
|
}, (signal)=>{
|
|
@@ -1070,11 +1077,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1070
1077
|
const computedEndBlobAccumulatorState = provingState.getEndBlobAccumulator().toBlobAccumulator();
|
|
1071
1078
|
const circuitEndBlobAccumulatorState = result.inputs.endBlobAccumulator;
|
|
1072
1079
|
if (!circuitEndBlobAccumulatorState.equals(computedEndBlobAccumulatorState)) {
|
|
1073
|
-
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)}`);
|
|
1074
1081
|
provingState.reject(`Blob accumulator state mismatch.`);
|
|
1075
1082
|
return;
|
|
1076
1083
|
}
|
|
1077
|
-
logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1084
|
+
this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}.`);
|
|
1078
1085
|
const leafLocation = provingState.setCheckpointRootRollupProof(result);
|
|
1079
1086
|
const epochProvingState = provingState.parentEpoch;
|
|
1080
1087
|
if (epochProvingState.totalNumCheckpoints === 1) {
|
|
@@ -1086,37 +1093,37 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1086
1093
|
}
|
|
1087
1094
|
enqueueCheckpointMergeRollup(provingState, location) {
|
|
1088
1095
|
if (!provingState.verifyState()) {
|
|
1089
|
-
logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1096
|
+
this.logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1090
1097
|
return;
|
|
1091
1098
|
}
|
|
1092
1099
|
if (!provingState.tryStartProvingCheckpointMerge(location)) {
|
|
1093
|
-
logger.debug('Checkpoint merge rollup already started.');
|
|
1100
|
+
this.logger.debug('Checkpoint merge rollup already started.');
|
|
1094
1101
|
return;
|
|
1095
1102
|
}
|
|
1096
1103
|
const inputs = provingState.getCheckpointMergeRollupInputs(location);
|
|
1097
1104
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointMergeRollupProof', {
|
|
1098
1105
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-merge'
|
|
1099
1106
|
}, (signal)=>this.prover.getCheckpointMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1100
|
-
logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1107
|
+
this.logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1101
1108
|
provingState.setCheckpointMergeRollupProof(location, result);
|
|
1102
1109
|
this.checkAndEnqueueNextCheckpointMergeRollup(provingState, location);
|
|
1103
1110
|
});
|
|
1104
1111
|
}
|
|
1105
1112
|
enqueueEpochPadding(provingState) {
|
|
1106
1113
|
if (!provingState.verifyState()) {
|
|
1107
|
-
logger.debug('Not running epoch padding. State no longer valid.');
|
|
1114
|
+
this.logger.debug('Not running epoch padding. State no longer valid.');
|
|
1108
1115
|
return;
|
|
1109
1116
|
}
|
|
1110
1117
|
if (!provingState.tryStartProvingPaddingCheckpoint()) {
|
|
1111
|
-
logger.debug('Padding checkpoint already started.');
|
|
1118
|
+
this.logger.debug('Padding checkpoint already started.');
|
|
1112
1119
|
return;
|
|
1113
1120
|
}
|
|
1114
|
-
logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1121
|
+
this.logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1115
1122
|
const inputs = provingState.getPaddingCheckpointInputs();
|
|
1116
1123
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointPaddingRollupProof', {
|
|
1117
1124
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-padding'
|
|
1118
1125
|
}, (signal)=>this.prover.getCheckpointPaddingRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1119
|
-
logger.debug('Completed proof for padding checkpoint.');
|
|
1126
|
+
this.logger.debug('Completed proof for padding checkpoint.');
|
|
1120
1127
|
provingState.setCheckpointPaddingProof(result);
|
|
1121
1128
|
this.checkAndEnqueueRootRollup(provingState);
|
|
1122
1129
|
});
|
|
@@ -1124,15 +1131,15 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1124
1131
|
// Executes the root rollup circuit
|
|
1125
1132
|
enqueueRootRollup(provingState) {
|
|
1126
1133
|
if (!provingState.verifyState()) {
|
|
1127
|
-
logger.debug('Not running root rollup, state no longer valid');
|
|
1134
|
+
this.logger.debug('Not running root rollup, state no longer valid');
|
|
1128
1135
|
return;
|
|
1129
1136
|
}
|
|
1130
|
-
logger.debug(`Preparing root rollup`);
|
|
1137
|
+
this.logger.debug(`Preparing root rollup`);
|
|
1131
1138
|
const inputs = provingState.getRootRollupInputs();
|
|
1132
1139
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
|
|
1133
1140
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-root'
|
|
1134
1141
|
}, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1135
|
-
logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1142
|
+
this.logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1136
1143
|
provingState.setRootRollupProof(result);
|
|
1137
1144
|
provingState.resolve({
|
|
1138
1145
|
status: 'success'
|
|
@@ -1152,27 +1159,27 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1152
1159
|
}
|
|
1153
1160
|
checkAndEnqueueBlockRootRollup(provingState) {
|
|
1154
1161
|
if (!provingState.isReadyForBlockRootRollup()) {
|
|
1155
|
-
logger.debug('Not ready for block root rollup');
|
|
1162
|
+
this.logger.debug('Not ready for block root rollup');
|
|
1156
1163
|
return;
|
|
1157
1164
|
}
|
|
1158
1165
|
this.enqueueBlockRootRollup(provingState);
|
|
1159
1166
|
}
|
|
1160
|
-
checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
|
|
1167
|
+
async checkAndEnqueueNextBlockMergeRollup(provingState, currentLocation) {
|
|
1161
1168
|
if (!provingState.isReadyForBlockMerge(currentLocation)) {
|
|
1162
1169
|
return;
|
|
1163
1170
|
}
|
|
1164
1171
|
const parentLocation = provingState.getParentLocation(currentLocation);
|
|
1165
1172
|
if (parentLocation.level === 0) {
|
|
1166
|
-
this.checkAndEnqueueCheckpointRootRollup(provingState);
|
|
1173
|
+
await this.checkAndEnqueueCheckpointRootRollup(provingState);
|
|
1167
1174
|
} else {
|
|
1168
1175
|
this.enqueueBlockMergeRollup(provingState, parentLocation);
|
|
1169
1176
|
}
|
|
1170
1177
|
}
|
|
1171
|
-
checkAndEnqueueCheckpointRootRollup(provingState) {
|
|
1178
|
+
async checkAndEnqueueCheckpointRootRollup(provingState) {
|
|
1172
1179
|
if (!provingState.isReadyForCheckpointRoot()) {
|
|
1173
1180
|
return;
|
|
1174
1181
|
}
|
|
1175
|
-
this.enqueueCheckpointRootRollup(provingState);
|
|
1182
|
+
await this.enqueueCheckpointRootRollup(provingState);
|
|
1176
1183
|
}
|
|
1177
1184
|
checkAndEnqueueNextCheckpointMergeRollup(provingState, currentLocation) {
|
|
1178
1185
|
if (!provingState.isReadyForCheckpointMerge(currentLocation)) {
|
|
@@ -1187,7 +1194,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1187
1194
|
}
|
|
1188
1195
|
checkAndEnqueueRootRollup(provingState) {
|
|
1189
1196
|
if (!provingState.isReadyForRootRollup()) {
|
|
1190
|
-
logger.debug('Not ready for root rollup');
|
|
1197
|
+
this.logger.debug('Not ready for root rollup');
|
|
1191
1198
|
return;
|
|
1192
1199
|
}
|
|
1193
1200
|
this.enqueueRootRollup(provingState);
|
|
@@ -1199,7 +1206,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1199
1206
|
* @param txIndex - The index of the transaction being proven
|
|
1200
1207
|
*/ enqueueVM(provingState, txIndex) {
|
|
1201
1208
|
if (!provingState.verifyState()) {
|
|
1202
|
-
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`);
|
|
1203
1210
|
return;
|
|
1204
1211
|
}
|
|
1205
1212
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
@@ -1210,7 +1217,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1210
1217
|
return await this.prover.getAvmProof(inputs, signal, provingState.epochNumber);
|
|
1211
1218
|
});
|
|
1212
1219
|
this.deferredProving(provingState, doAvmProving, (proof)=>{
|
|
1213
|
-
logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1220
|
+
this.logger.debug(`Proven VM for tx index: ${txIndex}`);
|
|
1214
1221
|
txProvingState.setAvmProof(proof);
|
|
1215
1222
|
this.checkAndEnqueueBaseRollup(provingState, txIndex);
|
|
1216
1223
|
});
|
|
@@ -1221,7 +1228,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1221
1228
|
return;
|
|
1222
1229
|
}
|
|
1223
1230
|
// 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`);
|
|
1231
|
+
this.logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
|
|
1225
1232
|
this.enqueueBaseRollup(provingState, txIndex);
|
|
1226
1233
|
}
|
|
1227
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"}
|