@aztec/prover-client 5.0.0-private.20260319 → 5.0.0-rc.2
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 +1 -1
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +15 -5
- package/dest/mocks/test_context.d.ts +11 -11
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +25 -28
- package/dest/orchestrator/block-building-helpers.d.ts +1 -1
- package/dest/orchestrator/checkpoint-proving-state.d.ts +20 -36
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +22 -120
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +161 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/{orchestrator.js → checkpoint-sub-tree-orchestrator.js} +267 -451
- package/dest/orchestrator/chonk-cache.d.ts +39 -0
- package/dest/orchestrator/chonk-cache.d.ts.map +1 -0
- package/dest/orchestrator/chonk-cache.js +80 -0
- package/dest/orchestrator/index.d.ts +4 -2
- package/dest/orchestrator/index.d.ts.map +1 -1
- package/dest/orchestrator/index.js +3 -1
- package/dest/orchestrator/proving-scheduler.d.ts +81 -0
- package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/proving-scheduler.js +120 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts +88 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-orchestrator.js +232 -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 +61 -4
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +54 -7
- 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 +10 -16
- package/dest/proving_broker/config.d.ts +8 -72
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +2 -2
- 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/epoch_settlement.d.ts +36 -0
- package/dest/test/epoch_settlement.d.ts.map +1 -0
- package/dest/test/epoch_settlement.js +52 -0
- package/dest/test/index.d.ts +2 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +1 -0
- package/dest/test/mock_prover.d.ts +3 -3
- package/package.json +19 -18
- package/src/config.ts +18 -2
- package/src/light/lightweight_checkpoint_builder.ts +16 -6
- package/src/mocks/test_context.ts +24 -41
- package/src/orchestrator/checkpoint-proving-state.ts +21 -162
- package/src/orchestrator/{orchestrator.ts → checkpoint-sub-tree-orchestrator.ts} +415 -661
- package/src/orchestrator/chonk-cache.ts +99 -0
- package/src/orchestrator/index.ts +8 -1
- package/src/orchestrator/proving-scheduler.ts +160 -0
- package/src/orchestrator/top-tree-orchestrator.ts +384 -0
- package/src/orchestrator/top-tree-proving-state.ts +219 -0
- package/src/prover-client/prover-client.ts +128 -18
- package/src/proving_broker/broker_prover_facade.ts +8 -16
- package/src/proving_broker/config.ts +2 -1
- 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
- package/src/test/epoch_settlement.ts +82 -0
- package/src/test/index.ts +1 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +0 -75
- package/dest/orchestrator/epoch-proving-state.d.ts.map +0 -1
- package/dest/orchestrator/epoch-proving-state.js +0 -269
- package/dest/orchestrator/orchestrator.d.ts +0 -130
- package/dest/orchestrator/orchestrator.d.ts.map +0 -1
- package/dest/prover-client/server-epoch-prover.d.ts +0 -32
- package/dest/prover-client/server-epoch-prover.d.ts.map +0 -1
- package/dest/prover-client/server-epoch-prover.js +0 -40
- package/src/orchestrator/epoch-proving-state.ts +0 -380
- package/src/prover-client/server-epoch-prover.ts +0 -69
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { SpongeBlob
|
|
2
|
-
import {
|
|
1
|
+
import { SpongeBlob } from '@aztec/blob-lib';
|
|
2
|
+
import { NUM_MSGS_PER_BASE_PARITY } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
|
-
import { BLS12Point } from '@aztec/foundation/curves/bls12';
|
|
6
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
6
|
import { UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
8
|
-
import { computeCheckpointOutHash } from '@aztec/stdlib/messaging';
|
|
9
7
|
import { ParityBasePrivateInputs } from '@aztec/stdlib/parity';
|
|
10
|
-
import { BlockMergeRollupPrivateInputs
|
|
11
|
-
import {
|
|
8
|
+
import { BlockMergeRollupPrivateInputs } from '@aztec/stdlib/rollup';
|
|
9
|
+
import { toProofData } from './block-building-helpers.js';
|
|
12
10
|
import { BlockProvingState } from './block-proving-state.js';
|
|
13
11
|
export class CheckpointProvingState {
|
|
14
12
|
index;
|
|
15
13
|
constants;
|
|
16
14
|
totalNumBlocks;
|
|
17
|
-
finalBlobBatchingChallenges;
|
|
18
15
|
headerOfLastBlockInPreviousCheckpoint;
|
|
19
16
|
lastArchiveSiblingPath;
|
|
20
17
|
l1ToL2Messages;
|
|
@@ -22,28 +19,19 @@ export class CheckpointProvingState {
|
|
|
22
19
|
lastL1ToL2MessageSubtreeRootSiblingPath;
|
|
23
20
|
newL1ToL2MessageTreeSnapshot;
|
|
24
21
|
newL1ToL2MessageSubtreeRootSiblingPath;
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
epochNumber;
|
|
23
|
+
isAlive;
|
|
24
|
+
onReject;
|
|
27
25
|
blockProofs;
|
|
28
|
-
checkpointRootProof;
|
|
29
26
|
blocks;
|
|
30
|
-
previousOutHashHint;
|
|
31
|
-
outHash;
|
|
32
|
-
// The snapshot and sibling path after the checkpoint's out hash is inserted.
|
|
33
|
-
// Stored here to be retrieved for the next checkpoint when it's added.
|
|
34
|
-
newOutHashHint;
|
|
35
|
-
startBlobAccumulator;
|
|
36
|
-
endBlobAccumulator;
|
|
37
|
-
blobFields;
|
|
38
27
|
error;
|
|
39
28
|
firstBlockNumber;
|
|
40
|
-
constructor(index, constants, totalNumBlocks,
|
|
29
|
+
constructor(index, constants, totalNumBlocks, headerOfLastBlockInPreviousCheckpoint, lastArchiveSiblingPath, l1ToL2Messages, // The snapshot and sibling path before the new l1 to l2 message subtree is inserted.
|
|
41
30
|
lastL1ToL2MessageTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath, // The snapshot and sibling path after the new l1 to l2 message subtree is inserted.
|
|
42
|
-
newL1ToL2MessageTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath,
|
|
31
|
+
newL1ToL2MessageTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath, epochNumber, /** Owner's liveness check. `verifyState()` returns false once this returns false. */ isAlive, /** Owner's failure callback. Invoked from `reject` to surface the error upward. */ onReject){
|
|
43
32
|
this.index = index;
|
|
44
33
|
this.constants = constants;
|
|
45
34
|
this.totalNumBlocks = totalNumBlocks;
|
|
46
|
-
this.finalBlobBatchingChallenges = finalBlobBatchingChallenges;
|
|
47
35
|
this.headerOfLastBlockInPreviousCheckpoint = headerOfLastBlockInPreviousCheckpoint;
|
|
48
36
|
this.lastArchiveSiblingPath = lastArchiveSiblingPath;
|
|
49
37
|
this.l1ToL2Messages = l1ToL2Messages;
|
|
@@ -51,15 +39,13 @@ export class CheckpointProvingState {
|
|
|
51
39
|
this.lastL1ToL2MessageSubtreeRootSiblingPath = lastL1ToL2MessageSubtreeRootSiblingPath;
|
|
52
40
|
this.newL1ToL2MessageTreeSnapshot = newL1ToL2MessageTreeSnapshot;
|
|
53
41
|
this.newL1ToL2MessageSubtreeRootSiblingPath = newL1ToL2MessageSubtreeRootSiblingPath;
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
42
|
+
this.epochNumber = epochNumber;
|
|
43
|
+
this.isAlive = isAlive;
|
|
44
|
+
this.onReject = onReject;
|
|
56
45
|
this.blocks = [];
|
|
57
46
|
this.blockProofs = new UnbalancedTreeStore(totalNumBlocks);
|
|
58
47
|
this.firstBlockNumber = BlockNumber(headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber + 1);
|
|
59
48
|
}
|
|
60
|
-
get epochNumber() {
|
|
61
|
-
return this.parentEpoch.epochNumber;
|
|
62
|
-
}
|
|
63
49
|
startNewBlock(blockNumber, timestamp, totalNumTxs, lastArchiveTreeSnapshot, lastArchiveSiblingPath) {
|
|
64
50
|
const index = Number(blockNumber) - Number(this.firstBlockNumber);
|
|
65
51
|
if (index >= this.totalNumBlocks) {
|
|
@@ -102,60 +88,9 @@ export class CheckpointProvingState {
|
|
|
102
88
|
provingOutput
|
|
103
89
|
});
|
|
104
90
|
}
|
|
105
|
-
tryStartProvingCheckpointRoot() {
|
|
106
|
-
if (this.checkpointRootProof?.isProving) {
|
|
107
|
-
return false;
|
|
108
|
-
} else {
|
|
109
|
-
this.checkpointRootProof = {
|
|
110
|
-
isProving: true
|
|
111
|
-
};
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
setCheckpointRootRollupProof(provingOutput) {
|
|
116
|
-
this.checkpointRootProof = {
|
|
117
|
-
provingOutput
|
|
118
|
-
};
|
|
119
|
-
return this.parentEpoch.setCheckpointRootRollupProof(this.index, provingOutput);
|
|
120
|
-
}
|
|
121
91
|
getBaseParityInputs(baseParityIndex) {
|
|
122
92
|
const messages = padArrayEnd(this.l1ToL2Messages.slice(baseParityIndex * NUM_MSGS_PER_BASE_PARITY, (baseParityIndex + 1) * NUM_MSGS_PER_BASE_PARITY), Fr.ZERO, NUM_MSGS_PER_BASE_PARITY);
|
|
123
|
-
return new ParityBasePrivateInputs(messages, this.constants.vkTreeRoot);
|
|
124
|
-
}
|
|
125
|
-
setOutHashHint(hint) {
|
|
126
|
-
this.previousOutHashHint = hint;
|
|
127
|
-
}
|
|
128
|
-
getOutHashHint() {
|
|
129
|
-
return this.previousOutHashHint;
|
|
130
|
-
}
|
|
131
|
-
accumulateBlockOutHashes() {
|
|
132
|
-
if (this.isAcceptingBlocks() || this.blocks.some((b)=>!b?.hasEndState())) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (!this.outHash) {
|
|
136
|
-
const messagesPerBlock = this.blocks.map((b)=>b.getTxEffects().map((tx)=>tx.l2ToL1Msgs));
|
|
137
|
-
this.outHash = computeCheckpointOutHash(messagesPerBlock);
|
|
138
|
-
}
|
|
139
|
-
return this.outHash;
|
|
140
|
-
}
|
|
141
|
-
setOutHashHintForNextCheckpoint(hint) {
|
|
142
|
-
this.newOutHashHint = hint;
|
|
143
|
-
}
|
|
144
|
-
getOutHashHintForNextCheckpoint() {
|
|
145
|
-
return this.newOutHashHint;
|
|
146
|
-
}
|
|
147
|
-
async accumulateBlobs(startBlobAccumulator) {
|
|
148
|
-
if (this.isAcceptingBlocks() || this.blocks.some((b)=>!b?.hasEndState())) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
this.blobFields = encodeCheckpointBlobDataFromBlocks(this.blocks.map((b)=>b.getBlockBlobData()));
|
|
152
|
-
this.endBlobAccumulator = await accumulateBlobs(this.blobFields, startBlobAccumulator);
|
|
153
|
-
this.startBlobAccumulator = startBlobAccumulator;
|
|
154
|
-
await this.onBlobAccumulatorSet(this);
|
|
155
|
-
return this.endBlobAccumulator;
|
|
156
|
-
}
|
|
157
|
-
getEndBlobAccumulator() {
|
|
158
|
-
return this.endBlobAccumulator;
|
|
93
|
+
return new ParityBasePrivateInputs(messages, this.constants.vkTreeRoot, this.constants.proverId);
|
|
159
94
|
}
|
|
160
95
|
getParentLocation(location) {
|
|
161
96
|
return this.blockProofs.getParentLocation(location);
|
|
@@ -170,41 +105,6 @@ export class CheckpointProvingState {
|
|
|
170
105
|
toProofData(right)
|
|
171
106
|
]);
|
|
172
107
|
}
|
|
173
|
-
getCheckpointRootRollupType() {
|
|
174
|
-
return this.totalNumBlocks === 1 ? 'rollup-checkpoint-root-single-block' : 'rollup-checkpoint-root';
|
|
175
|
-
}
|
|
176
|
-
async getCheckpointRootRollupInputs() {
|
|
177
|
-
const proofs = this.#getChildProofsForRoot();
|
|
178
|
-
const nonEmptyProofs = proofs.filter((p)=>!!p);
|
|
179
|
-
if (proofs.length !== nonEmptyProofs.length) {
|
|
180
|
-
throw new Error('At least one child is not ready for the checkpoint root rollup.');
|
|
181
|
-
}
|
|
182
|
-
if (!this.previousOutHashHint) {
|
|
183
|
-
throw new Error('Out hash hint is not set.');
|
|
184
|
-
}
|
|
185
|
-
if (!this.startBlobAccumulator) {
|
|
186
|
-
throw new Error('Start blob accumulator is not set.');
|
|
187
|
-
}
|
|
188
|
-
// `blobFields` must've been set if `startBlobAccumulator` is set (in `accumulateBlobs`).
|
|
189
|
-
const blobFields = this.blobFields;
|
|
190
|
-
const { blobCommitments, blobsHash } = await buildBlobHints(blobFields);
|
|
191
|
-
const hints = CheckpointRootRollupHints.from({
|
|
192
|
-
previousBlockHeader: this.headerOfLastBlockInPreviousCheckpoint,
|
|
193
|
-
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
194
|
-
previousOutHash: this.previousOutHashHint.treeSnapshot,
|
|
195
|
-
newOutHashSiblingPath: this.previousOutHashHint.siblingPath,
|
|
196
|
-
startBlobAccumulator: this.startBlobAccumulator.toBlobAccumulator(),
|
|
197
|
-
finalBlobChallenges: this.finalBlobBatchingChallenges,
|
|
198
|
-
blobFields: padArrayEnd(blobFields, Fr.ZERO, FIELDS_PER_BLOB * BLOBS_PER_CHECKPOINT),
|
|
199
|
-
blobCommitments: padArrayEnd(blobCommitments, BLS12Point.ZERO, BLOBS_PER_CHECKPOINT),
|
|
200
|
-
blobsHash
|
|
201
|
-
});
|
|
202
|
-
const [left, right] = nonEmptyProofs.map((p)=>toProofData(p));
|
|
203
|
-
return !right ? new CheckpointRootSingleBlockRollupPrivateInputs(left, hints) : new CheckpointRootRollupPrivateInputs([
|
|
204
|
-
left,
|
|
205
|
-
right
|
|
206
|
-
], hints);
|
|
207
|
-
}
|
|
208
108
|
getBlockProvingStateByBlockNumber(blockNumber) {
|
|
209
109
|
const index = Number(blockNumber) - Number(this.firstBlockNumber);
|
|
210
110
|
return this.blocks[index];
|
|
@@ -212,12 +112,8 @@ export class CheckpointProvingState {
|
|
|
212
112
|
isReadyForBlockMerge(location) {
|
|
213
113
|
return !!this.blockProofs.getSibling(location)?.provingOutput;
|
|
214
114
|
}
|
|
215
|
-
isReadyForCheckpointRoot() {
|
|
216
|
-
const allChildProofsReady = this.#getChildProofsForRoot().every((p)=>!!p);
|
|
217
|
-
return allChildProofsReady && !!this.previousOutHashHint && !!this.startBlobAccumulator;
|
|
218
|
-
}
|
|
219
115
|
verifyState() {
|
|
220
|
-
return this.
|
|
116
|
+
return this.isAlive();
|
|
221
117
|
}
|
|
222
118
|
getError() {
|
|
223
119
|
return this.error;
|
|
@@ -228,9 +124,12 @@ export class CheckpointProvingState {
|
|
|
228
124
|
}
|
|
229
125
|
reject(reason) {
|
|
230
126
|
this.error = reason;
|
|
231
|
-
this.
|
|
127
|
+
this.onReject(reason);
|
|
232
128
|
}
|
|
233
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Returns the block-level proof outputs that feed into the checkpoint root rollup.
|
|
131
|
+
* Used by `CheckpointSubTreeOrchestrator` to surface its sub-tree result.
|
|
132
|
+
*/ getSubTreeOutputProofs() {
|
|
234
133
|
const rootLocation = {
|
|
235
134
|
level: 0,
|
|
236
135
|
index: 0
|
|
@@ -240,4 +139,7 @@ export class CheckpointProvingState {
|
|
|
240
139
|
] // If there's only 1 block, its proof will be stored at the root.
|
|
241
140
|
: this.blockProofs.getChildren(rootLocation).map((c)=>c?.provingOutput);
|
|
242
141
|
}
|
|
142
|
+
/** Sibling path of the archive tree captured before any block in this checkpoint landed. */ getLastArchiveSiblingPath() {
|
|
143
|
+
return this.lastArchiveSiblingPath;
|
|
144
|
+
}
|
|
243
145
|
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { type ARCHIVE_HEIGHT, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber, type EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
5
|
+
import type { SerialQueue } from '@aztec/foundation/queue';
|
|
6
|
+
import { type Tuple } from '@aztec/foundation/serialize';
|
|
7
|
+
import { EthAddress } from '@aztec/stdlib/block';
|
|
8
|
+
import type { ForkMerkleTreeOperations, PublicInputsAndRecursiveProof, ReadonlyWorldStateAccess, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
9
|
+
import { type BlockRollupPublicInputs, CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
10
|
+
import type { BlockHeader, ProcessedTx, Tx } from '@aztec/stdlib/tx';
|
|
11
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
12
|
+
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
13
|
+
import type { BlockProvingState } from './block-proving-state.js';
|
|
14
|
+
import { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
15
|
+
import type { ChonkCache } from './chonk-cache.js';
|
|
16
|
+
import { ProvingScheduler } from './proving-scheduler.js';
|
|
17
|
+
/**
|
|
18
|
+
* Result of proving a single checkpoint's block-level sub-tree.
|
|
19
|
+
*
|
|
20
|
+
* Contains the final block-rollup proof outputs that feed the checkpoint root rollup,
|
|
21
|
+
* plus the archive sibling path captured before any block in the checkpoint landed
|
|
22
|
+
* (the top-tree needs this to assemble the checkpoint root rollup hints).
|
|
23
|
+
*/
|
|
24
|
+
export type SubTreeResult = {
|
|
25
|
+
blockProofOutputs: PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>[];
|
|
26
|
+
previousArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Orchestrates block-level proving for a single checkpoint, stopping at the boundary
|
|
30
|
+
* where checkpoint root rollup would otherwise begin. Used by the per-checkpoint
|
|
31
|
+
* `CheckpointProver` in production; the top-tree orchestrator then composes the
|
|
32
|
+
* sub-tree's block proofs into the epoch proof.
|
|
33
|
+
*
|
|
34
|
+
* Wiring: a single-checkpoint mini-proving session is owned by the constructor. The
|
|
35
|
+
* canonical way to obtain a fully-started sub-tree is the `start` static factory,
|
|
36
|
+
* which also drives the single internal `startCheckpoint` call. The sub-tree never
|
|
37
|
+
* escalates past the checkpoint root boundary; `getSubTreeResult()` resolves once
|
|
38
|
+
* every block-level proof in the checkpoint's tree is ready.
|
|
39
|
+
*/
|
|
40
|
+
export declare class CheckpointSubTreeOrchestrator extends ProvingScheduler {
|
|
41
|
+
private readonly dbProvider;
|
|
42
|
+
protected readonly prover: ServerCircuitProver;
|
|
43
|
+
private readonly proverId;
|
|
44
|
+
/**
|
|
45
|
+
* Shared chonk-verifier proof cache. Every chonk-verifier proof started by this
|
|
46
|
+
* sub-tree lives on the cache and survives the sub-tree's cancellation, so a tx
|
|
47
|
+
* whose original checkpoint is reorged out and re-appears in a replacement
|
|
48
|
+
* checkpoint reuses the cached proof.
|
|
49
|
+
*/
|
|
50
|
+
private readonly chonkCache;
|
|
51
|
+
/** The epoch this sub-tree proves into. */
|
|
52
|
+
private readonly epochNumber;
|
|
53
|
+
private readonly cancelJobsOnStop;
|
|
54
|
+
/** The single checkpoint proving state this sub-tree owns. Allocated in the `start` factory. */
|
|
55
|
+
protected provingState: CheckpointProvingState | undefined;
|
|
56
|
+
private readonly subTreeResult;
|
|
57
|
+
private readonly metrics;
|
|
58
|
+
private dbs;
|
|
59
|
+
constructor(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress,
|
|
60
|
+
/**
|
|
61
|
+
* Shared chonk-verifier proof cache. Every chonk-verifier proof started by this
|
|
62
|
+
* sub-tree lives on the cache and survives the sub-tree's cancellation, so a tx
|
|
63
|
+
* whose original checkpoint is reorged out and re-appears in a replacement
|
|
64
|
+
* checkpoint reuses the cached proof.
|
|
65
|
+
*/
|
|
66
|
+
chonkCache: ChonkCache,
|
|
67
|
+
/** The epoch this sub-tree proves into. */
|
|
68
|
+
epochNumber: EpochNumber, cancelJobsOnStop: boolean | undefined, deferredJobQueue: SerialQueue, telemetryClient?: TelemetryClient, bindings?: LoggerBindings);
|
|
69
|
+
/** Tracks whether `cancel()` has been called; flows into the checkpoint state's isAlive hook. */
|
|
70
|
+
private cancelled;
|
|
71
|
+
get tracer(): Tracer;
|
|
72
|
+
getProverId(): EthAddress;
|
|
73
|
+
getNumActiveForks(): number;
|
|
74
|
+
/** Returns a promise that resolves when block-level proving completes for the checkpoint. */
|
|
75
|
+
getSubTreeResult(): Promise<SubTreeResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Returns the archive sibling path captured at the internal checkpoint start.
|
|
78
|
+
* Available synchronously once `start` has resolved, before block-level proving
|
|
79
|
+
* completes. The top-tree consumer uses this to assemble checkpoint root rollup hints
|
|
80
|
+
* up-front so checkpoint root proofs can pipeline against in-flight sub-tree proving.
|
|
81
|
+
*/
|
|
82
|
+
getPreviousArchiveSiblingPath(): Tuple<Fr, typeof ARCHIVE_HEIGHT>;
|
|
83
|
+
/**
|
|
84
|
+
* Constructs and starts a sub-tree for a single checkpoint. The returned sub-tree
|
|
85
|
+
* has had its single internal checkpoint state allocated; callers proceed directly
|
|
86
|
+
* to per-block `startNewBlock` / `addTxs` / `setBlockCompleted`.
|
|
87
|
+
*
|
|
88
|
+
* If the internal start rejects, the partially-constructed sub-tree is stopped
|
|
89
|
+
* before the error propagates, so no broker resources leak.
|
|
90
|
+
*/
|
|
91
|
+
static start(dbProvider: ReadonlyWorldStateAccess & ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId: EthAddress, chonkCache: ChonkCache, epochNumber: EpochNumber, cancelJobsOnStop: boolean, deferredJobQueue: SerialQueue, checkpointConstants: CheckpointConstantData, l1ToL2Messages: Fr[], totalNumBlocks: number, headerOfLastBlockInPreviousCheckpoint: BlockHeader, telemetryClient?: TelemetryClient, bindings?: LoggerBindings): Promise<CheckpointSubTreeOrchestrator>;
|
|
92
|
+
/**
|
|
93
|
+
* Kickstart chonk-verifier circuits via the shared `ChonkCache`. The cache owns the
|
|
94
|
+
* broker job lifecycle, so the proof survives this sub-tree's `cancel()` — a tx that
|
|
95
|
+
* ends up in a replacement checkpoint after a reorg can pick the cached promise up
|
|
96
|
+
* and skip re-proving.
|
|
97
|
+
*/
|
|
98
|
+
startChonkVerifierCircuits(txs: Tx[]): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Starts off a new block.
|
|
101
|
+
* @param blockNumber - The block number
|
|
102
|
+
* @param timestamp - The timestamp of the block. Required for empty blocks to construct private inputs.
|
|
103
|
+
* @param totalNumTxs - The total number of txs in the block.
|
|
104
|
+
*/
|
|
105
|
+
startNewBlock(blockNumber: BlockNumber, timestamp: UInt64, totalNumTxs: number): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* The interface to add simulated transactions to the scheduler. Called at most once per block.
|
|
108
|
+
* @param txs - The transactions to be proven
|
|
109
|
+
*/
|
|
110
|
+
addTxs(txs: ProcessedTx[]): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Marks the block as completed.
|
|
113
|
+
* Computes the block header and updates the archive tree.
|
|
114
|
+
*/
|
|
115
|
+
setBlockCompleted(blockNumber: BlockNumber, expectedHeader?: BlockHeader): Promise<BlockHeader>;
|
|
116
|
+
/**
|
|
117
|
+
* Cancels any further proving. If `cancelJobsOnStop` was set, aborts all pending broker jobs
|
|
118
|
+
* (used on reorg). Otherwise jobs remain in the broker queue and can be reused on restart.
|
|
119
|
+
*/
|
|
120
|
+
cancel(): void;
|
|
121
|
+
protected cancelInternal(): void;
|
|
122
|
+
private startCheckpoint;
|
|
123
|
+
private updateL1ToL2MessageTree;
|
|
124
|
+
private prepareBaseRollupInputs;
|
|
125
|
+
private enqueueBaseRollup;
|
|
126
|
+
/**
|
|
127
|
+
* Route the tx's chonk-verifier dependency through the per-epoch context: read the
|
|
128
|
+
* cached promise (or enqueue if missing), then `.then(handleResult)` to progress to
|
|
129
|
+
* the base rollup once the proof lands.
|
|
130
|
+
*/
|
|
131
|
+
private getOrEnqueueChonkVerifier;
|
|
132
|
+
private enqueueMergeRollup;
|
|
133
|
+
private enqueueBlockRootRollup;
|
|
134
|
+
private enqueueBaseParityCircuit;
|
|
135
|
+
private checkAndEnqueueRootParityCircuit;
|
|
136
|
+
private enqueueRootParityCircuit;
|
|
137
|
+
private enqueueBlockMergeRollup;
|
|
138
|
+
private checkAndEnqueueNextMergeRollup;
|
|
139
|
+
private checkAndEnqueueBlockRootRollup;
|
|
140
|
+
private checkAndEnqueueNextBlockMergeRollup;
|
|
141
|
+
/**
|
|
142
|
+
* Sub-tree analogue of the orchestrator's `checkAndEnqueueCheckpointRootRollup`:
|
|
143
|
+
* resolves the sub-tree promise with the block-level proof outputs once they're all ready,
|
|
144
|
+
* instead of escalating to the checkpoint root rollup.
|
|
145
|
+
*/
|
|
146
|
+
private checkAndEnqueueSubTreeResolution;
|
|
147
|
+
/**
|
|
148
|
+
* Executes the VM circuit for a public function. Enqueues the base rollup once the
|
|
149
|
+
* tx's chonk-verifier + VM proofs are both ready.
|
|
150
|
+
*/
|
|
151
|
+
private enqueueVM;
|
|
152
|
+
private checkAndEnqueueBaseRollup;
|
|
153
|
+
protected verifyBuiltBlockAgainstSyncedState(provingState: BlockProvingState): Promise<void>;
|
|
154
|
+
private getDbForBlock;
|
|
155
|
+
/**
|
|
156
|
+
* Wraps a circuit call with a tracer span and circuit attributes. Replaces the
|
|
157
|
+
* `ProvingScheduler.wrapCircuitCall` indirection that used to live on the abstract base.
|
|
158
|
+
*/
|
|
159
|
+
private wrapCircuitCall;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1zdWItdHJlZS1vcmNoZXN0cmF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvY2hlY2twb2ludC1zdWItdHJlZS1vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUduQix5Q0FBeUMsRUFFMUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1Ysd0JBQXdCLEVBRXhCLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ3BCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUVMLEtBQUssdUJBQXVCLEVBSzVCLHNCQUFzQixFQUd2QixNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUVMLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFJWixNQUFNLHlCQUF5QixDQUFDO0FBZWpDLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBC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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-sub-tree-orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/checkpoint-sub-tree-orchestrator.ts"],"names":[],"mappings":"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"}
|