@aztec/prover-client 0.69.1 → 0.70.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 (94) hide show
  1. package/dest/block_builder/light.d.ts +0 -1
  2. package/dest/block_builder/light.d.ts.map +1 -1
  3. package/dest/block_builder/light.js +3 -13
  4. package/dest/config.d.ts +2 -1
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +3 -2
  7. package/dest/mocks/fixtures.d.ts +1 -1
  8. package/dest/mocks/fixtures.d.ts.map +1 -1
  9. package/dest/mocks/fixtures.js +2 -2
  10. package/dest/mocks/test_context.d.ts +1 -1
  11. package/dest/mocks/test_context.d.ts.map +1 -1
  12. package/dest/mocks/test_context.js +3 -3
  13. package/dest/orchestrator/block-building-helpers.d.ts +10 -25
  14. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  15. package/dest/orchestrator/block-building-helpers.js +34 -45
  16. package/dest/orchestrator/block-proving-state.d.ts +40 -44
  17. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  18. package/dest/orchestrator/block-proving-state.js +149 -85
  19. package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
  20. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/epoch-proving-state.js +92 -65
  22. package/dest/orchestrator/orchestrator.d.ts +16 -47
  23. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  24. package/dest/orchestrator/orchestrator.js +204 -341
  25. package/dest/orchestrator/tx-proving-state.d.ts +10 -6
  26. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  27. package/dest/orchestrator/tx-proving-state.js +57 -46
  28. package/dest/prover-agent/memory-proving-queue.d.ts +3 -3
  29. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  30. package/dest/prover-agent/memory-proving-queue.js +4 -4
  31. package/dest/prover-agent/prover-agent.js +4 -4
  32. package/dest/prover-client/prover-client.d.ts.map +1 -1
  33. package/dest/prover-client/prover-client.js +6 -3
  34. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  35. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  36. package/dest/prover-client/server-epoch-prover.js +40 -0
  37. package/dest/proving_broker/broker_prover_facade.d.ts +15 -4
  38. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  39. package/dest/proving_broker/broker_prover_facade.js +247 -44
  40. package/dest/proving_broker/config.d.ts +61 -0
  41. package/dest/proving_broker/config.d.ts.map +1 -0
  42. package/dest/proving_broker/config.js +83 -0
  43. package/dest/proving_broker/factory.d.ts +1 -1
  44. package/dest/proving_broker/factory.d.ts.map +1 -1
  45. package/dest/proving_broker/factory.js +2 -5
  46. package/dest/proving_broker/fixtures.d.ts +5 -0
  47. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  48. package/dest/proving_broker/fixtures.js +12 -0
  49. package/dest/proving_broker/index.d.ts +1 -0
  50. package/dest/proving_broker/index.d.ts.map +1 -1
  51. package/dest/proving_broker/index.js +2 -1
  52. package/dest/proving_broker/proving_broker.d.ts +16 -12
  53. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  54. package/dest/proving_broker/proving_broker.js +306 -273
  55. package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
  56. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  57. package/dest/proving_broker/proving_broker_database/memory.js +17 -4
  58. package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
  59. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  60. package/dest/proving_broker/proving_broker_database/persisted.js +105 -13
  61. package/dest/proving_broker/proving_broker_database.d.ts +7 -3
  62. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  63. package/dest/proving_broker/proving_job_controller.js +4 -4
  64. package/dest/proving_broker/rpc.d.ts.map +1 -1
  65. package/dest/proving_broker/rpc.js +4 -4
  66. package/dest/test/mock_prover.d.ts +7 -7
  67. package/dest/test/mock_prover.d.ts.map +1 -1
  68. package/dest/test/mock_prover.js +6 -6
  69. package/package.json +11 -11
  70. package/src/block_builder/light.ts +1 -20
  71. package/src/config.ts +4 -4
  72. package/src/mocks/fixtures.ts +1 -1
  73. package/src/mocks/test_context.ts +2 -2
  74. package/src/orchestrator/block-building-helpers.ts +45 -119
  75. package/src/orchestrator/block-proving-state.ts +251 -121
  76. package/src/orchestrator/epoch-proving-state.ts +159 -88
  77. package/src/orchestrator/orchestrator.ts +251 -527
  78. package/src/orchestrator/tx-proving-state.ts +30 -18
  79. package/src/prover-agent/memory-proving-queue.ts +11 -15
  80. package/src/prover-agent/prover-agent.ts +4 -4
  81. package/src/prover-client/prover-client.ts +5 -7
  82. package/src/prover-client/server-epoch-prover.ts +44 -0
  83. package/src/proving_broker/broker_prover_facade.ts +321 -64
  84. package/src/proving_broker/config.ts +93 -0
  85. package/src/proving_broker/factory.ts +2 -5
  86. package/src/proving_broker/fixtures.ts +14 -0
  87. package/src/proving_broker/index.ts +1 -0
  88. package/src/proving_broker/proving_broker.ts +114 -71
  89. package/src/proving_broker/proving_broker_database/memory.ts +24 -4
  90. package/src/proving_broker/proving_broker_database/persisted.ts +141 -19
  91. package/src/proving_broker/proving_broker_database.ts +8 -3
  92. package/src/proving_broker/proving_job_controller.ts +5 -5
  93. package/src/proving_broker/rpc.ts +2 -3
  94. package/src/test/mock_prover.ts +9 -14
package/src/config.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
2
+ import { type ProverConfig, proverConfigMappings } from '@aztec/circuit-types';
3
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
4
+
2
5
  import {
3
6
  type ProverAgentConfig,
4
7
  type ProverBrokerConfig,
5
- type ProverConfig,
6
8
  proverAgentConfigMappings,
7
9
  proverBrokerConfigMappings,
8
- proverConfigMappings,
9
- } from '@aztec/circuit-types';
10
- import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
10
+ } from './proving_broker/config.js';
11
11
 
12
12
  /**
13
13
  * The prover configuration.
@@ -13,7 +13,7 @@ import { padArrayEnd } from '@aztec/foundation/collection';
13
13
  import { randomBytes } from '@aztec/foundation/crypto';
14
14
  import { type Logger } from '@aztec/foundation/log';
15
15
  import { fileURLToPath } from '@aztec/foundation/url';
16
- import { NativeACVMSimulator, type SimulationProvider, WASMSimulatorWithBlobs } from '@aztec/simulator';
16
+ import { NativeACVMSimulator, type SimulationProvider, WASMSimulatorWithBlobs } from '@aztec/simulator/server';
17
17
 
18
18
  import { promises as fs } from 'fs';
19
19
  import path from 'path';
@@ -18,7 +18,7 @@ import { times } from '@aztec/foundation/collection';
18
18
  import { Fr } from '@aztec/foundation/fields';
19
19
  import { type Logger } from '@aztec/foundation/log';
20
20
  import { TestDateProvider } from '@aztec/foundation/timer';
21
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
21
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
22
22
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
23
23
  import {
24
24
  PublicProcessor,
@@ -26,7 +26,7 @@ import {
26
26
  type SimulationProvider,
27
27
  WASMSimulatorWithBlobs,
28
28
  type WorldStateDB,
29
- } from '@aztec/simulator';
29
+ } from '@aztec/simulator/server';
30
30
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
31
31
  import { type MerkleTreeAdminDatabase } from '@aztec/world-state';
32
32
  import { NativeWorldStateService } from '@aztec/world-state/native';
@@ -18,7 +18,6 @@ import {
18
18
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
19
19
  MembershipWitness,
20
20
  MerkleTreeCalculator,
21
- type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
22
21
  NOTE_HASH_SUBTREE_HEIGHT,
23
22
  NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH,
24
23
  NULLIFIER_SUBTREE_HEIGHT,
@@ -32,25 +31,17 @@ import {
32
31
  PublicDataHint,
33
32
  PublicDataTreeLeaf,
34
33
  PublicDataTreeLeafPreimage,
35
- type RecursiveProof,
36
34
  StateReference,
37
- VK_TREE_HEIGHT,
38
- type VerificationKeyAsFields,
39
35
  } from '@aztec/circuits.js';
40
36
  import { type SpongeBlob } from '@aztec/circuits.js/blobs';
41
37
  import {
42
38
  type BaseOrMergeRollupPublicInputs,
43
- BlockMergeRollupInputs,
44
39
  type BlockRootOrBlockMergePublicInputs,
45
40
  ConstantRollupData,
46
- MergeRollupInputs,
47
- PreviousRollupBlockData,
48
- PreviousRollupData,
49
41
  PrivateBaseRollupHints,
50
42
  PrivateBaseStateDiffHints,
51
43
  PublicBaseRollupHints,
52
44
  PublicBaseStateDiffHints,
53
- RootRollupInputs,
54
45
  } from '@aztec/circuits.js/rollup';
55
46
  import { makeTuple } from '@aztec/foundation/array';
56
47
  import { Blob } from '@aztec/foundation/blob';
@@ -59,9 +50,9 @@ import { sha256Trunc } from '@aztec/foundation/crypto';
59
50
  import { type Logger } from '@aztec/foundation/log';
60
51
  import { type Tuple, assertLength, serializeToBuffer, toFriendlyJSON } from '@aztec/foundation/serialize';
61
52
  import { computeUnbalancedMerkleRoot } from '@aztec/foundation/trees';
62
- import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
53
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
63
54
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
64
- import { computeFeePayerBalanceLeafSlot } from '@aztec/simulator';
55
+ import { computeFeePayerBalanceLeafSlot } from '@aztec/simulator/server';
65
56
  import { type MerkleTreeReadOperations } from '@aztec/world-state';
66
57
 
67
58
  import { inspect } from 'util';
@@ -274,66 +265,51 @@ async function getPublicDataHint(db: MerkleTreeWriteOperations, leafSlot: bigint
274
265
  return new PublicDataHint(new Fr(leafSlot), value, membershipWitness, leafPreimage);
275
266
  }
276
267
 
277
- export function createMergeRollupInputs(
278
- left: [
279
- BaseOrMergeRollupPublicInputs,
280
- RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
281
- VerificationKeyAsFields,
282
- ],
283
- right: [
284
- BaseOrMergeRollupPublicInputs,
285
- RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
286
- VerificationKeyAsFields,
287
- ],
288
- ) {
289
- const mergeInputs = new MergeRollupInputs([
290
- getPreviousRollupDataFromPublicInputs(left[0], left[1], left[2]),
291
- getPreviousRollupDataFromPublicInputs(right[0], right[1], right[2]),
292
- ]);
293
- return mergeInputs;
294
- }
295
-
296
- export function createBlockMergeRollupInputs(
297
- left: [
298
- BlockRootOrBlockMergePublicInputs,
299
- RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
300
- VerificationKeyAsFields,
301
- ],
302
- right: [
303
- BlockRootOrBlockMergePublicInputs,
304
- RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
305
- VerificationKeyAsFields,
306
- ],
307
- ) {
308
- const mergeInputs = new BlockMergeRollupInputs([
309
- getPreviousRollupBlockDataFromPublicInputs(left[0], left[1], left[2]),
310
- getPreviousRollupBlockDataFromPublicInputs(right[0], right[1], right[2]),
311
- ]);
312
- return mergeInputs;
268
+ export function buildBlobHints(txEffects: TxEffect[]) {
269
+ const blobFields = txEffects.flatMap(tx => tx.toBlobFields());
270
+ const blobs = Blob.getBlobs(blobFields);
271
+ const blobCommitments = blobs.map(b => b.commitmentToFields());
272
+ const blobsHash = new Fr(getBlobsHashFromBlobs(blobs));
273
+ return { blobFields, blobCommitments, blobs, blobsHash };
313
274
  }
314
275
 
315
276
  export function buildHeaderFromCircuitOutputs(
316
- previousMergeData: [BaseOrMergeRollupPublicInputs, BaseOrMergeRollupPublicInputs],
277
+ previousRollupData: BaseOrMergeRollupPublicInputs[],
317
278
  parityPublicInputs: ParityPublicInputs,
318
279
  rootRollupOutputs: BlockRootOrBlockMergePublicInputs,
319
- updatedL1ToL2TreeSnapshot: AppendOnlyTreeSnapshot,
280
+ endState: StateReference,
320
281
  logger?: Logger,
321
282
  ) {
283
+ if (previousRollupData.length > 2) {
284
+ throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
285
+ }
286
+
322
287
  const blobsHash = rootRollupOutputs.blobPublicInputs[0].getBlobsHash();
288
+ const numTxs = previousRollupData.reduce((sum, d) => sum + d.numTxs, 0);
289
+ const outHash =
290
+ previousRollupData.length === 0
291
+ ? Fr.ZERO.toBuffer()
292
+ : previousRollupData.length === 1
293
+ ? previousRollupData[0].outHash.toBuffer()
294
+ : sha256Trunc(
295
+ Buffer.concat([previousRollupData[0].outHash.toBuffer(), previousRollupData[1].outHash.toBuffer()]),
296
+ );
323
297
  const contentCommitment = new ContentCommitment(
324
- new Fr(previousMergeData[0].numTxs + previousMergeData[1].numTxs),
298
+ new Fr(numTxs),
325
299
  blobsHash,
326
300
  parityPublicInputs.shaRoot.toBuffer(),
327
- sha256Trunc(Buffer.concat([previousMergeData[0].outHash.toBuffer(), previousMergeData[1].outHash.toBuffer()])),
301
+ outHash,
328
302
  );
329
- const state = new StateReference(updatedL1ToL2TreeSnapshot, previousMergeData[1].end);
303
+
304
+ const accumulatedFees = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedFees), Fr.ZERO);
305
+ const accumulatedManaUsed = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedManaUsed), Fr.ZERO);
330
306
  const header = new BlockHeader(
331
307
  rootRollupOutputs.previousArchive,
332
308
  contentCommitment,
333
- state,
334
- previousMergeData[0].constants.globalVariables,
335
- previousMergeData[0].accumulatedFees.add(previousMergeData[1].accumulatedFees),
336
- previousMergeData[0].accumulatedManaUsed.add(previousMergeData[1].accumulatedManaUsed),
309
+ endState,
310
+ rootRollupOutputs.endGlobalVariables,
311
+ accumulatedFees,
312
+ accumulatedManaUsed,
337
313
  );
338
314
  if (!header.hash().equals(rootRollupOutputs.endBlockHash)) {
339
315
  logger?.error(
@@ -363,13 +339,19 @@ export async function buildHeaderAndBodyFromTxs(
363
339
 
364
340
  const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
365
341
 
366
- const nonEmptyTxEffects: TxEffect[] = txs.map(tx => tx.txEffect).filter(txEffect => !txEffect.isEmpty());
367
- const body = new Body(nonEmptyTxEffects);
342
+ const txEffects = txs.map(tx => tx.txEffect);
343
+ const body = new Body(txEffects);
368
344
 
369
- const outHash = computeUnbalancedMerkleRoot(
370
- body.txEffects.map(tx => tx.txOutHash()),
371
- TxEffect.empty().txOutHash(),
372
- );
345
+ const numTxs = body.txEffects.length;
346
+ const outHash =
347
+ numTxs === 0
348
+ ? Fr.ZERO.toBuffer()
349
+ : numTxs === 1
350
+ ? body.txEffects[0].txOutHash()
351
+ : computeUnbalancedMerkleRoot(
352
+ body.txEffects.map(tx => tx.txOutHash()),
353
+ TxEffect.empty().txOutHash(),
354
+ );
373
355
 
374
356
  l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
375
357
  const hasher = (left: Buffer, right: Buffer) => sha256Trunc(Buffer.concat([left, right]));
@@ -379,12 +361,7 @@ export async function buildHeaderAndBodyFromTxs(
379
361
  );
380
362
  const blobsHash = getBlobsHashFromBlobs(Blob.getBlobs(body.toBlobFields()));
381
363
 
382
- const contentCommitment = new ContentCommitment(
383
- new Fr(body.numberOfTxsIncludingPadded),
384
- blobsHash,
385
- parityShaRoot,
386
- outHash,
387
- );
364
+ const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityShaRoot, outHash);
388
365
 
389
366
  const fees = body.txEffects.reduce((acc, tx) => acc.add(tx.transactionFee), Fr.ZERO);
390
367
  const manaUsed = txs.reduce((acc, tx) => acc.add(new Fr(tx.gasUsed.totalGas.l2Gas)), Fr.ZERO);
@@ -434,57 +411,6 @@ export async function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: T
434
411
  return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
435
412
  }
436
413
 
437
- // Builds the inputs for the final root rollup circuit, without making any changes to trees
438
- export function getRootRollupInput(
439
- rollupOutputLeft: BlockRootOrBlockMergePublicInputs,
440
- rollupProofLeft: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
441
- verificationKeyLeft: VerificationKeyAsFields,
442
- rollupOutputRight: BlockRootOrBlockMergePublicInputs,
443
- rollupProofRight: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
444
- verificationKeyRight: VerificationKeyAsFields,
445
- proverId: Fr,
446
- ) {
447
- const previousRollupData: RootRollupInputs['previousRollupData'] = [
448
- getPreviousRollupBlockDataFromPublicInputs(rollupOutputLeft, rollupProofLeft, verificationKeyLeft),
449
- getPreviousRollupBlockDataFromPublicInputs(rollupOutputRight, rollupProofRight, verificationKeyRight),
450
- ];
451
-
452
- return RootRollupInputs.from({
453
- previousRollupData,
454
- proverId,
455
- });
456
- }
457
-
458
- export function getPreviousRollupDataFromPublicInputs(
459
- rollupOutput: BaseOrMergeRollupPublicInputs,
460
- rollupProof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
461
- vk: VerificationKeyAsFields,
462
- ) {
463
- const leafIndex = getVKIndex(vk);
464
-
465
- return new PreviousRollupData(
466
- rollupOutput,
467
- rollupProof,
468
- vk,
469
- new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)),
470
- );
471
- }
472
-
473
- export function getPreviousRollupBlockDataFromPublicInputs(
474
- rollupOutput: BlockRootOrBlockMergePublicInputs,
475
- rollupProof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
476
- vk: VerificationKeyAsFields,
477
- ) {
478
- const leafIndex = getVKIndex(vk);
479
-
480
- return new PreviousRollupBlockData(
481
- rollupOutput,
482
- rollupProof,
483
- vk,
484
- new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)),
485
- );
486
- }
487
-
488
414
  export async function getConstantRollupData(
489
415
  globalVariables: GlobalVariables,
490
416
  db: MerkleTreeReadOperations,