@aztec-labs/prover-client 6.0.0-nightly.20260829

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 (170) hide show
  1. package/README.md +1 -0
  2. package/dest/config.d.ts +17 -0
  3. package/dest/config.d.ts.map +1 -0
  4. package/dest/config.js +63 -0
  5. package/dest/index.d.ts +4 -0
  6. package/dest/index.d.ts.map +1 -0
  7. package/dest/index.js +2 -0
  8. package/dest/light/index.d.ts +2 -0
  9. package/dest/light/index.d.ts.map +1 -0
  10. package/dest/light/index.js +1 -0
  11. package/dest/light/lightweight_checkpoint_builder.d.ts +58 -0
  12. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  13. package/dest/light/lightweight_checkpoint_builder.js +243 -0
  14. package/dest/mocks/fixtures.d.ts +20 -0
  15. package/dest/mocks/fixtures.d.ts.map +1 -0
  16. package/dest/mocks/fixtures.js +96 -0
  17. package/dest/mocks/test_context.d.ts +93 -0
  18. package/dest/mocks/test_context.d.ts.map +1 -0
  19. package/dest/mocks/test_context.js +354 -0
  20. package/dest/orchestrator/block-building-helpers.d.ts +67 -0
  21. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
  22. package/dest/orchestrator/block-building-helpers.js +274 -0
  23. package/dest/orchestrator/block-proving-state.d.ts +107 -0
  24. package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
  25. package/dest/orchestrator/block-proving-state.js +339 -0
  26. package/dest/orchestrator/checkpoint-proving-state.d.ts +67 -0
  27. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
  28. package/dest/orchestrator/checkpoint-proving-state.js +175 -0
  29. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +169 -0
  30. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
  31. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +1047 -0
  32. package/dest/orchestrator/chonk-cache.d.ts +39 -0
  33. package/dest/orchestrator/chonk-cache.d.ts.map +1 -0
  34. package/dest/orchestrator/chonk-cache.js +80 -0
  35. package/dest/orchestrator/index.d.ts +4 -0
  36. package/dest/orchestrator/index.d.ts.map +1 -0
  37. package/dest/orchestrator/index.js +3 -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 +13 -0
  41. package/dest/orchestrator/proving-scheduler.d.ts +81 -0
  42. package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
  43. package/dest/orchestrator/proving-scheduler.js +120 -0
  44. package/dest/orchestrator/top-tree-orchestrator.d.ts +89 -0
  45. package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
  46. package/dest/orchestrator/top-tree-orchestrator.js +233 -0
  47. package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
  48. package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
  49. package/dest/orchestrator/top-tree-proving-state.js +185 -0
  50. package/dest/orchestrator/tx-proving-state.d.ts +37 -0
  51. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
  52. package/dest/orchestrator/tx-proving-state.js +77 -0
  53. package/dest/prover-client/factory.d.ts +6 -0
  54. package/dest/prover-client/factory.d.ts.map +1 -0
  55. package/dest/prover-client/factory.js +5 -0
  56. package/dest/prover-client/index.d.ts +3 -0
  57. package/dest/prover-client/index.d.ts.map +1 -0
  58. package/dest/prover-client/index.js +2 -0
  59. package/dest/prover-client/prover-client.d.ts +99 -0
  60. package/dest/prover-client/prover-client.d.ts.map +1 -0
  61. package/dest/prover-client/prover-client.js +163 -0
  62. package/dest/proving_broker/broker_prover_facade.d.ts +52 -0
  63. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
  64. package/dest/proving_broker/broker_prover_facade.js +360 -0
  65. package/dest/proving_broker/config.d.ts +40 -0
  66. package/dest/proving_broker/config.d.ts.map +1 -0
  67. package/dest/proving_broker/config.js +138 -0
  68. package/dest/proving_broker/factory.d.ts +5 -0
  69. package/dest/proving_broker/factory.d.ts.map +1 -0
  70. package/dest/proving_broker/factory.js +13 -0
  71. package/dest/proving_broker/fixtures.d.ts +6 -0
  72. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  73. package/dest/proving_broker/fixtures.js +13 -0
  74. package/dest/proving_broker/index.d.ts +11 -0
  75. package/dest/proving_broker/index.d.ts.map +1 -0
  76. package/dest/proving_broker/index.js +10 -0
  77. package/dest/proving_broker/proof_store/factory.d.ts +3 -0
  78. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  79. package/dest/proving_broker/proof_store/factory.js +13 -0
  80. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
  81. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
  82. package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
  83. package/dest/proving_broker/proof_store/index.d.ts +5 -0
  84. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  85. package/dest/proving_broker/proof_store/index.js +4 -0
  86. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +15 -0
  87. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  88. package/dest/proving_broker/proof_store/inline_proof_store.js +41 -0
  89. package/dest/proving_broker/proof_store/proof_store.d.ts +36 -0
  90. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  91. package/dest/proving_broker/proof_store/proof_store.js +3 -0
  92. package/dest/proving_broker/proving_agent.d.ts +42 -0
  93. package/dest/proving_broker/proving_agent.d.ts.map +1 -0
  94. package/dest/proving_broker/proving_agent.js +155 -0
  95. package/dest/proving_broker/proving_broker.d.ts +77 -0
  96. package/dest/proving_broker/proving_broker.d.ts.map +1 -0
  97. package/dest/proving_broker/proving_broker.js +780 -0
  98. package/dest/proving_broker/proving_broker_database/memory.d.ts +20 -0
  99. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
  100. package/dest/proving_broker/proving_broker_database/memory.js +67 -0
  101. package/dest/proving_broker/proving_broker_database/persisted.d.ts +40 -0
  102. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
  103. package/dest/proving_broker/proving_broker_database/persisted.js +623 -0
  104. package/dest/proving_broker/proving_broker_database.d.ts +66 -0
  105. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
  106. package/dest/proving_broker/proving_broker_database.js +3 -0
  107. package/dest/proving_broker/proving_broker_instrumentation.d.ts +31 -0
  108. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
  109. package/dest/proving_broker/proving_broker_instrumentation.js +97 -0
  110. package/dest/proving_broker/proving_job_controller.d.ts +34 -0
  111. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
  112. package/dest/proving_broker/proving_job_controller.js +184 -0
  113. package/dest/proving_broker/rpc.d.ts +38 -0
  114. package/dest/proving_broker/rpc.d.ts.map +1 -0
  115. package/dest/proving_broker/rpc.js +138 -0
  116. package/dest/test/epoch_settlement.d.ts +36 -0
  117. package/dest/test/epoch_settlement.d.ts.map +1 -0
  118. package/dest/test/epoch_settlement.js +52 -0
  119. package/dest/test/index.d.ts +2 -0
  120. package/dest/test/index.d.ts.map +1 -0
  121. package/dest/test/index.js +1 -0
  122. package/dest/test/mock_proof_store.d.ts +9 -0
  123. package/dest/test/mock_proof_store.d.ts.map +1 -0
  124. package/dest/test/mock_proof_store.js +10 -0
  125. package/dest/test/mock_prover.d.ts +38 -0
  126. package/dest/test/mock_prover.d.ts.map +1 -0
  127. package/dest/test/mock_prover.js +91 -0
  128. package/package.json +113 -0
  129. package/src/config.ts +87 -0
  130. package/src/index.ts +4 -0
  131. package/src/light/index.ts +1 -0
  132. package/src/light/lightweight_checkpoint_builder.ts +342 -0
  133. package/src/mocks/fixtures.ts +120 -0
  134. package/src/mocks/test_context.ts +477 -0
  135. package/src/orchestrator/block-building-helpers.ts +486 -0
  136. package/src/orchestrator/block-proving-state.ts +457 -0
  137. package/src/orchestrator/checkpoint-proving-state.ts +247 -0
  138. package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +1010 -0
  139. package/src/orchestrator/chonk-cache.ts +99 -0
  140. package/src/orchestrator/index.ts +12 -0
  141. package/src/orchestrator/orchestrator_metrics.ts +18 -0
  142. package/src/orchestrator/proving-scheduler.ts +160 -0
  143. package/src/orchestrator/top-tree-orchestrator.ts +394 -0
  144. package/src/orchestrator/top-tree-proving-state.ts +219 -0
  145. package/src/orchestrator/tx-proving-state.ts +121 -0
  146. package/src/prover-client/factory.ts +18 -0
  147. package/src/prover-client/index.ts +2 -0
  148. package/src/prover-client/prover-client.ts +286 -0
  149. package/src/proving_broker/broker_prover_facade.ts +626 -0
  150. package/src/proving_broker/config.ts +178 -0
  151. package/src/proving_broker/factory.ts +19 -0
  152. package/src/proving_broker/fixtures.ts +20 -0
  153. package/src/proving_broker/index.ts +10 -0
  154. package/src/proving_broker/proof_store/factory.ts +20 -0
  155. package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
  156. package/src/proving_broker/proof_store/index.ts +4 -0
  157. package/src/proving_broker/proof_store/inline_proof_store.ts +63 -0
  158. package/src/proving_broker/proof_store/proof_store.ts +54 -0
  159. package/src/proving_broker/proving_agent.ts +210 -0
  160. package/src/proving_broker/proving_broker.ts +888 -0
  161. package/src/proving_broker/proving_broker_database/memory.ts +78 -0
  162. package/src/proving_broker/proving_broker_database/persisted.ts +296 -0
  163. package/src/proving_broker/proving_broker_database.ts +75 -0
  164. package/src/proving_broker/proving_broker_instrumentation.ts +133 -0
  165. package/src/proving_broker/proving_job_controller.ts +199 -0
  166. package/src/proving_broker/rpc.ts +131 -0
  167. package/src/test/epoch_settlement.ts +82 -0
  168. package/src/test/index.ts +1 -0
  169. package/src/test/mock_proof_store.ts +14 -0
  170. package/src/test/mock_prover.ts +304 -0
@@ -0,0 +1,93 @@
1
+ import type { BBProverConfig } from '@aztec-labs/bb-prover';
2
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
3
+ import type { Logger } from '@aztec-labs/foundation/log';
4
+ import { SerialQueue } from '@aztec-labs/foundation/queue';
5
+ import type { FieldsOf } from '@aztec-labs/foundation/types';
6
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
7
+ import type { Checkpoint } from '@aztec-labs/stdlib/checkpoint';
8
+ import type { MerkleTreeWriteOperations, ServerCircuitProver } from '@aztec-labs/stdlib/interfaces/server';
9
+ import type { CheckpointConstantData } from '@aztec-labs/stdlib/rollup';
10
+ import { mockProcessedTx } from '@aztec-labs/stdlib/testing';
11
+ import { type BlockHeader, type GlobalVariables, type ProcessedTx } from '@aztec-labs/stdlib/tx';
12
+ import type { MerkleTreeAdminDatabase } from '@aztec-labs/world-state';
13
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
14
+ import { TestBroker } from '../test/mock_prover.js';
15
+ /**
16
+ * Builds a started `SerialQueue` for use as an orchestrator's deferred-job queue in
17
+ * tests. Production wires a single shared queue via `ProverClient`; tests that construct
18
+ * orchestrators directly use one of these per orchestrator (or share one).
19
+ */
20
+ export declare function makeTestDeferredJobQueue(concurrency?: number): SerialQueue;
21
+ export declare class TestContext {
22
+ worldState: MerkleTreeAdminDatabase;
23
+ prover: ServerCircuitProver;
24
+ broker: TestBroker;
25
+ brokerProverFacade: BrokerCircuitProverFacade;
26
+ private feePayer;
27
+ private directoriesToCleanup;
28
+ private logger;
29
+ private headers;
30
+ private checkpoints;
31
+ private checkpointOutHashes;
32
+ private nextCheckpointIndex;
33
+ private nextCheckpointNumber;
34
+ private nextBlockNumber;
35
+ private epochNumber;
36
+ private feePayerBalance;
37
+ private currentInboxRollingHash;
38
+ constructor(worldState: MerkleTreeAdminDatabase, prover: ServerCircuitProver, broker: TestBroker, brokerProverFacade: BrokerCircuitProverFacade, feePayer: AztecAddress, initialFeePayerBalance: Fr, directoriesToCleanup: string[], logger: Logger);
39
+ static new(logger: Logger, { proverCount, createProver }?: {
40
+ proverCount?: number;
41
+ createProver?: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver>;
42
+ }): Promise<TestContext>;
43
+ getFork(): Promise<MerkleTreeWriteOperations>;
44
+ cleanup(): Promise<void>;
45
+ startNewEpoch(): void;
46
+ getBlobFields(): Fr[][];
47
+ getFinalBlobChallenges(): Promise<import("@aztec-labs/blob-lib").FinalBlobBatchingChallenges>;
48
+ makeCheckpoint(numBlocks: number, { numTxsPerBlock, numL1ToL2Messages, makeProcessedTxOpts, ...constantOpts }?: {
49
+ numTxsPerBlock?: number | number[];
50
+ numL1ToL2Messages?: number;
51
+ makeProcessedTxOpts?: (blockGlobalVariables: GlobalVariables, txIndex: number) => Partial<Parameters<typeof mockProcessedTx>[0]>;
52
+ } & Partial<FieldsOf<CheckpointConstantData>>): Promise<{
53
+ constants: CheckpointConstantData;
54
+ checkpoint: Checkpoint;
55
+ header: import("@aztec-labs/stdlib/rollup").CheckpointHeader;
56
+ blocks: {
57
+ header: BlockHeader;
58
+ txs: ProcessedTx[];
59
+ }[];
60
+ l1ToL2Messages: Fr[];
61
+ previousBlockHeader: BlockHeader;
62
+ startInboxRollingHash: Fr;
63
+ }>;
64
+ /**
65
+ * Like {@link makeCheckpoint} but distributes the L1-to-L2 message bundle across the checkpoint's blocks
66
+ * (streaming Inbox): `l1ToL2MessagesPerBlock[i]` is block `i`'s own message slice,
67
+ * appended at compact indices in insertion order. Lets tests exercise checkpoints whose messages span more
68
+ * than one block, including a non-first block carrying a bundle — the single-block-per-checkpoint
69
+ * `makeCheckpoint` puts every message in the first block. `numTxsPerBlock` defaults to 1 because the builder
70
+ * rejects a non-first block with neither txs nor messages; a zero-tx entry whose slice is non-empty is valid
71
+ * and produces a message-only block.
72
+ */
73
+ makeCheckpointWithMessagesPerBlock(l1ToL2MessagesPerBlock: Fr[][], { numTxsPerBlock, makeProcessedTxOpts, ...constantOpts }?: {
74
+ numTxsPerBlock?: number | number[];
75
+ makeProcessedTxOpts?: (blockGlobalVariables: GlobalVariables, txIndex: number) => Partial<Parameters<typeof mockProcessedTx>[0]>;
76
+ } & Partial<FieldsOf<CheckpointConstantData>>): Promise<{
77
+ constants: CheckpointConstantData;
78
+ checkpoint: Checkpoint;
79
+ header: import("@aztec-labs/stdlib/rollup").CheckpointHeader;
80
+ blocks: {
81
+ header: BlockHeader;
82
+ txs: ProcessedTx[];
83
+ }[];
84
+ l1ToL2Messages: Fr[];
85
+ l1ToL2MessagesPerBlock: Fr[][];
86
+ previousBlockHeader: BlockHeader;
87
+ startInboxRollingHash: Fr;
88
+ }>;
89
+ private makeProcessedTx;
90
+ private getBlockHeader;
91
+ private updateTrees;
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jb250ZXh0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvdGVzdF9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFLN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUNMLEtBQUssV0FBVyxFQUNoQixLQUFLLGVBQWUsRUFDcEIsS0FBSyxXQUFXLEVBR2pCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQVV2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHcEQ7Ozs7R0FJRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxXQUFXLFNBQUssR0FBRyxXQUFXLENBSXRFO0FBRUQscUJBQWEsV0FBVztJ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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,354 @@
1
+ import { TestCircuitProver } from '@aztec-labs/bb-prover';
2
+ import { BlockNumber, CheckpointNumber } from '@aztec-labs/foundation/branded-types';
3
+ import { times, timesAsync } from '@aztec-labs/foundation/collection';
4
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
5
+ import { SerialQueue } from '@aztec-labs/foundation/queue';
6
+ import { getVKTreeRoot } from '@aztec-labs/noir-protocol-circuits-types/vk-tree';
7
+ import { ProtocolContractsList } from '@aztec-labs/protocol-contracts';
8
+ import { computeFeePayerBalanceLeafSlot } from '@aztec-labs/protocol-contracts/fee-juice';
9
+ import { PublicDataWrite } from '@aztec-labs/stdlib/avm';
10
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
11
+ import { mockProcessedTx } from '@aztec-labs/stdlib/testing';
12
+ import { MerkleTreeId, PublicDataTreeLeaf } from '@aztec-labs/stdlib/trees';
13
+ import { TreeSnapshots } from '@aztec-labs/stdlib/tx';
14
+ import { NativeWorldStateService } from '@aztec-labs/world-state/native';
15
+ import { promises as fs } from 'fs';
16
+ import { LightweightCheckpointBuilder } from '../light/lightweight_checkpoint_builder.js';
17
+ import { buildFinalBlobChallenges, getTreeSnapshot, insertSideEffects } from '../orchestrator/block-building-helpers.js';
18
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
19
+ import { TestBroker } from '../test/mock_prover.js';
20
+ import { getEnvironmentConfig, getSimulator, makeCheckpointConstants, makeGlobals } from './fixtures.js';
21
+ /**
22
+ * Builds a started `SerialQueue` for use as an orchestrator's deferred-job queue in
23
+ * tests. Production wires a single shared queue via `ProverClient`; tests that construct
24
+ * orchestrators directly use one of these per orchestrator (or share one).
25
+ */ export function makeTestDeferredJobQueue(concurrency = 10) {
26
+ const queue = new SerialQueue();
27
+ queue.start(concurrency);
28
+ return queue;
29
+ }
30
+ export class TestContext {
31
+ worldState;
32
+ prover;
33
+ broker;
34
+ brokerProverFacade;
35
+ feePayer;
36
+ directoriesToCleanup;
37
+ logger;
38
+ headers;
39
+ checkpoints;
40
+ checkpointOutHashes;
41
+ nextCheckpointIndex;
42
+ nextCheckpointNumber;
43
+ nextBlockNumber;
44
+ epochNumber;
45
+ feePayerBalance;
46
+ // Running inbox rolling hash across the checkpoints built by this context (never resets: the protocol threads it
47
+ // from genesis). Each checkpoint's builder starts from it, and it advances by the checkpoint's messages, so a
48
+ // checkpoint built after a message-carrying one commits the correct continuation in its header.
49
+ currentInboxRollingHash;
50
+ constructor(worldState, prover, broker, brokerProverFacade, feePayer, initialFeePayerBalance, directoriesToCleanup, logger){
51
+ this.worldState = worldState;
52
+ this.prover = prover;
53
+ this.broker = broker;
54
+ this.brokerProverFacade = brokerProverFacade;
55
+ this.feePayer = feePayer;
56
+ this.directoriesToCleanup = directoriesToCleanup;
57
+ this.logger = logger;
58
+ this.headers = new Map();
59
+ this.checkpoints = [];
60
+ this.checkpointOutHashes = [];
61
+ this.nextCheckpointIndex = 0;
62
+ this.nextCheckpointNumber = CheckpointNumber(1);
63
+ this.nextBlockNumber = 1;
64
+ this.epochNumber = 1;
65
+ this.currentInboxRollingHash = Fr.ZERO;
66
+ this.feePayerBalance = initialFeePayerBalance;
67
+ }
68
+ static async new(logger, { proverCount = 4, createProver = async (bbConfig)=>new TestCircuitProver(await getSimulator(bbConfig, logger)) } = {}) {
69
+ const directoriesToCleanup = [];
70
+ const feePayer = AztecAddress.fromNumberUnsafe(42222);
71
+ const initialFeePayerBalance = new Fr(10n ** 20n);
72
+ const feePayerSlot = await computeFeePayerBalanceLeafSlot(feePayer);
73
+ const genesis = {
74
+ prefilledPublicData: [
75
+ new PublicDataTreeLeaf(feePayerSlot, initialFeePayerBalance)
76
+ ],
77
+ genesisTimestamp: 0n
78
+ };
79
+ // Separated dbs for public processor and prover - see public_processor for context
80
+ const ws = await NativeWorldStateService.tmp(/*cleanupTmpDir=*/ true, genesis);
81
+ let localProver;
82
+ const config = await getEnvironmentConfig(logger);
83
+ if (!config) {
84
+ localProver = new TestCircuitProver();
85
+ } else {
86
+ const bbConfig = {
87
+ acvmBinaryPath: config.expectedAcvmPath,
88
+ acvmWorkingDirectory: config.acvmWorkingDirectory,
89
+ bbBinaryPath: config.expectedBBPath,
90
+ bbWorkingDirectory: config.bbWorkingDirectory,
91
+ bbSkipCleanup: config.bbSkipCleanup,
92
+ numConcurrentIVCVerifiers: 8,
93
+ bbIVCConcurrency: 1,
94
+ bbChonkVerifyMaxBatch: 16,
95
+ bbChonkVerifyConcurrency: 6
96
+ };
97
+ localProver = await createProver(bbConfig);
98
+ }
99
+ if (config?.directoryToCleanup && !config.bbSkipCleanup) {
100
+ directoriesToCleanup.push(config.directoryToCleanup);
101
+ }
102
+ const broker = new TestBroker(proverCount, localProver);
103
+ const facade = new BrokerCircuitProverFacade(broker);
104
+ await broker.start();
105
+ facade.start();
106
+ return new this(ws, localProver, broker, facade, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
107
+ }
108
+ getFork() {
109
+ return this.worldState.fork();
110
+ }
111
+ async cleanup() {
112
+ await this.brokerProverFacade.stop();
113
+ await this.broker.stop();
114
+ await this.worldState.close();
115
+ for (const dir of this.directoriesToCleanup.filter((x)=>x !== '')){
116
+ try {
117
+ await fs.rm(dir, {
118
+ recursive: true,
119
+ force: true,
120
+ maxRetries: 3
121
+ });
122
+ } catch (err) {
123
+ this.logger.warn(`Failed to delete tmp directory $dir}: ${err}`);
124
+ }
125
+ }
126
+ }
127
+ startNewEpoch() {
128
+ this.checkpoints = [];
129
+ this.checkpointOutHashes = [];
130
+ this.nextCheckpointIndex = 0;
131
+ this.epochNumber++;
132
+ }
133
+ // Return blob fields of all checkpoints in the epoch.
134
+ getBlobFields() {
135
+ return this.checkpoints.map((checkpoint)=>checkpoint.toBlobFields());
136
+ }
137
+ async getFinalBlobChallenges() {
138
+ const blobFields = this.getBlobFields();
139
+ return await buildFinalBlobChallenges(blobFields);
140
+ }
141
+ async makeCheckpoint(numBlocks, { numTxsPerBlock = 0, numL1ToL2Messages = 0, makeProcessedTxOpts = ()=>({}), ...constantOpts } = {}) {
142
+ if (numBlocks === 0) {
143
+ throw new Error('Cannot make a checkpoint with 0 blocks. Crate an empty block (numTxsPerBlock = 0) if there are no txs.');
144
+ }
145
+ const checkpointIndex = this.nextCheckpointIndex++;
146
+ const checkpointNumber = this.nextCheckpointNumber;
147
+ this.nextCheckpointNumber++;
148
+ const slotNumber = checkpointNumber * 15; // times an arbitrary number to make it different to the checkpoint number
149
+ const constants = makeCheckpointConstants(slotNumber, constantOpts);
150
+ const fork = await this.worldState.fork();
151
+ // Build l1 to l2 messages. Appended unpadded at compact indices; the mock assigns them all to
152
+ // the checkpoint's first block, matching how the per-block driver slices them.
153
+ const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(slotNumber * 100 + i));
154
+ await fork.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2Messages);
155
+ const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, fork);
156
+ const startBlockNumber = this.nextBlockNumber;
157
+ const previousBlockHeader = this.getBlockHeader(BlockNumber(startBlockNumber - 1));
158
+ // All blocks in the same slot/checkpoint share the same timestamp.
159
+ const timestamp = BigInt(slotNumber * 26);
160
+ // Build global variables.
161
+ const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(startBlockNumber + i, slotNumber, {
162
+ coinbase: constants.coinbase,
163
+ feeRecipient: constants.feeRecipient,
164
+ gasFees: constants.gasFees,
165
+ timestamp
166
+ }));
167
+ this.nextBlockNumber += numBlocks;
168
+ // Build txs.
169
+ let totalTxs = 0;
170
+ const blockEndStates = [];
171
+ const blockTxs = await timesAsync(numBlocks, async (blockIndex)=>{
172
+ const txIndexOffset = totalTxs;
173
+ const numTxs = typeof numTxsPerBlock === 'number' ? numTxsPerBlock : numTxsPerBlock[blockIndex];
174
+ totalTxs += numTxs;
175
+ const txs = await timesAsync(numTxs, (txIndex)=>this.makeProcessedTx({
176
+ seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456 + this.epochNumber * 0x99999,
177
+ globalVariables: blockGlobalVariables[blockIndex],
178
+ anchorBlockHeader: previousBlockHeader,
179
+ newL1ToL2Snapshot,
180
+ ...makeProcessedTxOpts(blockGlobalVariables[blockIndex], txIndexOffset + txIndex)
181
+ }));
182
+ // Insert side effects into the trees.
183
+ const endState = await this.updateTrees(txs, fork);
184
+ blockEndStates.push(endState);
185
+ return txs;
186
+ });
187
+ const cleanFork = await this.worldState.fork();
188
+ const previousCheckpointOutHashes = this.checkpointOutHashes;
189
+ const startInboxRollingHash = this.currentInboxRollingHash;
190
+ const builder = LightweightCheckpointBuilder.startNewCheckpoint(checkpointNumber, {
191
+ ...constants,
192
+ timestamp
193
+ }, previousCheckpointOutHashes, startInboxRollingHash, cleanFork);
194
+ // Add tx effects to db and build block headers.
195
+ const blocks = [];
196
+ for(let i = 0; i < numBlocks; i++){
197
+ const txs = blockTxs[i];
198
+ const state = blockEndStates[i];
199
+ const { block } = await builder.addBlock(blockGlobalVariables[i], txs, i === 0 ? l1ToL2Messages : [], {
200
+ expectedEndState: state,
201
+ insertTxsEffects: true
202
+ });
203
+ const header = block.header;
204
+ this.headers.set(block.number, header);
205
+ const blockMsgs = block.indexWithinCheckpoint === 0 ? l1ToL2Messages : [];
206
+ await this.worldState.handleL2BlockAndMessages(block, blockMsgs);
207
+ blocks.push({
208
+ header,
209
+ txs
210
+ });
211
+ }
212
+ const checkpoint = await builder.completeCheckpoint();
213
+ this.checkpoints.push(checkpoint);
214
+ this.checkpointOutHashes.push(checkpoint.getCheckpointOutHash());
215
+ this.currentInboxRollingHash = checkpoint.header.inboxRollingHash;
216
+ return {
217
+ constants,
218
+ checkpoint,
219
+ header: checkpoint.header,
220
+ blocks,
221
+ l1ToL2Messages,
222
+ previousBlockHeader,
223
+ startInboxRollingHash
224
+ };
225
+ }
226
+ /**
227
+ * Like {@link makeCheckpoint} but distributes the L1-to-L2 message bundle across the checkpoint's blocks
228
+ * (streaming Inbox): `l1ToL2MessagesPerBlock[i]` is block `i`'s own message slice,
229
+ * appended at compact indices in insertion order. Lets tests exercise checkpoints whose messages span more
230
+ * than one block, including a non-first block carrying a bundle — the single-block-per-checkpoint
231
+ * `makeCheckpoint` puts every message in the first block. `numTxsPerBlock` defaults to 1 because the builder
232
+ * rejects a non-first block with neither txs nor messages; a zero-tx entry whose slice is non-empty is valid
233
+ * and produces a message-only block.
234
+ */ async makeCheckpointWithMessagesPerBlock(l1ToL2MessagesPerBlock, { numTxsPerBlock = 1, makeProcessedTxOpts = ()=>({}), ...constantOpts } = {}) {
235
+ const numBlocks = l1ToL2MessagesPerBlock.length;
236
+ if (numBlocks === 0) {
237
+ throw new Error('Cannot make a checkpoint with 0 blocks.');
238
+ }
239
+ const checkpointIndex = this.nextCheckpointIndex++;
240
+ const checkpointNumber = this.nextCheckpointNumber;
241
+ this.nextCheckpointNumber++;
242
+ const slotNumber = checkpointNumber * 15;
243
+ const constants = makeCheckpointConstants(slotNumber, constantOpts);
244
+ const l1ToL2Messages = l1ToL2MessagesPerBlock.flat();
245
+ const fork = await this.worldState.fork();
246
+ const startBlockNumber = this.nextBlockNumber;
247
+ const previousBlockHeader = this.getBlockHeader(BlockNumber(startBlockNumber - 1));
248
+ const timestamp = BigInt(slotNumber * 26);
249
+ const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(startBlockNumber + i, slotNumber, {
250
+ coinbase: constants.coinbase,
251
+ feeRecipient: constants.feeRecipient,
252
+ gasFees: constants.gasFees,
253
+ timestamp
254
+ }));
255
+ this.nextBlockNumber += numBlocks;
256
+ // Build txs per block. Append the block's message slice to the fork before its txs so the per-block end
257
+ // state matches the builder's (message-tree and tx-effect trees are independent, so append order does not
258
+ // matter, but the cumulative message tree must reflect the slices already inserted).
259
+ let totalTxs = 0;
260
+ const blockEndStates = [];
261
+ const blockTxs = await timesAsync(numBlocks, async (blockIndex)=>{
262
+ await fork.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPerBlock[blockIndex]);
263
+ const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, fork);
264
+ const txIndexOffset = totalTxs;
265
+ const numTxs = typeof numTxsPerBlock === 'number' ? numTxsPerBlock : numTxsPerBlock[blockIndex];
266
+ totalTxs += numTxs;
267
+ const txs = await timesAsync(numTxs, (txIndex)=>this.makeProcessedTx({
268
+ seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456 + this.epochNumber * 0x99999,
269
+ globalVariables: blockGlobalVariables[blockIndex],
270
+ anchorBlockHeader: previousBlockHeader,
271
+ newL1ToL2Snapshot,
272
+ ...makeProcessedTxOpts(blockGlobalVariables[blockIndex], txIndexOffset + txIndex)
273
+ }));
274
+ const endState = await this.updateTrees(txs, fork);
275
+ blockEndStates.push(endState);
276
+ return txs;
277
+ });
278
+ const cleanFork = await this.worldState.fork();
279
+ const previousCheckpointOutHashes = this.checkpointOutHashes;
280
+ const startInboxRollingHash = this.currentInboxRollingHash;
281
+ const builder = LightweightCheckpointBuilder.startNewCheckpoint(checkpointNumber, {
282
+ ...constants,
283
+ timestamp
284
+ }, previousCheckpointOutHashes, startInboxRollingHash, cleanFork);
285
+ const blocks = [];
286
+ for(let i = 0; i < numBlocks; i++){
287
+ const txs = blockTxs[i];
288
+ const state = blockEndStates[i];
289
+ const { block } = await builder.addBlock(blockGlobalVariables[i], txs, l1ToL2MessagesPerBlock[i], {
290
+ expectedEndState: state,
291
+ insertTxsEffects: true
292
+ });
293
+ const header = block.header;
294
+ this.headers.set(block.number, header);
295
+ await this.worldState.handleL2BlockAndMessages(block, l1ToL2MessagesPerBlock[i]);
296
+ blocks.push({
297
+ header,
298
+ txs
299
+ });
300
+ }
301
+ const checkpoint = await builder.completeCheckpoint();
302
+ this.checkpoints.push(checkpoint);
303
+ this.checkpointOutHashes.push(checkpoint.getCheckpointOutHash());
304
+ this.currentInboxRollingHash = checkpoint.header.inboxRollingHash;
305
+ return {
306
+ constants,
307
+ checkpoint,
308
+ header: checkpoint.header,
309
+ blocks,
310
+ l1ToL2Messages,
311
+ l1ToL2MessagesPerBlock,
312
+ previousBlockHeader,
313
+ startInboxRollingHash
314
+ };
315
+ }
316
+ async makeProcessedTx(opts = {}) {
317
+ const tx = await mockProcessedTx({
318
+ vkTreeRoot: getVKTreeRoot(),
319
+ protocolContracts: ProtocolContractsList,
320
+ feePayer: this.feePayer,
321
+ ...opts
322
+ });
323
+ this.feePayerBalance = new Fr(this.feePayerBalance.toBigInt() - tx.txEffect.transactionFee.toBigInt());
324
+ const feePayerSlot = await computeFeePayerBalanceLeafSlot(this.feePayer);
325
+ const feePaymentPublicDataWrite = new PublicDataWrite(feePayerSlot, this.feePayerBalance);
326
+ tx.txEffect.publicDataWrites[0] = feePaymentPublicDataWrite;
327
+ if (tx.avmProvingRequest) {
328
+ tx.avmProvingRequest.inputs.publicInputs.accumulatedData.publicDataWrites[0] = feePaymentPublicDataWrite;
329
+ }
330
+ return tx;
331
+ }
332
+ getBlockHeader(blockNumber) {
333
+ if (Number(blockNumber) > 0 && Number(blockNumber) >= this.nextBlockNumber) {
334
+ throw new Error(`Block header not built for block number ${blockNumber}.`);
335
+ }
336
+ return Number(blockNumber) === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(Number(blockNumber));
337
+ }
338
+ async updateTrees(txs, fork) {
339
+ let startStateReference = await fork.getStateReference();
340
+ let endStateReference = startStateReference;
341
+ for (const tx of txs){
342
+ await insertSideEffects(tx, fork);
343
+ endStateReference = await fork.getStateReference();
344
+ if (tx.avmProvingRequest) {
345
+ // Update the trees in the avm public inputs so that the proof won't fail.
346
+ const l1ToL2MessageTree = tx.avmProvingRequest.inputs.publicInputs.startTreeSnapshots.l1ToL2MessageTree;
347
+ tx.avmProvingRequest.inputs.publicInputs.startTreeSnapshots = new TreeSnapshots(l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
348
+ tx.avmProvingRequest.inputs.publicInputs.endTreeSnapshots = new TreeSnapshots(l1ToL2MessageTree, endStateReference.partial.noteHashTree, endStateReference.partial.nullifierTree, endStateReference.partial.publicDataTree);
349
+ }
350
+ startStateReference = endStateReference;
351
+ }
352
+ return endStateReference;
353
+ }
354
+ }
@@ -0,0 +1,67 @@
1
+ import { BatchedBlobAccumulator, SpongeBlob } from '@aztec-labs/blob-lib';
2
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
3
+ import { type Bufferable } from '@aztec-labs/foundation/serialize';
4
+ import { MembershipWitness } from '@aztec-labs/foundation/trees';
5
+ import { Body } from '@aztec-labs/stdlib/block';
6
+ import type { MerkleTreeWriteOperations, PublicInputsAndRecursiveProof } from '@aztec-labs/stdlib/interfaces/server';
7
+ import { ProofData, RecursiveProof } from '@aztec-labs/stdlib/proofs';
8
+ import { BlockRollupPublicInputs, PrivateBaseRollupHints, PublicBaseRollupHints, PublicChonkVerifierPrivateInputs } from '@aztec-labs/stdlib/rollup';
9
+ import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec-labs/stdlib/trees';
10
+ import { BlockHeader, GlobalVariables, PartialStateReference, type ProcessedTx, StateReference, Tx } from '@aztec-labs/stdlib/tx';
11
+ import type { MerkleTreeReadOperations } from '@aztec-labs/world-state';
12
+ /**
13
+ * Type representing the names of the trees for the base rollup.
14
+ */
15
+ type BaseTreeNames = 'NoteHashTree' | 'ContractTree' | 'NullifierTree' | 'PublicDataTree';
16
+ /**
17
+ * Type representing the names of the trees.
18
+ */
19
+ export type TreeNames = BaseTreeNames | 'L1ToL2MessageTree' | 'Archive';
20
+ export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, lastArchive: AppendOnlyTreeSnapshot, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, startSpongeBlob: SpongeBlob, proverId: Fr, db: MerkleTreeWriteOperations) => Promise<PrivateBaseRollupHints | PublicBaseRollupHints>;
21
+ export declare const insertSideEffects: (tx: ProcessedTx, db: MerkleTreeWriteOperations) => Promise<{
22
+ nullifierInsertionResult: import("@aztec-labs/stdlib/trees").BatchInsertionResult<number, number>;
23
+ publicDataInsertionResult: import("@aztec-labs/stdlib/trees").SequentialInsertionResult<number>;
24
+ }>;
25
+ export declare function getChonkProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<1221>;
26
+ export declare function getPublicChonkVerifierPrivateInputsFromTx(tx: Tx | ProcessedTx, proverId: Fr): PublicChonkVerifierPrivateInputs;
27
+ export declare const buildBlobHints: (blobFields: Fr[]) => Promise<{
28
+ blobCommitments: import("@aztec-labs/foundation/curves/bls12").BLS12Point[];
29
+ blobs: import("@aztec-labs/blob-lib").Blob[];
30
+ blobsHash: Fr;
31
+ }>;
32
+ export declare const buildFinalBlobChallenges: (blobFieldsPerCheckpoint: Fr[][]) => Promise<import("@aztec-labs/blob-lib").FinalBlobBatchingChallenges>;
33
+ export declare const accumulateBlobs: (blobFields: Fr[], startBlobAccumulator: BatchedBlobAccumulator) => Promise<BatchedBlobAccumulator>;
34
+ export declare const buildHeaderFromCircuitOutputs: (blockRootRollupOutput: BlockRollupPublicInputs) => Promise<BlockHeader>;
35
+ export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], lastArchive: AppendOnlyTreeSnapshot, endState: StateReference, globalVariables: GlobalVariables, startSpongeBlob: SpongeBlob) => Promise<{
36
+ header: BlockHeader;
37
+ body: Body;
38
+ blockBlobFields: Fr[];
39
+ }>;
40
+ export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<import("@aztec-labs/foundation/serialize").Tuple<Fr, {
41
+ readonly 1: 42;
42
+ readonly 4: 30;
43
+ readonly 3: 36;
44
+ readonly 0: 42;
45
+ readonly 2: 40;
46
+ }[TID]>>;
47
+ export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<import("@aztec-labs/foundation/serialize").Tuple<Fr, {
48
+ readonly 1: 42;
49
+ readonly 4: 30;
50
+ readonly 3: 36;
51
+ readonly 0: 42;
52
+ readonly 2: 40;
53
+ }[TID]>>;
54
+ export declare function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeReadOperations): Promise<AppendOnlyTreeSnapshot>;
55
+ export declare function makeEmptyMembershipWitness<N extends number>(height: N): MembershipWitness<N>;
56
+ export declare function getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number, db: MerkleTreeReadOperations): Promise<Fr[]>;
57
+ /**
58
+ * Returns the full-height frontier (left-sibling path) at a tree's next-available leaf index — the hint the append
59
+ * circuits re-hash against the snapshot root when appending leaves at a compact (unaligned) index.
60
+ */
61
+ export declare function getFrontierSiblingPath(treeId: MerkleTreeId, db: MerkleTreeReadOperations): Promise<Fr[]>;
62
+ export declare function getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N, db: MerkleTreeReadOperations): Promise<MembershipWitness<N>>;
63
+ export declare function validatePartialState(partialState: PartialStateReference, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>): void;
64
+ export declare function validateTx(tx: ProcessedTx): void;
65
+ export declare function toProofData<T extends Bufferable, PROOF_LENGTH extends number>({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<T, PROOF_LENGTH>, vkIndex?: number): ProofData<T, PROOF_LENGTH>;
66
+ export {};
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYnVpbGRpbmctaGVscGVycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9ibG9jay1idWlsZGluZy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUtYLE1BQU0sc0JBQXNCLENBQUM7QUFpQjlCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQWdDLE1BQU0sa0NBQWtDLENBQUM7QUFDakcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFJakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFckgsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZ0NBQWdDLEVBRWpDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBSWIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsS0FBSyxXQUFXLEVBQ2hCLGNBQWMsRUFDZCxFQUFFLEVBQ0gsTUFBTSx1QkFBdUIsQ0FBQztBQUcvQixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhFOztHQUVHO0FBQ0gsS0FBSyxhQUFhLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sU0FBUyxHQUFHLGFBQWEsR0FBRyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFHeEUsZUFBTyxNQUFNLHdDQUF3QyxtUEEwSHBELENBQUM7QUFFRixlQUFPLE1BQU0saUJBQWlCOzs7RUFvQzdCLENBQUM7QUFFRix3QkFBZ0IsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLHdCQVF2RDtBQUVELHdCQUFnQix5Q0FBeUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxvQ0FPM0Y7QUFLRCxlQUFPLE1BQU0sY0FBYzs7OztFQUsxQixDQUFDO0FBRUYsZUFBTyxNQUFNLHdCQUF3QiwwR0FFcEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxlQUFlLHFHQU8zQixDQUFDO0FBRUYsZUFBTyxNQUFNLDZCQUE2QiwwRUEyQnpDLENBQUM7QUFFRixlQUFPLE1BQU0seUJBQXlCOzs7O0VBMERyQyxDQUFDO0FBRUYsd0JBQXNCLGtCQUFrQixDQUFDLEdBQUcsU0FBUyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsd0JBQXdCOzs7Ozs7U0FJM0c7QUFFRCx3QkFBc0Isc0JBQXNCLENBQUMsR0FBRyxTQUFTLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7Ozs7OztTQUkvRztBQUVELHdCQUFzQixlQUFlLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBR3JIO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsd0JBTXJFO0FBRUQsd0JBQXNCLHFCQUFxQixDQUN6QyxNQUFNLEVBQUUsWUFBWSxFQUNwQixhQUFhLEVBQUUsTUFBTSxFQUNyQixFQUFFLEVBQUUsd0JBQXdCLEdBQzNCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQU1mO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUc5RztBQUdELHdCQUFzQix1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUM1RCxLQUFLLEVBQUUsRUFBRSxFQUNULE1BQU0sRUFBRSxZQUFZLEVBQ3BCLE1BQU0sRUFBRSxDQUFDLEVBQ1QsRUFBRSxFQUFFLHdCQUF3QixHQUMzQixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FZL0I7QUFFRCx3QkFBZ0Isb0JBQW9CLENBQ2xDLFlBQVksRUFBRSxxQkFBcUIsRUFDbkMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsUUFTekQ7QUFxQkQsd0JBQWdCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxRQWN6QztBQUVELHdCQUFnQixXQUFXLENBQUMsQ0FBQyxTQUFTLFVBQVUsRUFBRSxZQUFZLFNBQVMsTUFBTSxFQUMzRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUNsRixPQUFPLENBQUMsRUFBRSxNQUFNLDhCQUtqQiJ9
@@ -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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"}