@aztec/prover-client 0.65.2 → 0.66.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 (78) hide show
  1. package/dest/block_builder/index.d.ts +6 -0
  2. package/dest/block_builder/index.d.ts.map +1 -0
  3. package/dest/block_builder/index.js +2 -0
  4. package/dest/block_builder/light.d.ts +32 -0
  5. package/dest/block_builder/light.d.ts.map +1 -0
  6. package/dest/block_builder/light.js +71 -0
  7. package/dest/index.d.ts +1 -2
  8. package/dest/index.d.ts.map +1 -1
  9. package/dest/index.js +2 -3
  10. package/dest/mocks/fixtures.d.ts +1 -2
  11. package/dest/mocks/fixtures.d.ts.map +1 -1
  12. package/dest/mocks/fixtures.js +3 -7
  13. package/dest/mocks/test_context.d.ts +28 -10
  14. package/dest/mocks/test_context.d.ts.map +1 -1
  15. package/dest/mocks/test_context.js +58 -21
  16. package/dest/orchestrator/epoch-proving-state.d.ts +5 -6
  17. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  18. package/dest/orchestrator/epoch-proving-state.js +10 -12
  19. package/dest/orchestrator/orchestrator.d.ts +8 -6
  20. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  21. package/dest/orchestrator/orchestrator.js +83 -72
  22. package/dest/orchestrator/tx-proving-state.d.ts +0 -1
  23. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/tx-proving-state.js +2 -34
  25. package/dest/prover-client/factory.d.ts +6 -0
  26. package/dest/prover-client/factory.d.ts.map +1 -0
  27. package/dest/prover-client/factory.js +6 -0
  28. package/dest/prover-client/index.d.ts +3 -0
  29. package/dest/prover-client/index.d.ts.map +1 -0
  30. package/dest/prover-client/index.js +3 -0
  31. package/dest/{tx-prover/tx-prover.d.ts → prover-client/prover-client.d.ts} +8 -11
  32. package/dest/prover-client/prover-client.d.ts.map +1 -0
  33. package/dest/prover-client/prover-client.js +107 -0
  34. package/dest/proving_broker/factory.d.ts +2 -1
  35. package/dest/proving_broker/factory.d.ts.map +1 -1
  36. package/dest/proving_broker/factory.js +4 -4
  37. package/dest/proving_broker/proving_agent.d.ts +5 -0
  38. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  39. package/dest/proving_broker/proving_agent.js +13 -2
  40. package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
  41. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
  42. package/dest/proving_broker/proving_agent_instrumentation.js +16 -0
  43. package/dest/proving_broker/proving_broker.d.ts +6 -1
  44. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  45. package/dest/proving_broker/proving_broker.js +37 -4
  46. package/dest/proving_broker/proving_broker_database/persisted.d.ts +3 -1
  47. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  48. package/dest/proving_broker/proving_broker_database/persisted.js +10 -2
  49. package/dest/proving_broker/proving_broker_instrumentation.d.ts +25 -0
  50. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
  51. package/dest/proving_broker/proving_broker_instrumentation.js +91 -0
  52. package/dest/test/mock_prover.d.ts +1 -1
  53. package/dest/test/mock_prover.d.ts.map +1 -1
  54. package/dest/test/mock_prover.js +4 -3
  55. package/package.json +14 -13
  56. package/src/block_builder/index.ts +6 -0
  57. package/src/block_builder/light.ts +117 -0
  58. package/src/index.ts +1 -2
  59. package/src/mocks/fixtures.ts +2 -14
  60. package/src/mocks/test_context.ts +80 -24
  61. package/src/orchestrator/epoch-proving-state.ts +10 -13
  62. package/src/orchestrator/orchestrator.ts +97 -77
  63. package/src/orchestrator/tx-proving-state.ts +1 -56
  64. package/src/{tx-prover → prover-client}/factory.ts +4 -3
  65. package/src/prover-client/index.ts +2 -0
  66. package/src/{tx-prover/tx-prover.ts → prover-client/prover-client.ts} +23 -13
  67. package/src/proving_broker/factory.ts +7 -3
  68. package/src/proving_broker/proving_agent.ts +16 -1
  69. package/src/proving_broker/proving_agent_instrumentation.ts +21 -0
  70. package/src/proving_broker/proving_broker.ts +46 -3
  71. package/src/proving_broker/proving_broker_database/persisted.ts +17 -2
  72. package/src/proving_broker/proving_broker_instrumentation.ts +130 -0
  73. package/src/test/mock_prover.ts +3 -2
  74. package/dest/tx-prover/factory.d.ts +0 -6
  75. package/dest/tx-prover/factory.d.ts.map +0 -1
  76. package/dest/tx-prover/factory.js +0 -6
  77. package/dest/tx-prover/tx-prover.d.ts.map +0 -1
  78. package/dest/tx-prover/tx-prover.js +0 -110
@@ -2,7 +2,7 @@ import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { L2Block, MerkleTreeId, makeEmptyProcessedTx, } from '@aztec/circuit-types';
3
3
  import { AVM_PROOF_LENGTH_IN_FIELDS, AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, BaseParityInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, Fr, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, PrivateKernelEmptyInputData, RootParityInput, RootParityInputs, VerificationKeyData, makeEmptyRecursiveProof, } from '@aztec/circuits.js';
4
4
  import { makeTuple } from '@aztec/foundation/array';
5
- import { padArrayEnd } from '@aztec/foundation/collection';
5
+ import { maxBy, padArrayEnd } from '@aztec/foundation/collection';
6
6
  import { AbortError } from '@aztec/foundation/error';
7
7
  import { createDebugLogger } from '@aztec/foundation/log';
8
8
  import { promiseWithResolvers } from '@aztec/foundation/promise';
@@ -39,13 +39,14 @@ let ProvingOrchestrator = (() => {
39
39
  let _padEpoch_decorators;
40
40
  let _prepareBaseRollupInputs_decorators;
41
41
  return _a = class ProvingOrchestrator {
42
- constructor(db, prover, telemetryClient, proverId = Fr.ZERO) {
43
- this.db = (__runInitializers(this, _instanceExtraInitializers), db);
42
+ constructor(dbProvider, prover, telemetryClient, proverId = Fr.ZERO) {
43
+ this.dbProvider = (__runInitializers(this, _instanceExtraInitializers), dbProvider);
44
44
  this.prover = prover;
45
45
  this.proverId = proverId;
46
46
  this.provingState = undefined;
47
47
  this.pendingProvingJobs = [];
48
48
  this.provingPromise = undefined;
49
+ this.dbs = new Map();
49
50
  this.metrics = new ProvingOrchestratorMetrics(telemetryClient, 'ProvingOrchestrator');
50
51
  }
51
52
  get tracer() {
@@ -60,14 +61,14 @@ let ProvingOrchestrator = (() => {
60
61
  reset() {
61
62
  this.paddingTxProof = undefined;
62
63
  }
63
- startNewEpoch(epochNumber, totalNumBlocks) {
64
+ startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks) {
64
65
  const { promise: _promise, resolve, reject } = promiseWithResolvers();
65
66
  const promise = _promise.catch((reason) => ({ status: 'failure', reason }));
66
67
  if (totalNumBlocks <= 0 || !Number.isInteger(totalNumBlocks)) {
67
68
  throw new Error(`Invalid number of blocks for epoch (got ${totalNumBlocks})`);
68
69
  }
69
70
  logger.info(`Starting epoch ${epochNumber} with ${totalNumBlocks} blocks`);
70
- this.provingState = new EpochProvingState(epochNumber, totalNumBlocks, resolve, reject);
71
+ this.provingState = new EpochProvingState(epochNumber, firstBlockNumber, totalNumBlocks, resolve, reject);
71
72
  this.provingPromise = promise;
72
73
  }
73
74
  /**
@@ -88,17 +89,10 @@ let ProvingOrchestrator = (() => {
88
89
  if (!Number.isInteger(numTxs) || numTxs < 2) {
89
90
  throw new Error(`Invalid number of txs for block (got ${numTxs})`);
90
91
  }
91
- if (this.provingState.currentBlock && !this.provingState.currentBlock.block) {
92
- throw new Error(`Must end previous block before starting a new one`);
93
- }
94
- // TODO(palla/prover): Store block number in the db itself to make this check more reliable,
95
- // and turn this warning into an exception that we throw.
96
- const { blockNumber } = globalVariables;
97
- const dbBlockNumber = (await this.db.getTreeInfo(MerkleTreeId.ARCHIVE)).size - 1n;
98
- if (dbBlockNumber !== blockNumber.toBigInt() - 1n) {
99
- logger.warn(`Database is at wrong block number (starting block ${blockNumber.toBigInt()} with db at ${dbBlockNumber})`);
100
- }
101
- logger.info(`Starting block ${globalVariables.blockNumber} for slot ${globalVariables.slotNumber} with ${numTxs} transactions`);
92
+ logger.info(`Starting block ${globalVariables.blockNumber.toNumber()} for slot ${globalVariables.slotNumber.toNumber()} with ${numTxs} transactions`);
93
+ // Fork world state at the end of the immediately previous block
94
+ const db = await this.dbProvider.fork(globalVariables.blockNumber.toNumber() - 1);
95
+ this.dbs.set(globalVariables.blockNumber.toNumber(), db);
102
96
  // we start the block by enqueueing all of the base parity circuits
103
97
  let baseParityInputs = [];
104
98
  let l1ToL2MessagesPadded;
@@ -109,20 +103,20 @@ let ProvingOrchestrator = (() => {
109
103
  throw new Error('Too many L1 to L2 messages');
110
104
  }
111
105
  baseParityInputs = Array.from({ length: NUM_BASE_PARITY_PER_ROOT_PARITY }, (_, i) => BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, getVKTreeRoot()));
112
- const messageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.db);
113
- const newL1ToL2MessageTreeRootSiblingPathArray = await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, this.db);
106
+ const messageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
107
+ const newL1ToL2MessageTreeRootSiblingPathArray = await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db);
114
108
  const newL1ToL2MessageTreeRootSiblingPath = makeTuple(L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, i => i < newL1ToL2MessageTreeRootSiblingPathArray.length ? newL1ToL2MessageTreeRootSiblingPathArray[i] : Fr.ZERO, 0);
115
109
  // Update the local trees to include the new l1 to l2 messages
116
- await this.db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded);
117
- const messageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.db);
110
+ await db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded);
111
+ const messageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
118
112
  // Get archive snapshot before this block lands
119
- const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
120
- const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, this.db);
121
- const previousBlockHash = await this.db.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(startArchiveSnapshot.nextAvailableLeafIndex - 1));
122
- this.provingState.startNewBlock(numTxs, globalVariables, l1ToL2MessagesPadded, messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, startArchiveSnapshot, newArchiveSiblingPath, previousBlockHash);
113
+ const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
114
+ const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
115
+ const previousBlockHash = await db.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(startArchiveSnapshot.nextAvailableLeafIndex - 1));
116
+ const blockProvingState = this.provingState.startNewBlock(numTxs, globalVariables, l1ToL2MessagesPadded, messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, startArchiveSnapshot, newArchiveSiblingPath, previousBlockHash);
123
117
  // Enqueue base parity circuits for the block
124
118
  for (let i = 0; i < baseParityInputs.length; i++) {
125
- this.enqueueBaseParityCircuit(this.provingState.currentBlock, baseParityInputs[i], i);
119
+ this.enqueueBaseParityCircuit(blockProvingState, baseParityInputs[i], i);
126
120
  }
127
121
  }
128
122
  /**
@@ -130,36 +124,44 @@ let ProvingOrchestrator = (() => {
130
124
  * @param tx - The transaction to be proven
131
125
  */
132
126
  async addNewTx(tx) {
133
- const provingState = this?.provingState?.currentBlock;
134
- if (!provingState) {
135
- throw new Error(`Invalid proving state, call startNewBlock before adding transactions`);
136
- }
137
- if (!provingState.isAcceptingTransactions()) {
138
- throw new Error(`Rollup not accepting further transactions`);
139
- }
140
- if (!provingState.verifyState()) {
141
- throw new Error(`Invalid proving state when adding a tx`);
142
- }
143
- validateTx(tx);
144
- logger.info(`Received transaction: ${tx.hash}`);
145
- if (tx.isEmpty) {
146
- logger.warn(`Ignoring empty transaction ${tx.hash} - it will not be added to this block`);
147
- return;
127
+ const blockNumber = tx.constants.globalVariables.blockNumber.toNumber();
128
+ try {
129
+ const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber);
130
+ if (!provingState) {
131
+ throw new Error(`Block proving state for ${blockNumber} not found`);
132
+ }
133
+ if (!provingState.isAcceptingTransactions()) {
134
+ throw new Error(`Rollup not accepting further transactions`);
135
+ }
136
+ if (!provingState.verifyState()) {
137
+ throw new Error(`Invalid proving state when adding a tx`);
138
+ }
139
+ validateTx(tx);
140
+ logger.info(`Received transaction: ${tx.hash}`);
141
+ if (tx.isEmpty) {
142
+ logger.warn(`Ignoring empty transaction ${tx.hash} - it will not be added to this block`);
143
+ return;
144
+ }
145
+ const [hints, treeSnapshots] = await this.prepareTransaction(tx, provingState);
146
+ this.enqueueFirstProofs(hints, treeSnapshots, tx, provingState);
147
+ if (provingState.transactionsReceived === provingState.totalNumTxs) {
148
+ logger.verbose(`All transactions received for block ${provingState.globalVariables.blockNumber}.`);
149
+ }
148
150
  }
149
- const [hints, treeSnapshots] = await this.prepareTransaction(tx, provingState);
150
- this.enqueueFirstProofs(hints, treeSnapshots, tx, provingState);
151
- if (provingState.transactionsReceived === provingState.totalNumTxs) {
152
- logger.verbose(`All transactions received for block ${provingState.globalVariables.blockNumber}.`);
151
+ catch (err) {
152
+ throw new Error(`Error adding transaction ${tx.hash.toString()} to block ${blockNumber}: ${err.message}`, {
153
+ cause: err,
154
+ });
153
155
  }
154
156
  }
155
157
  /**
156
158
  * Marks the block as full and pads it if required, no more transactions will be accepted.
157
159
  * Computes the block header and updates the archive tree.
158
160
  */
159
- async setBlockCompleted(expectedHeader) {
160
- const provingState = this.provingState?.currentBlock;
161
+ async setBlockCompleted(blockNumber, expectedHeader) {
162
+ const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber);
161
163
  if (!provingState) {
162
- throw new Error(`Invalid proving state, call startNewBlock before adding transactions or completing the block`);
164
+ throw new Error(`Block proving state for ${blockNumber} not found`);
163
165
  }
164
166
  if (!provingState.verifyState()) {
165
167
  throw new Error(`Block proving failed: ${provingState.error}`);
@@ -178,7 +180,7 @@ let ProvingOrchestrator = (() => {
178
180
  // Insert it into the tree the required number of times to get all of the
179
181
  // base rollup inputs
180
182
  // Then enqueue the proving of all the transactions
181
- const unprovenPaddingTx = makeEmptyProcessedTx(this.db.getInitialHeader(), provingState.globalVariables.chainId, provingState.globalVariables.version, getVKTreeRoot(), protocolContractTreeRoot);
183
+ const unprovenPaddingTx = makeEmptyProcessedTx(this.dbs.get(blockNumber).getInitialHeader(), provingState.globalVariables.chainId, provingState.globalVariables.version, getVKTreeRoot(), protocolContractTreeRoot);
182
184
  const txInputs = [];
183
185
  for (let i = 0; i < paddingTxCount; i++) {
184
186
  const [hints, snapshot] = await this.prepareTransaction(unprovenPaddingTx, provingState);
@@ -200,7 +202,7 @@ let ProvingOrchestrator = (() => {
200
202
  }
201
203
  /** Returns the block as built for a given index. */
202
204
  getBlock(index) {
203
- const block = this.provingState?.blocks[index].block;
205
+ const block = this.provingState?.blocks[index]?.block;
204
206
  if (!block) {
205
207
  throw new Error(`Block at index ${index} not available`);
206
208
  }
@@ -208,7 +210,7 @@ let ProvingOrchestrator = (() => {
208
210
  }
209
211
  padEpoch() {
210
212
  const provingState = this.provingState;
211
- const lastBlock = provingState.currentBlock?.block;
213
+ const lastBlock = maxBy(provingState.blocks.filter(b => !!b), b => b.blockNumber)?.block;
212
214
  if (!lastBlock) {
213
215
  return Promise.reject(new Error(`Epoch needs at least one completed block in order to be padded`));
214
216
  }
@@ -247,26 +249,36 @@ let ProvingOrchestrator = (() => {
247
249
  async buildBlock(provingState, expectedHeader) {
248
250
  // Collect all new nullifiers, commitments, and contracts from all txs in this block to build body
249
251
  const txs = provingState.allTxs.map(a => a.processedTx);
252
+ // Get db for this block
253
+ const db = this.dbs.get(provingState.blockNumber);
250
254
  // Given we've applied every change from this block, now assemble the block header
251
255
  // and update the archive tree, so we're ready to start processing the next block
252
- const { header, body } = await buildHeaderAndBodyFromTxs(txs, provingState.globalVariables, provingState.newL1ToL2Messages, this.db);
256
+ const { header, body } = await buildHeaderAndBodyFromTxs(txs, provingState.globalVariables, provingState.newL1ToL2Messages, db);
253
257
  if (expectedHeader && !header.equals(expectedHeader)) {
254
258
  logger.error(`Block header mismatch: header=${header} expectedHeader=${expectedHeader}`);
255
259
  throw new Error('Block header mismatch');
256
260
  }
257
261
  logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${header.hash().toString()}`);
258
- await this.db.updateArchive(header);
262
+ await db.updateArchive(header);
259
263
  // Assemble the L2 block
260
- const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
264
+ const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
261
265
  const l2Block = new L2Block(newArchive, header, body);
262
266
  if (!l2Block.body.getTxsEffectsHash().equals(header.contentCommitment.txsEffectsHash)) {
263
267
  throw new Error(`Txs effects hash mismatch, ${l2Block.body
264
268
  .getTxsEffectsHash()
265
269
  .toString('hex')} == ${header.contentCommitment.txsEffectsHash.toString('hex')} `);
266
270
  }
271
+ await this.verifyBuiltBlockAgainstSyncedState(l2Block, newArchive);
267
272
  logger.verbose(`Orchestrator finalised block ${l2Block.number}`);
268
273
  provingState.block = l2Block;
269
274
  }
275
+ // Flagged as protected to disable in certain unit tests
276
+ async verifyBuiltBlockAgainstSyncedState(l2Block, newArchive) {
277
+ const syncedArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.dbProvider.getSnapshot(l2Block.number));
278
+ if (!syncedArchive.equals(newArchive)) {
279
+ throw new Error(`Archive tree mismatch for block ${l2Block.number}: world state synced to ${inspect(syncedArchive)} but built ${inspect(newArchive)}`);
280
+ }
281
+ }
270
282
  // Enqueues the proving of the required padding transactions
271
283
  // If the fully proven padding transaction is not available, this will first be proven
272
284
  enqueuePaddingTxs(provingState, txInputs, paddingTx) {
@@ -364,11 +376,6 @@ let ProvingOrchestrator = (() => {
364
376
  }
365
377
  enqueueFirstProofs(hints, treeSnapshots, tx, provingState) {
366
378
  const txProvingState = new TxProvingState(tx, hints, treeSnapshots);
367
- const rejectReason = txProvingState.verifyStateOrReject();
368
- if (rejectReason) {
369
- provingState.reject(rejectReason);
370
- return;
371
- }
372
379
  const txIndex = provingState.addNewTx(txProvingState);
373
380
  this.enqueueTube(provingState, txIndex);
374
381
  if (txProvingState.requireAvmProof) {
@@ -434,14 +441,15 @@ let ProvingOrchestrator = (() => {
434
441
  logger.debug('Not preparing base rollup inputs, state invalid');
435
442
  return;
436
443
  }
444
+ const db = this.dbs.get(provingState.blockNumber);
437
445
  // We build the base rollup inputs using a mock proof and verification key.
438
446
  // These will be overwritten later once we have proven the tube circuit and any public kernels
439
- const [ms, hints] = await elapsed(buildBaseRollupHints(tx, provingState.globalVariables, this.db));
447
+ const [ms, hints] = await elapsed(buildBaseRollupHints(tx, provingState.globalVariables, db));
440
448
  if (!tx.isEmpty) {
441
449
  this.metrics.recordBaseRollupInputs(ms);
442
450
  }
443
451
  const promises = [MerkleTreeId.NOTE_HASH_TREE, MerkleTreeId.NULLIFIER_TREE, MerkleTreeId.PUBLIC_DATA_TREE].map(async (id) => {
444
- return { key: id, value: await getTreeSnapshot(id, this.db) };
452
+ return { key: id, value: await getTreeSnapshot(id, db) };
445
453
  });
446
454
  const treeSnapshots = new Map((await Promise.all(promises)).map(obj => [obj.key, obj.value]));
447
455
  if (!provingState?.verifyState()) {
@@ -638,6 +646,17 @@ let ProvingOrchestrator = (() => {
638
646
  logger.debug('Block root rollup already started');
639
647
  return;
640
648
  }
649
+ const blockNumber = provingState.blockNumber;
650
+ // TODO(palla/prover): This closes the fork only on the happy path. If this epoch orchestrator
651
+ // is aborted and never reaches this point, it will leak the fork. We need to add a global cleanup,
652
+ // but have to make sure it only runs once all operations are completed, otherwise some function here
653
+ // will attempt to access the fork after it was closed.
654
+ logger.debug(`Cleaning up world state fork for ${blockNumber}`);
655
+ void this.dbs
656
+ .get(blockNumber)
657
+ ?.close()
658
+ .then(() => this.dbs.delete(blockNumber))
659
+ .catch(err => logger.error(`Error closing db for block ${blockNumber}`, err));
641
660
  this.enqueueBlockRootRollup(provingState);
642
661
  }
643
662
  checkAndEnqueueRootRollup(provingState) {
@@ -759,17 +778,9 @@ let ProvingOrchestrator = (() => {
759
778
  _addNewTx_decorators = [trackSpan('ProvingOrchestrator.addNewTx', tx => ({
760
779
  [Attributes.TX_HASH]: tx.hash.toString(),
761
780
  }))];
762
- _setBlockCompleted_decorators = [trackSpan('ProvingOrchestrator.setBlockCompleted', function () {
763
- const block = this.provingState?.currentBlock;
764
- if (!block) {
765
- return {};
766
- }
767
- return {
768
- [Attributes.BLOCK_NUMBER]: block.globalVariables.blockNumber.toNumber(),
769
- [Attributes.BLOCK_SIZE]: block.totalNumTxs,
770
- [Attributes.BLOCK_TXS_COUNT]: block.transactionsReceived,
771
- };
772
- })];
781
+ _setBlockCompleted_decorators = [trackSpan('ProvingOrchestrator.setBlockCompleted', (blockNumber) => ({
782
+ [Attributes.BLOCK_NUMBER]: blockNumber,
783
+ }))];
773
784
  _padEpoch_decorators = [trackSpan('ProvingOrchestrator.padEpoch', function () {
774
785
  if (!this.provingState) {
775
786
  return {};
@@ -792,4 +803,4 @@ let ProvingOrchestrator = (() => {
792
803
  _a;
793
804
  })();
794
805
  export { ProvingOrchestrator };
795
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxPQUFPLEVBQ1AsWUFBWSxFQUdaLG9CQUFvQixHQUNyQixNQUFNLHNCQUFzQixDQUFDO0FBTzlCLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIscUNBQXFDLEVBRXJDLGdCQUFnQixFQUdoQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLEVBQUUsRUFHRiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBRXhDLG1DQUFtQyxFQUNuQywrQkFBK0IsRUFDL0IsMkJBQTJCLEVBRzNCLGVBQWUsRUFDZixnQkFBZ0IsRUFFaEIsbUJBQW1CLEVBQ25CLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFxQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztB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
806
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxPQUFPLEVBQ1AsWUFBWSxFQUdaLG9CQUFvQixHQUNyQixNQUFNLHNCQUFzQixDQUFDO0FBUTlCLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIscUNBQXFDLEVBR3JDLGdCQUFnQixFQUdoQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLEVBQUUsRUFHRiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBRXhDLG1DQUFtQyxFQUNuQywrQkFBK0IsRUFDL0IsMkJBQTJCLEVBRzNCLGVBQWUsRUFDZixnQkFBZ0IsRUFFaEIsbUJBQW1CLEVBQ25CLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBcUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJB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
@@ -20,7 +20,6 @@ export declare class TxProvingState {
20
20
  getPublicBaseInputs(): PublicBaseRollupInputs;
21
21
  assignTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>): void;
22
22
  assignAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>): void;
23
- verifyStateOrReject(): string | undefined;
24
23
  private getTubeVkData;
25
24
  private getAvmVkData;
26
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tx-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/tx-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAE7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EAGpB,uBAAuB,EAGvB,sBAAsB,EAEtB,KAAK,iBAAiB,EAEtB,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAG5B;;;;GAIG;AACH,qBAAa,cAAc;aAKP,WAAW,EAAE,WAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe;aAChB,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAN1E,OAAO,CAAC,IAAI,CAAC,CAAoD;IACjE,OAAO,CAAC,GAAG,CAAC,CAA6D;gBAGvD,WAAW,EAAE,WAAW,EACvB,eAAe,EAAE,eAAe,EACjC,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAG1E,IAAI,eAAe,YAElB;IAEM,KAAK;IAIL,aAAa;IAIb,YAAY;IAIZ,oBAAoB;IAiBpB,mBAAmB;IA8BnB,eAAe,CAAC,cAAc,EAAE,uBAAuB,CAAC,OAAO,iBAAiB,CAAC;IAIjF,cAAc,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,0BAA0B,CAAC;IAIxF,mBAAmB,IAAI,MAAM,GAAG,SAAS;IA+ChD,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;CAKrB"}
1
+ {"version":3,"file":"tx-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/tx-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EAEpB,uBAAuB,EAGvB,sBAAsB,EAEtB,KAAK,iBAAiB,EAEtB,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAG5B;;;;GAIG;AACH,qBAAa,cAAc;aAKP,WAAW,EAAE,WAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe;aAChB,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAN1E,OAAO,CAAC,IAAI,CAAC,CAAoD;IACjE,OAAO,CAAC,GAAG,CAAC,CAA6D;gBAGvD,WAAW,EAAE,WAAW,EACvB,eAAe,EAAE,eAAe,EACjC,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAG1E,IAAI,eAAe,YAElB;IAEM,KAAK;IAIL,aAAa;IAIb,YAAY;IAIZ,oBAAoB;IAiBpB,mBAAmB;IA8BnB,eAAe,CAAC,cAAc,EAAE,uBAAuB,CAAC,OAAO,iBAAiB,CAAC;IAIjF,cAAc,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,0BAA0B,CAAC;IAI/F,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;CAKrB"}
@@ -1,5 +1,4 @@
1
- import { EncryptedNoteTxL2Logs, EncryptedTxL2Logs, UnencryptedTxL2Logs, } from '@aztec/circuit-types';
2
- import { AVM_VK_INDEX, AvmProofData, Fr, PrivateBaseRollupHints, PrivateBaseRollupInputs, PrivateTubeData, PublicBaseRollupHints, PublicBaseRollupInputs, PublicTubeData, TUBE_VK_INDEX, TubeInputs, VkWitnessData, } from '@aztec/circuits.js';
1
+ import { AVM_VK_INDEX, AvmProofData, PrivateBaseRollupHints, PrivateBaseRollupInputs, PrivateTubeData, PublicBaseRollupHints, PublicBaseRollupInputs, PublicTubeData, TUBE_VK_INDEX, TubeInputs, VkWitnessData, } from '@aztec/circuits.js';
3
2
  import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types';
4
3
  /**
5
4
  * Helper class to manage the proving cycle of a transaction
@@ -61,37 +60,6 @@ export class TxProvingState {
61
60
  assignAvmProof(avmProofAndVk) {
62
61
  this.avm = avmProofAndVk;
63
62
  }
64
- verifyStateOrReject() {
65
- const txEffect = this.processedTx.txEffect;
66
- const fromPrivate = this.processedTx.data;
67
- const noteEncryptedLogsHashes = [
68
- fromPrivate.forRollup?.end.noteEncryptedLogsHashes || [],
69
- fromPrivate.forPublic?.nonRevertibleAccumulatedData.noteEncryptedLogsHashes || [],
70
- fromPrivate.forPublic?.revertibleAccumulatedData.noteEncryptedLogsHashes || [],
71
- ].flat();
72
- const txNoteEncryptedLogsHash = EncryptedNoteTxL2Logs.hashNoteLogs(noteEncryptedLogsHashes.filter(log => !log.isEmpty()).map(log => log.value.toBuffer()));
73
- if (!txNoteEncryptedLogsHash.equals(txEffect.noteEncryptedLogs.hash())) {
74
- return `Note encrypted logs hash mismatch: ${Fr.fromBuffer(txNoteEncryptedLogsHash)} === ${Fr.fromBuffer(txEffect.noteEncryptedLogs.hash())}`;
75
- }
76
- const encryptedLogsHashes = [
77
- fromPrivate.forRollup?.end.encryptedLogsHashes || [],
78
- fromPrivate.forPublic?.nonRevertibleAccumulatedData.encryptedLogsHashes || [],
79
- fromPrivate.forPublic?.revertibleAccumulatedData.encryptedLogsHashes || [],
80
- ].flat();
81
- const txEncryptedLogsHash = EncryptedTxL2Logs.hashSiloedLogs(encryptedLogsHashes.filter(log => !log.isEmpty()).map(log => log.getSiloedHash()));
82
- if (!txEncryptedLogsHash.equals(txEffect.encryptedLogs.hash())) {
83
- // @todo This rejection messages is never seen. Never making it out to the logs
84
- return `Encrypted logs hash mismatch: ${Fr.fromBuffer(txEncryptedLogsHash)} === ${Fr.fromBuffer(txEffect.encryptedLogs.hash())}`;
85
- }
86
- const avmOutput = this.processedTx.avmProvingRequest?.inputs.output;
87
- const unencryptedLogsHashes = avmOutput
88
- ? avmOutput.accumulatedData.unencryptedLogsHashes
89
- : fromPrivate.forRollup.end.unencryptedLogsHashes;
90
- const txUnencryptedLogsHash = UnencryptedTxL2Logs.hashSiloedLogs(unencryptedLogsHashes.filter(log => !log.isEmpty()).map(log => log.getSiloedHash()));
91
- if (!txUnencryptedLogsHash.equals(txEffect.unencryptedLogs.hash())) {
92
- return `Unencrypted logs hash mismatch: ${Fr.fromBuffer(txUnencryptedLogsHash)} === ${Fr.fromBuffer(txEffect.unencryptedLogs.hash())}`;
93
- }
94
- }
95
63
  getTubeVkData() {
96
64
  let vkIndex = TUBE_VK_INDEX;
97
65
  try {
@@ -109,4 +77,4 @@ export class TxProvingState {
109
77
  return new VkWitnessData(this.avm.verificationKey, AVM_VK_INDEX, vkPath);
110
78
  }
111
79
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvdHgtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUlqQixtQkFBbUIsR0FDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsWUFBWSxFQUVaLFlBQVksRUFFWixFQUFFLEVBQ0Ysc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixjQUFjLEVBRWQsYUFBYSxFQUNiLFVBQVUsRUFDVixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbkY7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBSXpCLFlBQ2tCLFdBQXdCLEVBQ3ZCLGVBQWdDLEVBQ2pDLGFBQXdEO1FBRnhELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkM7SUFDdkUsQ0FBQztJQUVKLElBQUksZUFBZTtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLO1FBQ1YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sWUFBWTtRQUNq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
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvdHgtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsWUFBWSxFQUVaLFlBQVksRUFFWixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFFZCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGFBQWEsR0FDZCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVuRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFJekIsWUFDa0IsV0FBd0IsRUFDdkIsZUFBZ0MsRUFDakMsYUFBd0Q7UUFGeEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUEyQztJQUN2RSxDQUFDO0lBRUosSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7SUFDOUMsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBa0IsQ0FBQyxNQUFNLENBQUM7SUFDcEQsQ0FBQztJQUVNLG9CQUFvQjtRQUN6QixJQUFJ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
@@ -0,0 +1,6 @@
1
+ import { type ForkMerkleTreeOperations, type ProvingJobBroker } from '@aztec/circuit-types';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ import { type ProverClientConfig } from '../config.js';
4
+ import { ProverClient } from './prover-client.js';
5
+ export declare function createProverClient(config: ProverClientConfig, worldState: ForkMerkleTreeOperations, broker: ProvingJobBroker, telemetry?: TelemetryClient): Promise<ProverClient>;
6
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/prover-client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,eAA2C,yBAGvD"}
@@ -0,0 +1,6 @@
1
+ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
2
+ import { ProverClient } from './prover-client.js';
3
+ export function createProverClient(config, worldState, broker, telemetry = new NoopTelemetryClient()) {
4
+ return ProverClient.new(config, worldState, broker, telemetry);
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXItY2xpZW50L2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsTUFBMEIsRUFDMUIsVUFBb0MsRUFDcEMsTUFBd0IsRUFDeEIsWUFBNkIsSUFBSSxtQkFBbUIsRUFBRTtJQUV0RCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakUsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export * from './factory.js';
2
+ export * from './prover-client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prover-client/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}