@aztec/prover-client 0.0.0-test.1 → 0.0.1-fake-ceab37513c
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/bin/get-proof-inputs.js +1 -1
- package/dest/block-factory/index.d.ts +2 -0
- package/dest/block-factory/index.d.ts.map +1 -0
- package/dest/block-factory/light.d.ts +36 -0
- package/dest/block-factory/light.d.ts.map +1 -0
- package/dest/{block_builder → block-factory}/light.js +35 -30
- package/dest/config.d.ts +6 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -1
- package/dest/mocks/fixtures.d.ts +3 -3
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -2
- package/dest/mocks/test_context.d.ts +18 -13
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +44 -38
- package/dest/orchestrator/block-building-helpers.d.ts +18 -11
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +80 -63
- package/dest/orchestrator/block-proving-state.d.ts +19 -10
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +63 -46
- package/dest/orchestrator/epoch-proving-state.d.ts +13 -6
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +40 -14
- package/dest/orchestrator/orchestrator.d.ts +7 -5
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +78 -52
- package/dest/orchestrator/orchestrator_metrics.d.ts +2 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +9 -0
- package/dest/orchestrator/tx-proving-state.d.ts +2 -2
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +9 -20
- 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 +5 -4
- package/dest/prover-client/server-epoch-prover.d.ts +6 -4
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +5 -3
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +31 -21
- package/dest/proving_broker/config.d.ts +9 -4
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +15 -4
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.d.ts.map +1 -1
- package/dest/proving_broker/factory.js +5 -1
- package/dest/proving_broker/proof_store/factory.js +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +1 -0
- package/dest/proving_broker/proving_agent.d.ts +3 -3
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +83 -47
- package/dest/proving_broker/proving_broker.d.ts +11 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +6 -5
- package/dest/proving_broker/proving_broker_database/memory.js +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +9 -8
- package/dest/proving_broker/proving_job_controller.d.ts +7 -8
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +53 -45
- package/dest/proving_broker/rpc.d.ts +3 -5
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +1 -4
- package/dest/test/mock_proof_store.d.ts +9 -0
- package/dest/test/mock_proof_store.d.ts.map +1 -0
- package/dest/test/mock_proof_store.js +10 -0
- package/dest/test/mock_prover.d.ts +7 -5
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +6 -3
- package/package.json +28 -27
- package/src/bin/get-proof-inputs.ts +1 -1
- package/src/block-factory/index.ts +1 -0
- package/src/{block_builder → block-factory}/light.ts +42 -29
- package/src/config.ts +24 -8
- package/src/mocks/fixtures.ts +5 -5
- package/src/mocks/test_context.ts +79 -59
- package/src/orchestrator/block-building-helpers.ts +96 -92
- package/src/orchestrator/block-proving-state.ts +78 -52
- package/src/orchestrator/epoch-proving-state.ts +51 -20
- package/src/orchestrator/orchestrator.ts +119 -60
- package/src/orchestrator/orchestrator_metrics.ts +20 -1
- package/src/orchestrator/tx-proving-state.ts +17 -24
- package/src/prover-client/prover-client.ts +16 -14
- package/src/prover-client/server-epoch-prover.ts +16 -7
- package/src/proving_broker/broker_prover_facade.ts +52 -36
- package/src/proving_broker/config.ts +17 -6
- package/src/proving_broker/factory.ts +2 -1
- package/src/proving_broker/proof_store/factory.ts +1 -1
- package/src/proving_broker/proof_store/gcs_proof_store.ts +5 -1
- package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
- package/src/proving_broker/proving_agent.ts +89 -47
- package/src/proving_broker/proving_broker.ts +16 -15
- package/src/proving_broker/proving_broker_database/memory.ts +1 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +9 -8
- package/src/proving_broker/proving_job_controller.ts +56 -65
- package/src/proving_broker/rpc.ts +1 -6
- package/src/test/mock_proof_store.ts +14 -0
- package/src/test/mock_prover.ts +27 -5
- package/dest/block_builder/index.d.ts +0 -6
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/light.d.ts +0 -33
- package/dest/block_builder/light.d.ts.map +0 -1
- package/src/block_builder/index.ts +0 -6
- /package/dest/{block_builder → block-factory}/index.js +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import { BlobAccumulatorPublicInputs, FinalBlobBatchingChallenges } from '@aztec/blob-lib';
|
|
1
2
|
import {
|
|
2
|
-
AVM_PROOF_LENGTH_IN_FIELDS,
|
|
3
|
-
AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS,
|
|
4
3
|
L1_TO_L2_MSG_SUBTREE_HEIGHT,
|
|
5
4
|
L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
|
|
6
5
|
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
@@ -17,7 +16,8 @@ import { pushTestData } from '@aztec/foundation/testing';
|
|
|
17
16
|
import { elapsed } from '@aztec/foundation/timer';
|
|
18
17
|
import type { TreeNodeLocation } from '@aztec/foundation/trees';
|
|
19
18
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
20
|
-
import {
|
|
19
|
+
import { readAvmMinimalPublicTxInputsFromFile } from '@aztec/simulator/public/fixtures';
|
|
20
|
+
import { EthAddress, L2Block } from '@aztec/stdlib/block';
|
|
21
21
|
import type {
|
|
22
22
|
EpochProver,
|
|
23
23
|
ForkMerkleTreeOperations,
|
|
@@ -26,7 +26,6 @@ import type {
|
|
|
26
26
|
ServerCircuitProver,
|
|
27
27
|
} from '@aztec/stdlib/interfaces/server';
|
|
28
28
|
import { BaseParityInputs } from '@aztec/stdlib/parity';
|
|
29
|
-
import { makeEmptyRecursiveProof } from '@aztec/stdlib/proofs';
|
|
30
29
|
import {
|
|
31
30
|
type BaseRollupHints,
|
|
32
31
|
EmptyBlockRootRollupInputs,
|
|
@@ -37,7 +36,6 @@ import {
|
|
|
37
36
|
import type { CircuitName } from '@aztec/stdlib/stats';
|
|
38
37
|
import { type AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
39
38
|
import { type BlockHeader, type GlobalVariables, type ProcessedTx, type Tx, toNumBlobFields } from '@aztec/stdlib/tx';
|
|
40
|
-
import { VerificationKeyData } from '@aztec/stdlib/vks';
|
|
41
39
|
import {
|
|
42
40
|
Attributes,
|
|
43
41
|
type TelemetryClient,
|
|
@@ -50,11 +48,12 @@ import {
|
|
|
50
48
|
import { inspect } from 'util';
|
|
51
49
|
|
|
52
50
|
import {
|
|
53
|
-
buildBaseRollupHints,
|
|
54
51
|
buildHeaderAndBodyFromTxs,
|
|
52
|
+
getLastSiblingPath,
|
|
55
53
|
getRootTreeSiblingPath,
|
|
56
54
|
getSubtreeSiblingPath,
|
|
57
55
|
getTreeSnapshot,
|
|
56
|
+
insertSideEffectsAndBuildBaseRollupHints,
|
|
58
57
|
validatePartialState,
|
|
59
58
|
validateTx,
|
|
60
59
|
} from './block-building-helpers.js';
|
|
@@ -90,7 +89,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
90
89
|
constructor(
|
|
91
90
|
private dbProvider: ForkMerkleTreeOperations,
|
|
92
91
|
private prover: ServerCircuitProver,
|
|
93
|
-
private readonly proverId:
|
|
92
|
+
private readonly proverId: EthAddress,
|
|
94
93
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
95
94
|
) {
|
|
96
95
|
this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
|
|
@@ -100,7 +99,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
100
99
|
return this.metrics.tracer;
|
|
101
100
|
}
|
|
102
101
|
|
|
103
|
-
public getProverId():
|
|
102
|
+
public getProverId(): EthAddress {
|
|
104
103
|
return this.proverId;
|
|
105
104
|
}
|
|
106
105
|
|
|
@@ -109,14 +108,26 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
109
108
|
return Promise.resolve();
|
|
110
109
|
}
|
|
111
110
|
|
|
112
|
-
public startNewEpoch(
|
|
111
|
+
public startNewEpoch(
|
|
112
|
+
epochNumber: number,
|
|
113
|
+
firstBlockNumber: number,
|
|
114
|
+
totalNumBlocks: number,
|
|
115
|
+
finalBlobBatchingChallenges: FinalBlobBatchingChallenges,
|
|
116
|
+
) {
|
|
113
117
|
const { promise: _promise, resolve, reject } = promiseWithResolvers<ProvingResult>();
|
|
114
118
|
const promise = _promise.catch((reason): ProvingResult => ({ status: 'failure', reason }));
|
|
115
119
|
if (totalNumBlocks <= 0 || !Number.isInteger(totalNumBlocks)) {
|
|
116
120
|
throw new Error(`Invalid number of blocks for epoch (got ${totalNumBlocks})`);
|
|
117
121
|
}
|
|
118
122
|
logger.info(`Starting epoch ${epochNumber} with ${totalNumBlocks} blocks`);
|
|
119
|
-
this.provingState = new EpochProvingState(
|
|
123
|
+
this.provingState = new EpochProvingState(
|
|
124
|
+
epochNumber,
|
|
125
|
+
firstBlockNumber,
|
|
126
|
+
totalNumBlocks,
|
|
127
|
+
finalBlobBatchingChallenges,
|
|
128
|
+
resolve,
|
|
129
|
+
reject,
|
|
130
|
+
);
|
|
120
131
|
this.provingPromise = promise;
|
|
121
132
|
}
|
|
122
133
|
|
|
@@ -127,7 +138,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
127
138
|
* @returns A proving ticket, containing a promise notifying of proving completion
|
|
128
139
|
*/
|
|
129
140
|
@trackSpan('ProvingOrchestrator.startNewBlock', globalVariables => ({
|
|
130
|
-
[Attributes.BLOCK_NUMBER]: globalVariables.blockNumber
|
|
141
|
+
[Attributes.BLOCK_NUMBER]: globalVariables.blockNumber,
|
|
131
142
|
}))
|
|
132
143
|
public async startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], previousBlockHeader: BlockHeader) {
|
|
133
144
|
if (!this.provingState) {
|
|
@@ -138,30 +149,36 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
138
149
|
throw new Error(`Epoch not accepting further blocks`);
|
|
139
150
|
}
|
|
140
151
|
|
|
141
|
-
logger.info(
|
|
142
|
-
`Starting block ${globalVariables.blockNumber.toNumber()} for slot ${globalVariables.slotNumber.toNumber()}`,
|
|
143
|
-
);
|
|
152
|
+
logger.info(`Starting block ${globalVariables.blockNumber} for slot ${globalVariables.slotNumber.toNumber()}`);
|
|
144
153
|
|
|
145
154
|
// Fork world state at the end of the immediately previous block
|
|
146
|
-
const db = await this.dbProvider.fork(globalVariables.blockNumber
|
|
147
|
-
this.dbs.set(globalVariables.blockNumber
|
|
155
|
+
const db = await this.dbProvider.fork(globalVariables.blockNumber - 1);
|
|
156
|
+
this.dbs.set(globalVariables.blockNumber, db);
|
|
148
157
|
|
|
149
158
|
// we start the block by enqueueing all of the base parity circuits
|
|
150
|
-
const {
|
|
151
|
-
|
|
159
|
+
const {
|
|
160
|
+
l1ToL2MessageTreeSnapshot,
|
|
161
|
+
l1ToL2MessageSubtreeSiblingPath,
|
|
162
|
+
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
163
|
+
baseParityInputs,
|
|
164
|
+
} = await this.prepareBaseParityInputs(l1ToL2Messages, db);
|
|
152
165
|
|
|
153
166
|
// Get archive snapshot before this block lands
|
|
154
167
|
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
168
|
+
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
155
169
|
const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
156
170
|
|
|
157
171
|
const blockProvingState = this.provingState!.startNewBlock(
|
|
158
172
|
globalVariables,
|
|
159
173
|
l1ToL2Messages,
|
|
174
|
+
l1ToL2MessageTreeSnapshot,
|
|
160
175
|
l1ToL2MessageSubtreeSiblingPath,
|
|
161
176
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
162
177
|
lastArchive,
|
|
178
|
+
lastArchiveSiblingPath,
|
|
163
179
|
newArchiveSiblingPath,
|
|
164
180
|
previousBlockHeader,
|
|
181
|
+
this.proverId,
|
|
165
182
|
);
|
|
166
183
|
|
|
167
184
|
// Enqueue base parity circuits for the block
|
|
@@ -184,7 +201,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
184
201
|
logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
185
202
|
return;
|
|
186
203
|
}
|
|
187
|
-
const blockNumber = txs[0].
|
|
204
|
+
const blockNumber = txs[0].globalVariables.blockNumber;
|
|
188
205
|
const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber!);
|
|
189
206
|
if (!provingState) {
|
|
190
207
|
throw new Error(`Block proving state for ${blockNumber} not found`);
|
|
@@ -231,18 +248,19 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
231
248
|
* Note that if the tube circuits are not started this way, they will be started nontheless after processing.
|
|
232
249
|
*/
|
|
233
250
|
@trackSpan('ProvingOrchestrator.startTubeCircuits')
|
|
234
|
-
public
|
|
251
|
+
public startTubeCircuits(txs: Tx[]) {
|
|
235
252
|
if (!this.provingState?.verifyState()) {
|
|
236
253
|
throw new Error(`Invalid proving state, call startNewEpoch before starting tube circuits`);
|
|
237
254
|
}
|
|
238
255
|
for (const tx of txs) {
|
|
239
|
-
const txHash =
|
|
240
|
-
const tubeInputs = new TubeInputs(tx.clientIvcProof);
|
|
256
|
+
const txHash = tx.getTxHash().toString();
|
|
257
|
+
const tubeInputs = new TubeInputs(!!tx.data.forPublic, tx.clientIvcProof);
|
|
241
258
|
const tubeProof = promiseWithResolvers<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>();
|
|
242
259
|
logger.debug(`Starting tube circuit for tx ${txHash}`);
|
|
243
260
|
this.doEnqueueTube(txHash, tubeInputs, proof => tubeProof.resolve(proof));
|
|
244
261
|
this.provingState?.cachedTubeProofs.set(txHash, tubeProof.promise);
|
|
245
262
|
}
|
|
263
|
+
return Promise.resolve();
|
|
246
264
|
}
|
|
247
265
|
|
|
248
266
|
/**
|
|
@@ -259,7 +277,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
259
277
|
}
|
|
260
278
|
|
|
261
279
|
if (!provingState.spongeBlobState) {
|
|
262
|
-
// If we are completing an empty block,
|
|
280
|
+
// If we are completing an empty block, initialize the provingState.
|
|
263
281
|
// We will have 0 txs and no blob fields.
|
|
264
282
|
provingState.startNewBlock(0, 0);
|
|
265
283
|
}
|
|
@@ -272,6 +290,9 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
272
290
|
logger.verbose(`Block ${blockNumber} completed. Assembling header.`);
|
|
273
291
|
await this.buildBlock(provingState, expectedHeader);
|
|
274
292
|
|
|
293
|
+
logger.debug(`Accumulating blobs for ${blockNumber}`);
|
|
294
|
+
await this.provingState?.setBlobAccumulators(blockNumber);
|
|
295
|
+
|
|
275
296
|
// If the proofs were faster than the block building, then we need to try the block root rollup again here
|
|
276
297
|
await this.checkAndEnqueueBlockRootRollup(provingState);
|
|
277
298
|
return provingState.block!;
|
|
@@ -318,8 +339,8 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
318
339
|
|
|
319
340
|
await this.verifyBuiltBlockAgainstSyncedState(l2Block, newArchive);
|
|
320
341
|
|
|
321
|
-
logger.verbose(`Orchestrator
|
|
322
|
-
provingState.
|
|
342
|
+
logger.verbose(`Orchestrator finalized block ${l2Block.number}`);
|
|
343
|
+
provingState.setBlock(l2Block);
|
|
323
344
|
}
|
|
324
345
|
|
|
325
346
|
// Flagged as protected to disable in certain unit tests
|
|
@@ -348,9 +369,9 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
348
369
|
/**
|
|
349
370
|
* Returns the proof for the current epoch.
|
|
350
371
|
*/
|
|
351
|
-
public async
|
|
372
|
+
public async finalizeEpoch() {
|
|
352
373
|
if (!this.provingState || !this.provingPromise) {
|
|
353
|
-
throw new Error(`Invalid proving state, an epoch must be proven before it can be
|
|
374
|
+
throw new Error(`Invalid proving state, an epoch must be proven before it can be finalized`);
|
|
354
375
|
}
|
|
355
376
|
|
|
356
377
|
const result = await this.provingPromise!;
|
|
@@ -358,6 +379,15 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
358
379
|
throw new Error(`Epoch proving failed: ${result.reason}`);
|
|
359
380
|
}
|
|
360
381
|
|
|
382
|
+
// TODO(MW): Move this? Requires async and don't want to force root methods to be async
|
|
383
|
+
// TODO(MW): EpochProvingState uses this.blocks.filter(b => !!b).length as total blocks, use this below:
|
|
384
|
+
const finalBlock = this.provingState.blocks[this.provingState.totalNumBlocks - 1];
|
|
385
|
+
if (!finalBlock || !finalBlock.endBlobAccumulator) {
|
|
386
|
+
throw new Error(`Epoch's final block not ready for finalize`);
|
|
387
|
+
}
|
|
388
|
+
const finalBatchedBlob = await finalBlock.endBlobAccumulator.finalize();
|
|
389
|
+
this.provingState.setFinalBatchedBlob(finalBatchedBlob);
|
|
390
|
+
|
|
361
391
|
const epochProofResult = this.provingState.getEpochProofResult();
|
|
362
392
|
|
|
363
393
|
pushTestData('epochProofResult', {
|
|
@@ -455,6 +485,8 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
455
485
|
BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, getVKTreeRoot()),
|
|
456
486
|
);
|
|
457
487
|
|
|
488
|
+
const l1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
489
|
+
|
|
458
490
|
const l1ToL2MessageSubtreeSiblingPath = assertLength(
|
|
459
491
|
await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db),
|
|
460
492
|
L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
|
|
@@ -465,6 +497,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
465
497
|
const l1ToL2MessageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
466
498
|
|
|
467
499
|
return {
|
|
500
|
+
l1ToL2MessageTreeSnapshot,
|
|
468
501
|
l1ToL2MessageSubtreeSiblingPath,
|
|
469
502
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
470
503
|
baseParityInputs,
|
|
@@ -489,7 +522,13 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
489
522
|
// We build the base rollup inputs using a mock proof and verification key.
|
|
490
523
|
// These will be overwritten later once we have proven the tube circuit and any public kernels
|
|
491
524
|
const [ms, hints] = await elapsed(
|
|
492
|
-
|
|
525
|
+
insertSideEffectsAndBuildBaseRollupHints(
|
|
526
|
+
tx,
|
|
527
|
+
provingState.globalVariables,
|
|
528
|
+
provingState.l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
529
|
+
db,
|
|
530
|
+
provingState.spongeBlobState,
|
|
531
|
+
),
|
|
493
532
|
);
|
|
494
533
|
|
|
495
534
|
this.metrics.recordBaseRollupInputs(ms);
|
|
@@ -531,7 +570,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
531
570
|
}`,
|
|
532
571
|
{
|
|
533
572
|
[Attributes.TX_HASH]: processedTx.hash.toString(),
|
|
534
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
535
573
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType,
|
|
536
574
|
},
|
|
537
575
|
signal => {
|
|
@@ -601,7 +639,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
601
639
|
'ProvingOrchestrator.prover.getTubeProof',
|
|
602
640
|
{
|
|
603
641
|
[Attributes.TX_HASH]: txHash,
|
|
604
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
605
642
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'tube-circuit' satisfies CircuitName,
|
|
606
643
|
},
|
|
607
644
|
signal => this.prover.getTubeProof(inputs, signal, this.provingState!.epochNumber),
|
|
@@ -626,7 +663,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
626
663
|
this.tracer,
|
|
627
664
|
'ProvingOrchestrator.prover.getMergeRollupProof',
|
|
628
665
|
{
|
|
629
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
630
666
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'merge-rollup' satisfies CircuitName,
|
|
631
667
|
},
|
|
632
668
|
signal => this.prover.getMergeRollupProof(inputs, signal, provingState.epochNumber),
|
|
@@ -647,7 +683,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
647
683
|
|
|
648
684
|
provingState.blockRootRollupStarted = true;
|
|
649
685
|
|
|
650
|
-
const { rollupType, inputs } = await provingState.getBlockRootRollupTypeAndInputs(
|
|
686
|
+
const { rollupType, inputs } = await provingState.getBlockRootRollupTypeAndInputs();
|
|
651
687
|
|
|
652
688
|
logger.debug(
|
|
653
689
|
`Enqueuing ${rollupType} for block ${provingState.blockNumber} with ${provingState.newL1ToL2Messages.length} l1 to l2 msgs.`,
|
|
@@ -659,7 +695,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
659
695
|
this.tracer,
|
|
660
696
|
'ProvingOrchestrator.prover.getBlockRootRollupProof',
|
|
661
697
|
{
|
|
662
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
663
698
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: rollupType,
|
|
664
699
|
},
|
|
665
700
|
signal => {
|
|
@@ -674,12 +709,34 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
674
709
|
),
|
|
675
710
|
async result => {
|
|
676
711
|
provingState.setBlockRootRollupProof(result);
|
|
677
|
-
const header = await provingState.buildHeaderFromProvingOutputs(
|
|
712
|
+
const header = await provingState.buildHeaderFromProvingOutputs();
|
|
678
713
|
if (!(await header.hash()).equals(await provingState.block!.header.hash())) {
|
|
679
714
|
logger.error(
|
|
680
|
-
`Block header mismatch
|
|
715
|
+
`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(provingState.block!.header)}`,
|
|
681
716
|
);
|
|
682
|
-
provingState.reject(`Block header hash mismatch
|
|
717
|
+
provingState.reject(`Block header hash mismatch.`);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
const dbArchiveRoot = provingState.block!.archive.root;
|
|
721
|
+
const circuitArchiveRoot = result.inputs.newArchive.root;
|
|
722
|
+
if (!dbArchiveRoot.equals(circuitArchiveRoot)) {
|
|
723
|
+
logger.error(
|
|
724
|
+
`New archive root mismatch.\nCircuit: ${result.inputs.newArchive.root}\nComputed: ${dbArchiveRoot}`,
|
|
725
|
+
);
|
|
726
|
+
provingState.reject(`New archive root mismatch.`);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
const endBlobAccumulatorPublicInputs = BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(
|
|
730
|
+
provingState.endBlobAccumulator!,
|
|
731
|
+
);
|
|
732
|
+
const circuitEndBlobAccumulatorState = result.inputs.blobPublicInputs.endBlobAccumulator;
|
|
733
|
+
if (!circuitEndBlobAccumulatorState.equals(endBlobAccumulatorPublicInputs)) {
|
|
734
|
+
logger.error(
|
|
735
|
+
`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(
|
|
736
|
+
endBlobAccumulatorPublicInputs,
|
|
737
|
+
)}`,
|
|
738
|
+
);
|
|
739
|
+
provingState.reject(`Blob accumulator state mismatch.`);
|
|
683
740
|
}
|
|
684
741
|
|
|
685
742
|
logger.debug(`Completed ${rollupType} proof for block ${provingState.block!.number}`);
|
|
@@ -688,7 +745,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
688
745
|
const epochProvingState = this.provingState!;
|
|
689
746
|
const leafLocation = epochProvingState.setBlockRootRollupProof(provingState.index, result);
|
|
690
747
|
if (epochProvingState.totalNumBlocks === 1) {
|
|
691
|
-
|
|
748
|
+
this.enqueueEpochPadding(epochProvingState);
|
|
692
749
|
} else {
|
|
693
750
|
this.checkAndEnqueueNextBlockMergeRollup(epochProvingState, leafLocation);
|
|
694
751
|
}
|
|
@@ -710,7 +767,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
710
767
|
this.tracer,
|
|
711
768
|
'ProvingOrchestrator.prover.getBaseParityProof',
|
|
712
769
|
{
|
|
713
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
714
770
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-parity' satisfies CircuitName,
|
|
715
771
|
},
|
|
716
772
|
signal => this.prover.getBaseParityProof(inputs, signal, provingState.epochNumber),
|
|
@@ -746,7 +802,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
746
802
|
this.tracer,
|
|
747
803
|
'ProvingOrchestrator.prover.getRootParityProof',
|
|
748
804
|
{
|
|
749
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
750
805
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-parity' satisfies CircuitName,
|
|
751
806
|
},
|
|
752
807
|
signal => this.prover.getRootParityProof(inputs, signal, provingState.epochNumber),
|
|
@@ -767,14 +822,12 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
767
822
|
}
|
|
768
823
|
|
|
769
824
|
const inputs = provingState.getBlockMergeRollupInputs(location);
|
|
770
|
-
|
|
771
825
|
this.deferredProving(
|
|
772
826
|
provingState,
|
|
773
827
|
wrapCallbackInSpan(
|
|
774
828
|
this.tracer,
|
|
775
829
|
'ProvingOrchestrator.prover.getBlockMergeRollupProof',
|
|
776
830
|
{
|
|
777
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
778
831
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'block-merge-rollup' satisfies CircuitName,
|
|
779
832
|
},
|
|
780
833
|
signal => this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber),
|
|
@@ -786,26 +839,25 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
786
839
|
);
|
|
787
840
|
}
|
|
788
841
|
|
|
789
|
-
private
|
|
842
|
+
private enqueueEpochPadding(provingState: EpochProvingState) {
|
|
790
843
|
if (!provingState.verifyState()) {
|
|
791
844
|
logger.debug('Not running epoch padding. State no longer valid.');
|
|
792
845
|
return;
|
|
793
846
|
}
|
|
794
847
|
|
|
795
|
-
logger.debug('Padding epoch proof with
|
|
848
|
+
logger.debug('Padding epoch proof with a padding block root proof.');
|
|
796
849
|
|
|
797
|
-
const inputs =
|
|
850
|
+
const inputs = provingState.getPaddingBlockRootInputs();
|
|
798
851
|
|
|
799
852
|
this.deferredProving(
|
|
800
853
|
provingState,
|
|
801
854
|
wrapCallbackInSpan(
|
|
802
855
|
this.tracer,
|
|
803
|
-
'ProvingOrchestrator.prover.
|
|
856
|
+
'ProvingOrchestrator.prover.getPaddingBlockRootRollupProof',
|
|
804
857
|
{
|
|
805
|
-
[Attributes.
|
|
806
|
-
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'empty-block-root-rollup' satisfies CircuitName,
|
|
858
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'padding-block-root-rollup' satisfies CircuitName,
|
|
807
859
|
},
|
|
808
|
-
signal => this.prover.
|
|
860
|
+
signal => this.prover.getPaddingBlockRootRollupProof(inputs, signal, provingState.epochNumber),
|
|
809
861
|
),
|
|
810
862
|
result => {
|
|
811
863
|
logger.debug('Completed proof for padding block root.');
|
|
@@ -824,7 +876,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
824
876
|
|
|
825
877
|
logger.debug(`Preparing root rollup`);
|
|
826
878
|
|
|
827
|
-
const inputs = provingState.getRootRollupInputs(
|
|
879
|
+
const inputs = provingState.getRootRollupInputs();
|
|
828
880
|
|
|
829
881
|
this.deferredProving(
|
|
830
882
|
provingState,
|
|
@@ -832,7 +884,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
832
884
|
this.tracer,
|
|
833
885
|
'ProvingOrchestrator.prover.getRootRollupProof',
|
|
834
886
|
{
|
|
835
|
-
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
836
887
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-rollup' satisfies CircuitName,
|
|
837
888
|
},
|
|
838
889
|
signal => this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber),
|
|
@@ -859,15 +910,17 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
859
910
|
}
|
|
860
911
|
|
|
861
912
|
private async checkAndEnqueueBlockRootRollup(provingState: BlockProvingState) {
|
|
913
|
+
const blockNumber = provingState.blockNumber;
|
|
914
|
+
// Accumulate as far as we can, in case blocks came in out of order and we are behind:
|
|
915
|
+
await this.provingState?.setBlobAccumulators(blockNumber);
|
|
862
916
|
if (!provingState.isReadyForBlockRootRollup()) {
|
|
863
|
-
logger.debug('Not ready for root rollup');
|
|
917
|
+
logger.debug('Not ready for block root rollup');
|
|
864
918
|
return;
|
|
865
919
|
}
|
|
866
920
|
if (provingState.blockRootRollupStarted) {
|
|
867
921
|
logger.debug('Block root rollup already started');
|
|
868
922
|
return;
|
|
869
923
|
}
|
|
870
|
-
const blockNumber = provingState.blockNumber;
|
|
871
924
|
|
|
872
925
|
// TODO(palla/prover): This closes the fork only on the happy path. If this epoch orchestrator
|
|
873
926
|
// is aborted and never reaches this point, it will leak the fork. We need to add a global cleanup,
|
|
@@ -930,21 +983,27 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
930
983
|
async (signal: AbortSignal) => {
|
|
931
984
|
const inputs = txProvingState.getAvmInputs();
|
|
932
985
|
try {
|
|
933
|
-
|
|
986
|
+
// TODO(#14234)[Unconditional PIs validation]: Remove the whole try-catch logic and
|
|
987
|
+
// just keep the next line but removing the second argument (false).
|
|
988
|
+
return await this.prover.getAvmProof(inputs, false, signal, provingState.epochNumber);
|
|
934
989
|
} catch (err) {
|
|
935
990
|
if (process.env.AVM_PROVING_STRICT) {
|
|
936
991
|
logger.error(`Error thrown when proving AVM circuit with AVM_PROVING_STRICT on`, err);
|
|
937
992
|
throw err;
|
|
938
993
|
} else {
|
|
939
994
|
logger.warn(
|
|
940
|
-
`Error thrown when proving AVM circuit but AVM_PROVING_STRICT is off.
|
|
941
|
-
|
|
942
|
-
)}.`,
|
|
995
|
+
`Error thrown when proving AVM circuit but AVM_PROVING_STRICT is off. Use snapshotted
|
|
996
|
+
AVM inputs and carrying on. ${inspect(err)}.`,
|
|
943
997
|
);
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
998
|
+
|
|
999
|
+
try {
|
|
1000
|
+
this.metrics.incAvmFallback();
|
|
1001
|
+
const snapshotAvmPrivateInputs = readAvmMinimalPublicTxInputsFromFile();
|
|
1002
|
+
return await this.prover.getAvmProof(snapshotAvmPrivateInputs, true, signal, provingState.epochNumber);
|
|
1003
|
+
} catch (err) {
|
|
1004
|
+
logger.error(`Error thrown when proving snapshotted AVM inputs.`, err);
|
|
1005
|
+
throw err;
|
|
1006
|
+
}
|
|
948
1007
|
}
|
|
949
1008
|
}
|
|
950
1009
|
},
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type Histogram,
|
|
3
|
+
Metrics,
|
|
4
|
+
type TelemetryClient,
|
|
5
|
+
type Tracer,
|
|
6
|
+
type UpDownCounter,
|
|
7
|
+
ValueType,
|
|
8
|
+
} from '@aztec/telemetry-client';
|
|
2
9
|
|
|
3
10
|
export class ProvingOrchestratorMetrics {
|
|
4
11
|
public readonly tracer: Tracer;
|
|
5
12
|
|
|
6
13
|
private baseRollupInputsDuration: Histogram;
|
|
14
|
+
private avmFallbackCount: UpDownCounter;
|
|
7
15
|
|
|
8
16
|
constructor(client: TelemetryClient, name = 'ProvingOrchestrator') {
|
|
9
17
|
this.tracer = client.getTracer(name);
|
|
@@ -14,9 +22,20 @@ export class ProvingOrchestratorMetrics {
|
|
|
14
22
|
description: 'Duration to build base rollup inputs',
|
|
15
23
|
valueType: ValueType.INT,
|
|
16
24
|
});
|
|
25
|
+
|
|
26
|
+
this.avmFallbackCount = meter.createUpDownCounter(Metrics.PROVING_ORCHESTRATOR_AVM_FALLBACK_COUNT, {
|
|
27
|
+
description: 'How many times the AVM fallback was used',
|
|
28
|
+
valueType: ValueType.INT,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
this.avmFallbackCount.add(0);
|
|
17
32
|
}
|
|
18
33
|
|
|
19
34
|
recordBaseRollupInputs(durationMs: number) {
|
|
20
35
|
this.baseRollupInputsDuration.record(Math.ceil(durationMs));
|
|
21
36
|
}
|
|
37
|
+
|
|
38
|
+
incAvmFallback() {
|
|
39
|
+
this.avmFallbackCount.add(1);
|
|
40
|
+
}
|
|
22
41
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED,
|
|
3
|
+
AVM_VK_INDEX,
|
|
4
|
+
PRIVATE_TUBE_VK_INDEX,
|
|
5
|
+
PUBLIC_TUBE_VK_INDEX,
|
|
6
|
+
type TUBE_PROOF_LENGTH,
|
|
7
|
+
} from '@aztec/constants';
|
|
8
|
+
import { getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
9
|
import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
|
|
4
10
|
import type { ProofAndVerificationKey } from '@aztec/stdlib/interfaces/server';
|
|
5
11
|
import {
|
|
@@ -16,7 +22,7 @@ import {
|
|
|
16
22
|
import type { CircuitName } from '@aztec/stdlib/stats';
|
|
17
23
|
import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
18
24
|
import type { ProcessedTx } from '@aztec/stdlib/tx';
|
|
19
|
-
import {
|
|
25
|
+
import { VerificationKeyData, VkData } from '@aztec/stdlib/vks';
|
|
20
26
|
|
|
21
27
|
/**
|
|
22
28
|
* Helper class to manage the proving cycle of a transaction
|
|
@@ -25,7 +31,7 @@ import { VkWitnessData } from '@aztec/stdlib/vks';
|
|
|
25
31
|
*/
|
|
26
32
|
export class TxProvingState {
|
|
27
33
|
private tube?: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>;
|
|
28
|
-
private avm?: ProofAndVerificationKey<typeof
|
|
34
|
+
private avm?: ProofAndVerificationKey<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>;
|
|
29
35
|
|
|
30
36
|
constructor(
|
|
31
37
|
public readonly processedTx: ProcessedTx,
|
|
@@ -42,7 +48,7 @@ export class TxProvingState {
|
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
public getTubeInputs() {
|
|
45
|
-
return new TubeInputs(this.processedTx.clientIvcProof);
|
|
51
|
+
return new TubeInputs(!!this.processedTx.data.forPublic, this.processedTx.clientIvcProof);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
public getAvmInputs(): AvmCircuitInputs {
|
|
@@ -67,7 +73,7 @@ export class TxProvingState {
|
|
|
67
73
|
this.tube = tubeProofAndVk;
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
public setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof
|
|
76
|
+
public setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>) {
|
|
71
77
|
this.avm = avmProofAndVk;
|
|
72
78
|
}
|
|
73
79
|
|
|
@@ -76,7 +82,7 @@ export class TxProvingState {
|
|
|
76
82
|
throw new Error('Tx not ready for proving base rollup.');
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
const vkData = this.#
|
|
85
|
+
const vkData = this.#getVkData(this.tube!.verificationKey, PRIVATE_TUBE_VK_INDEX);
|
|
80
86
|
const tubeData = new PrivateTubeData(
|
|
81
87
|
this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
|
|
82
88
|
this.tube.proof,
|
|
@@ -103,13 +109,13 @@ export class TxProvingState {
|
|
|
103
109
|
const tubeData = new PublicTubeData(
|
|
104
110
|
this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
|
|
105
111
|
this.tube.proof,
|
|
106
|
-
this.#
|
|
112
|
+
this.#getVkData(this.tube!.verificationKey, PUBLIC_TUBE_VK_INDEX),
|
|
107
113
|
);
|
|
108
114
|
|
|
109
115
|
const avmProofData = new AvmProofData(
|
|
110
116
|
this.processedTx.avmProvingRequest.inputs.publicInputs,
|
|
111
117
|
this.avm.proof,
|
|
112
|
-
this.#
|
|
118
|
+
this.#getVkData(this.avm!.verificationKey, AVM_VK_INDEX),
|
|
113
119
|
);
|
|
114
120
|
|
|
115
121
|
if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
|
|
@@ -119,21 +125,8 @@ export class TxProvingState {
|
|
|
119
125
|
return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
|
|
120
126
|
}
|
|
121
127
|
|
|
122
|
-
#
|
|
123
|
-
let vkIndex = TUBE_VK_INDEX;
|
|
124
|
-
try {
|
|
125
|
-
vkIndex = getVKIndex(this.tube!.verificationKey);
|
|
126
|
-
} catch (_ignored) {
|
|
127
|
-
// TODO(#7410) The VK for the tube won't be in the tree for now, so we manually set it to the tube vk index
|
|
128
|
-
}
|
|
129
|
-
const vkPath = getVKSiblingPath(vkIndex);
|
|
130
|
-
|
|
131
|
-
return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
#getAvmVkData() {
|
|
135
|
-
const vkIndex = AVM_VK_INDEX;
|
|
128
|
+
#getVkData(verificationKey: VerificationKeyData, vkIndex: number) {
|
|
136
129
|
const vkPath = getVKSiblingPath(vkIndex);
|
|
137
|
-
return new
|
|
130
|
+
return new VkData(verificationKey, vkIndex, vkPath);
|
|
138
131
|
}
|
|
139
132
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { type ACVMConfig, type BBConfig, BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
2
|
import { times } from '@aztec/foundation/collection';
|
|
3
|
-
import {
|
|
3
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { NativeACVMSimulator } from '@aztec/simulator/server';
|
|
6
|
-
import
|
|
7
|
-
ActualProverConfig,
|
|
8
|
-
EpochProver,
|
|
9
|
-
EpochProverManager,
|
|
10
|
-
ForkMerkleTreeOperations,
|
|
11
|
-
ProvingJobBroker,
|
|
12
|
-
ProvingJobConsumer,
|
|
13
|
-
ProvingJobProducer,
|
|
14
|
-
ServerCircuitProver,
|
|
6
|
+
import {
|
|
7
|
+
type ActualProverConfig,
|
|
8
|
+
type EpochProver,
|
|
9
|
+
type EpochProverManager,
|
|
10
|
+
type ForkMerkleTreeOperations,
|
|
11
|
+
type ProvingJobBroker,
|
|
12
|
+
type ProvingJobConsumer,
|
|
13
|
+
type ProvingJobProducer,
|
|
14
|
+
type ServerCircuitProver,
|
|
15
|
+
tryStop,
|
|
15
16
|
} from '@aztec/stdlib/interfaces/server';
|
|
16
17
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
17
18
|
|
|
@@ -48,8 +49,8 @@ export class ProverClient implements EpochProverManager {
|
|
|
48
49
|
return new ServerEpochProver(facade, orchestrator);
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
public getProverId():
|
|
52
|
-
return this.config.proverId
|
|
52
|
+
public getProverId(): EthAddress {
|
|
53
|
+
return this.config.proverId;
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
async updateProverConfig(config: Partial<ProverClientConfig>): Promise<void> {
|
|
@@ -87,6 +88,7 @@ export class ProverClient implements EpochProverManager {
|
|
|
87
88
|
}
|
|
88
89
|
this.running = false;
|
|
89
90
|
await this.stopAgents();
|
|
91
|
+
await tryStop(this.orchestratorClient);
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
/**
|
|
@@ -154,9 +156,9 @@ export function buildServerCircuitProver(
|
|
|
154
156
|
return BBNativeRollupProver.new(config, telemetry);
|
|
155
157
|
}
|
|
156
158
|
|
|
157
|
-
const
|
|
159
|
+
const simulator = config.acvmBinaryPath
|
|
158
160
|
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
159
161
|
: undefined;
|
|
160
162
|
|
|
161
|
-
return Promise.resolve(new TestCircuitProver(
|
|
163
|
+
return Promise.resolve(new TestCircuitProver(simulator, config, telemetry));
|
|
162
164
|
}
|