@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,257 @@
1
+ import type { BBProverConfig } from '@aztec/bb-prover';
2
+ import { times, timesParallel } from '@aztec/foundation/collection';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import type { Logger } from '@aztec/foundation/log';
5
+ import { TestDateProvider } from '@aztec/foundation/timer';
6
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
7
+ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
8
+ import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
9
+ import {
10
+ PublicProcessor,
11
+ PublicTxSimulationTester,
12
+ PublicTxSimulator,
13
+ SimpleContractDataSource,
14
+ WorldStateDB,
15
+ } from '@aztec/simulator/server';
16
+ import { PublicDataWrite } from '@aztec/stdlib/avm';
17
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
18
+ import type { L2Block } from '@aztec/stdlib/block';
19
+ import type { ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
20
+ import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
21
+ import { type AppendOnlyTreeSnapshot, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
22
+ import { type BlockHeader, type GlobalVariables, type ProcessedTx, TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
23
+ import type { MerkleTreeAdminDatabase } from '@aztec/world-state';
24
+ import { NativeWorldStateService } from '@aztec/world-state/native';
25
+
26
+ import { promises as fs } from 'fs';
27
+
28
+ import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js';
29
+ import { buildBlock } from '../block_builder/light.js';
30
+ import { ProvingOrchestrator } from '../orchestrator/index.js';
31
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
32
+ import { TestBroker } from '../test/mock_prover.js';
33
+ import { getEnvironmentConfig, getSimulationProvider, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
34
+
35
+ export class TestContext {
36
+ private headers: Map<number, BlockHeader> = new Map();
37
+ private feePayerBalance: Fr;
38
+
39
+ constructor(
40
+ public publicTxSimulator: PublicTxSimulator,
41
+ public worldState: MerkleTreeAdminDatabase,
42
+ public publicProcessor: PublicProcessor,
43
+ public globalVariables: GlobalVariables,
44
+ public prover: ServerCircuitProver,
45
+ public broker: TestBroker,
46
+ public brokerProverFacade: BrokerCircuitProverFacade,
47
+ public orchestrator: TestProvingOrchestrator,
48
+ public blockNumber: number,
49
+ public feePayer: AztecAddress,
50
+ initialFeePayerBalance: Fr,
51
+ public directoriesToCleanup: string[],
52
+ public tester: PublicTxSimulationTester,
53
+ public logger: Logger,
54
+ ) {
55
+ this.feePayerBalance = initialFeePayerBalance;
56
+ }
57
+
58
+ public get epochProver() {
59
+ return this.orchestrator;
60
+ }
61
+
62
+ static async new(
63
+ logger: Logger,
64
+ proverCount = 4,
65
+ createProver: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver> = async (bbConfig: BBProverConfig) =>
66
+ new TestCircuitProver(await getSimulationProvider(bbConfig, logger)),
67
+ blockNumber = 1,
68
+ ) {
69
+ const directoriesToCleanup: string[] = [];
70
+ const globalVariables = makeGlobals(blockNumber);
71
+
72
+ const feePayer = AztecAddress.fromNumber(42222);
73
+ const initialFeePayerBalance = new Fr(10n ** 20n);
74
+ const feePayerSlot = await computeFeePayerBalanceLeafSlot(feePayer);
75
+ const prefilledPublicData = [new PublicDataTreeLeaf(feePayerSlot, initialFeePayerBalance)];
76
+
77
+ // Separated dbs for public processor and prover - see public_processor for context
78
+ const ws = await NativeWorldStateService.tmp(
79
+ undefined /* rollupAddress */,
80
+ true /* cleanupTmpDir */,
81
+ prefilledPublicData,
82
+ );
83
+ const publicDb = await ws.fork();
84
+
85
+ const contractDataSource = new SimpleContractDataSource();
86
+ const worldStateDB = new WorldStateDB(publicDb, contractDataSource);
87
+
88
+ const tester = new PublicTxSimulationTester(worldStateDB, contractDataSource, publicDb);
89
+
90
+ const publicTxSimulator = new PublicTxSimulator(publicDb, worldStateDB, globalVariables, true);
91
+ const processor = new PublicProcessor(
92
+ publicDb,
93
+ globalVariables,
94
+ worldStateDB,
95
+ publicTxSimulator,
96
+ new TestDateProvider(),
97
+ );
98
+
99
+ let localProver: ServerCircuitProver;
100
+ const config = await getEnvironmentConfig(logger);
101
+ if (!config) {
102
+ localProver = new TestCircuitProver();
103
+ } else {
104
+ const bbConfig: BBProverConfig = {
105
+ acvmBinaryPath: config.expectedAcvmPath,
106
+ acvmWorkingDirectory: config.acvmWorkingDirectory,
107
+ bbBinaryPath: config.expectedBBPath,
108
+ bbWorkingDirectory: config.bbWorkingDirectory,
109
+ bbSkipCleanup: config.bbSkipCleanup,
110
+ };
111
+ localProver = await createProver(bbConfig);
112
+ }
113
+
114
+ if (config?.directoryToCleanup && !config.bbSkipCleanup) {
115
+ directoriesToCleanup.push(config.directoryToCleanup);
116
+ }
117
+
118
+ const broker = new TestBroker(proverCount, localProver);
119
+ const facade = new BrokerCircuitProverFacade(broker);
120
+ const orchestrator = new TestProvingOrchestrator(ws, facade, Fr.ZERO);
121
+
122
+ await broker.start();
123
+ facade.start();
124
+
125
+ return new this(
126
+ publicTxSimulator,
127
+ ws,
128
+ processor,
129
+ globalVariables,
130
+ localProver,
131
+ broker,
132
+ facade,
133
+ orchestrator,
134
+ blockNumber,
135
+ feePayer,
136
+ initialFeePayerBalance,
137
+ directoriesToCleanup,
138
+ tester,
139
+ logger,
140
+ );
141
+ }
142
+
143
+ public getFork() {
144
+ return this.worldState.fork();
145
+ }
146
+
147
+ public getBlockHeader(blockNumber: 0): BlockHeader;
148
+ public getBlockHeader(blockNumber: number): BlockHeader | undefined;
149
+ public getBlockHeader(blockNumber = 0) {
150
+ return blockNumber === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(blockNumber);
151
+ }
152
+
153
+ public getPreviousBlockHeader(currentBlockNumber = this.blockNumber): BlockHeader {
154
+ return this.getBlockHeader(currentBlockNumber - 1)!;
155
+ }
156
+
157
+ async cleanup() {
158
+ await this.brokerProverFacade.stop();
159
+ await this.broker.stop();
160
+ for (const dir of this.directoriesToCleanup.filter(x => x !== '')) {
161
+ try {
162
+ await fs.rm(dir, { recursive: true, force: true, maxRetries: 3 });
163
+ } catch (err) {
164
+ this.logger.warn(`Failed to delete tmp directory $dir}: ${err}`);
165
+ }
166
+ }
167
+ }
168
+
169
+ public async makeProcessedTx(opts?: Parameters<typeof makeBloatedProcessedTx>[0]): Promise<ProcessedTx>;
170
+ public async makeProcessedTx(seed?: number): Promise<ProcessedTx>;
171
+ public async makeProcessedTx(
172
+ seedOrOpts?: Parameters<typeof makeBloatedProcessedTx>[0] | number,
173
+ ): Promise<ProcessedTx> {
174
+ const opts = typeof seedOrOpts === 'number' ? { seed: seedOrOpts } : seedOrOpts;
175
+ const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber.toNumber();
176
+ const header = this.getBlockHeader(blockNum - 1);
177
+ const tx = await makeBloatedProcessedTx({
178
+ header,
179
+ vkTreeRoot: getVKTreeRoot(),
180
+ protocolContractTreeRoot,
181
+ globalVariables: this.globalVariables,
182
+ feePayer: this.feePayer,
183
+ ...opts,
184
+ });
185
+ this.feePayerBalance = new Fr(this.feePayerBalance.toBigInt() - tx.txEffect.transactionFee.toBigInt());
186
+ if (opts?.privateOnly) {
187
+ const feePayerSlot = await computeFeePayerBalanceLeafSlot(this.feePayer);
188
+ tx.txEffect.publicDataWrites[0] = new PublicDataWrite(feePayerSlot, this.feePayerBalance);
189
+ }
190
+ return tx;
191
+ }
192
+
193
+ /** Creates a block with the given number of txs and adds it to world-state */
194
+ public async makePendingBlock(
195
+ numTxs: number,
196
+ numMsgs: number = 0,
197
+ blockNumOrGlobals: GlobalVariables | number = this.globalVariables,
198
+ makeProcessedTxOpts: (index: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]> = () => ({}),
199
+ ) {
200
+ const globalVariables = typeof blockNumOrGlobals === 'number' ? makeGlobals(blockNumOrGlobals) : blockNumOrGlobals;
201
+ const blockNum = globalVariables.blockNumber.toNumber();
202
+ const db = await this.worldState.fork();
203
+ const msgs = times(numMsgs, i => new Fr(blockNum * 100 + i));
204
+ const txs = await timesParallel(numTxs, i =>
205
+ this.makeProcessedTx({ seed: i + blockNum * 1000, globalVariables, ...makeProcessedTxOpts(i) }),
206
+ );
207
+ await this.setTreeRoots(txs);
208
+
209
+ const block = await buildBlock(txs, globalVariables, msgs, db);
210
+ this.headers.set(blockNum, block.header);
211
+ await this.worldState.handleL2BlockAndMessages(block, msgs);
212
+ return { block, txs, msgs };
213
+ }
214
+
215
+ public async processPublicFunctions(txs: Tx[], maxTransactions: number) {
216
+ return await this.publicProcessor.process(txs, { maxTransactions });
217
+ }
218
+
219
+ public async setTreeRoots(txs: ProcessedTx[]) {
220
+ const db = await this.worldState.fork();
221
+ for (const tx of txs) {
222
+ const startStateReference = await db.getStateReference();
223
+ await updateExpectedTreesFromTxs(db, [tx]);
224
+ const endStateReference = await db.getStateReference();
225
+ if (tx.avmProvingRequest) {
226
+ tx.avmProvingRequest.inputs.publicInputs.startTreeSnapshots = new TreeSnapshots(
227
+ startStateReference.l1ToL2MessageTree,
228
+ startStateReference.partial.noteHashTree,
229
+ startStateReference.partial.nullifierTree,
230
+ startStateReference.partial.publicDataTree,
231
+ );
232
+ tx.avmProvingRequest.inputs.publicInputs.endTreeSnapshots = new TreeSnapshots(
233
+ endStateReference.l1ToL2MessageTree,
234
+ endStateReference.partial.noteHashTree,
235
+ endStateReference.partial.nullifierTree,
236
+ endStateReference.partial.publicDataTree,
237
+ );
238
+ }
239
+ }
240
+ }
241
+ }
242
+
243
+ class TestProvingOrchestrator extends ProvingOrchestrator {
244
+ public isVerifyBuiltBlockAgainstSyncedStateEnabled = false;
245
+
246
+ // Disable this check by default, since it requires seeding world state with the block being built
247
+ // This is only enabled in some tests with multiple blocks that populate the pending chain via makePendingBlock
248
+ protected override verifyBuiltBlockAgainstSyncedState(
249
+ l2Block: L2Block,
250
+ newArchive: AppendOnlyTreeSnapshot,
251
+ ): Promise<void> {
252
+ if (this.isVerifyBuiltBlockAgainstSyncedStateEnabled) {
253
+ return super.verifyBuiltBlockAgainstSyncedState(l2Block, newArchive);
254
+ }
255
+ return Promise.resolve();
256
+ }
257
+ }