@aztec/prover-client 0.56.0 → 0.58.0

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.
Files changed (48) hide show
  1. package/dest/config.d.ts +4 -5
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +11 -2
  4. package/dest/index.d.ts +1 -1
  5. package/dest/index.d.ts.map +1 -1
  6. package/dest/mocks/fixtures.d.ts +6 -6
  7. package/dest/mocks/fixtures.d.ts.map +1 -1
  8. package/dest/mocks/fixtures.js +8 -4
  9. package/dest/mocks/test_context.d.ts +7 -7
  10. package/dest/mocks/test_context.d.ts.map +1 -1
  11. package/dest/mocks/test_context.js +15 -18
  12. package/dest/orchestrator/block-building-helpers.d.ts +12 -12
  13. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  14. package/dest/orchestrator/block-building-helpers.js +4 -2
  15. package/dest/orchestrator/block-proving-state.d.ts +7 -7
  16. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  17. package/dest/orchestrator/block-proving-state.js +11 -33
  18. package/dest/orchestrator/epoch-proving-state.d.ts +8 -2
  19. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  20. package/dest/orchestrator/epoch-proving-state.js +8 -16
  21. package/dest/orchestrator/orchestrator.d.ts +15 -19
  22. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  23. package/dest/orchestrator/orchestrator.js +161 -106
  24. package/dest/prover-agent/memory-proving-queue.d.ts +5 -8
  25. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  26. package/dest/prover-agent/memory-proving-queue.js +3 -3
  27. package/dest/prover-agent/prover-agent.js +4 -4
  28. package/dest/prover-agent/rpc.js +4 -4
  29. package/dest/test/mock_prover.d.ts +10 -16
  30. package/dest/test/mock_prover.d.ts.map +1 -1
  31. package/dest/test/mock_prover.js +18 -24
  32. package/dest/tx-prover/tx-prover.d.ts +3 -4
  33. package/dest/tx-prover/tx-prover.d.ts.map +1 -1
  34. package/dest/tx-prover/tx-prover.js +2 -2
  35. package/package.json +14 -10
  36. package/src/config.ts +20 -11
  37. package/src/index.ts +1 -1
  38. package/src/mocks/fixtures.ts +21 -7
  39. package/src/mocks/test_context.ts +26 -22
  40. package/src/orchestrator/block-building-helpers.ts +21 -12
  41. package/src/orchestrator/block-proving-state.ts +11 -35
  42. package/src/orchestrator/epoch-proving-state.ts +9 -20
  43. package/src/orchestrator/orchestrator.ts +205 -140
  44. package/src/prover-agent/memory-proving-queue.ts +8 -7
  45. package/src/prover-agent/prover-agent.ts +4 -4
  46. package/src/prover-agent/rpc.ts +3 -3
  47. package/src/test/mock_prover.ts +26 -28
  48. package/src/tx-prover/tx-prover.ts +5 -5
@@ -1,6 +1,6 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
- import { BlockProofError, Body, EncryptedNoteTxL2Logs, EncryptedTxL2Logs, L2Block, MerkleTreeId, PROVING_STATUS, ProvingRequestType, Tx, UnencryptedTxL2Logs, makeEmptyProcessedTx, makePaddingProcessedTx, mapProvingRequestTypeToCircuitName, toTxEffect, } from '@aztec/circuit-types';
3
- import { AvmCircuitInputs, BaseParityInputs, BlockRootRollupInputs, Fr, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, NESTED_RECURSIVE_PROOF_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, PrivateKernelEmptyInputData, RootParityInputs, TubeInputs, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, } from '@aztec/circuits.js';
2
+ import { Body, EncryptedNoteTxL2Logs, EncryptedTxL2Logs, L2Block, MerkleTreeId, ProvingRequestType, UnencryptedTxL2Logs, makeEmptyProcessedTx, makePaddingProcessedTx, mapProvingRequestTypeToCircuitName, toTxEffect, } from '@aztec/circuit-types';
3
+ import { AvmCircuitInputs, BaseParityInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, Fr, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, NESTED_RECURSIVE_PROOF_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, PrivateKernelEmptyInputData, RootParityInputs, TUBE_INDEX, TubeInputs, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, } from '@aztec/circuits.js';
4
4
  import { makeTuple } from '@aztec/foundation/array';
5
5
  import { padArrayEnd } from '@aztec/foundation/collection';
6
6
  import { AbortError } from '@aztec/foundation/error';
@@ -8,11 +8,12 @@ import { createDebugLogger } from '@aztec/foundation/log';
8
8
  import { promiseWithResolvers } from '@aztec/foundation/promise';
9
9
  import { pushTestData } from '@aztec/foundation/testing';
10
10
  import { elapsed } from '@aztec/foundation/timer';
11
- import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
11
+ import { TubeVk, getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
12
+ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
12
13
  import { Attributes, trackSpan, wrapCallbackInSpan } from '@aztec/telemetry-client';
13
14
  import { inspect } from 'util';
14
15
  import { buildBaseRollupInput, buildHeaderFromCircuitOutputs, buildHeaderFromTxEffects, createBlockMergeRollupInputs, createMergeRollupInputs, getPreviousRollupDataFromPublicInputs, getRootRollupInput, getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, validatePartialState, validateTx, } from './block-building-helpers.js';
15
- import { EpochProvingState } from './epoch-proving-state.js';
16
+ import { EpochProvingState, } from './epoch-proving-state.js';
16
17
  import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js';
17
18
  import { TX_PROVING_CODE, TxProvingState } from './tx-proving-state.js';
18
19
  const logger = createDebugLogger('aztec:prover:proving-orchestrator');
@@ -32,10 +33,10 @@ const logger = createDebugLogger('aztec:prover:proving-orchestrator');
32
33
  let ProvingOrchestrator = (() => {
33
34
  var _a;
34
35
  let _instanceExtraInitializers = [];
35
- let _startNewEpoch_decorators;
36
36
  let _startNewBlock_decorators;
37
37
  let _addNewTx_decorators;
38
38
  let _setBlockCompleted_decorators;
39
+ let _padEpoch_decorators;
39
40
  let _prepareBaseRollupInputs_decorators;
40
41
  return _a = class ProvingOrchestrator {
41
42
  constructor(db, prover, telemetryClient, proverId = Fr.ZERO) {
@@ -45,6 +46,7 @@ let ProvingOrchestrator = (() => {
45
46
  this.provingState = undefined;
46
47
  this.pendingProvingJobs = [];
47
48
  this.paddingTx = undefined;
49
+ this.provingPromise = undefined;
48
50
  this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
49
51
  }
50
52
  get tracer() {
@@ -61,33 +63,36 @@ let ProvingOrchestrator = (() => {
61
63
  }
62
64
  startNewEpoch(epochNumber, totalNumBlocks) {
63
65
  const { promise: _promise, resolve, reject } = promiseWithResolvers();
64
- const promise = _promise.catch((reason) => ({
65
- status: PROVING_STATUS.FAILURE,
66
- reason,
67
- }));
66
+ const promise = _promise.catch((reason) => ({ status: 'failure', reason }));
67
+ if (totalNumBlocks <= 0 || !Number.isInteger(totalNumBlocks)) {
68
+ throw new Error(`Invalid number of blocks for epoch (got ${totalNumBlocks})`);
69
+ }
70
+ logger.info(`Starting epoch ${epochNumber} with ${totalNumBlocks} blocks`);
68
71
  this.provingState = new EpochProvingState(epochNumber, totalNumBlocks, resolve, reject);
69
- return { provingPromise: promise };
72
+ this.provingPromise = promise;
70
73
  }
71
74
  /**
72
75
  * Starts off a new block
73
- * @param numTxs - The total number of transactions in the block. Must be a power of 2
76
+ * @param numTxs - The total number of transactions in the block.
74
77
  * @param globalVariables - The global variables for the block
75
78
  * @param l1ToL2Messages - The l1 to l2 messages for the block
76
79
  * @param verificationKeys - The private kernel verification keys
77
80
  * @returns A proving ticket, containing a promise notifying of proving completion
78
81
  */
79
82
  async startNewBlock(numTxs, globalVariables, l1ToL2Messages) {
80
- // If no proving state, assume we only care about proving this block and initialize a 1-block epoch
81
83
  if (!this.provingState) {
82
- this.startNewEpoch(globalVariables.blockNumber.toNumber(), 1);
84
+ throw new Error(`Invalid proving state, call startNewEpoch before starting a block`);
83
85
  }
84
86
  if (!this.provingState?.isAcceptingBlocks()) {
85
87
  throw new Error(`Epoch not accepting further blocks`);
86
88
  }
87
89
  if (!Number.isInteger(numTxs) || numTxs < 2) {
88
- throw new Error(`Length of txs for the block should be at least two (got ${numTxs})`);
90
+ throw new Error(`Invalid number of txs for block (got ${numTxs})`);
91
+ }
92
+ if (this.provingState.currentBlock && !this.provingState.currentBlock.block) {
93
+ throw new Error(`Must end previous block before starting a new one`);
89
94
  }
90
- // TODO(palla/prover-node): Store block number in the db itself to make this check more reliable,
95
+ // TODO(palla/prover): Store block number in the db itself to make this check more reliable,
91
96
  // and turn this warning into an exception that we throw.
92
97
  const { blockNumber } = globalVariables;
93
98
  const dbBlockNumber = (await this.db.getTreeInfo(MerkleTreeId.ARCHIVE)).size - 1n;
@@ -115,14 +120,11 @@ let ProvingOrchestrator = (() => {
115
120
  const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
116
121
  const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, this.db);
117
122
  const previousBlockHash = await this.db.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(startArchiveSnapshot.nextAvailableLeafIndex - 1));
118
- const { promise: _promise, resolve, reject } = promiseWithResolvers();
119
- const promise = _promise.catch((reason) => ({ status: PROVING_STATUS.FAILURE, reason }));
120
- this.provingState.startNewBlock(numTxs, globalVariables, l1ToL2MessagesPadded, messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, startArchiveSnapshot, newArchiveSiblingPath, previousBlockHash, resolve, reject);
123
+ this.provingState.startNewBlock(numTxs, globalVariables, l1ToL2MessagesPadded, messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, startArchiveSnapshot, newArchiveSiblingPath, previousBlockHash);
121
124
  // Enqueue base parity circuits for the block
122
125
  for (let i = 0; i < baseParityInputs.length; i++) {
123
126
  this.enqueueBaseParityCircuit(this.provingState.currentBlock, baseParityInputs[i], i);
124
127
  }
125
- return { provingPromise: promise };
126
128
  }
127
129
  /**
128
130
  * The interface to add a simulated transaction to the scheduler
@@ -136,6 +138,9 @@ let ProvingOrchestrator = (() => {
136
138
  if (!provingState.isAcceptingTransactions()) {
137
139
  throw new Error(`Rollup not accepting further transactions`);
138
140
  }
141
+ if (!provingState.verifyState()) {
142
+ throw new Error(`Invalid proving state when adding a tx`);
143
+ }
139
144
  validateTx(tx);
140
145
  logger.info(`Received transaction: ${tx.hash}`);
141
146
  if (tx.isEmpty) {
@@ -145,52 +150,102 @@ let ProvingOrchestrator = (() => {
145
150
  const [inputs, treeSnapshots] = await this.prepareTransaction(tx, provingState);
146
151
  this.enqueueFirstProofs(inputs, treeSnapshots, tx, provingState);
147
152
  if (provingState.transactionsReceived === provingState.totalNumTxs) {
148
- logger.verbose(`All transactions received for block ${provingState.globalVariables.blockNumber}. Assembling header.`);
149
- await this.buildBlockHeader(provingState);
153
+ logger.verbose(`All transactions received for block ${provingState.globalVariables.blockNumber}.`);
150
154
  }
151
155
  }
152
156
  /**
153
157
  * Marks the block as full and pads it if required, no more transactions will be accepted.
154
158
  * Computes the block header and updates the archive tree.
155
159
  */
156
- async setBlockCompleted() {
160
+ async setBlockCompleted(expectedHeader) {
157
161
  const provingState = this.provingState?.currentBlock;
158
162
  if (!provingState) {
159
163
  throw new Error(`Invalid proving state, call startNewBlock before adding transactions or completing the block`);
160
164
  }
161
- // we may need to pad the rollup with empty transactions
162
- const paddingTxCount = provingState.totalNumTxs - provingState.transactionsReceived;
163
- if (paddingTxCount === 0) {
164
- return;
165
+ if (!provingState.verifyState()) {
166
+ throw new Error(`Block proving failed: ${provingState.error}`);
165
167
  }
166
- else if (provingState.totalNumTxs > 2) {
168
+ // We may need to pad the rollup with empty transactions
169
+ const paddingTxCount = provingState.totalNumTxs - provingState.transactionsReceived;
170
+ if (paddingTxCount > 0 && provingState.totalNumTxs > 2) {
167
171
  throw new Error(`Block not ready for completion: expecting ${paddingTxCount} more transactions.`);
168
172
  }
169
- logger.debug(`Padding rollup with ${paddingTxCount} empty transactions`);
170
- // Make an empty padding transaction
171
- // Required for:
172
- // 0 (when we want an empty block, largely for testing), or
173
- // 1 (we need to pad with one tx as all rollup circuits require a pair of inputs) txs
174
- // Insert it into the tree the required number of times to get all of the
175
- // base rollup inputs
176
- // Then enqueue the proving of all the transactions
177
- const unprovenPaddingTx = makeEmptyProcessedTx(this.db.getInitialHeader(), provingState.globalVariables.chainId, provingState.globalVariables.version, getVKTreeRoot());
178
- const txInputs = [];
179
- for (let i = 0; i < paddingTxCount; i++) {
180
- const [inputs, snapshot] = await this.prepareTransaction(unprovenPaddingTx, provingState);
181
- const txInput = {
182
- inputs,
183
- snapshot,
184
- };
185
- txInputs.push(txInput);
173
+ if (paddingTxCount > 0) {
174
+ logger.debug(`Padding rollup with ${paddingTxCount} empty transactions`);
175
+ // Make an empty padding transaction
176
+ // Required for:
177
+ // 0 (when we want an empty block, largely for testing), or
178
+ // 1 (we need to pad with one tx as all rollup circuits require a pair of inputs) txs
179
+ // Insert it into the tree the required number of times to get all of the
180
+ // base rollup inputs
181
+ // Then enqueue the proving of all the transactions
182
+ const unprovenPaddingTx = makeEmptyProcessedTx(this.db.getInitialHeader(), provingState.globalVariables.chainId, provingState.globalVariables.version, getVKTreeRoot(), protocolContractTreeRoot);
183
+ const txInputs = [];
184
+ for (let i = 0; i < paddingTxCount; i++) {
185
+ const [inputs, snapshot] = await this.prepareTransaction(unprovenPaddingTx, provingState);
186
+ const txInput = {
187
+ inputs,
188
+ snapshot,
189
+ };
190
+ txInputs.push(txInput);
191
+ }
192
+ // Now enqueue the proving
193
+ this.enqueuePaddingTxs(provingState, txInputs, unprovenPaddingTx);
186
194
  }
187
- // Now enqueue the proving
188
- this.enqueuePaddingTxs(provingState, txInputs, unprovenPaddingTx);
189
195
  // And build the block header
190
- logger.verbose(`Block ${provingState.globalVariables.blockNumber} padded with empty tx(s). Assembling header.`);
191
- await this.buildBlockHeader(provingState);
196
+ logger.verbose(`Block ${provingState.globalVariables.blockNumber} completed. Assembling header.`);
197
+ await this.buildBlock(provingState, expectedHeader);
198
+ // If the proofs were faster than the block building, then we need to try the block root rollup again here
199
+ this.checkAndEnqueueBlockRootRollup(provingState);
200
+ return provingState.block;
201
+ }
202
+ /** Returns the block as built for a given index. */
203
+ getBlock(index) {
204
+ const block = this.provingState?.blocks[index].block;
205
+ if (!block) {
206
+ throw new Error(`Block at index ${index} not available`);
207
+ }
208
+ return block;
209
+ }
210
+ padEpoch() {
211
+ const provingState = this.provingState;
212
+ const lastBlock = provingState.currentBlock?.block;
213
+ if (!lastBlock) {
214
+ return Promise.reject(new Error(`Epoch needs at least one completed block in order to be padded`));
215
+ }
216
+ const paddingBlockCount = Math.max(2, provingState.totalNumBlocks) - provingState.blocks.length;
217
+ if (paddingBlockCount === 0) {
218
+ return Promise.resolve();
219
+ }
220
+ logger.debug(`Padding epoch proof with ${paddingBlockCount} empty block proofs`);
221
+ const inputs = EmptyBlockRootRollupInputs.from({
222
+ archive: lastBlock.archive,
223
+ blockHash: lastBlock.header.hash(),
224
+ globalVariables: lastBlock.header.globalVariables,
225
+ vkTreeRoot: getVKTreeRoot(),
226
+ protocolContractTreeRoot,
227
+ proverId: this.proverId,
228
+ });
229
+ logger.debug(`Enqueuing deferred proving for padding block to enqueue ${paddingBlockCount} paddings`);
230
+ this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getEmptyBlockRootRollupProof', {
231
+ [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
232
+ [Attributes.PROTOCOL_CIRCUIT_NAME]: 'empty-block-root-rollup',
233
+ }, signal => this.prover.getEmptyBlockRootRollupProof(inputs, signal, provingState.epochNumber)), result => {
234
+ logger.debug(`Completed proof for padding block`);
235
+ const currentLevel = provingState.numMergeLevels + 1n;
236
+ for (let i = 0; i < paddingBlockCount; i++) {
237
+ logger.debug(`Enqueuing padding block with index ${provingState.blocks.length + i}`);
238
+ const index = BigInt(provingState.blocks.length + i);
239
+ this.storeAndExecuteNextBlockMergeLevel(provingState, currentLevel, index, [
240
+ result.inputs,
241
+ result.proof,
242
+ result.verificationKey.keyAsFields,
243
+ ]);
244
+ }
245
+ });
246
+ return Promise.resolve();
192
247
  }
193
- async buildBlockHeader(provingState) {
248
+ async buildBlock(provingState, expectedHeader) {
194
249
  // Collect all new nullifiers, commitments, and contracts from all txs in this block to build body
195
250
  const gasFees = provingState.globalVariables.gasFees;
196
251
  const nonEmptyTxEffects = provingState.allTxs
@@ -200,11 +255,15 @@ let ProvingOrchestrator = (() => {
200
255
  // Given we've applied every change from this block, now assemble the block header
201
256
  // and update the archive tree, so we're ready to start processing the next block
202
257
  const header = await buildHeaderFromTxEffects(body, provingState.globalVariables, provingState.newL1ToL2Messages, this.db);
258
+ if (expectedHeader && !header.equals(expectedHeader)) {
259
+ logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
260
+ throw new Error('Block header mismatch');
261
+ }
203
262
  logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${header.hash().toString()}`);
204
263
  await this.db.updateArchive(header);
205
264
  // Assemble the L2 block
206
265
  const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
207
- const l2Block = L2Block.fromFields({ archive: newArchive, header, body });
266
+ const l2Block = new L2Block(newArchive, header, body);
208
267
  if (!l2Block.body.getTxsEffectsHash().equals(header.contentCommitment.txsEffectsHash)) {
209
268
  throw new Error(`Txs effects hash mismatch, ${l2Block.body
210
269
  .getTxsEffectsHash()
@@ -230,7 +289,7 @@ let ProvingOrchestrator = (() => {
230
289
  // Chain id and version should not change even if the proving state does, so it's safe to use them for the padding tx
231
290
  // which gets cached across multiple runs of the orchestrator with different proving states. If they were to change,
232
291
  // we'd have to clear out the paddingTx here and regenerate it when they do.
233
- unprovenPaddingTx.data.constants.txContext.chainId, unprovenPaddingTx.data.constants.txContext.version, getVKTreeRoot()), signal, provingState.epochNumber)), result => {
292
+ unprovenPaddingTx.data.constants.txContext.chainId, unprovenPaddingTx.data.constants.txContext.version, getVKTreeRoot(), protocolContractTreeRoot), signal, provingState.epochNumber)), result => {
234
293
  logger.debug(`Completed proof for padding tx, now enqueuing ${txInputs.length} padding txs`);
235
294
  this.paddingTx = makePaddingProcessedTx(result);
236
295
  this.provePaddingTransactions(txInputs, this.paddingTx, provingState);
@@ -275,43 +334,25 @@ let ProvingOrchestrator = (() => {
275
334
  }
276
335
  return buildHeaderFromCircuitOutputs([previousMergeData[0], previousMergeData[1]], provingState.finalRootParityInput.publicInputs, rootRollupOutputs, provingState.messageTreeSnapshotAfterInsertion, logger);
277
336
  }
278
- /**
279
- * Returns the fully proven block. Requires proving to have been completed.
280
- * @param index - The index of the block to finalise. Defaults to the last block.
281
- * @returns The fully proven block and proof.
282
- */
283
- finaliseBlock(index) {
284
- try {
285
- const block = this.provingState?.blocks[index ?? this.provingState?.blocks.length - 1];
286
- if (!block || !block.blockRootRollupPublicInputs || !block.finalProof || !block.block) {
287
- throw new Error(`Invalid proving state, a block must be proven before it can be finalised`);
288
- }
289
- const blockResult = {
290
- proof: block.finalProof,
291
- aggregationObject: block.finalProof.extractAggregationObject(),
292
- block: block.block,
293
- };
294
- pushTestData('blockResults', {
295
- proverId: this.proverId.toString(),
296
- vkTreeRoot: getVKTreeRoot().toString(),
297
- block: blockResult.block.toString(),
298
- proof: blockResult.proof.toString(),
299
- aggregationObject: blockResult.aggregationObject.map(x => x.toString()),
300
- });
301
- return Promise.resolve(blockResult);
302
- }
303
- catch (err) {
304
- throw new BlockProofError(err && typeof err === 'object' && 'message' in err ? String(err.message) : String(err), this.provingState?.blocks[index ?? this.provingState?.blocks.length - 1]?.allTxs.map(x => Tx.getHash(x.processedTx)) ?? []);
305
- }
306
- }
307
337
  /**
308
338
  * Returns the proof for the current epoch.
309
- * Requires proving to have been completed.
310
339
  */
311
- finaliseEpoch() {
312
- if (!this.provingState || !this.provingState.rootRollupPublicInputs || !this.provingState.finalProof) {
340
+ async finaliseEpoch() {
341
+ if (!this.provingState || !this.provingPromise) {
313
342
  throw new Error(`Invalid proving state, an epoch must be proven before it can be finalised`);
314
343
  }
344
+ await this.padEpoch();
345
+ const result = await this.provingPromise;
346
+ if (result.status === 'failure') {
347
+ throw new Error(`Epoch proving failed: ${result.reason}`);
348
+ }
349
+ if (!this.provingState.rootRollupPublicInputs || !this.provingState.finalProof) {
350
+ throw new Error(`Invalid proving state, missing root rollup public inputs or final proof`);
351
+ }
352
+ pushTestData('epochProofResult', {
353
+ proof: this.provingState.finalProof.toString(),
354
+ publicInputs: this.provingState.rootRollupPublicInputs.toString(),
355
+ });
315
356
  return { proof: this.provingState.finalProof, publicInputs: this.provingState.rootRollupPublicInputs };
316
357
  }
317
358
  /**
@@ -399,7 +440,7 @@ let ProvingOrchestrator = (() => {
399
440
  }
400
441
  // We build the base rollup inputs using a mock proof and verification key.
401
442
  // These will be overwritten later once we have proven the tube circuit and any public kernels
402
- const [ms, inputs] = await elapsed(buildBaseRollupInput(tx, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), provingState.globalVariables, this.db, VerificationKeyData.makeFake()));
443
+ const [ms, inputs] = await elapsed(buildBaseRollupInput(tx, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), provingState.globalVariables, this.db, TubeVk));
403
444
  if (!tx.isEmpty) {
404
445
  this.metrics.recordBaseRollupInputs(ms);
405
446
  }
@@ -473,8 +514,8 @@ let ProvingOrchestrator = (() => {
473
514
  [Attributes.PROTOCOL_CIRCUIT_NAME]: 'tube-circuit',
474
515
  }, signal => this.prover.getTubeProof(new TubeInputs(txProvingState.processedTx.clientIvcProof), signal, provingState.epochNumber)), result => {
475
516
  logger.debug(`Completed tube proof for tx index: ${txIndex}`);
476
- const nextKernelRequest = txProvingState.getNextPublicKernelFromTubeProof(result.tubeProof, result.tubeVK);
477
- this.checkAndEnqueueNextTxCircuit(provingState, txIndex, result.tubeProof, result.tubeVK, nextKernelRequest);
517
+ const nextKernelRequest = txProvingState.getNextPublicKernelFromTubeProof(result.proof, result.verificationKey);
518
+ this.checkAndEnqueueNextTxCircuit(provingState, txIndex, result.proof, result.verificationKey, nextKernelRequest);
478
519
  });
479
520
  }
480
521
  // Executes the merge rollup circuit and stored the output as intermediate state for the parent merge/block root circuit
@@ -494,10 +535,14 @@ let ProvingOrchestrator = (() => {
494
535
  }
495
536
  // Executes the block root rollup circuit
496
537
  enqueueBlockRootRollup(provingState) {
497
- if (!provingState?.verifyState()) {
538
+ if (!provingState.block) {
539
+ throw new Error(`Invalid proving state for block root rollup, block not available`);
540
+ }
541
+ if (!provingState.verifyState()) {
498
542
  logger.debug('Not running block root rollup, state no longer valid');
499
543
  return;
500
544
  }
545
+ provingState.blockRootRollupStarted = true;
501
546
  const mergeInputData = provingState.getMergeInputs(0);
502
547
  const rootParityInput = provingState.finalRootParityInput;
503
548
  logger.debug(`Enqueuing block root rollup for block ${provingState.blockNumber} with ${provingState.newL1ToL2Messages.length} l1 to l2 msgs`);
@@ -513,13 +558,10 @@ let ProvingOrchestrator = (() => {
513
558
  previousBlockHash: provingState.previousBlockHash,
514
559
  proverId: this.proverId,
515
560
  });
516
- const shouldProveEpoch = this.provingState.totalNumBlocks > 1;
517
561
  this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getBlockRootRollupProof', {
518
562
  [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
519
563
  [Attributes.PROTOCOL_CIRCUIT_NAME]: 'block-root-rollup',
520
- }, signal => shouldProveEpoch
521
- ? this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber)
522
- : this.prover.getBlockRootRollupFinalProof(inputs, signal, provingState.epochNumber)), result => {
564
+ }, signal => this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber)), result => {
523
565
  const header = this.extractBlockHeaderFromPublicInputs(provingState, result.inputs);
524
566
  if (!header.hash().equals(provingState.block.header.hash())) {
525
567
  logger.error(`Block header mismatch\nCircuit:${inspect(header)}\nComputed:${inspect(provingState.block.header)}`);
@@ -527,14 +569,8 @@ let ProvingOrchestrator = (() => {
527
569
  }
528
570
  provingState.blockRootRollupPublicInputs = result.inputs;
529
571
  provingState.finalProof = result.proof.binaryProof;
530
- provingState.resolve({ status: PROVING_STATUS.SUCCESS });
531
572
  logger.debug(`Completed proof for block root rollup for ${provingState.block?.number}`);
532
573
  // validatePartialState(result.inputs.end, tx.treeSnapshots); // TODO(palla/prover)
533
- // TODO(palla/prover): Remove this once we've dropped the flow for proving single blocks
534
- if (!shouldProveEpoch) {
535
- logger.verbose(`Skipping epoch rollup, only one block in epoch`);
536
- return;
537
- }
538
574
  const currentLevel = this.provingState.numMergeLevels + 1n;
539
575
  this.storeAndExecuteNextBlockMergeLevel(this.provingState, currentLevel, BigInt(provingState.index), [
540
576
  result.inputs,
@@ -596,9 +632,10 @@ let ProvingOrchestrator = (() => {
596
632
  [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
597
633
  [Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-rollup',
598
634
  }, signal => this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), result => {
635
+ logger.verbose(`Orchestrator completed root rollup for epoch ${provingState.epochNumber}`);
599
636
  provingState.rootRollupPublicInputs = result.inputs;
600
637
  provingState.finalProof = result.proof.binaryProof;
601
- provingState.resolve({ status: PROVING_STATUS.SUCCESS });
638
+ provingState.resolve({ status: 'success' });
602
639
  });
603
640
  }
604
641
  checkAndEnqueueBlockRootRollup(provingState) {
@@ -606,6 +643,10 @@ let ProvingOrchestrator = (() => {
606
643
  logger.debug('Not ready for root rollup');
607
644
  return;
608
645
  }
646
+ if (provingState.blockRootRollupStarted) {
647
+ logger.debug('Block root rollup already started');
648
+ return;
649
+ }
609
650
  this.enqueueBlockRootRollup(provingState);
610
651
  }
611
652
  checkAndEnqueueRootRollup(provingState) {
@@ -700,7 +741,10 @@ let ProvingOrchestrator = (() => {
700
741
  }
701
742
  else {
702
743
  logger.warn(`Error thrown when proving AVM circuit, but AVM_PROVING_STRICT is off, so faking AVM proof and carrying on. Error: ${err}.`);
703
- return { proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() };
744
+ return {
745
+ proof: makeEmptyProof(),
746
+ verificationKey: VerificationKeyData.makeFakeHonk(),
747
+ };
704
748
  }
705
749
  }
706
750
  });
@@ -738,7 +782,13 @@ let ProvingOrchestrator = (() => {
738
782
  // Take the final proof and assign it to the base rollup inputs
739
783
  txProvingState.baseRollupInputs.kernelData.proof = proof;
740
784
  txProvingState.baseRollupInputs.kernelData.vk = verificationKey;
741
- txProvingState.baseRollupInputs.kernelData.vkIndex = getVKIndex(verificationKey);
785
+ try {
786
+ txProvingState.baseRollupInputs.kernelData.vkIndex = getVKIndex(verificationKey);
787
+ }
788
+ catch (_ignored) {
789
+ // 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
790
+ txProvingState.baseRollupInputs.kernelData.vkIndex = TUBE_INDEX;
791
+ }
742
792
  txProvingState.baseRollupInputs.kernelData.vkPath = getVKSiblingPath(txProvingState.baseRollupInputs.kernelData.vkIndex);
743
793
  this.enqueueBaseRollup(provingState, BigInt(txIndex), txProvingState);
744
794
  return;
@@ -789,10 +839,6 @@ let ProvingOrchestrator = (() => {
789
839
  },
790
840
  (() => {
791
841
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
792
- _startNewEpoch_decorators = [trackSpan('ProvingOrchestrator.startNewEpoch', (epochNumber, totalNumBlocks) => ({
793
- [Attributes.EPOCH_SIZE]: totalNumBlocks,
794
- [Attributes.EPOCH_NUMBER]: epochNumber,
795
- }))];
796
842
  _startNewBlock_decorators = [trackSpan('ProvingOrchestrator.startNewBlock', (numTxs, globalVariables) => ({
797
843
  [Attributes.BLOCK_SIZE]: numTxs,
798
844
  [Attributes.BLOCK_NUMBER]: globalVariables.blockNumber.toNumber(),
@@ -811,17 +857,26 @@ let ProvingOrchestrator = (() => {
811
857
  [Attributes.BLOCK_TXS_COUNT]: block.transactionsReceived,
812
858
  };
813
859
  })];
860
+ _padEpoch_decorators = [trackSpan('ProvingOrchestrator.padEpoch', function () {
861
+ if (!this.provingState) {
862
+ return {};
863
+ }
864
+ return {
865
+ [Attributes.EPOCH_NUMBER]: this.provingState.epochNumber,
866
+ [Attributes.EPOCH_SIZE]: this.provingState.totalNumBlocks,
867
+ };
868
+ })];
814
869
  _prepareBaseRollupInputs_decorators = [trackSpan('ProvingOrchestrator.prepareBaseRollupInputs', (_, tx) => ({
815
870
  [Attributes.TX_HASH]: tx.hash.toString(),
816
871
  }))];
817
- __esDecorate(_a, null, _startNewEpoch_decorators, { kind: "method", name: "startNewEpoch", static: false, private: false, access: { has: obj => "startNewEpoch" in obj, get: obj => obj.startNewEpoch }, metadata: _metadata }, null, _instanceExtraInitializers);
818
872
  __esDecorate(_a, null, _startNewBlock_decorators, { kind: "method", name: "startNewBlock", static: false, private: false, access: { has: obj => "startNewBlock" in obj, get: obj => obj.startNewBlock }, metadata: _metadata }, null, _instanceExtraInitializers);
819
873
  __esDecorate(_a, null, _addNewTx_decorators, { kind: "method", name: "addNewTx", static: false, private: false, access: { has: obj => "addNewTx" in obj, get: obj => obj.addNewTx }, metadata: _metadata }, null, _instanceExtraInitializers);
820
874
  __esDecorate(_a, null, _setBlockCompleted_decorators, { kind: "method", name: "setBlockCompleted", static: false, private: false, access: { has: obj => "setBlockCompleted" in obj, get: obj => obj.setBlockCompleted }, metadata: _metadata }, null, _instanceExtraInitializers);
875
+ __esDecorate(_a, null, _padEpoch_decorators, { kind: "method", name: "padEpoch", static: false, private: false, access: { has: obj => "padEpoch" in obj, get: obj => obj.padEpoch }, metadata: _metadata }, null, _instanceExtraInitializers);
821
876
  __esDecorate(_a, null, _prepareBaseRollupInputs_decorators, { kind: "method", name: "prepareBaseRollupInputs", static: false, private: false, access: { has: obj => "prepareBaseRollupInputs" in obj, get: obj => obj.prepareBaseRollupInputs }, metadata: _metadata }, null, _instanceExtraInitializers);
822
877
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
823
878
  })(),
824
879
  _a;
825
880
  })();
826
881
  export { ProvingOrchestrator };
827
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsSUFBSSxFQUNKLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsT0FBTyxFQUNQLFlBQVksRUFDWixjQUFjLEVBSWQsa0JBQWtCLEVBS2xCLEVBQUUsRUFFRixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMsVUFBVSxHQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFHaEIscUJBQXFCLEVBQ3JCLEVBQUUsRUFHRiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLDZCQUE2QixFQUM3QixtQ0FBbUMsRUFDbkMsK0JBQStCLEVBQy9CLDJCQUEyQixFQU0zQixnQkFBZ0IsRUFFaEIsVUFBVSxFQUdWLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsdUJBQXVCLEdBQ3hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFN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
882
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxJQUFJLEVBQ0oscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsWUFBWSxFQUdaLGtCQUFrQixFQUlsQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMsVUFBVSxHQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFHaEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixFQUFFLEVBSUYsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUN4Qyw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLCtCQUErQixFQUMvQiwyQkFBMkIsRUFNM0IsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixVQUFVLEVBR1YsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCx1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxN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