@aztec/prover-client 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.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 (136) hide show
  1. package/dest/bin/get-proof-inputs.d.ts +2 -0
  2. package/dest/bin/get-proof-inputs.d.ts.map +1 -0
  3. package/dest/bin/get-proof-inputs.js +16 -18
  4. package/dest/block_builder/index.d.ts +6 -0
  5. package/dest/block_builder/index.d.ts.map +1 -0
  6. package/dest/block_builder/index.js +1 -0
  7. package/dest/block_builder/light.d.ts +31 -0
  8. package/dest/block_builder/light.d.ts.map +1 -0
  9. package/dest/block_builder/light.js +13 -23
  10. package/dest/config.d.ts +17 -0
  11. package/dest/config.d.ts.map +1 -0
  12. package/dest/config.js +11 -9
  13. package/dest/index.d.ts +4 -0
  14. package/dest/index.d.ts.map +1 -0
  15. package/dest/index.js +1 -0
  16. package/dest/mocks/fixtures.d.ts +19 -0
  17. package/dest/mocks/fixtures.d.ts.map +1 -0
  18. package/dest/mocks/fixtures.js +26 -28
  19. package/dest/mocks/test_context.d.ts +49 -0
  20. package/dest/mocks/test_context.d.ts.map +1 -0
  21. package/dest/mocks/test_context.js +46 -72
  22. package/dest/orchestrator/block-building-helpers.d.ts +50 -0
  23. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
  24. package/dest/orchestrator/block-building-helpers.js +81 -99
  25. package/dest/orchestrator/block-proving-state.d.ts +71 -0
  26. package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
  27. package/dest/orchestrator/block-proving-state.js +74 -99
  28. package/dest/orchestrator/epoch-proving-state.d.ts +56 -0
  29. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
  30. package/dest/orchestrator/epoch-proving-state.js +41 -57
  31. package/dest/orchestrator/index.d.ts +2 -0
  32. package/dest/orchestrator/index.d.ts.map +1 -0
  33. package/dest/orchestrator/index.js +1 -0
  34. package/dest/orchestrator/orchestrator.d.ts +108 -0
  35. package/dest/orchestrator/orchestrator.d.ts.map +1 -0
  36. package/dest/orchestrator/orchestrator.js +654 -650
  37. package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
  38. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
  39. package/dest/orchestrator/orchestrator_metrics.js +3 -4
  40. package/dest/orchestrator/tx-proving-state.d.ts +31 -0
  41. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
  42. package/dest/orchestrator/tx-proving-state.js +52 -53
  43. package/dest/prover-client/factory.d.ts +6 -0
  44. package/dest/prover-client/factory.d.ts.map +1 -0
  45. package/dest/prover-client/factory.js +1 -0
  46. package/dest/prover-client/index.d.ts +3 -0
  47. package/dest/prover-client/index.d.ts.map +1 -0
  48. package/dest/prover-client/index.js +1 -0
  49. package/dest/prover-client/prover-client.d.ts +42 -0
  50. package/dest/prover-client/prover-client.d.ts.map +1 -0
  51. package/dest/prover-client/prover-client.js +25 -30
  52. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  53. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  54. package/dest/prover-client/server-epoch-prover.js +4 -4
  55. package/dest/proving_broker/broker_prover_facade.d.ts +39 -0
  56. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
  57. package/dest/proving_broker/broker_prover_facade.js +59 -70
  58. package/dest/proving_broker/config.d.ts +61 -0
  59. package/dest/proving_broker/config.d.ts.map +1 -0
  60. package/dest/proving_broker/config.js +37 -22
  61. package/dest/proving_broker/factory.d.ts +5 -0
  62. package/dest/proving_broker/factory.d.ts.map +1 -0
  63. package/dest/proving_broker/factory.js +2 -1
  64. package/dest/proving_broker/fixtures.d.ts +5 -0
  65. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  66. package/dest/proving_broker/fixtures.js +1 -0
  67. package/dest/proving_broker/index.d.ts +10 -0
  68. package/dest/proving_broker/index.d.ts.map +1 -0
  69. package/dest/proving_broker/index.js +1 -0
  70. package/dest/proving_broker/proof_store/factory.d.ts +6 -0
  71. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  72. package/dest/proving_broker/proof_store/factory.js +12 -9
  73. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
  74. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
  75. package/dest/proving_broker/proof_store/gcs_proof_store.js +7 -11
  76. package/dest/proving_broker/proof_store/index.d.ts +4 -0
  77. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  78. package/dest/proving_broker/proof_store/index.js +1 -0
  79. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
  80. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  81. package/dest/proving_broker/proof_store/inline_proof_store.js +7 -11
  82. package/dest/proving_broker/proof_store/proof_store.d.ts +35 -0
  83. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  84. package/dest/proving_broker/proof_store/proof_store.js +2 -3
  85. package/dest/proving_broker/proving_agent.d.ts +45 -0
  86. package/dest/proving_broker/proving_agent.d.ts.map +1 -0
  87. package/dest/proving_broker/proving_agent.js +124 -120
  88. package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
  89. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
  90. package/dest/proving_broker/proving_agent_instrumentation.js +3 -3
  91. package/dest/proving_broker/proving_broker.d.ts +72 -0
  92. package/dest/proving_broker/proving_broker.d.ts.map +1 -0
  93. package/dest/proving_broker/proving_broker.js +449 -491
  94. package/dest/proving_broker/proving_broker_database/memory.d.ts +16 -0
  95. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
  96. package/dest/proving_broker/proving_broker_database/memory.js +13 -19
  97. package/dest/proving_broker/proving_broker_database/persisted.d.ts +21 -0
  98. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
  99. package/dest/proving_broker/proving_broker_database/persisted.js +21 -41
  100. package/dest/proving_broker/proving_broker_database.d.ts +39 -0
  101. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
  102. package/dest/proving_broker/proving_broker_database.js +2 -3
  103. package/dest/proving_broker/proving_broker_instrumentation.d.ts +25 -0
  104. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
  105. package/dest/proving_broker/proving_broker_instrumentation.js +21 -28
  106. package/dest/proving_broker/proving_job_controller.d.ts +31 -0
  107. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
  108. package/dest/proving_broker/proving_job_controller.js +62 -81
  109. package/dest/proving_broker/rpc.d.ts +26 -0
  110. package/dest/proving_broker/rpc.d.ts.map +1 -0
  111. package/dest/proving_broker/rpc.js +36 -26
  112. package/dest/test/mock_prover.d.ts +35 -0
  113. package/dest/test/mock_prover.d.ts.map +1 -0
  114. package/dest/test/mock_prover.js +13 -11
  115. package/package.json +12 -13
  116. package/src/index.ts +1 -1
  117. package/src/mocks/test_context.ts +23 -22
  118. package/src/orchestrator/block-building-helpers.ts +1 -38
  119. package/src/orchestrator/block-proving-state.ts +15 -15
  120. package/src/orchestrator/epoch-proving-state.ts +7 -10
  121. package/src/orchestrator/orchestrator.ts +36 -39
  122. package/src/orchestrator/tx-proving-state.ts +13 -13
  123. package/src/proving_broker/rpc.ts +24 -4
  124. package/src/test/mock_prover.ts +7 -1
  125. package/dest/prover-agent/index.js +0 -3
  126. package/dest/prover-agent/memory-proving-queue.js +0 -249
  127. package/dest/prover-agent/prover-agent.js +0 -201
  128. package/dest/prover-agent/proving-error.js +0 -8
  129. package/dest/prover-agent/queue_metrics.js +0 -24
  130. package/dest/prover-agent/rpc.js +0 -20
  131. package/src/prover-agent/index.ts +0 -3
  132. package/src/prover-agent/memory-proving-queue.ts +0 -416
  133. package/src/prover-agent/prover-agent.ts +0 -248
  134. package/src/prover-agent/proving-error.ts +0 -9
  135. package/src/prover-agent/queue_metrics.ts +0 -29
  136. package/src/prover-agent/rpc.ts +0 -22
@@ -16,7 +16,6 @@ import {
16
16
  type GlobalVariables,
17
17
  MAX_NOTE_HASHES_PER_TX,
18
18
  MAX_NULLIFIERS_PER_TX,
19
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
20
19
  MembershipWitness,
21
20
  MerkleTreeCalculator,
22
21
  NOTE_HASH_SUBTREE_HEIGHT,
@@ -42,7 +41,6 @@ import {
42
41
  PrivateBaseRollupHints,
43
42
  PrivateBaseStateDiffHints,
44
43
  PublicBaseRollupHints,
45
- PublicBaseStateDiffHints,
46
44
  } from '@aztec/circuits.js/rollup';
47
45
  import { makeTuple } from '@aztec/foundation/array';
48
46
  import { padArrayEnd } from '@aztec/foundation/collection';
@@ -139,39 +137,6 @@ export const buildBaseRollupHints = runInSpan(
139
137
  await startSpongeBlob.absorb(tx.txEffect.toBlobFields());
140
138
 
141
139
  if (tx.avmProvingRequest) {
142
- // Build public base rollup hints
143
- const stateDiffHints = PublicBaseStateDiffHints.from({
144
- nullifierPredecessorPreimages: makeTuple(MAX_NULLIFIERS_PER_TX, i =>
145
- i < nullifierWitnessLeaves.length
146
- ? (nullifierWitnessLeaves[i].leafPreimage as NullifierLeafPreimage)
147
- : NullifierLeafPreimage.empty(),
148
- ),
149
- nullifierPredecessorMembershipWitnesses: makeTuple(MAX_NULLIFIERS_PER_TX, i =>
150
- i < nullifierPredecessorMembershipWitnessesWithoutPadding.length
151
- ? nullifierPredecessorMembershipWitnessesWithoutPadding[i]
152
- : makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT),
153
- ),
154
- sortedNullifiers: makeTuple(MAX_NULLIFIERS_PER_TX, i => Fr.fromBuffer(sortednullifiers[i])),
155
- sortedNullifierIndexes: makeTuple(MAX_NULLIFIERS_PER_TX, i => sortedNewLeavesIndexes[i]),
156
- noteHashSubtreeSiblingPath,
157
- nullifierSubtreeSiblingPath,
158
- lowPublicDataWritesPreimages: padArrayEnd(
159
- txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages,
160
- PublicDataTreeLeafPreimage.empty(),
161
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
162
- ),
163
- lowPublicDataWritesMembershipWitnesses: padArrayEnd(
164
- txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses,
165
- MembershipWitness.empty(PUBLIC_DATA_TREE_HEIGHT),
166
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
167
- ),
168
- publicDataTreeSiblingPaths: padArrayEnd(
169
- txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths,
170
- makeTuple(PUBLIC_DATA_TREE_HEIGHT, () => Fr.ZERO),
171
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
172
- ),
173
- });
174
-
175
140
  const blockHash = await tx.constants.historicalHeader.hash();
176
141
  const archiveRootMembershipWitness = await getMembershipWitnessFor(
177
142
  blockHash,
@@ -181,9 +146,7 @@ export const buildBaseRollupHints = runInSpan(
181
146
  );
182
147
 
183
148
  return PublicBaseRollupHints.from({
184
- start,
185
149
  startSpongeBlob: inputSpongeBlob,
186
- stateDiffHints,
187
150
  archiveRootMembershipWitness,
188
151
  constants,
189
152
  });
@@ -441,7 +404,7 @@ export const getConstantRollupData = runInSpan(
441
404
  'getConstantRollupData',
442
405
  async (_span, globalVariables: GlobalVariables, db: MerkleTreeReadOperations): Promise<ConstantRollupData> => {
443
406
  return ConstantRollupData.from({
444
- vkTreeRoot: await getVKTreeRoot(),
407
+ vkTreeRoot: getVKTreeRoot(),
445
408
  protocolContractTreeRoot,
446
409
  lastArchive: await getTreeSnapshot(MerkleTreeId.ARCHIVE, db),
447
410
  globalVariables,
@@ -164,13 +164,13 @@ export class BlockProvingState {
164
164
  return this.baseOrMergeProvingOutputs.getParentLocation(location);
165
165
  }
166
166
 
167
- public async getMergeRollupInputs(mergeLocation: TreeNodeLocation) {
167
+ public getMergeRollupInputs(mergeLocation: TreeNodeLocation) {
168
168
  const [left, right] = this.baseOrMergeProvingOutputs.getChildren(mergeLocation);
169
169
  if (!left || !right) {
170
170
  throw new Error('At lease one child is not ready.');
171
171
  }
172
172
 
173
- return new MergeRollupInputs([await this.#getPreviousRollupData(left), await this.#getPreviousRollupData(right)]);
173
+ return new MergeRollupInputs([this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)]);
174
174
  }
175
175
 
176
176
  public async getBlockRootRollupTypeAndInputs(proverId: Fr) {
@@ -184,13 +184,13 @@ export class BlockProvingState {
184
184
  throw new Error('At lease one child is not ready for the block root.');
185
185
  }
186
186
 
187
- const data = await this.#getBlockRootRollupData(proverId);
187
+ const data = this.#getBlockRootRollupData(proverId);
188
188
 
189
189
  if (this.totalNumTxs === 0) {
190
190
  const constants = ConstantRollupData.from({
191
191
  lastArchive: this.lastArchiveSnapshot,
192
192
  globalVariables: this.globalVariables,
193
- vkTreeRoot: await getVKTreeRoot(),
193
+ vkTreeRoot: getVKTreeRoot(),
194
194
  protocolContractTreeRoot,
195
195
  });
196
196
 
@@ -234,7 +234,7 @@ export class BlockProvingState {
234
234
  const newArchive = this.blockRootProvingOutput!.inputs.newArchive;
235
235
 
236
236
  const data = BlockRootRollupData.from({
237
- l1ToL2Roots: await this.#getRootParityData(this.rootParityProvingOutput!),
237
+ l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput!),
238
238
  l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
239
239
  newArchiveSiblingPath: this.newArchiveSiblingPath,
240
240
  previousBlockHeader: newBlockHeader,
@@ -244,7 +244,7 @@ export class BlockProvingState {
244
244
  const constants = ConstantRollupData.from({
245
245
  lastArchive: newArchive,
246
246
  globalVariables: this.globalVariables,
247
- vkTreeRoot: await getVKTreeRoot(),
247
+ vkTreeRoot: getVKTreeRoot(),
248
248
  protocolContractTreeRoot,
249
249
  });
250
250
 
@@ -255,12 +255,12 @@ export class BlockProvingState {
255
255
  });
256
256
  }
257
257
 
258
- public async getRootParityInputs() {
258
+ public getRootParityInputs() {
259
259
  if (!this.baseParityProvingOutputs.every(p => !!p)) {
260
260
  throw new Error('At lease one base parity is not ready.');
261
261
  }
262
262
 
263
- const children = await Promise.all(this.baseParityProvingOutputs.map(p => this.#getRootParityData(p!)));
263
+ const children = this.baseParityProvingOutputs.map(p => this.#getRootParityData(p!));
264
264
  return new RootParityInputs(
265
265
  children as Tuple<RootParityInput<typeof RECURSIVE_PROOF_LENGTH>, typeof NUM_BASE_PARITY_PER_ROOT_PARITY>,
266
266
  );
@@ -326,9 +326,9 @@ export class BlockProvingState {
326
326
  this.parentEpoch.reject(reason);
327
327
  }
328
328
 
329
- async #getBlockRootRollupData(proverId: Fr) {
329
+ #getBlockRootRollupData(proverId: Fr) {
330
330
  return BlockRootRollupData.from({
331
- l1ToL2Roots: await this.#getRootParityData(this.rootParityProvingOutput!),
331
+ l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput!),
332
332
  l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
333
333
  newArchiveSiblingPath: this.newArchiveSiblingPath,
334
334
  previousBlockHeader: this.previousBlockHeader,
@@ -358,25 +358,25 @@ export class BlockProvingState {
358
358
  : this.baseOrMergeProvingOutputs.getChildren(rootLocation);
359
359
  }
360
360
 
361
- async #getPreviousRollupData({
361
+ #getPreviousRollupData({
362
362
  inputs,
363
363
  proof,
364
364
  verificationKey,
365
365
  }: PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>) {
366
- const leafIndex = await getVKIndex(verificationKey.keyAsFields);
366
+ const leafIndex = getVKIndex(verificationKey.keyAsFields);
367
367
  return new PreviousRollupData(
368
368
  inputs,
369
369
  proof,
370
370
  verificationKey.keyAsFields,
371
- new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), await getVKSiblingPath(leafIndex)),
371
+ new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)),
372
372
  );
373
373
  }
374
374
 
375
- async #getRootParityData({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<ParityPublicInputs>) {
375
+ #getRootParityData({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<ParityPublicInputs>) {
376
376
  return new RootParityInput(
377
377
  proof,
378
378
  verificationKey.keyAsFields,
379
- await getVKSiblingPath(await getVKIndex(verificationKey)),
379
+ getVKSiblingPath(getVKIndex(verificationKey)),
380
380
  inputs,
381
381
  );
382
382
  }
@@ -150,26 +150,23 @@ export class EpochProvingState {
150
150
  return this.blockRootOrMergeProvingOutputs.getParentLocation(location);
151
151
  }
152
152
 
153
- public async getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation) {
153
+ public getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation) {
154
154
  const [left, right] = this.blockRootOrMergeProvingOutputs.getChildren(mergeLocation);
155
155
  if (!left || !right) {
156
156
  throw new Error('At lease one child is not ready.');
157
157
  }
158
158
 
159
- return new BlockMergeRollupInputs([
160
- await this.#getPreviousRollupData(left),
161
- await this.#getPreviousRollupData(right),
162
- ]);
159
+ return new BlockMergeRollupInputs([this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)]);
163
160
  }
164
161
 
165
- public async getRootRollupInputs(proverId: Fr) {
162
+ public getRootRollupInputs(proverId: Fr) {
166
163
  const [left, right] = this.#getChildProofsForRoot();
167
164
  if (!left || !right) {
168
165
  throw new Error('At lease one child is not ready.');
169
166
  }
170
167
 
171
168
  return RootRollupInputs.from({
172
- previousRollupData: [await this.#getPreviousRollupData(left), await this.#getPreviousRollupData(right)],
169
+ previousRollupData: [this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)],
173
170
  proverId,
174
171
  });
175
172
  }
@@ -241,7 +238,7 @@ export class EpochProvingState {
241
238
  : this.blockRootOrMergeProvingOutputs.getChildren(rootLocation);
242
239
  }
243
240
 
244
- async #getPreviousRollupData({
241
+ #getPreviousRollupData({
245
242
  inputs,
246
243
  proof,
247
244
  verificationKey,
@@ -249,12 +246,12 @@ export class EpochProvingState {
249
246
  BlockRootOrBlockMergePublicInputs,
250
247
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
251
248
  >) {
252
- const leafIndex = await getVKIndex(verificationKey.keyAsFields);
249
+ const leafIndex = getVKIndex(verificationKey.keyAsFields);
253
250
  return new PreviousRollupBlockData(
254
251
  inputs,
255
252
  proof,
256
253
  verificationKey.keyAsFields,
257
- new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), await getVKSiblingPath(leafIndex)),
254
+ new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)),
258
255
  );
259
256
  }
260
257
  }
@@ -36,7 +36,7 @@ import {
36
36
  SingleTxBlockRootRollupInputs,
37
37
  TubeInputs,
38
38
  } from '@aztec/circuits.js/rollup';
39
- import { padArrayEnd, timesParallel } from '@aztec/foundation/collection';
39
+ import { padArrayEnd, times } from '@aztec/foundation/collection';
40
40
  import { AbortError } from '@aztec/foundation/error';
41
41
  import { createLogger } from '@aztec/foundation/log';
42
42
  import { promiseWithResolvers } from '@aztec/foundation/promise';
@@ -247,7 +247,7 @@ export class ProvingOrchestrator implements EpochProver {
247
247
  const tubeInputs = new TubeInputs(tx.clientIvcProof);
248
248
  const tubeProof = promiseWithResolvers<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>();
249
249
  logger.debug(`Starting tube circuit for tx ${txHash}`);
250
- this.doEnqueueTube(txHash, tubeInputs, proof => Promise.resolve(tubeProof.resolve(proof)));
250
+ this.doEnqueueTube(txHash, tubeInputs, proof => tubeProof.resolve(proof));
251
251
  this.provingState?.cachedTubeProofs.set(txHash, tubeProof.promise);
252
252
  }
253
253
  }
@@ -458,8 +458,8 @@ export class ProvingOrchestrator implements EpochProver {
458
458
  NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
459
459
  'Too many L1 to L2 messages',
460
460
  );
461
- const baseParityInputs = await timesParallel(NUM_BASE_PARITY_PER_ROOT_PARITY, async i =>
462
- BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, await getVKTreeRoot()),
461
+ const baseParityInputs = times(NUM_BASE_PARITY_PER_ROOT_PARITY, i =>
462
+ BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, getVKTreeRoot()),
463
463
  );
464
464
 
465
465
  const l1ToL2MessageSubtreeSiblingPath = assertLength(
@@ -517,7 +517,7 @@ export class ProvingOrchestrator implements EpochProver {
517
517
 
518
518
  // Executes the base rollup circuit and stored the output as intermediate state for the parent merge/root circuit
519
519
  // Executes the next level of merge if all inputs are available
520
- private async enqueueBaseRollup(provingState: BlockProvingState, txIndex: number) {
520
+ private enqueueBaseRollup(provingState: BlockProvingState, txIndex: number) {
521
521
  if (!provingState.verifyState()) {
522
522
  logger.debug('Not running base rollup, state invalid');
523
523
  return;
@@ -525,7 +525,7 @@ export class ProvingOrchestrator implements EpochProver {
525
525
 
526
526
  const txProvingState = provingState.getTxProvingState(txIndex);
527
527
  const { processedTx } = txProvingState;
528
- const { rollupType, inputs } = await txProvingState.getBaseRollupTypeAndInputs();
528
+ const { rollupType, inputs } = txProvingState.getBaseRollupTypeAndInputs();
529
529
 
530
530
  logger.debug(`Enqueuing deferred proving base rollup for ${processedTx.hash.toString()}`);
531
531
 
@@ -573,11 +573,11 @@ export class ProvingOrchestrator implements EpochProver {
573
573
  const txProvingState = provingState.getTxProvingState(txIndex);
574
574
  const txHash = txProvingState.processedTx.hash.toString();
575
575
 
576
- const handleResult = async (result: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) => {
576
+ const handleResult = (result: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) => {
577
577
  logger.debug(`Got tube proof for tx index: ${txIndex}`, { txHash });
578
578
  txProvingState.setTubeProof(result);
579
579
  this.provingState?.cachedTubeProofs.delete(txHash);
580
- await this.checkAndEnqueueNextTxCircuit(provingState, txIndex);
580
+ this.checkAndEnqueueNextTxCircuit(provingState, txIndex);
581
581
  };
582
582
 
583
583
  if (this.provingState?.cachedTubeProofs.has(txHash)) {
@@ -593,7 +593,7 @@ export class ProvingOrchestrator implements EpochProver {
593
593
  private doEnqueueTube(
594
594
  txHash: string,
595
595
  inputs: TubeInputs,
596
- handler: (result: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) => Promise<void>,
596
+ handler: (result: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) => void,
597
597
  provingState: EpochProvingState | BlockProvingState = this.provingState!,
598
598
  ) {
599
599
  if (!provingState?.verifyState()) {
@@ -619,13 +619,13 @@ export class ProvingOrchestrator implements EpochProver {
619
619
 
620
620
  // Executes the merge rollup circuit and stored the output as intermediate state for the parent merge/block root circuit
621
621
  // Enqueues the next level of merge if all inputs are available
622
- private async enqueueMergeRollup(provingState: BlockProvingState, location: TreeNodeLocation) {
622
+ private enqueueMergeRollup(provingState: BlockProvingState, location: TreeNodeLocation) {
623
623
  if (!provingState.verifyState()) {
624
624
  logger.debug('Not running merge rollup. State no longer valid.');
625
625
  return;
626
626
  }
627
627
 
628
- const inputs = await provingState.getMergeRollupInputs(location);
628
+ const inputs = provingState.getMergeRollupInputs(location);
629
629
 
630
630
  this.deferredProving(
631
631
  provingState,
@@ -697,7 +697,7 @@ export class ProvingOrchestrator implements EpochProver {
697
697
  if (epochProvingState.totalNumBlocks === 1) {
698
698
  await this.enqueueEpochPadding(epochProvingState);
699
699
  } else {
700
- await this.checkAndEnqueueNextBlockMergeRollup(epochProvingState, leafLocation);
700
+ this.checkAndEnqueueNextBlockMergeRollup(epochProvingState, leafLocation);
701
701
  }
702
702
  },
703
703
  );
@@ -722,30 +722,30 @@ export class ProvingOrchestrator implements EpochProver {
722
722
  },
723
723
  signal => this.prover.getBaseParityProof(inputs, signal, provingState.epochNumber),
724
724
  ),
725
- async provingOutput => {
725
+ provingOutput => {
726
726
  provingState.setBaseParityProof(index, provingOutput);
727
- await this.checkAndEnqueueRootParityCircuit(provingState);
727
+ this.checkAndEnqueueRootParityCircuit(provingState);
728
728
  },
729
729
  );
730
730
  }
731
731
 
732
- private async checkAndEnqueueRootParityCircuit(provingState: BlockProvingState) {
732
+ private checkAndEnqueueRootParityCircuit(provingState: BlockProvingState) {
733
733
  if (!provingState.isReadyForRootParity()) {
734
734
  return;
735
735
  }
736
736
 
737
- await this.enqueueRootParityCircuit(provingState);
737
+ this.enqueueRootParityCircuit(provingState);
738
738
  }
739
739
 
740
740
  // Runs the root parity circuit ans stored the outputs
741
741
  // Enqueues the root rollup proof if all inputs are available
742
- private async enqueueRootParityCircuit(provingState: BlockProvingState) {
742
+ private enqueueRootParityCircuit(provingState: BlockProvingState) {
743
743
  if (!provingState.verifyState()) {
744
744
  logger.debug('Not running root parity. State no longer valid.');
745
745
  return;
746
746
  }
747
747
 
748
- const inputs = await provingState.getRootParityInputs();
748
+ const inputs = provingState.getRootParityInputs();
749
749
 
750
750
  this.deferredProving(
751
751
  provingState,
@@ -767,13 +767,13 @@ export class ProvingOrchestrator implements EpochProver {
767
767
 
768
768
  // Executes the block merge rollup circuit and stored the output as intermediate state for the parent merge/block root circuit
769
769
  // Enqueues the next level of merge if all inputs are available
770
- private async enqueueBlockMergeRollup(provingState: EpochProvingState, location: TreeNodeLocation) {
770
+ private enqueueBlockMergeRollup(provingState: EpochProvingState, location: TreeNodeLocation) {
771
771
  if (!provingState.verifyState()) {
772
772
  logger.debug('Not running block merge rollup. State no longer valid.');
773
773
  return;
774
774
  }
775
775
 
776
- const inputs = await provingState.getBlockMergeRollupInputs(location);
776
+ const inputs = provingState.getBlockMergeRollupInputs(location);
777
777
 
778
778
  this.deferredProving(
779
779
  provingState,
@@ -786,9 +786,9 @@ export class ProvingOrchestrator implements EpochProver {
786
786
  },
787
787
  signal => this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber),
788
788
  ),
789
- async result => {
789
+ result => {
790
790
  provingState.setBlockMergeRollupProof(location, result);
791
- await this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
791
+ this.checkAndEnqueueNextBlockMergeRollup(provingState, location);
792
792
  },
793
793
  );
794
794
  }
@@ -814,16 +814,16 @@ export class ProvingOrchestrator implements EpochProver {
814
814
  },
815
815
  signal => this.prover.getEmptyBlockRootRollupProof(inputs, signal, provingState.epochNumber),
816
816
  ),
817
- async result => {
817
+ result => {
818
818
  logger.debug('Completed proof for padding block root.');
819
819
  provingState.setPaddingBlockRootProof(result);
820
- await this.checkAndEnqueueRootRollup(provingState);
820
+ this.checkAndEnqueueRootRollup(provingState);
821
821
  },
822
822
  );
823
823
  }
824
824
 
825
825
  // Executes the root rollup circuit
826
- private async enqueueRootRollup(provingState: EpochProvingState) {
826
+ private enqueueRootRollup(provingState: EpochProvingState) {
827
827
  if (!provingState.verifyState()) {
828
828
  logger.debug('Not running root rollup, state no longer valid');
829
829
  return;
@@ -831,7 +831,7 @@ export class ProvingOrchestrator implements EpochProver {
831
831
 
832
832
  logger.debug(`Preparing root rollup`);
833
833
 
834
- const inputs = await provingState.getRootRollupInputs(this.proverId);
834
+ const inputs = provingState.getRootRollupInputs(this.proverId);
835
835
 
836
836
  this.deferredProving(
837
837
  provingState,
@@ -861,7 +861,7 @@ export class ProvingOrchestrator implements EpochProver {
861
861
  if (parentLocation.level === 0) {
862
862
  await this.checkAndEnqueueBlockRootRollup(provingState);
863
863
  } else {
864
- await this.enqueueMergeRollup(provingState, parentLocation);
864
+ this.enqueueMergeRollup(provingState, parentLocation);
865
865
  }
866
866
  }
867
867
 
@@ -890,29 +890,26 @@ export class ProvingOrchestrator implements EpochProver {
890
890
  await this.enqueueBlockRootRollup(provingState);
891
891
  }
892
892
 
893
- private async checkAndEnqueueNextBlockMergeRollup(
894
- provingState: EpochProvingState,
895
- currentLocation: TreeNodeLocation,
896
- ) {
893
+ private checkAndEnqueueNextBlockMergeRollup(provingState: EpochProvingState, currentLocation: TreeNodeLocation) {
897
894
  if (!provingState.isReadyForBlockMerge(currentLocation)) {
898
895
  return;
899
896
  }
900
897
 
901
898
  const parentLocation = provingState.getParentLocation(currentLocation);
902
899
  if (parentLocation.level === 0) {
903
- await this.checkAndEnqueueRootRollup(provingState);
900
+ this.checkAndEnqueueRootRollup(provingState);
904
901
  } else {
905
- await this.enqueueBlockMergeRollup(provingState, parentLocation);
902
+ this.enqueueBlockMergeRollup(provingState, parentLocation);
906
903
  }
907
904
  }
908
905
 
909
- private async checkAndEnqueueRootRollup(provingState: EpochProvingState) {
906
+ private checkAndEnqueueRootRollup(provingState: EpochProvingState) {
910
907
  if (!provingState.isReadyForRootRollup()) {
911
908
  logger.debug('Not ready for root rollup');
912
909
  return;
913
910
  }
914
911
 
915
- await this.enqueueRootRollup(provingState);
912
+ this.enqueueRootRollup(provingState);
916
913
  }
917
914
 
918
915
  /**
@@ -960,14 +957,14 @@ export class ProvingOrchestrator implements EpochProver {
960
957
  },
961
958
  );
962
959
 
963
- this.deferredProving(provingState, doAvmProving, async proofAndVk => {
960
+ this.deferredProving(provingState, doAvmProving, proofAndVk => {
964
961
  logger.debug(`Proven VM for tx index: ${txIndex}`);
965
962
  txProvingState.setAvmProof(proofAndVk);
966
- await this.checkAndEnqueueNextTxCircuit(provingState, txIndex);
963
+ this.checkAndEnqueueNextTxCircuit(provingState, txIndex);
967
964
  });
968
965
  }
969
966
 
970
- private async checkAndEnqueueNextTxCircuit(provingState: BlockProvingState, txIndex: number) {
967
+ private checkAndEnqueueNextTxCircuit(provingState: BlockProvingState, txIndex: number) {
971
968
  const txProvingState = provingState.getTxProvingState(txIndex);
972
969
  if (!txProvingState.ready()) {
973
970
  return;
@@ -976,6 +973,6 @@ export class ProvingOrchestrator implements EpochProver {
976
973
  // We must have completed all proving (tube proof and (if required) vm proof are generated), we now move to the base rollup.
977
974
  logger.debug(`Public functions completed for tx ${txIndex} enqueueing base rollup`);
978
975
 
979
- await this.enqueueBaseRollup(provingState, txIndex);
976
+ this.enqueueBaseRollup(provingState, txIndex);
980
977
  }
981
978
  }
@@ -52,16 +52,16 @@ export class TxProvingState {
52
52
  return this.processedTx.avmProvingRequest!.inputs;
53
53
  }
54
54
 
55
- public async getBaseRollupTypeAndInputs() {
55
+ public getBaseRollupTypeAndInputs() {
56
56
  if (this.requireAvmProof) {
57
57
  return {
58
58
  rollupType: 'public-base-rollup' satisfies CircuitName,
59
- inputs: await this.#getPublicBaseInputs(),
59
+ inputs: this.#getPublicBaseInputs(),
60
60
  };
61
61
  } else {
62
62
  return {
63
63
  rollupType: 'private-base-rollup' satisfies CircuitName,
64
- inputs: await this.#getPrivateBaseInputs(),
64
+ inputs: this.#getPrivateBaseInputs(),
65
65
  };
66
66
  }
67
67
  }
@@ -74,12 +74,12 @@ export class TxProvingState {
74
74
  this.avm = avmProofAndVk;
75
75
  }
76
76
 
77
- async #getPrivateBaseInputs() {
77
+ #getPrivateBaseInputs() {
78
78
  if (!this.tube) {
79
79
  throw new Error('Tx not ready for proving base rollup.');
80
80
  }
81
81
 
82
- const vkData = await this.#getTubeVkData();
82
+ const vkData = this.#getTubeVkData();
83
83
  const tubeData = new PrivateTubeData(
84
84
  this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
85
85
  this.tube.proof,
@@ -92,7 +92,7 @@ export class TxProvingState {
92
92
  return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
93
93
  }
94
94
 
95
- async #getPublicBaseInputs() {
95
+ #getPublicBaseInputs() {
96
96
  if (!this.processedTx.avmProvingRequest) {
97
97
  throw new Error('Should create private base rollup for a tx not requiring avm proof.');
98
98
  }
@@ -106,13 +106,13 @@ export class TxProvingState {
106
106
  const tubeData = new PublicTubeData(
107
107
  this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
108
108
  this.tube.proof,
109
- await this.#getTubeVkData(),
109
+ this.#getTubeVkData(),
110
110
  );
111
111
 
112
112
  const avmProofData = new AvmProofData(
113
113
  this.processedTx.avmProvingRequest.inputs.publicInputs,
114
114
  this.avm.proof,
115
- await this.#getAvmVkData(),
115
+ this.#getAvmVkData(),
116
116
  );
117
117
 
118
118
  if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
@@ -122,21 +122,21 @@ export class TxProvingState {
122
122
  return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
123
123
  }
124
124
 
125
- async #getTubeVkData() {
125
+ #getTubeVkData() {
126
126
  let vkIndex = TUBE_VK_INDEX;
127
127
  try {
128
- vkIndex = await getVKIndex(this.tube!.verificationKey);
128
+ vkIndex = getVKIndex(this.tube!.verificationKey);
129
129
  } catch (_ignored) {
130
130
  // 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
131
131
  }
132
- const vkPath = await getVKSiblingPath(vkIndex);
132
+ const vkPath = getVKSiblingPath(vkIndex);
133
133
 
134
134
  return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
135
135
  }
136
136
 
137
- async #getAvmVkData() {
137
+ #getAvmVkData() {
138
138
  const vkIndex = AVM_VK_INDEX;
139
- const vkPath = await getVKSiblingPath(vkIndex);
139
+ const vkPath = getVKSiblingPath(vkIndex);
140
140
  return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
141
141
  }
142
142
  }
@@ -1,4 +1,5 @@
1
1
  import {
2
+ type ComponentsVersions,
2
3
  type GetProvingJobResponse,
3
4
  ProofUri,
4
5
  ProvingJob,
@@ -8,6 +9,7 @@ import {
8
9
  type ProvingJobProducer,
9
10
  ProvingJobStatus,
10
11
  ProvingRequestType,
12
+ getVersioningResponseHandler,
11
13
  } from '@aztec/circuit-types';
12
14
  import { createSafeJsonRpcClient } from '@aztec/foundation/json-rpc/client';
13
15
  import { type SafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
@@ -57,20 +59,38 @@ export function createProvingBrokerServer(broker: ProvingJobBroker): SafeJsonRpc
57
59
  return createTracedJsonRpcServer(broker, ProvingJobBrokerSchema);
58
60
  }
59
61
 
60
- export function createProvingJobBrokerClient(url: string, fetch = makeTracedFetch([1, 2, 3], false)): ProvingJobBroker {
61
- return createSafeJsonRpcClient(url, ProvingJobBrokerSchema, false, 'proverBroker', fetch);
62
+ export function createProvingJobBrokerClient(
63
+ url: string,
64
+ versions: Partial<ComponentsVersions>,
65
+ fetch = makeTracedFetch([1, 2, 3], false),
66
+ ): ProvingJobBroker {
67
+ return createSafeJsonRpcClient(url, ProvingJobBrokerSchema, {
68
+ namespaceMethods: 'proverBroker',
69
+ fetch,
70
+ onResponse: getVersioningResponseHandler(versions),
71
+ });
62
72
  }
63
73
 
64
74
  export function createProvingJobProducerClient(
65
75
  url: string,
76
+ versions: Partial<ComponentsVersions>,
66
77
  fetch = makeTracedFetch([1, 2, 3], false),
67
78
  ): ProvingJobProducer {
68
- return createSafeJsonRpcClient(url, ProvingJobProducerSchema, false, 'provingJobProducer', fetch);
79
+ return createSafeJsonRpcClient(url, ProvingJobProducerSchema, {
80
+ namespaceMethods: 'provingJobProducer',
81
+ fetch,
82
+ onResponse: getVersioningResponseHandler(versions),
83
+ });
69
84
  }
70
85
 
71
86
  export function createProvingJobConsumerClient(
72
87
  url: string,
88
+ versions: Partial<ComponentsVersions>,
73
89
  fetch = makeTracedFetch([1, 2, 3], false),
74
90
  ): ProvingJobConsumer {
75
- return createSafeJsonRpcClient(url, ProvingJobConsumerSchema, false, 'provingJobConsumer', fetch);
91
+ return createSafeJsonRpcClient(url, ProvingJobConsumerSchema, {
92
+ namespaceMethods: 'provingJobConsumer',
93
+ fetch,
94
+ onResponse: getVersioningResponseHandler(versions),
95
+ });
76
96
  }
@@ -44,14 +44,16 @@ import {
44
44
  } from '@aztec/circuits.js/testing';
45
45
  import { times } from '@aztec/foundation/collection';
46
46
 
47
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
47
48
  import { InlineProofStore, type ProofStore } from '../proving_broker/proof_store/index.js';
48
49
  import { ProvingAgent } from '../proving_broker/proving_agent.js';
49
50
  import { ProvingBroker } from '../proving_broker/proving_broker.js';
50
51
  import { InMemoryBrokerDatabase } from '../proving_broker/proving_broker_database/memory.js';
51
52
 
52
53
  export class TestBroker implements ProvingJobProducer {
53
- private broker = new ProvingBroker(new InMemoryBrokerDatabase());
54
+ private broker: ProvingBroker;
54
55
  private agents: ProvingAgent[];
56
+ public facade: BrokerCircuitProverFacade;
55
57
 
56
58
  constructor(
57
59
  agentCount: number,
@@ -59,20 +61,24 @@ export class TestBroker implements ProvingJobProducer {
59
61
  private proofStore: ProofStore = new InlineProofStore(),
60
62
  agentPollInterval = 100,
61
63
  ) {
64
+ this.broker = new ProvingBroker(new InMemoryBrokerDatabase());
62
65
  this.agents = times(
63
66
  agentCount,
64
67
  () => new ProvingAgent(this.broker, proofStore, prover, undefined, agentPollInterval),
65
68
  );
69
+ this.facade = new BrokerCircuitProverFacade(this.broker, proofStore);
66
70
  }
67
71
 
68
72
  public async start() {
69
73
  await this.broker.start();
70
74
  this.agents.forEach(agent => agent.start());
75
+ this.facade.start();
71
76
  }
72
77
 
73
78
  public async stop() {
74
79
  await Promise.all(this.agents.map(agent => agent.stop()));
75
80
  await this.broker.stop();
81
+ await this.facade.stop();
76
82
  }
77
83
 
78
84
  public getProofStore(): ProofStore {