@aztec/prover-client 0.0.0-test.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 (154) hide show
  1. package/README.md +1 -0
  2. package/dest/bin/get-proof-inputs.d.ts +2 -0
  3. package/dest/bin/get-proof-inputs.d.ts.map +1 -0
  4. package/dest/bin/get-proof-inputs.js +51 -0
  5. package/dest/block_builder/index.d.ts +6 -0
  6. package/dest/block_builder/index.d.ts.map +1 -0
  7. package/dest/block_builder/index.js +1 -0
  8. package/dest/block_builder/light.d.ts +33 -0
  9. package/dest/block_builder/light.d.ts.map +1 -0
  10. package/dest/block_builder/light.js +82 -0
  11. package/dest/config.d.ts +17 -0
  12. package/dest/config.d.ts.map +1 -0
  13. package/dest/config.js +39 -0
  14. package/dest/index.d.ts +4 -0
  15. package/dest/index.d.ts.map +1 -0
  16. package/dest/index.js +2 -0
  17. package/dest/mocks/fixtures.d.ts +20 -0
  18. package/dest/mocks/fixtures.d.ts.map +1 -0
  19. package/dest/mocks/fixtures.js +77 -0
  20. package/dest/mocks/test_context.d.ts +55 -0
  21. package/dest/mocks/test_context.d.ts.map +1 -0
  22. package/dest/mocks/test_context.js +193 -0
  23. package/dest/orchestrator/block-building-helpers.d.ts +55 -0
  24. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
  25. package/dest/orchestrator/block-building-helpers.js +285 -0
  26. package/dest/orchestrator/block-proving-state.d.ts +76 -0
  27. package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
  28. package/dest/orchestrator/block-proving-state.js +269 -0
  29. package/dest/orchestrator/epoch-proving-state.d.ts +60 -0
  30. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
  31. package/dest/orchestrator/epoch-proving-state.js +163 -0
  32. package/dest/orchestrator/index.d.ts +2 -0
  33. package/dest/orchestrator/index.d.ts.map +1 -0
  34. package/dest/orchestrator/index.js +1 -0
  35. package/dest/orchestrator/orchestrator.d.ts +110 -0
  36. package/dest/orchestrator/orchestrator.d.ts.map +1 -0
  37. package/dest/orchestrator/orchestrator.js +690 -0
  38. package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
  39. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
  40. package/dest/orchestrator/orchestrator_metrics.js +17 -0
  41. package/dest/orchestrator/tx-proving-state.d.ts +34 -0
  42. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
  43. package/dest/orchestrator/tx-proving-state.js +94 -0
  44. package/dest/prover-client/factory.d.ts +6 -0
  45. package/dest/prover-client/factory.d.ts.map +1 -0
  46. package/dest/prover-client/factory.js +5 -0
  47. package/dest/prover-client/index.d.ts +3 -0
  48. package/dest/prover-client/index.d.ts.map +1 -0
  49. package/dest/prover-client/index.js +2 -0
  50. package/dest/prover-client/prover-client.d.ts +42 -0
  51. package/dest/prover-client/prover-client.d.ts.map +1 -0
  52. package/dest/prover-client/prover-client.js +110 -0
  53. package/dest/prover-client/server-epoch-prover.d.ts +28 -0
  54. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  55. package/dest/prover-client/server-epoch-prover.js +40 -0
  56. package/dest/proving_broker/broker_prover_facade.d.ts +46 -0
  57. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
  58. package/dest/proving_broker/broker_prover_facade.js +344 -0
  59. package/dest/proving_broker/config.d.ts +83 -0
  60. package/dest/proving_broker/config.d.ts.map +1 -0
  61. package/dest/proving_broker/config.js +104 -0
  62. package/dest/proving_broker/factory.d.ts +5 -0
  63. package/dest/proving_broker/factory.d.ts.map +1 -0
  64. package/dest/proving_broker/factory.js +9 -0
  65. package/dest/proving_broker/fixtures.d.ts +5 -0
  66. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  67. package/dest/proving_broker/fixtures.js +12 -0
  68. package/dest/proving_broker/index.d.ts +10 -0
  69. package/dest/proving_broker/index.d.ts.map +1 -0
  70. package/dest/proving_broker/index.js +9 -0
  71. package/dest/proving_broker/proof_store/factory.d.ts +6 -0
  72. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  73. package/dest/proving_broker/proof_store/factory.js +36 -0
  74. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +14 -0
  75. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
  76. package/dest/proving_broker/proof_store/gcs_proof_store.js +51 -0
  77. package/dest/proving_broker/proof_store/index.d.ts +4 -0
  78. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  79. package/dest/proving_broker/proof_store/index.js +3 -0
  80. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +15 -0
  81. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  82. package/dest/proving_broker/proof_store/inline_proof_store.js +41 -0
  83. package/dest/proving_broker/proof_store/proof_store.d.ts +36 -0
  84. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  85. package/dest/proving_broker/proof_store/proof_store.js +3 -0
  86. package/dest/proving_broker/proving_agent.d.ts +46 -0
  87. package/dest/proving_broker/proving_agent.d.ts.map +1 -0
  88. package/dest/proving_broker/proving_agent.js +134 -0
  89. package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
  90. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
  91. package/dest/proving_broker/proving_agent_instrumentation.js +16 -0
  92. package/dest/proving_broker/proving_broker.d.ts +64 -0
  93. package/dest/proving_broker/proving_broker.d.ts.map +1 -0
  94. package/dest/proving_broker/proving_broker.js +570 -0
  95. package/dest/proving_broker/proving_broker_database/memory.d.ts +16 -0
  96. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
  97. package/dest/proving_broker/proving_broker_database/memory.js +54 -0
  98. package/dest/proving_broker/proving_broker_database/persisted.d.ts +25 -0
  99. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
  100. package/dest/proving_broker/proving_broker_database/persisted.js +182 -0
  101. package/dest/proving_broker/proving_broker_database.d.ts +39 -0
  102. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
  103. package/dest/proving_broker/proving_broker_database.js +3 -0
  104. package/dest/proving_broker/proving_broker_instrumentation.d.ts +29 -0
  105. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
  106. package/dest/proving_broker/proving_broker_instrumentation.js +110 -0
  107. package/dest/proving_broker/proving_job_controller.d.ts +33 -0
  108. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
  109. package/dest/proving_broker/proving_job_controller.js +166 -0
  110. package/dest/proving_broker/rpc.d.ts +27 -0
  111. package/dest/proving_broker/rpc.d.ts.map +1 -0
  112. package/dest/proving_broker/rpc.js +66 -0
  113. package/dest/test/mock_prover.d.ts +35 -0
  114. package/dest/test/mock_prover.d.ts.map +1 -0
  115. package/dest/test/mock_prover.js +82 -0
  116. package/package.json +112 -0
  117. package/src/bin/get-proof-inputs.ts +59 -0
  118. package/src/block_builder/index.ts +6 -0
  119. package/src/block_builder/light.ts +101 -0
  120. package/src/config.ts +55 -0
  121. package/src/index.ts +4 -0
  122. package/src/mocks/fixtures.ts +117 -0
  123. package/src/mocks/test_context.ts +257 -0
  124. package/src/orchestrator/block-building-helpers.ts +553 -0
  125. package/src/orchestrator/block-proving-state.ts +379 -0
  126. package/src/orchestrator/epoch-proving-state.ts +252 -0
  127. package/src/orchestrator/index.ts +1 -0
  128. package/src/orchestrator/orchestrator.ts +971 -0
  129. package/src/orchestrator/orchestrator_metrics.ts +22 -0
  130. package/src/orchestrator/tx-proving-state.ts +139 -0
  131. package/src/prover-client/factory.ts +14 -0
  132. package/src/prover-client/index.ts +2 -0
  133. package/src/prover-client/prover-client.ts +162 -0
  134. package/src/prover-client/server-epoch-prover.ts +51 -0
  135. package/src/proving_broker/broker_prover_facade.ts +585 -0
  136. package/src/proving_broker/config.ts +138 -0
  137. package/src/proving_broker/factory.ts +18 -0
  138. package/src/proving_broker/fixtures.ts +15 -0
  139. package/src/proving_broker/index.ts +9 -0
  140. package/src/proving_broker/proof_store/factory.ts +42 -0
  141. package/src/proving_broker/proof_store/gcs_proof_store.ts +72 -0
  142. package/src/proving_broker/proof_store/index.ts +3 -0
  143. package/src/proving_broker/proof_store/inline_proof_store.ts +63 -0
  144. package/src/proving_broker/proof_store/proof_store.ts +54 -0
  145. package/src/proving_broker/proving_agent.ts +181 -0
  146. package/src/proving_broker/proving_agent_instrumentation.ts +21 -0
  147. package/src/proving_broker/proving_broker.ts +687 -0
  148. package/src/proving_broker/proving_broker_database/memory.ts +63 -0
  149. package/src/proving_broker/proving_broker_database/persisted.ts +218 -0
  150. package/src/proving_broker/proving_broker_database.ts +44 -0
  151. package/src/proving_broker/proving_broker_instrumentation.ts +145 -0
  152. package/src/proving_broker/proving_job_controller.ts +194 -0
  153. package/src/proving_broker/rpc.ts +95 -0
  154. package/src/test/mock_prover.ts +253 -0
@@ -0,0 +1,55 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import { Blob, type SpongeBlob } from '@aztec/blob-lib';
4
+ import { Fr } from '@aztec/foundation/fields';
5
+ import type { Logger } from '@aztec/foundation/log';
6
+ import { type Tuple } from '@aztec/foundation/serialize';
7
+ import { MembershipWitness } from '@aztec/foundation/trees';
8
+ import { PublicDataHint } from '@aztec/stdlib/avm';
9
+ import { Body } from '@aztec/stdlib/block';
10
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
11
+ import type { ParityPublicInputs } from '@aztec/stdlib/parity';
12
+ import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, ConstantRollupData, PrivateBaseRollupHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
13
+ import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
14
+ import { BlockHeader, type GlobalVariables, PartialStateReference, type ProcessedTx, StateReference, TxEffect } from '@aztec/stdlib/tx';
15
+ import type { MerkleTreeReadOperations } from '@aztec/world-state';
16
+ /**
17
+ * Type representing the names of the trees for the base rollup.
18
+ */
19
+ type BaseTreeNames = 'NoteHashTree' | 'ContractTree' | 'NullifierTree' | 'PublicDataTree';
20
+ /**
21
+ * Type representing the names of the trees.
22
+ */
23
+ export type TreeNames = BaseTreeNames | 'L1ToL2MessageTree' | 'Archive';
24
+ export declare const buildBaseRollupHints: (tx: ProcessedTx, globalVariables: GlobalVariables, db: MerkleTreeWriteOperations, startSpongeBlob: SpongeBlob) => Promise<PublicBaseRollupHints | PrivateBaseRollupHints>;
25
+ export declare function getPublicDataHint(db: MerkleTreeWriteOperations, leafSlot: bigint): Promise<PublicDataHint>;
26
+ export declare const buildBlobHints: (txEffects: TxEffect[]) => Promise<{
27
+ blobFields: Fr[];
28
+ blobCommitments: [Fr, Fr][];
29
+ blobs: Blob[];
30
+ blobsHash: Fr;
31
+ }>;
32
+ export declare const buildHeaderFromCircuitOutputs: (previousRollupData: BaseOrMergeRollupPublicInputs[], parityPublicInputs: ParityPublicInputs, rootRollupOutputs: BlockRootOrBlockMergePublicInputs, endState: StateReference, logger?: Logger | undefined) => Promise<BlockHeader>;
33
+ export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeReadOperations) => Promise<{
34
+ header: BlockHeader;
35
+ body: Body;
36
+ }>;
37
+ export declare function getBlobsHashFromBlobs(inputs: Blob[]): Buffer;
38
+ export declare function validateBlockRootOutput(blockRootOutput: BlockRootOrBlockMergePublicInputs, blockHeader: BlockHeader, db: MerkleTreeReadOperations): Promise<void>;
39
+ export declare const validateState: (state: StateReference, db: MerkleTreeReadOperations) => Promise<void>;
40
+ export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
41
+ readonly 1: 40;
42
+ readonly 4: 29;
43
+ readonly 3: 39;
44
+ readonly 0: 40;
45
+ readonly 2: 40;
46
+ }[TID]>>;
47
+ export declare const getConstantRollupData: (globalVariables: GlobalVariables, db: MerkleTreeReadOperations) => Promise<ConstantRollupData>;
48
+ export declare function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeReadOperations): Promise<AppendOnlyTreeSnapshot>;
49
+ export declare function makeEmptyMembershipWitness<N extends number>(height: N): MembershipWitness<N>;
50
+ export declare function getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number, db: MerkleTreeReadOperations): Promise<Fr[]>;
51
+ export declare function getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N, db: MerkleTreeReadOperations): Promise<MembershipWitness<N>>;
52
+ export declare function validatePartialState(partialState: PartialStateReference, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>): void;
53
+ export declare function validateTx(tx: ProcessedTx): void;
54
+ export {};
55
+ //# sourceMappingURL=block-building-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,285 @@
1
+ import { Blob } from '@aztec/blob-lib';
2
+ import { ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
3
+ import { makeTuple } from '@aztec/foundation/array';
4
+ import { padArrayEnd } from '@aztec/foundation/collection';
5
+ import { sha256Trunc } from '@aztec/foundation/crypto';
6
+ import { Fr } from '@aztec/foundation/fields';
7
+ import { assertLength, serializeToBuffer, toFriendlyJSON } from '@aztec/foundation/serialize';
8
+ import { MembershipWitness, MerkleTreeCalculator, computeUnbalancedMerkleRoot } from '@aztec/foundation/trees';
9
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
10
+ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
11
+ import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
12
+ import { PublicDataHint } from '@aztec/stdlib/avm';
13
+ import { Body } from '@aztec/stdlib/block';
14
+ import { ContractClassLog } from '@aztec/stdlib/logs';
15
+ import { ConstantRollupData, PrivateBaseRollupHints, PrivateBaseStateDiffHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
16
+ import { AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, getTreeHeight } from '@aztec/stdlib/trees';
17
+ import { BlockHeader, ContentCommitment, PartialStateReference, StateReference, TxEffect } from '@aztec/stdlib/tx';
18
+ import { Attributes, runInSpan } from '@aztec/telemetry-client';
19
+ import { inspect } from 'util';
20
+ // Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
21
+ export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables, db, startSpongeBlob)=>{
22
+ span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
23
+ // Get trees info before any changes hit
24
+ const constants = await getConstantRollupData(globalVariables, db);
25
+ const start = new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db));
26
+ // Get the subtree sibling paths for the circuit
27
+ const noteHashSubtreeSiblingPathArray = await getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT, db);
28
+ const noteHashSubtreeSiblingPath = makeTuple(NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, (i)=>i < noteHashSubtreeSiblingPathArray.length ? noteHashSubtreeSiblingPathArray[i] : Fr.ZERO);
29
+ // Update the note hash trees with the new items being inserted to get the new roots
30
+ // that will be used by the next iteration of the base rollup circuit, skipping the empty ones
31
+ const noteHashes = padArrayEnd(tx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX);
32
+ await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, noteHashes);
33
+ // Create data hint for reading fee payer initial balance in Fee Juice
34
+ const leafSlot = await computeFeePayerBalanceLeafSlot(tx.data.feePayer);
35
+ const feePayerFeeJuiceBalanceReadHint = await getPublicDataHint(db, leafSlot.toBigInt());
36
+ // The read witnesses for a given TX should be generated before the writes of the same TX are applied.
37
+ // All reads that refer to writes in the same tx are transient and can be simplified out.
38
+ const txPublicDataUpdateRequestInfo = await processPublicDataUpdateRequests(tx, db);
39
+ // Update the nullifier tree, capturing the low nullifier info for each individual operation
40
+ const { lowLeavesWitnessData: nullifierWitnessLeaves, newSubtreeSiblingPath: nullifiersSubtreeSiblingPath, sortedNewLeaves: sortednullifiers, sortedNewLeavesIndexes } = await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, padArrayEnd(tx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map((n)=>n.toBuffer()), NULLIFIER_SUBTREE_HEIGHT);
41
+ if (nullifierWitnessLeaves === undefined) {
42
+ throw new Error(`Could not craft nullifier batch insertion proofs`);
43
+ }
44
+ // Extract witness objects from returned data
45
+ const nullifierPredecessorMembershipWitnessesWithoutPadding = nullifierWitnessLeaves.map((l)=>MembershipWitness.fromBufferArray(l.index, assertLength(l.siblingPath.toBufferArray(), NULLIFIER_TREE_HEIGHT)));
46
+ const nullifierSubtreeSiblingPathArray = nullifiersSubtreeSiblingPath.toFields();
47
+ const nullifierSubtreeSiblingPath = makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, (i)=>i < nullifierSubtreeSiblingPathArray.length ? nullifierSubtreeSiblingPathArray[i] : Fr.ZERO);
48
+ // Append new data to startSpongeBlob
49
+ const inputSpongeBlob = startSpongeBlob.clone();
50
+ await startSpongeBlob.absorb(tx.txEffect.toBlobFields());
51
+ const contractClassLogsPreimages = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, (i)=>tx.txEffect.contractClassLogs[i]?.toUnsiloed() || ContractClassLog.empty());
52
+ if (tx.avmProvingRequest) {
53
+ const blockHash = await tx.constants.historicalHeader.hash();
54
+ const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
55
+ return PublicBaseRollupHints.from({
56
+ startSpongeBlob: inputSpongeBlob,
57
+ archiveRootMembershipWitness,
58
+ contractClassLogsPreimages,
59
+ constants
60
+ });
61
+ } else {
62
+ if (txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses.length > 1 || txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages.length > 1 || txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths.length > 1) {
63
+ throw new Error(`More than one public data write in a private only tx`);
64
+ }
65
+ const feeWriteLowLeafPreimage = txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages[0] || PublicDataTreeLeafPreimage.empty();
66
+ const feeWriteLowLeafMembershipWitness = txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses[0] || MembershipWitness.empty(PUBLIC_DATA_TREE_HEIGHT);
67
+ const feeWriteSiblingPath = txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths[0] || makeTuple(PUBLIC_DATA_TREE_HEIGHT, ()=>Fr.ZERO);
68
+ const stateDiffHints = PrivateBaseStateDiffHints.from({
69
+ nullifierPredecessorPreimages: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>i < nullifierWitnessLeaves.length ? nullifierWitnessLeaves[i].leafPreimage : NullifierLeafPreimage.empty()),
70
+ nullifierPredecessorMembershipWitnesses: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>i < nullifierPredecessorMembershipWitnessesWithoutPadding.length ? nullifierPredecessorMembershipWitnessesWithoutPadding[i] : makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT)),
71
+ sortedNullifiers: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>Fr.fromBuffer(sortednullifiers[i])),
72
+ sortedNullifierIndexes: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>sortedNewLeavesIndexes[i]),
73
+ noteHashSubtreeSiblingPath,
74
+ nullifierSubtreeSiblingPath,
75
+ feeWriteLowLeafPreimage,
76
+ feeWriteLowLeafMembershipWitness,
77
+ feeWriteSiblingPath
78
+ });
79
+ const blockHash = await tx.constants.historicalHeader.hash();
80
+ const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
81
+ return PrivateBaseRollupHints.from({
82
+ start,
83
+ startSpongeBlob: inputSpongeBlob,
84
+ stateDiffHints,
85
+ feePayerFeeJuiceBalanceReadHint,
86
+ archiveRootMembershipWitness,
87
+ contractClassLogsPreimages,
88
+ constants
89
+ });
90
+ }
91
+ });
92
+ export async function getPublicDataHint(db, leafSlot) {
93
+ const { index } = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot) ?? {};
94
+ if (index === undefined) {
95
+ throw new Error(`Cannot find the previous value index for public data ${leafSlot}.`);
96
+ }
97
+ const siblingPath = await db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, index);
98
+ const membershipWitness = new MembershipWitness(PUBLIC_DATA_TREE_HEIGHT, index, siblingPath.toTuple());
99
+ const leafPreimage = await db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, index);
100
+ if (!leafPreimage) {
101
+ throw new Error(`Cannot find the leaf preimage for public data tree at index ${index}.`);
102
+ }
103
+ const exists = leafPreimage.slot.toBigInt() === leafSlot;
104
+ const value = exists ? leafPreimage.value : Fr.ZERO;
105
+ return new PublicDataHint(new Fr(leafSlot), value, membershipWitness, leafPreimage);
106
+ }
107
+ export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints', async (_span, txEffects)=>{
108
+ const blobFields = txEffects.flatMap((tx)=>tx.toBlobFields());
109
+ const blobs = await Blob.getBlobs(blobFields);
110
+ const blobCommitments = blobs.map((b)=>b.commitmentToFields());
111
+ const blobsHash = new Fr(getBlobsHashFromBlobs(blobs));
112
+ return {
113
+ blobFields,
114
+ blobCommitments,
115
+ blobs,
116
+ blobsHash
117
+ };
118
+ });
119
+ export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', async (_span, previousRollupData, parityPublicInputs, rootRollupOutputs, endState, logger)=>{
120
+ if (previousRollupData.length > 2) {
121
+ throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
122
+ }
123
+ const blobsHash = rootRollupOutputs.blobPublicInputs[0].getBlobsHash();
124
+ const numTxs = previousRollupData.reduce((sum, d)=>sum + d.numTxs, 0);
125
+ const outHash = previousRollupData.length === 0 ? Fr.ZERO.toBuffer() : previousRollupData.length === 1 ? previousRollupData[0].outHash.toBuffer() : sha256Trunc(Buffer.concat([
126
+ previousRollupData[0].outHash.toBuffer(),
127
+ previousRollupData[1].outHash.toBuffer()
128
+ ]));
129
+ const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityPublicInputs.shaRoot.toBuffer(), outHash);
130
+ const accumulatedFees = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedFees), Fr.ZERO);
131
+ const accumulatedManaUsed = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedManaUsed), Fr.ZERO);
132
+ const header = new BlockHeader(rootRollupOutputs.previousArchive, contentCommitment, endState, rootRollupOutputs.endGlobalVariables, accumulatedFees, accumulatedManaUsed);
133
+ if (!(await header.hash()).equals(rootRollupOutputs.endBlockHash)) {
134
+ logger?.error(`Block header mismatch when building header from circuit outputs.` + `\n\nHeader: ${inspect(header)}` + `\n\nCircuit: ${toFriendlyJSON(rootRollupOutputs)}`);
135
+ throw new Error(`Block header mismatch when building from circuit outputs`);
136
+ }
137
+ return header;
138
+ });
139
+ export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables, l1ToL2Messages, db)=>{
140
+ span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber.toNumber());
141
+ const stateReference = new StateReference(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db)));
142
+ const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
143
+ const txEffects = txs.map((tx)=>tx.txEffect);
144
+ const body = new Body(txEffects);
145
+ const numTxs = body.txEffects.length;
146
+ const outHash = numTxs === 0 ? Fr.ZERO.toBuffer() : numTxs === 1 ? body.txEffects[0].txOutHash() : computeUnbalancedMerkleRoot(body.txEffects.map((tx)=>tx.txOutHash()), TxEffect.empty().txOutHash());
147
+ l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
148
+ const hasher = (left, right)=>Promise.resolve(sha256Trunc(Buffer.concat([
149
+ left,
150
+ right
151
+ ])));
152
+ const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
153
+ const parityCalculator = await MerkleTreeCalculator.create(parityHeight, Fr.ZERO.toBuffer(), hasher);
154
+ const parityShaRoot = await parityCalculator.computeTreeRoot(l1ToL2Messages.map((msg)=>msg.toBuffer()));
155
+ const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobs(body.toBlobFields()));
156
+ const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityShaRoot, outHash);
157
+ const fees = body.txEffects.reduce((acc, tx)=>acc.add(tx.transactionFee), Fr.ZERO);
158
+ const manaUsed = txs.reduce((acc, tx)=>acc.add(new Fr(tx.gasUsed.billedGas.l2Gas)), Fr.ZERO);
159
+ const header = new BlockHeader(previousArchive, contentCommitment, stateReference, globalVariables, fees, manaUsed);
160
+ return {
161
+ header,
162
+ body
163
+ };
164
+ });
165
+ export function getBlobsHashFromBlobs(inputs) {
166
+ const blobHashes = serializeToBuffer(inputs.map((b)=>b.getEthVersionedBlobHash()));
167
+ return sha256Trunc(serializeToBuffer(blobHashes));
168
+ }
169
+ // Validate that the roots of all local trees match the output of the root circuit simulation
170
+ export async function validateBlockRootOutput(blockRootOutput, blockHeader, db) {
171
+ await Promise.all([
172
+ validateState(blockHeader.state, db),
173
+ validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db), blockRootOutput.newArchive, 'Archive')
174
+ ]);
175
+ }
176
+ export const validateState = runInSpan('BlockBuilderHelpers', 'validateState', async (_span, state, db)=>{
177
+ const promises = [
178
+ MerkleTreeId.NOTE_HASH_TREE,
179
+ MerkleTreeId.NULLIFIER_TREE,
180
+ MerkleTreeId.PUBLIC_DATA_TREE
181
+ ].map(async (id)=>{
182
+ return {
183
+ key: id,
184
+ value: await getTreeSnapshot(id, db)
185
+ };
186
+ });
187
+ const snapshots = new Map((await Promise.all(promises)).map((obj)=>[
188
+ obj.key,
189
+ obj.value
190
+ ]));
191
+ validatePartialState(state.partial, snapshots);
192
+ validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), state.l1ToL2MessageTree, 'L1ToL2MessageTree');
193
+ });
194
+ export async function getRootTreeSiblingPath(treeId, db) {
195
+ const { size } = await db.getTreeInfo(treeId);
196
+ const path = await db.getSiblingPath(treeId, size);
197
+ return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
198
+ }
199
+ export const getConstantRollupData = runInSpan('BlockBuilderHelpers', 'getConstantRollupData', async (_span, globalVariables, db)=>{
200
+ return ConstantRollupData.from({
201
+ vkTreeRoot: getVKTreeRoot(),
202
+ protocolContractTreeRoot,
203
+ lastArchive: await getTreeSnapshot(MerkleTreeId.ARCHIVE, db),
204
+ globalVariables
205
+ });
206
+ });
207
+ export async function getTreeSnapshot(id, db) {
208
+ const treeInfo = await db.getTreeInfo(id);
209
+ return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
210
+ }
211
+ export function makeEmptyMembershipWitness(height) {
212
+ return new MembershipWitness(height, 0n, makeTuple(height, ()=>Fr.ZERO));
213
+ }
214
+ const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'processPublicDataUpdateRequests', async (span, tx, db)=>{
215
+ span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
216
+ const allPublicDataWrites = tx.txEffect.publicDataWrites.map(({ leafSlot, value })=>new PublicDataTreeLeaf(leafSlot, value));
217
+ const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, allPublicDataWrites.map((write)=>{
218
+ if (write.isEmpty()) {
219
+ throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
220
+ }
221
+ return write.toBuffer();
222
+ }));
223
+ const lowPublicDataWritesPreimages = lowLeavesWitnessData.map((lowLeafWitness)=>lowLeafWitness.leafPreimage);
224
+ const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map((lowLeafWitness)=>MembershipWitness.fromBufferArray(lowLeafWitness.index, assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT)));
225
+ const publicDataWritesSiblingPaths = insertionWitnessData.map((w)=>{
226
+ const insertionSiblingPath = w.siblingPath.toFields();
227
+ assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
228
+ return insertionSiblingPath;
229
+ });
230
+ return {
231
+ lowPublicDataWritesPreimages,
232
+ lowPublicDataWritesMembershipWitnesses,
233
+ publicDataWritesSiblingPaths
234
+ };
235
+ });
236
+ export async function getSubtreeSiblingPath(treeId, subtreeHeight, db) {
237
+ const nextAvailableLeafIndex = await db.getTreeInfo(treeId).then((t)=>t.size);
238
+ const fullSiblingPath = await db.getSiblingPath(treeId, nextAvailableLeafIndex);
239
+ // Drop the first subtreeHeight items since we only care about the path to the subtree root
240
+ return fullSiblingPath.getSubtreeSiblingPath(subtreeHeight).toFields();
241
+ }
242
+ // Scan a tree searching for a specific value and return a membership witness proof for it
243
+ export async function getMembershipWitnessFor(value, treeId, height, db) {
244
+ // If this is an empty tx, then just return zeroes
245
+ if (value.isZero()) {
246
+ return makeEmptyMembershipWitness(height);
247
+ }
248
+ const index = (await db.findLeafIndices(treeId, [
249
+ value.toBuffer()
250
+ ]))[0];
251
+ if (index === undefined) {
252
+ throw new Error(`Leaf with value ${value} not found in tree ${MerkleTreeId[treeId]}`);
253
+ }
254
+ const path = await db.getSiblingPath(treeId, index);
255
+ return new MembershipWitness(height, index, assertLength(path.toFields(), height));
256
+ }
257
+ export function validatePartialState(partialState, treeSnapshots) {
258
+ validateSimulatedTree(treeSnapshots.get(MerkleTreeId.NOTE_HASH_TREE), partialState.noteHashTree, 'NoteHashTree');
259
+ validateSimulatedTree(treeSnapshots.get(MerkleTreeId.NULLIFIER_TREE), partialState.nullifierTree, 'NullifierTree');
260
+ validateSimulatedTree(treeSnapshots.get(MerkleTreeId.PUBLIC_DATA_TREE), partialState.publicDataTree, 'PublicDataTree');
261
+ }
262
+ // Helper for comparing two trees snapshots
263
+ function validateSimulatedTree(localTree, simulatedTree, name, label) {
264
+ if (!simulatedTree.root.toBuffer().equals(localTree.root.toBuffer())) {
265
+ throw new Error(`${label ?? name} tree root mismatch (local ${localTree.root}, simulated ${simulatedTree.root})`);
266
+ }
267
+ if (simulatedTree.nextAvailableLeafIndex !== localTree.nextAvailableLeafIndex) {
268
+ throw new Error(`${label ?? name} tree next available leaf index mismatch (local ${localTree.nextAvailableLeafIndex}, simulated ${simulatedTree.nextAvailableLeafIndex})`);
269
+ }
270
+ }
271
+ export function validateTx(tx) {
272
+ const txHeader = tx.constants.historicalHeader;
273
+ if (txHeader.state.l1ToL2MessageTree.isZero()) {
274
+ throw new Error(`Empty L1 to L2 messages tree in tx: ${toFriendlyJSON(tx)}`);
275
+ }
276
+ if (txHeader.state.partial.noteHashTree.isZero()) {
277
+ throw new Error(`Empty note hash tree in tx: ${toFriendlyJSON(tx)}`);
278
+ }
279
+ if (txHeader.state.partial.nullifierTree.isZero()) {
280
+ throw new Error(`Empty nullifier tree in tx: ${toFriendlyJSON(tx)}`);
281
+ }
282
+ if (txHeader.state.partial.publicDataTree.isZero()) {
283
+ throw new Error(`Empty public data tree in tx: ${toFriendlyJSON(tx)}`);
284
+ }
285
+ }
@@ -0,0 +1,76 @@
1
+ import { SpongeBlob } from '@aztec/blob-lib';
2
+ import { type ARCHIVE_HEIGHT, type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import type { Logger } from '@aztec/foundation/log';
5
+ import type { Tuple } from '@aztec/foundation/serialize';
6
+ import { type TreeNodeLocation } from '@aztec/foundation/trees';
7
+ import type { L2Block } from '@aztec/stdlib/block';
8
+ import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
9
+ import { type ParityPublicInputs, RootParityInputs } from '@aztec/stdlib/parity';
10
+ import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, SingleTxBlockRootRollupInputs } from '@aztec/stdlib/rollup';
11
+ import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
12
+ import { type BlockHeader, type GlobalVariables } from '@aztec/stdlib/tx';
13
+ import type { EpochProvingState } from './epoch-proving-state.js';
14
+ import type { TxProvingState } from './tx-proving-state.js';
15
+ export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
16
+ /**
17
+ * The current state of the proving schedule for a given block. Managed by ProvingState.
18
+ * Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
19
+ */
20
+ export declare class BlockProvingState {
21
+ #private;
22
+ readonly index: number;
23
+ readonly globalVariables: GlobalVariables;
24
+ readonly newL1ToL2Messages: Fr[];
25
+ private readonly l1ToL2MessageSubtreeSiblingPath;
26
+ private readonly l1ToL2MessageTreeSnapshotAfterInsertion;
27
+ private readonly lastArchiveSnapshot;
28
+ private readonly newArchiveSiblingPath;
29
+ private readonly previousBlockHeader;
30
+ private readonly parentEpoch;
31
+ private baseOrMergeProvingOutputs;
32
+ private baseParityProvingOutputs;
33
+ private rootParityProvingOutput;
34
+ private blockRootProvingOutput;
35
+ blockRootRollupStarted: boolean;
36
+ block: L2Block | undefined;
37
+ spongeBlobState: SpongeBlob | undefined;
38
+ totalNumTxs: number;
39
+ private txs;
40
+ error: string | undefined;
41
+ constructor(index: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader, parentEpoch: EpochProvingState);
42
+ get blockNumber(): number;
43
+ startNewBlock(numTxs: number, numBlobFields: number): void;
44
+ addNewTx(tx: TxProvingState): number;
45
+ setBaseRollupProof(txIndex: number, provingOutput: PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
46
+ setMergeRollupProof(location: TreeNodeLocation, provingOutput: PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
47
+ setBaseParityProof(index: number, provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
48
+ setRootParityProof(provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
49
+ setBlockRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
50
+ get allTxs(): TxProvingState[];
51
+ /** Returns the block number as an epoch number. Used for prioritizing proof requests. */
52
+ get epochNumber(): number;
53
+ getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
54
+ getMergeRollupInputs(mergeLocation: TreeNodeLocation): MergeRollupInputs;
55
+ getBlockRootRollupTypeAndInputs(proverId: Fr): Promise<{
56
+ rollupType: string;
57
+ inputs: EmptyBlockRootRollupInputs;
58
+ } | {
59
+ rollupType: string;
60
+ inputs: SingleTxBlockRootRollupInputs;
61
+ } | {
62
+ rollupType: string;
63
+ inputs: BlockRootRollupInputs;
64
+ }>;
65
+ getPaddingBlockRootInputs(proverId: Fr): Promise<EmptyBlockRootRollupInputs>;
66
+ getRootParityInputs(): RootParityInputs;
67
+ getTxProvingState(txIndex: number): TxProvingState;
68
+ buildHeaderFromProvingOutputs(logger?: Logger): Promise<BlockHeader>;
69
+ isReadyForMergeRollup(location: TreeNodeLocation): boolean;
70
+ isReadyForBlockRootRollup(): boolean;
71
+ isReadyForRootParity(): boolean;
72
+ isComplete(): boolean;
73
+ verifyState(): boolean;
74
+ reject(reason: string): void;
75
+ }
76
+ //# sourceMappingURL=block-proving-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}