@aztec/prover-client 0.0.1-commit.96dac018d → 0.0.1-commit.993d240
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/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -2
- package/dest/light/lightweight_checkpoint_builder.d.ts +2 -1
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +19 -4
- package/dest/mocks/test_context.d.ts +3 -1
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +13 -7
- package/dest/orchestrator/block-building-helpers.d.ts +1 -1
- package/dest/orchestrator/checkpoint-proving-state.d.ts +8 -1
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +10 -1
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +107 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +151 -0
- package/dest/orchestrator/epoch-proving-context.d.ts +51 -0
- package/dest/orchestrator/epoch-proving-context.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-context.js +81 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +1 -1
- package/dest/orchestrator/index.d.ts +4 -1
- package/dest/orchestrator/index.d.ts.map +1 -1
- package/dest/orchestrator/index.js +3 -0
- package/dest/orchestrator/orchestrator.d.ts +15 -25
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +33 -154
- package/dest/orchestrator/proving-scheduler.d.ts +72 -0
- package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/proving-scheduler.js +117 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts +83 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-orchestrator.js +182 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts +62 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-scheduler.js +73 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-state.js +185 -0
- package/dest/prover-client/prover-client.d.ts +62 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +50 -2
- package/dest/proving_broker/broker_prover_facade.d.ts +1 -1
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +13 -19
- package/dest/proving_broker/config.d.ts +9 -73
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +3 -3
- package/dest/proving_broker/index.d.ts +2 -1
- package/dest/proving_broker/index.d.ts.map +1 -1
- package/dest/proving_broker/index.js +1 -0
- package/dest/proving_broker/proving_broker.d.ts +2 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +32 -7
- package/dest/proving_broker/proving_broker_database/persisted.js +2 -2
- package/dest/proving_broker/rpc.d.ts +3 -1
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +80 -24
- package/dest/test/mock_prover.d.ts +3 -3
- package/package.json +18 -19
- package/src/config.ts +18 -2
- package/src/light/lightweight_checkpoint_builder.ts +25 -6
- package/src/mocks/test_context.ts +11 -8
- package/src/orchestrator/checkpoint-proving-state.ts +14 -1
- package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +271 -0
- package/src/orchestrator/epoch-proving-context.ts +101 -0
- package/src/orchestrator/index.ts +8 -0
- package/src/orchestrator/orchestrator.ts +46 -210
- package/src/orchestrator/proving-scheduler.ts +156 -0
- package/src/orchestrator/top-tree-orchestrator.ts +314 -0
- package/src/orchestrator/top-tree-proving-scheduler.ts +154 -0
- package/src/orchestrator/top-tree-proving-state.ts +220 -0
- package/src/prover-client/prover-client.ts +127 -2
- package/src/proving_broker/broker_prover_facade.ts +17 -20
- package/src/proving_broker/config.ts +3 -2
- package/src/proving_broker/index.ts +1 -0
- package/src/proving_broker/proving_broker.ts +27 -5
- package/src/proving_broker/proving_broker_database/persisted.ts +2 -2
- package/src/proving_broker/rpc.ts +36 -24
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
2
|
+
import type { EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
4
|
+
import type { PublicInputsAndRecursiveProof, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import type { PublicChonkVerifierPrivateInputs, PublicChonkVerifierPublicInputs } from '@aztec/stdlib/rollup';
|
|
6
|
+
/**
|
|
7
|
+
* Result of a chonk-verifier proof, cached per tx hash on `EpochProvingContext`.
|
|
8
|
+
*/
|
|
9
|
+
export type ChonkVerifierProofResult = PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>;
|
|
10
|
+
/**
|
|
11
|
+
* Per-epoch state shared across every `CheckpointSubTreeOrchestrator` constructed for
|
|
12
|
+
* the same epoch. Owns the chonk-verifier proof cache so a tx whose checkpoint is
|
|
13
|
+
* reorged out and re-appears in a replacement checkpoint does not have to re-prove
|
|
14
|
+
* its chonk circuit.
|
|
15
|
+
*
|
|
16
|
+
* The context's chonk-verifier broker jobs are deliberately submitted **outside** the
|
|
17
|
+
* sub-tree's deferred-proving queue. The sub-tree's `cancel()` therefore does not abort
|
|
18
|
+
* them — by design, because their result is tx-scoped, not sub-tree-scoped, and a
|
|
19
|
+
* replacement sub-tree should be able to consume the cached proof.
|
|
20
|
+
*
|
|
21
|
+
* Callers (`EpochProvingJob`, or unit tests) construct one context per epoch and pass
|
|
22
|
+
* it into every sub-tree they create. `stop()` aborts every in-flight chonk job.
|
|
23
|
+
*/
|
|
24
|
+
export declare class EpochProvingContext {
|
|
25
|
+
private readonly prover;
|
|
26
|
+
readonly epochNumber: EpochNumber;
|
|
27
|
+
private readonly cache;
|
|
28
|
+
/** Abort controllers for in-flight chonk jobs, keyed by tx hash. */
|
|
29
|
+
private readonly pending;
|
|
30
|
+
private readonly log;
|
|
31
|
+
private stopped;
|
|
32
|
+
constructor(prover: ServerCircuitProver, epochNumber: EpochNumber, bindings?: LoggerBindings);
|
|
33
|
+
/**
|
|
34
|
+
* Returns the cached chonk-verifier proof promise for the given tx hash, or
|
|
35
|
+
* `undefined` if none has been enqueued yet. Non-mutating.
|
|
36
|
+
*/
|
|
37
|
+
getCached(txHash: string): Promise<ChonkVerifierProofResult> | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Enqueues a chonk-verifier proof for the given tx hash, returning the promise (or
|
|
40
|
+
* the already-cached one if already enqueued). The promise resolves when the broker
|
|
41
|
+
* delivers the result; on rejection (including `stop()`), the cache entry is removed
|
|
42
|
+
* so a subsequent caller can re-enqueue.
|
|
43
|
+
*/
|
|
44
|
+
enqueue(txHash: string, inputs: PublicChonkVerifierPrivateInputs): Promise<ChonkVerifierProofResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Aborts every in-flight chonk-verifier broker job and clears the cache. Called by
|
|
47
|
+
* the owning `EpochProvingJob` when the job stops.
|
|
48
|
+
*/
|
|
49
|
+
stop(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1jb250ZXh0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL2Vwb2NoLXByb3ZpbmctY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFHLE9BQU8sS0FBSyxFQUFFLGdDQUFnQyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUc7O0dBRUc7QUFDSCxNQUFNLE1BQU0sd0JBQXdCLEdBQUcsNkJBQTZCLENBQ2xFLCtCQUErQixFQUMvQixPQUFPLHlDQUF5QyxDQUNqRCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILHFCQUFhLG1CQUFtQjtJQVE1QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07YUFDUCxXQUFXLEVBQUUsV0FBVztJQVIxQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBd0Q7SUFDOUUsb0VBQW9FO0lBQ3BFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFzQztJQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBUztJQUM3QixPQUFPLENBQUMsT0FBTyxDQUFTO0lBRXhCLFlBQ21CLE1BQU0sRUFBRSxtQkFBbUIsRUFDNUIsV0FBVyxFQUFFLFdBQVcsRUFDeEMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUcxQjtJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLFNBQVMsQ0FFOUU7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0E2QjFHO0lBRUQ7OztPQUdHO0lBQ0ksSUFBSSxTQU9WO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch-proving-context.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,KAAK,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE9G;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,6BAA6B,CAClE,+BAA+B,EAC/B,OAAO,yCAAyC,CACjD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,WAAW,EAAE,WAAW;IAR1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,mBAAmB,EAC5B,WAAW,EAAE,WAAW,EACxC,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAE9E;IAED;;;;;OAKG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA6B1G;IAED;;;OAGG;IACI,IAAI,SAOV;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
/**
|
|
3
|
+
* Per-epoch state shared across every `CheckpointSubTreeOrchestrator` constructed for
|
|
4
|
+
* the same epoch. Owns the chonk-verifier proof cache so a tx whose checkpoint is
|
|
5
|
+
* reorged out and re-appears in a replacement checkpoint does not have to re-prove
|
|
6
|
+
* its chonk circuit.
|
|
7
|
+
*
|
|
8
|
+
* The context's chonk-verifier broker jobs are deliberately submitted **outside** the
|
|
9
|
+
* sub-tree's deferred-proving queue. The sub-tree's `cancel()` therefore does not abort
|
|
10
|
+
* them — by design, because their result is tx-scoped, not sub-tree-scoped, and a
|
|
11
|
+
* replacement sub-tree should be able to consume the cached proof.
|
|
12
|
+
*
|
|
13
|
+
* Callers (`EpochProvingJob`, or unit tests) construct one context per epoch and pass
|
|
14
|
+
* it into every sub-tree they create. `stop()` aborts every in-flight chonk job.
|
|
15
|
+
*/ export class EpochProvingContext {
|
|
16
|
+
prover;
|
|
17
|
+
epochNumber;
|
|
18
|
+
cache;
|
|
19
|
+
/** Abort controllers for in-flight chonk jobs, keyed by tx hash. */ pending;
|
|
20
|
+
log;
|
|
21
|
+
stopped;
|
|
22
|
+
constructor(prover, epochNumber, bindings){
|
|
23
|
+
this.prover = prover;
|
|
24
|
+
this.epochNumber = epochNumber;
|
|
25
|
+
this.cache = new Map();
|
|
26
|
+
this.pending = new Map();
|
|
27
|
+
this.stopped = false;
|
|
28
|
+
this.log = createLogger('prover-client:epoch-proving-context', bindings);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the cached chonk-verifier proof promise for the given tx hash, or
|
|
32
|
+
* `undefined` if none has been enqueued yet. Non-mutating.
|
|
33
|
+
*/ getCached(txHash) {
|
|
34
|
+
return this.cache.get(txHash);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Enqueues a chonk-verifier proof for the given tx hash, returning the promise (or
|
|
38
|
+
* the already-cached one if already enqueued). The promise resolves when the broker
|
|
39
|
+
* delivers the result; on rejection (including `stop()`), the cache entry is removed
|
|
40
|
+
* so a subsequent caller can re-enqueue.
|
|
41
|
+
*/ enqueue(txHash, inputs) {
|
|
42
|
+
if (this.stopped) {
|
|
43
|
+
return Promise.reject(new Error('EpochProvingContext is stopped'));
|
|
44
|
+
}
|
|
45
|
+
const cached = this.cache.get(txHash);
|
|
46
|
+
if (cached) {
|
|
47
|
+
return cached;
|
|
48
|
+
}
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
this.pending.set(txHash, controller);
|
|
51
|
+
this.log.debug(`Enqueueing chonk-verifier circuit`, {
|
|
52
|
+
txHash,
|
|
53
|
+
epochNumber: this.epochNumber
|
|
54
|
+
});
|
|
55
|
+
const promise = this.prover.getPublicChonkVerifierProof(inputs, controller.signal, this.epochNumber).finally(()=>this.pending.delete(txHash));
|
|
56
|
+
// Self-clean on rejection so a future caller can re-enqueue. Mark the rejection
|
|
57
|
+
// path as observed to silence unhandled-rejection warnings when no consumer
|
|
58
|
+
// awaits the promise (e.g. when the only `.then` chain belonged to a cancelled
|
|
59
|
+
// sub-tree's tx-proving state).
|
|
60
|
+
promise.catch((err)=>{
|
|
61
|
+
this.cache.delete(txHash);
|
|
62
|
+
this.log.debug(`Chonk-verifier proof failed; evicted from cache`, {
|
|
63
|
+
txHash,
|
|
64
|
+
error: `${err}`
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
this.cache.set(txHash, promise);
|
|
68
|
+
return promise;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Aborts every in-flight chonk-verifier broker job and clears the cache. Called by
|
|
72
|
+
* the owning `EpochProvingJob` when the job stops.
|
|
73
|
+
*/ stop() {
|
|
74
|
+
this.stopped = true;
|
|
75
|
+
for (const controller of this.pending.values()){
|
|
76
|
+
controller.abort();
|
|
77
|
+
}
|
|
78
|
+
this.pending.clear();
|
|
79
|
+
this.cache.clear();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -39,7 +39,7 @@ export declare class EpochProvingState {
|
|
|
39
39
|
private endBlobAccumulator;
|
|
40
40
|
private finalBatchedBlob;
|
|
41
41
|
private provingStateLifecycle;
|
|
42
|
-
readonly cachedChonkVerifierProofs: Map<string, Promise<PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs,
|
|
42
|
+
readonly cachedChonkVerifierProofs: Map<string, Promise<PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, 480>>>;
|
|
43
43
|
constructor(epochNumber: EpochNumber, totalNumCheckpoints: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges, onCheckpointBlobAccumulatorSet: (checkpoint: CheckpointProvingState) => Promise<void>, completionCallback: (result: ProvingResult) => void, rejectionCallback: (reason: string) => void);
|
|
44
44
|
startNewCheckpoint(checkpointIndex: number, constants: CheckpointConstantData, totalNumBlocks: number, previousBlockHeader: BlockHeader, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, l1ToL2Messages: Fr[], lastL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>): CheckpointProvingState;
|
|
45
45
|
getCheckpointProvingState(index: number): CheckpointProvingState | undefined;
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { ProvingOrchestrator } from './orchestrator.js';
|
|
2
|
-
|
|
2
|
+
export { CheckpointSubTreeOrchestrator, type SubTreeResult } from './checkpoint-sub-tree-orchestrator.js';
|
|
3
|
+
export { EpochProvingContext, type ChonkVerifierProofResult } from './epoch-proving-context.js';
|
|
4
|
+
export { TopTreeOrchestrator, TopTreeCancelledError, type CheckpointTopTreeData, type TopTreeResult, } from './top-tree-orchestrator.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLEtBQUssYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEtBQUssd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLGFBQWEsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC1G,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +1,4 @@
|
|
|
1
1
|
export { ProvingOrchestrator } from './orchestrator.js';
|
|
2
|
+
export { CheckpointSubTreeOrchestrator } from './checkpoint-sub-tree-orchestrator.js';
|
|
3
|
+
export { EpochProvingContext } from './epoch-proving-context.js';
|
|
4
|
+
export { TopTreeOrchestrator, TopTreeCancelledError } from './top-tree-orchestrator.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BatchedBlob, FinalBlobBatchingChallenges } from '@aztec/blob-lib/types';
|
|
2
2
|
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import {
|
|
4
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
5
5
|
import { EthAddress } from '@aztec/stdlib/block';
|
|
6
6
|
import type { EpochProver, ForkMerkleTreeOperations, ReadonlyWorldStateAccess, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
7
7
|
import type { Proof } from '@aztec/stdlib/proofs';
|
|
@@ -10,6 +10,9 @@ import type { BlockHeader, ProcessedTx, Tx } from '@aztec/stdlib/tx';
|
|
|
10
10
|
import type { UInt64 } from '@aztec/stdlib/types';
|
|
11
11
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
12
12
|
import type { BlockProvingState } from './block-proving-state.js';
|
|
13
|
+
import type { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
14
|
+
import { EpochProvingState, type ProvingResult } from './epoch-proving-state.js';
|
|
15
|
+
import { TopTreeProvingScheduler } from './top-tree-proving-scheduler.js';
|
|
13
16
|
/**
|
|
14
17
|
* Implements an event driven proving scheduler to build the recursive proof tree. The idea being:
|
|
15
18
|
* 1. Transactions are provided to the scheduler post simulation.
|
|
@@ -23,22 +26,21 @@ import type { BlockProvingState } from './block-proving-state.js';
|
|
|
23
26
|
/**
|
|
24
27
|
* The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree.
|
|
25
28
|
*/
|
|
26
|
-
export declare class ProvingOrchestrator implements EpochProver {
|
|
29
|
+
export declare class ProvingOrchestrator extends TopTreeProvingScheduler implements EpochProver {
|
|
27
30
|
private dbProvider;
|
|
28
|
-
private prover;
|
|
29
31
|
private readonly proverId;
|
|
30
32
|
private readonly cancelJobsOnStop;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
private provingPromise;
|
|
33
|
+
protected provingState: EpochProvingState | undefined;
|
|
34
|
+
protected provingPromise: Promise<ProvingResult> | undefined;
|
|
34
35
|
private metrics;
|
|
35
36
|
private dbs;
|
|
36
|
-
|
|
37
|
-
constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, cancelJobsOnStop?: boolean, telemetryClient?: TelemetryClient, bindings?: LoggerBindings);
|
|
37
|
+
constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, cancelJobsOnStop: boolean | undefined, enqueueConcurrency: number, telemetryClient?: TelemetryClient, bindings?: LoggerBindings);
|
|
38
38
|
get tracer(): Tracer;
|
|
39
39
|
getProverId(): EthAddress;
|
|
40
40
|
getNumActiveForks(): number;
|
|
41
|
-
|
|
41
|
+
protected cancelInternal(): void;
|
|
42
|
+
protected wrapCircuitCall<T>(circuitName: string, fn: (signal: AbortSignal) => Promise<T>): (signal: AbortSignal) => Promise<T>;
|
|
43
|
+
protected onRootRollupComplete(state: EpochProvingState): void;
|
|
42
44
|
startNewEpoch(epochNumber: EpochNumber, totalNumCheckpoints: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges): void;
|
|
43
45
|
/**
|
|
44
46
|
* Starts a new checkpoint.
|
|
@@ -88,17 +90,10 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
88
90
|
proof: Proof;
|
|
89
91
|
batchedBlobInputs: BatchedBlob;
|
|
90
92
|
}>;
|
|
91
|
-
/**
|
|
92
|
-
* Enqueue a job to be scheduled
|
|
93
|
-
* @param provingState - The proving state object being operated on
|
|
94
|
-
* @param jobType - The type of job to be queued
|
|
95
|
-
* @param job - The actual job, returns a promise notifying of the job's completion
|
|
96
|
-
*/
|
|
97
|
-
private deferredProving;
|
|
98
93
|
private updateL1ToL2MessageTree;
|
|
99
94
|
private prepareBaseRollupInputs;
|
|
100
95
|
private enqueueBaseRollup;
|
|
101
|
-
|
|
96
|
+
protected getOrEnqueueChonkVerifier(provingState: BlockProvingState, txIndex: number): void;
|
|
102
97
|
private doEnqueueChonkVerifier;
|
|
103
98
|
private enqueueMergeRollup;
|
|
104
99
|
private enqueueBlockRootRollup;
|
|
@@ -107,15 +102,10 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
107
102
|
private enqueueRootParityCircuit;
|
|
108
103
|
private enqueueBlockMergeRollup;
|
|
109
104
|
private enqueueCheckpointRootRollup;
|
|
110
|
-
private enqueueCheckpointMergeRollup;
|
|
111
|
-
private enqueueEpochPadding;
|
|
112
|
-
private enqueueRootRollup;
|
|
113
105
|
private checkAndEnqueueNextMergeRollup;
|
|
114
106
|
private checkAndEnqueueBlockRootRollup;
|
|
115
107
|
private checkAndEnqueueNextBlockMergeRollup;
|
|
116
|
-
|
|
117
|
-
private checkAndEnqueueNextCheckpointMergeRollup;
|
|
118
|
-
private checkAndEnqueueRootRollup;
|
|
108
|
+
protected checkAndEnqueueCheckpointRootRollup(provingState: CheckpointProvingState): Promise<void>;
|
|
119
109
|
/**
|
|
120
110
|
* Executes the VM circuit for a public function, will enqueue the corresponding kernel if the
|
|
121
111
|
* previous kernel is ready
|
|
@@ -123,6 +113,6 @@ export declare class ProvingOrchestrator implements EpochProver {
|
|
|
123
113
|
* @param txIndex - The index of the transaction being proven
|
|
124
114
|
*/
|
|
125
115
|
private enqueueVM;
|
|
126
|
-
|
|
116
|
+
protected checkAndEnqueueBaseRollup(provingState: BlockProvingState, txIndex: number): void;
|
|
127
117
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL29yY2hlc3RyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFPN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUNWLFdBQVcsRUFDWCx3QkFBd0IsRUFHeEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFNTCxzQkFBc0IsRUFLdEIsc0JBQXNCLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBRUwsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUlaLE1BQU0seUJBQXlCLENBQUM7QUFlakMsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLGFBQWEsRUFBc0IsTUFBTSwwQkFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAc,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -371,16 +371,13 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
|
371
371
|
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
372
|
}
|
|
373
373
|
var _dec, _dec1, _dec2, _dec3, _dec4, _initProto;
|
|
374
|
-
import { L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH,
|
|
374
|
+
import { L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
|
|
375
375
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
376
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
377
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
378
|
-
import { AbortError } from '@aztec/foundation/error';
|
|
379
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
380
376
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
381
377
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
382
378
|
import { pushTestData } from '@aztec/foundation/testing';
|
|
383
379
|
import { elapsed } from '@aztec/foundation/timer';
|
|
380
|
+
import { appendL1ToL2MessagesToTree } from '@aztec/stdlib/messaging';
|
|
384
381
|
import { BlockRootEmptyTxFirstRollupPrivateInputs, BlockRootFirstRollupPrivateInputs, BlockRootSingleTxFirstRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs, CheckpointRootSingleBlockRollupPrivateInputs, PrivateTxBaseRollupPrivateInputs } from '@aztec/stdlib/rollup';
|
|
385
382
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
386
383
|
import { Attributes, getTelemetryClient, trackSpan, wrapCallbackInSpan } from '@aztec/telemetry-client';
|
|
@@ -388,6 +385,7 @@ import { inspect } from 'util';
|
|
|
388
385
|
import { buildHeaderFromCircuitOutputs, getLastSiblingPath, getPublicChonkVerifierPrivateInputsFromTx, getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, insertSideEffectsAndBuildBaseRollupHints, validatePartialState, validateTx } from './block-building-helpers.js';
|
|
389
386
|
import { EpochProvingState } from './epoch-proving-state.js';
|
|
390
387
|
import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js';
|
|
388
|
+
import { TopTreeProvingScheduler } from './top-tree-proving-scheduler.js';
|
|
391
389
|
import { TxProvingState } from './tx-proving-state.js';
|
|
392
390
|
_dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
393
391
|
[Attributes.BLOCK_NUMBER]: blockNumber
|
|
@@ -409,9 +407,8 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
409
407
|
* The proving implementation is determined by the provided prover. This could be for example a local prover or a remote prover pool.
|
|
410
408
|
*/ /**
|
|
411
409
|
* The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree.
|
|
412
|
-
*/ export class ProvingOrchestrator {
|
|
410
|
+
*/ export class ProvingOrchestrator extends TopTreeProvingScheduler {
|
|
413
411
|
dbProvider;
|
|
414
|
-
prover;
|
|
415
412
|
proverId;
|
|
416
413
|
cancelJobsOnStop;
|
|
417
414
|
static{
|
|
@@ -444,22 +441,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
444
441
|
], []));
|
|
445
442
|
}
|
|
446
443
|
provingState;
|
|
447
|
-
pendingProvingJobs;
|
|
448
444
|
provingPromise;
|
|
449
445
|
metrics;
|
|
450
|
-
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
451
446
|
dbs;
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
this.dbProvider = dbProvider;
|
|
455
|
-
this.prover = prover;
|
|
456
|
-
this.proverId = proverId;
|
|
457
|
-
this.cancelJobsOnStop = cancelJobsOnStop;
|
|
458
|
-
this.provingState = (_initProto(this), undefined);
|
|
459
|
-
this.pendingProvingJobs = [];
|
|
460
|
-
this.provingPromise = undefined;
|
|
461
|
-
this.dbs = new Map();
|
|
462
|
-
this.logger = createLogger('prover-client:orchestrator', bindings);
|
|
447
|
+
constructor(dbProvider, prover, proverId, cancelJobsOnStop = false, enqueueConcurrency, telemetryClient = getTelemetryClient(), bindings){
|
|
448
|
+
super(prover, enqueueConcurrency, 'prover-client:orchestrator', bindings), this.dbProvider = dbProvider, this.proverId = proverId, this.cancelJobsOnStop = cancelJobsOnStop, this.provingState = (_initProto(this), undefined), this.provingPromise = undefined, this.dbs = new Map();
|
|
463
449
|
this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
|
|
464
450
|
}
|
|
465
451
|
get tracer() {
|
|
@@ -471,9 +457,18 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
471
457
|
getNumActiveForks() {
|
|
472
458
|
return this.dbs.size;
|
|
473
459
|
}
|
|
474
|
-
|
|
460
|
+
cancelInternal() {
|
|
475
461
|
this.cancel();
|
|
476
|
-
|
|
462
|
+
}
|
|
463
|
+
wrapCircuitCall(circuitName, fn) {
|
|
464
|
+
return wrapCallbackInSpan(this.tracer, `ProvingOrchestrator.prover.${circuitName}`, {
|
|
465
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName
|
|
466
|
+
}, fn);
|
|
467
|
+
}
|
|
468
|
+
onRootRollupComplete(state) {
|
|
469
|
+
state.resolve({
|
|
470
|
+
status: 'success'
|
|
471
|
+
});
|
|
477
472
|
}
|
|
478
473
|
startNewEpoch(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges) {
|
|
479
474
|
if (this.provingState?.verifyState()) {
|
|
@@ -733,11 +728,7 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
733
728
|
* If cancelJobsOnStop is true, aborts all pending jobs with the broker (which marks them as 'Aborted').
|
|
734
729
|
* If cancelJobsOnStop is false (default), jobs remain in the broker queue and can be reused on restart/reorg.
|
|
735
730
|
*/ cancel() {
|
|
736
|
-
|
|
737
|
-
for (const controller of this.pendingProvingJobs){
|
|
738
|
-
controller.abort();
|
|
739
|
-
}
|
|
740
|
-
}
|
|
731
|
+
this.resetSchedulerState(this.cancelJobsOnStop);
|
|
741
732
|
this.provingState?.cancel();
|
|
742
733
|
for (const [blockNumber, db] of this.dbs.entries()){
|
|
743
734
|
void db.close().catch((err)=>this.logger.error(`Error closing db for block ${blockNumber}`, err));
|
|
@@ -769,61 +760,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
769
760
|
});
|
|
770
761
|
return epochProofResult;
|
|
771
762
|
}
|
|
772
|
-
/**
|
|
773
|
-
* Enqueue a job to be scheduled
|
|
774
|
-
* @param provingState - The proving state object being operated on
|
|
775
|
-
* @param jobType - The type of job to be queued
|
|
776
|
-
* @param job - The actual job, returns a promise notifying of the job's completion
|
|
777
|
-
*/ deferredProving(provingState, request, callback) {
|
|
778
|
-
if (!provingState.verifyState()) {
|
|
779
|
-
this.logger.debug(`Not enqueuing job, state no longer valid`);
|
|
780
|
-
return;
|
|
781
|
-
}
|
|
782
|
-
const controller = new AbortController();
|
|
783
|
-
this.pendingProvingJobs.push(controller);
|
|
784
|
-
// We use a 'safeJob'. We don't want promise rejections in the proving pool, we want to capture the error here
|
|
785
|
-
// and reject the proving job whilst keeping the event loop free of rejections
|
|
786
|
-
const safeJob = async ()=>{
|
|
787
|
-
try {
|
|
788
|
-
// there's a delay between enqueueing this job and it actually running
|
|
789
|
-
if (controller.signal.aborted) {
|
|
790
|
-
return;
|
|
791
|
-
}
|
|
792
|
-
const result = await request(controller.signal);
|
|
793
|
-
if (!provingState.verifyState()) {
|
|
794
|
-
this.logger.debug(`State no longer valid, discarding result`);
|
|
795
|
-
return;
|
|
796
|
-
}
|
|
797
|
-
// we could have been cancelled whilst waiting for the result
|
|
798
|
-
// and the prover ignored the signal. Drop the result in that case
|
|
799
|
-
if (controller.signal.aborted) {
|
|
800
|
-
return;
|
|
801
|
-
}
|
|
802
|
-
await callback(result);
|
|
803
|
-
} catch (err) {
|
|
804
|
-
if (err instanceof AbortError) {
|
|
805
|
-
// operation was cancelled, probably because the block was cancelled
|
|
806
|
-
// drop this result
|
|
807
|
-
return;
|
|
808
|
-
}
|
|
809
|
-
this.logger.error(`Error thrown when proving job`, err);
|
|
810
|
-
provingState.reject(`${err}`);
|
|
811
|
-
} finally{
|
|
812
|
-
const index = this.pendingProvingJobs.indexOf(controller);
|
|
813
|
-
if (index > -1) {
|
|
814
|
-
this.pendingProvingJobs.splice(index, 1);
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
};
|
|
818
|
-
// let the callstack unwind before adding the job to the queue
|
|
819
|
-
setImmediate(()=>void safeJob());
|
|
820
|
-
}
|
|
821
763
|
async updateL1ToL2MessageTree(l1ToL2Messages, db) {
|
|
822
|
-
const l1ToL2MessagesPadded = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 'Too many L1 to L2 messages');
|
|
823
764
|
const lastL1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
824
765
|
const lastL1ToL2MessageSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db), L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
|
|
825
766
|
// Update the local trees to include the new l1 to l2 messages
|
|
826
|
-
await db
|
|
767
|
+
await appendL1ToL2MessagesToTree(db, l1ToL2Messages);
|
|
827
768
|
const newL1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
828
769
|
const newL1ToL2MessageSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db), L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
|
|
829
770
|
return {
|
|
@@ -902,7 +843,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
902
843
|
}
|
|
903
844
|
const txProvingState = provingState.getTxProvingState(txIndex);
|
|
904
845
|
const txHash = txProvingState.processedTx.hash.toString();
|
|
905
|
-
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH;
|
|
906
846
|
const handleResult = (result)=>{
|
|
907
847
|
this.logger.debug(`Got chonk verifier proof for tx index: ${txIndex}`, {
|
|
908
848
|
txHash
|
|
@@ -977,7 +917,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
977
917
|
return this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber);
|
|
978
918
|
}
|
|
979
919
|
}), async (result)=>{
|
|
980
|
-
this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}
|
|
920
|
+
this.logger.debug(`Completed ${rollupType} proof for block ${provingState.blockNumber}`, {
|
|
921
|
+
blockNumber: provingState.blockNumber,
|
|
922
|
+
checkpointIndex: provingState.parentCheckpoint.index,
|
|
923
|
+
...result.inputs.toInspect()
|
|
924
|
+
});
|
|
981
925
|
const leafLocation = provingState.setBlockRootRollupProof(result);
|
|
982
926
|
const checkpointProvingState = provingState.parentCheckpoint;
|
|
983
927
|
// Verification is called from both here and setBlockCompleted. Whichever runs last
|
|
@@ -1049,6 +993,11 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1049
993
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockMergeRollupProof', {
|
|
1050
994
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-block-merge'
|
|
1051
995
|
}, (signal)=>this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber)), async (result)=>{
|
|
996
|
+
this.logger.debug(`Completed block merge rollup proof for checkpoint ${provingState.index}`, {
|
|
997
|
+
checkpointIndex: provingState.index,
|
|
998
|
+
mergeLocation: location,
|
|
999
|
+
...result.inputs.toInspect()
|
|
1000
|
+
});
|
|
1052
1001
|
provingState.setBlockMergeRollupProof(location, result);
|
|
1053
1002
|
await this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
|
|
1054
1003
|
});
|
|
@@ -1081,7 +1030,10 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1081
1030
|
provingState.reject(`Blob accumulator state mismatch.`);
|
|
1082
1031
|
return;
|
|
1083
1032
|
}
|
|
1084
|
-
this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}
|
|
1033
|
+
this.logger.debug(`Completed ${rollupType} proof for checkpoint ${provingState.index}`, {
|
|
1034
|
+
checkpointIndex: provingState.index,
|
|
1035
|
+
...result.inputs.toInspect()
|
|
1036
|
+
});
|
|
1085
1037
|
const leafLocation = provingState.setCheckpointRootRollupProof(result);
|
|
1086
1038
|
const epochProvingState = provingState.parentEpoch;
|
|
1087
1039
|
if (epochProvingState.totalNumCheckpoints === 1) {
|
|
@@ -1091,61 +1043,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1091
1043
|
}
|
|
1092
1044
|
});
|
|
1093
1045
|
}
|
|
1094
|
-
enqueueCheckpointMergeRollup(provingState, location) {
|
|
1095
|
-
if (!provingState.verifyState()) {
|
|
1096
|
-
this.logger.debug('Not running checkpoint merge rollup. State no longer valid.');
|
|
1097
|
-
return;
|
|
1098
|
-
}
|
|
1099
|
-
if (!provingState.tryStartProvingCheckpointMerge(location)) {
|
|
1100
|
-
this.logger.debug('Checkpoint merge rollup already started.');
|
|
1101
|
-
return;
|
|
1102
|
-
}
|
|
1103
|
-
const inputs = provingState.getCheckpointMergeRollupInputs(location);
|
|
1104
|
-
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointMergeRollupProof', {
|
|
1105
|
-
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-merge'
|
|
1106
|
-
}, (signal)=>this.prover.getCheckpointMergeRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1107
|
-
this.logger.debug('Completed proof for checkpoint merge rollup.');
|
|
1108
|
-
provingState.setCheckpointMergeRollupProof(location, result);
|
|
1109
|
-
this.checkAndEnqueueNextCheckpointMergeRollup(provingState, location);
|
|
1110
|
-
});
|
|
1111
|
-
}
|
|
1112
|
-
enqueueEpochPadding(provingState) {
|
|
1113
|
-
if (!provingState.verifyState()) {
|
|
1114
|
-
this.logger.debug('Not running epoch padding. State no longer valid.');
|
|
1115
|
-
return;
|
|
1116
|
-
}
|
|
1117
|
-
if (!provingState.tryStartProvingPaddingCheckpoint()) {
|
|
1118
|
-
this.logger.debug('Padding checkpoint already started.');
|
|
1119
|
-
return;
|
|
1120
|
-
}
|
|
1121
|
-
this.logger.debug('Padding epoch proof with a padding block root proof.');
|
|
1122
|
-
const inputs = provingState.getPaddingCheckpointInputs();
|
|
1123
|
-
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getCheckpointPaddingRollupProof', {
|
|
1124
|
-
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-checkpoint-padding'
|
|
1125
|
-
}, (signal)=>this.prover.getCheckpointPaddingRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1126
|
-
this.logger.debug('Completed proof for padding checkpoint.');
|
|
1127
|
-
provingState.setCheckpointPaddingProof(result);
|
|
1128
|
-
this.checkAndEnqueueRootRollup(provingState);
|
|
1129
|
-
});
|
|
1130
|
-
}
|
|
1131
|
-
// Executes the root rollup circuit
|
|
1132
|
-
enqueueRootRollup(provingState) {
|
|
1133
|
-
if (!provingState.verifyState()) {
|
|
1134
|
-
this.logger.debug('Not running root rollup, state no longer valid');
|
|
1135
|
-
return;
|
|
1136
|
-
}
|
|
1137
|
-
this.logger.debug(`Preparing root rollup`);
|
|
1138
|
-
const inputs = provingState.getRootRollupInputs();
|
|
1139
|
-
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
|
|
1140
|
-
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'rollup-root'
|
|
1141
|
-
}, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
|
1142
|
-
this.logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
|
|
1143
|
-
provingState.setRootRollupProof(result);
|
|
1144
|
-
provingState.resolve({
|
|
1145
|
-
status: 'success'
|
|
1146
|
-
});
|
|
1147
|
-
});
|
|
1148
|
-
}
|
|
1149
1046
|
checkAndEnqueueNextMergeRollup(provingState, currentLocation) {
|
|
1150
1047
|
if (!provingState.isReadyForMergeRollup(currentLocation)) {
|
|
1151
1048
|
return;
|
|
@@ -1181,24 +1078,6 @@ _dec = trackSpan('ProvingOrchestrator.startNewBlock', (blockNumber)=>({
|
|
|
1181
1078
|
}
|
|
1182
1079
|
await this.enqueueCheckpointRootRollup(provingState);
|
|
1183
1080
|
}
|
|
1184
|
-
checkAndEnqueueNextCheckpointMergeRollup(provingState, currentLocation) {
|
|
1185
|
-
if (!provingState.isReadyForCheckpointMerge(currentLocation)) {
|
|
1186
|
-
return;
|
|
1187
|
-
}
|
|
1188
|
-
const parentLocation = provingState.getParentLocation(currentLocation);
|
|
1189
|
-
if (parentLocation.level === 0) {
|
|
1190
|
-
this.checkAndEnqueueRootRollup(provingState);
|
|
1191
|
-
} else {
|
|
1192
|
-
this.enqueueCheckpointMergeRollup(provingState, parentLocation);
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
checkAndEnqueueRootRollup(provingState) {
|
|
1196
|
-
if (!provingState.isReadyForRootRollup()) {
|
|
1197
|
-
this.logger.debug('Not ready for root rollup');
|
|
1198
|
-
return;
|
|
1199
|
-
}
|
|
1200
|
-
this.enqueueRootRollup(provingState);
|
|
1201
|
-
}
|
|
1202
1081
|
/**
|
|
1203
1082
|
* Executes the VM circuit for a public function, will enqueue the corresponding kernel if the
|
|
1204
1083
|
* previous kernel is ready
|