@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,360 @@
1
+ import { asyncPool } from '@aztec-labs/foundation/async-pool';
2
+ import { EpochNumber } from '@aztec-labs/foundation/branded-types';
3
+ import { chunk } from '@aztec-labs/foundation/collection';
4
+ import { createLogger } from '@aztec-labs/foundation/log';
5
+ import { RunningPromise, promiseWithResolvers } from '@aztec-labs/foundation/promise';
6
+ import { truncate } from '@aztec-labs/foundation/string';
7
+ import { makeProvingJobId } from '@aztec-labs/stdlib/interfaces/server';
8
+ import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
9
+ import { createHash } from 'node:crypto';
10
+ import { InlineProofStore } from './proof_store/index.js';
11
+ // Perform a snapshot sync every 30 seconds
12
+ const SNAPSHOT_SYNC_INTERVAL_MS = 30_000;
13
+ const MAX_CONCURRENT_JOB_SETTLED_REQUESTS = 10;
14
+ const SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE = 1000;
15
+ export class BrokerCircuitProverFacade {
16
+ broker;
17
+ proofStore;
18
+ failedProofStore;
19
+ pollIntervalMs;
20
+ jobs;
21
+ runningPromise;
22
+ timeOfLastSnapshotSync;
23
+ jobsToRetrieve;
24
+ log;
25
+ constructor(broker, proofStore = new InlineProofStore(), failedProofStore, pollIntervalMs = 1000, bindings){
26
+ this.broker = broker;
27
+ this.proofStore = proofStore;
28
+ this.failedProofStore = failedProofStore;
29
+ this.pollIntervalMs = pollIntervalMs;
30
+ this.jobs = new Map();
31
+ this.timeOfLastSnapshotSync = Date.now();
32
+ this.jobsToRetrieve = new Set();
33
+ this.log = createLogger('prover-client:broker-circuit-prover-facade', bindings);
34
+ }
35
+ /**
36
+ * This is a critical section. This function can not be async since it writes
37
+ * to the jobs map which acts as a mutex, ensuring a job is only ever created once.
38
+ *
39
+ * This could be called in a SerialQueue if it needs to become async.
40
+ */ getOrCreateProvingJob(id, type, signal) {
41
+ // Check if there is already a promise for this job
42
+ const existingJob = this.jobs.get(id);
43
+ if (existingJob) {
44
+ this.log.verbose(`Job already found in facade id=${id} type=${ProvingRequestType[type]}`, {
45
+ provingJobId: id,
46
+ provingJobType: ProvingRequestType[type]
47
+ });
48
+ return {
49
+ job: existingJob,
50
+ isEnqueued: true
51
+ };
52
+ }
53
+ // Create a promise for this job id, regardless of whether it was enqueued at the broker
54
+ // The running promise will monitor for the job to be completed and resolve it either way
55
+ // We install an error handler to prevent unhandled rejections in the process before the
56
+ // job promise is awaited by the caller (see #13166)
57
+ const promise = promiseWithResolvers();
58
+ promise.promise.catch((err)=>this.log.error(`Job errored with '${err.message ?? err}' id=${id} type=${ProvingRequestType[type]}`, {
59
+ provingJobId: id,
60
+ provingJobType: ProvingRequestType[type]
61
+ }));
62
+ const abortFn = ()=>{
63
+ signal?.removeEventListener('abort', abortFn);
64
+ void this.broker.cancelProvingJob(id).catch((err)=>this.log.warn(`Error cancelling job id=${id}`, err));
65
+ };
66
+ const job = {
67
+ id,
68
+ type,
69
+ deferred: promise,
70
+ abortFn,
71
+ signal
72
+ };
73
+ this.jobs.set(id, job);
74
+ return {
75
+ job,
76
+ isEnqueued: false
77
+ };
78
+ }
79
+ async enqueueJob(id, type, inputs, epochNumber = EpochNumber.ZERO, signal) {
80
+ const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
81
+ if (isEnqueued) {
82
+ return job.deferred.promise;
83
+ }
84
+ try {
85
+ const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
86
+ // Only retain the inputs URI on the long-lived job when a failed-proof store is configured: it is
87
+ // read solely by `backupFailedProofInputs` on failure. With the default `InlineProofStore` the URI
88
+ // embeds the full circuit inputs, so retaining it for every in-flight job would pin those inputs in
89
+ // memory until the job settles for no purpose when no failed-proof store exists. The broker still
90
+ // receives the URI below regardless; this only governs what the facade holds onto.
91
+ if (this.failedProofStore) {
92
+ job.inputsUri = inputsUri;
93
+ }
94
+ // Send the job to the broker
95
+ const jobStatus = await this.broker.enqueueProvingJob({
96
+ id,
97
+ type,
98
+ inputsUri,
99
+ epochNumber
100
+ });
101
+ const jobLogText = `id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`;
102
+ const jobLogData = {
103
+ provingJobId: id,
104
+ provingJobType: ProvingRequestType[type],
105
+ epochNumber,
106
+ inputsUri: truncate(inputsUri),
107
+ status: jobStatus.status,
108
+ numOutstandingJobs: this.jobs.size
109
+ };
110
+ // If we are here then the job was successfully accepted by the broker
111
+ // the returned status is for before any action was performed
112
+ if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
113
+ // Job was already completed by the broker
114
+ // No need to notify the broker on aborted job
115
+ this.log.verbose(`Job already completed when sent to broker ${jobLogText}`, jobLogData);
116
+ // Job was not enqueued. It must be completed already, add to our set of already completed jobs
117
+ this.jobsToRetrieve.add(id);
118
+ } else {
119
+ // notify the broker if job is aborted
120
+ signal?.addEventListener('abort', job.abortFn);
121
+ // Job added for the first time
122
+ if (jobStatus.status === 'not-found') {
123
+ this.log.verbose(`Job enqueued with broker ${jobLogText}`, jobLogData);
124
+ } else {
125
+ // Job was previously sent to the broker but is not completed
126
+ this.log.verbose(`Job already in queue or in progress when sent to broker ${jobLogText}`, jobLogData);
127
+ }
128
+ }
129
+ } catch (err) {
130
+ this.jobs.delete(job.id);
131
+ job.deferred.reject(err);
132
+ }
133
+ return job.deferred.promise;
134
+ }
135
+ start() {
136
+ if (this.runningPromise) {
137
+ throw new Error('BrokerCircuitProverFacade already started');
138
+ }
139
+ this.log.verbose('Starting BrokerCircuitProverFacade');
140
+ this.runningPromise = new RunningPromise(()=>this.monitorForCompletedJobs(), this.log, this.pollIntervalMs);
141
+ this.runningPromise.start();
142
+ }
143
+ async stop() {
144
+ if (!this.runningPromise) {
145
+ throw new Error('BrokerCircuitProverFacade not started');
146
+ }
147
+ this.log.verbose('Stopping BrokerCircuitProverFacade');
148
+ await this.runningPromise.stop();
149
+ // Reject any outstanding promises as stopped
150
+ for (const [_, v] of this.jobs){
151
+ v.deferred.reject(new Error('Broker facade stopped'));
152
+ }
153
+ this.jobs.clear();
154
+ }
155
+ async updateCompletedJobs() {
156
+ // Here we check for completed jobs. If everything works well (there are no service restarts etc) then all we need to do
157
+ // to maintain correct job state is to check for incrementally completed jobs. i.e. call getCompletedJobs with an empty array
158
+ // However, if there are any problems then we may lose sync with the broker's actual set of completed jobs.
159
+ // In this case we need to perform a full snapshot sync. This involves sending all of our outstanding job Ids to the broker
160
+ // and have the broker report on whether they are completed or not.
161
+ // We perform an incremental sync on every call of this function with a full snapshot sync periodically.
162
+ // This should keep us in sync without over-burdening the broker with snapshot sync requests
163
+ const getAllCompletedJobs = async (ids)=>{
164
+ // In this function we take whatever set of snapshot ids and we ask the broker for completed job notifications
165
+ // We collect all returned notifications and return them
166
+ const allCompleted = new Set();
167
+ try {
168
+ const batches = ids.length > 0 ? chunk(ids, SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE) : [
169
+ []
170
+ ];
171
+ await asyncPool(1, batches, async (batch)=>{
172
+ const completed = await this.broker.getCompletedJobs(batch);
173
+ completed.forEach((id)=>allCompleted.add(id));
174
+ });
175
+ } catch (err) {
176
+ this.log.error(`Error thrown when requesting completed job notifications from the broker`, err);
177
+ }
178
+ return allCompleted;
179
+ };
180
+ const snapshotSyncIds = [];
181
+ const currentTime = Date.now();
182
+ const secondsSinceLastSnapshotSync = currentTime - this.timeOfLastSnapshotSync;
183
+ if (secondsSinceLastSnapshotSync > SNAPSHOT_SYNC_INTERVAL_MS) {
184
+ this.timeOfLastSnapshotSync = currentTime;
185
+ snapshotSyncIds.push(...this.jobs.keys());
186
+ this.log.trace(`Performing full snapshot sync of completed jobs with ${snapshotSyncIds.length} job(s)`);
187
+ } else {
188
+ this.log.trace(`Performing incremental sync of completed jobs`, {
189
+ snapshotSyncIds
190
+ });
191
+ }
192
+ // Now request the notifications from the broker
193
+ const snapshotIdsLength = snapshotSyncIds.length;
194
+ const completedJobs = await getAllCompletedJobs(snapshotSyncIds);
195
+ // We now have an additional set of completed job notifications to add to our cached set giving us the full set of jobs that we have been told are ready
196
+ // We filter this list to what we actually need, in case for any reason it is different and store in our cache
197
+ const allJobsReady = [
198
+ ...completedJobs,
199
+ ...this.jobsToRetrieve
200
+ ];
201
+ this.jobsToRetrieve = new Set(allJobsReady.filter((id)=>this.jobs.has(id)));
202
+ if (completedJobs.size > 0) {
203
+ this.log.verbose(`Check for job completion notifications returned ${completedJobs.size} job(s), snapshot ids length: ${snapshotIdsLength}, num outstanding jobs: ${this.jobs.size}, total jobs ready: ${this.jobsToRetrieve.size}`);
204
+ } else {
205
+ this.log.trace(`Check for job completion notifications returned 0 jobs, snapshot ids length: ${snapshotIdsLength}, num outstanding jobs: ${this.jobs.size}, total jobs ready: ${this.jobsToRetrieve.size}`);
206
+ }
207
+ }
208
+ async retrieveJobsThatShouldBeReady() {
209
+ const convertJobResult = async (result, jobType)=>{
210
+ if (result.status === 'fulfilled') {
211
+ const output = await this.proofStore.getProofOutput(result.value);
212
+ if (output.type === jobType) {
213
+ return {
214
+ result: output.result,
215
+ success: true
216
+ };
217
+ } else {
218
+ return {
219
+ success: false,
220
+ reason: `Unexpected proof type: ${output.type}. Expected: ${jobType}`
221
+ };
222
+ }
223
+ } else if (result.status === 'rejected') {
224
+ return {
225
+ success: false,
226
+ reason: result.reason
227
+ };
228
+ } else if (result.status === 'aborted') {
229
+ return {
230
+ success: false,
231
+ reason: 'Aborted'
232
+ };
233
+ } else {
234
+ throw new Error(`Unexpected proving job status ${result.status}`);
235
+ }
236
+ };
237
+ const processJob = async (job)=>{
238
+ // First retrieve the settled job from the broker
239
+ this.log.debug(`Received notification of completed job id=${job.id} type=${ProvingRequestType[job.type]}`);
240
+ let settledResult;
241
+ try {
242
+ settledResult = await this.broker.getProvingJobStatus(job.id);
243
+ } catch (err) {
244
+ // If an error occurs retrieving the job result then just log it and move on.
245
+ // We will try again on the next iteration
246
+ this.log.error(`Error retrieving job result from broker job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
247
+ return false;
248
+ }
249
+ // Then convert the result and resolve/reject the promise
250
+ let result;
251
+ try {
252
+ result = await convertJobResult(settledResult, job.type);
253
+ } catch (err) {
254
+ // If an error occurs retrieving the job result then just log it and move on.
255
+ // We will try again on the next iteration
256
+ this.log.error(`Error processing job result job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
257
+ return false;
258
+ }
259
+ if (result.success) {
260
+ this.log.verbose(`Resolved proving job id=${job.id} type=${ProvingRequestType[job.type]}`);
261
+ job.deferred.resolve(result.result);
262
+ } else {
263
+ this.log.error(`Resolving proving job with error id=${job.id} type=${ProvingRequestType[job.type]}`, result.reason);
264
+ if (result.reason !== 'Aborted') {
265
+ void this.backupFailedProofInputs(job);
266
+ }
267
+ job.deferred.reject(new Error(result.reason));
268
+ }
269
+ if (job.abortFn && job.signal) {
270
+ job.signal?.removeEventListener('abort', job.abortFn);
271
+ }
272
+ // Job is now processed removed from our cache
273
+ this.jobs.delete(job.id);
274
+ this.jobsToRetrieve.delete(job.id);
275
+ return true;
276
+ };
277
+ const toBeRetrieved = Array.from(this.jobsToRetrieve.values()).map((id)=>this.jobs.get(id)).filter((x)=>x !== undefined);
278
+ const totalJobsToRetrieve = toBeRetrieved.length;
279
+ const results = await asyncPool(MAX_CONCURRENT_JOB_SETTLED_REQUESTS, toBeRetrieved, (job)=>processJob(job));
280
+ const totalJobsRetrieved = results.filter((x)=>x).length;
281
+ if (totalJobsToRetrieve > 0) {
282
+ this.log.verbose(`Successfully retrieved ${totalJobsRetrieved} of ${totalJobsToRetrieve} jobs that should be ready, total ready jobs is now: ${this.jobsToRetrieve.size}`);
283
+ }
284
+ }
285
+ async backupFailedProofInputs(job) {
286
+ try {
287
+ if (!this.failedProofStore || !job.inputsUri) {
288
+ return;
289
+ }
290
+ const inputs = await this.proofStore.getProofInput(job.inputsUri);
291
+ const uri = await this.failedProofStore.saveProofInput(job.id, inputs.type, inputs.inputs);
292
+ this.log.info(`Stored proof inputs for failed job id=${job.id} type=${ProvingRequestType[job.type]} at ${uri}`, {
293
+ id: job.id,
294
+ type: job.type,
295
+ uri
296
+ });
297
+ } catch (err) {
298
+ this.log.error(`Error backing up proof inputs for failed job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
299
+ }
300
+ }
301
+ async monitorForCompletedJobs() {
302
+ // Monitoring for completed jobs involves 2 stages.
303
+ // 1. Update our list of completed jobs.
304
+ // We poll the broker for any new job completion notifications and after filtering/deduplication add them to our cached
305
+ // list of jobs that we have been told are ready.
306
+ await this.updateCompletedJobs();
307
+ // 2. Retrieve the jobs that should be ready.
308
+ // We have a list of jobs that we have been told are ready, so we go ahead and ask for their results
309
+ await this.retrieveJobsThatShouldBeReady();
310
+ }
311
+ getAvmProof(inputs, signal, epochNumber) {
312
+ return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber), ProvingRequestType.PUBLIC_VM, inputs, epochNumber, signal);
313
+ }
314
+ getInboxParityProof(inputs, signal, epochNumber) {
315
+ return this.enqueueJob(this.generateId(ProvingRequestType.INBOX_PARITY, inputs, epochNumber), ProvingRequestType.INBOX_PARITY, inputs, epochNumber, signal);
316
+ }
317
+ getTxMergeRollupProof(input, signal, epochNumber) {
318
+ return this.enqueueJob(this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber, signal);
319
+ }
320
+ getPublicChonkVerifierProof(inputs, signal, epochNumber) {
321
+ return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber), ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber, signal);
322
+ }
323
+ getPrivateTxBaseRollupProof(baseRollupInput, signal, epochNumber) {
324
+ return this.enqueueJob(this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber), ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber, signal);
325
+ }
326
+ getPublicTxBaseRollupProof(inputs, signal, epochNumber) {
327
+ return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber), ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber, signal);
328
+ }
329
+ getBlockRootNoTxsRollupProof(input, signal, epochNumber) {
330
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_NO_TXS_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_NO_TXS_ROLLUP, input, epochNumber, signal);
331
+ }
332
+ getBlockRootRollupProof(input, signal, epochNumber) {
333
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
334
+ }
335
+ getBlockRootSingleTxRollupProof(input, signal, epochNumber) {
336
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber, signal);
337
+ }
338
+ getBlockMergeRollupProof(input, signal, epochNumber) {
339
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber, signal);
340
+ }
341
+ getCheckpointRootRollupProof(input, signal, epochNumber) {
342
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber, signal);
343
+ }
344
+ getCheckpointRootSingleBlockRollupProof(input, signal, epochNumber) {
345
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber, signal);
346
+ }
347
+ getCheckpointPaddingRollupProof(input, signal, epochNumber) {
348
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber, signal);
349
+ }
350
+ getCheckpointMergeRollupProof(input, signal, epochNumber) {
351
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber, signal);
352
+ }
353
+ getRootRollupProof(input, signal, epochNumber) {
354
+ return this.enqueueJob(this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber), ProvingRequestType.ROOT_ROLLUP, input, epochNumber, signal);
355
+ }
356
+ generateId(type, inputs, epochNumber = EpochNumber.ZERO) {
357
+ const inputsHash = createHash('sha256').update(inputs.toBuffer()).digest('hex');
358
+ return makeProvingJobId(epochNumber, type, inputsHash);
359
+ }
360
+ }
@@ -0,0 +1,40 @@
1
+ import { type L1ReaderConfig } from '@aztec-labs/ethereum/l1-reader';
2
+ import { type ConfigMappingsType } from '@aztec-labs/foundation/config';
3
+ import { type ChainConfig } from '@aztec-labs/stdlib/config';
4
+ import { type DataStoreConfig } from '@aztec-labs/stdlib/kv-store';
5
+ import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
6
+ import { z } from 'zod';
7
+ export declare const ProverBrokerConfig: z.ZodObject<{
8
+ proverBrokerJobMaxRetries: z.ZodNumber;
9
+ proverBrokerJobTimeoutMs: z.ZodNumber;
10
+ proverBrokerPollIntervalMs: z.ZodNumber;
11
+ dataDirectory: z.ZodOptional<z.ZodString>;
12
+ dataStoreMapSizeKb: z.ZodNumber;
13
+ proverBrokerStoreMapSizeKb: z.ZodOptional<z.ZodNumber>;
14
+ proverBrokerBatchSize: z.ZodNumber;
15
+ proverBrokerBatchIntervalMs: z.ZodNumber;
16
+ proverBrokerMaxEpochsToKeepResultsFor: z.ZodNumber;
17
+ proverBrokerDebugReplayEnabled: z.ZodBoolean;
18
+ }, z.core.$strip>;
19
+ export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> & L1ReaderConfig & Pick<ChainConfig, 'rollupVersion'>;
20
+ export declare const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>;
21
+ export declare const defaultProverBrokerConfig: ProverBrokerConfig;
22
+ export declare const ProverAgentConfig: z.ZodObject<{
23
+ proverAgentCount: z.ZodNumber;
24
+ proverAgentProofTypes: z.ZodArray<z.ZodEnum<typeof ProvingRequestType>>;
25
+ proverAgentPollIntervalMs: z.ZodNumber;
26
+ proverBrokerUrl: z.ZodOptional<z.ZodString>;
27
+ realProofs: z.ZodBoolean;
28
+ proverTestDelayType: z.ZodEnum<{
29
+ fixed: "fixed";
30
+ realistic: "realistic";
31
+ }>;
32
+ proverTestDelayMs: z.ZodNumber;
33
+ proverTestDelayFactor: z.ZodNumber;
34
+ proverTestVerificationDelayMs: z.ZodOptional<z.ZodNumber>;
35
+ cancelJobsOnStop: z.ZodBoolean;
36
+ proofStore: z.ZodOptional<z.ZodString>;
37
+ }, z.core.$strip>;
38
+ export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
39
+ export declare const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig>;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXVCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsZUFBTyxNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7aUJBcUI3QixDQUFDO0FBRUgsTUFBTSxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxHQUNqRSxJQUFJLENBQUMsZUFBZSxFQUFFLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxHQUM3RCxjQUFjLEdBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUVyQyxlQUFPLE1BQU0sMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBNEM3RSxDQUFDO0FBRUYsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFpRSxDQUFDO0FBRTFHLGVBQU8sTUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7Ozs7OztpQkF1QjVCLENBQUM7QUFFSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFFbEUsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQTREM0UsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAqB7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,GAC7D,cAAc,GACd,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErC,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CA4C7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;iBAuB5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CA4D3E,CAAC"}
@@ -0,0 +1,138 @@
1
+ import { l1ReaderConfigMappings } from '@aztec-labs/ethereum/l1-reader';
2
+ import { booleanConfigHelper, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper } from '@aztec-labs/foundation/config';
3
+ import { pickConfigMappings } from '@aztec-labs/foundation/config';
4
+ import { chainConfigMappings } from '@aztec-labs/stdlib/config';
5
+ import { dataConfigMappings } from '@aztec-labs/stdlib/kv-store';
6
+ import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
7
+ import { z } from 'zod';
8
+ export const ProverBrokerConfig = z.object({
9
+ /** If starting a prover broker locally, the max number of retries per proving job */ proverBrokerJobMaxRetries: z.number().int().nonnegative(),
10
+ /** If starting a prover broker locally, the time after which a job times out and gets assigned to a different agent */ proverBrokerJobTimeoutMs: z.number().int().nonnegative(),
11
+ /** If starting a prover broker locally, the interval the broker checks for timed out jobs */ proverBrokerPollIntervalMs: z.number().int().nonnegative(),
12
+ /** If starting a prover broker locally, the directory to store broker data */ dataDirectory: z.string().optional(),
13
+ /** The size of the data store map */ dataStoreMapSizeKb: z.number().int().nonnegative(),
14
+ /** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */ proverBrokerStoreMapSizeKb: z.number().int().nonnegative().optional(),
15
+ /** The prover broker may batch jobs together before writing to the database */ proverBrokerBatchSize: z.number().int().nonnegative(),
16
+ /** How often the job batches get flushed */ proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
17
+ /** The maximum number of epochs to keep results for */ proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative(),
18
+ /** Enable debug replay mode for replaying proving jobs from stored inputs */ proverBrokerDebugReplayEnabled: z.boolean()
19
+ });
20
+ export const proverBrokerConfigMappings = {
21
+ proverBrokerJobTimeoutMs: {
22
+ env: 'PROVER_BROKER_JOB_TIMEOUT_MS',
23
+ description: 'Jobs are retried if not kept alive for this long',
24
+ ...numberConfigHelper(30_000)
25
+ },
26
+ proverBrokerPollIntervalMs: {
27
+ env: 'PROVER_BROKER_POLL_INTERVAL_MS',
28
+ description: 'The interval to check job health status',
29
+ ...numberConfigHelper(1_000)
30
+ },
31
+ proverBrokerJobMaxRetries: {
32
+ env: 'PROVER_BROKER_JOB_MAX_RETRIES',
33
+ description: 'If starting a prover broker locally, the max number of retries per proving job',
34
+ ...numberConfigHelper(3)
35
+ },
36
+ proverBrokerBatchSize: {
37
+ env: 'PROVER_BROKER_BATCH_SIZE',
38
+ description: 'The prover broker writes jobs to disk in batches',
39
+ ...numberConfigHelper(100)
40
+ },
41
+ proverBrokerBatchIntervalMs: {
42
+ env: 'PROVER_BROKER_BATCH_INTERVAL_MS',
43
+ description: 'How often to flush batches to disk',
44
+ ...numberConfigHelper(50)
45
+ },
46
+ proverBrokerMaxEpochsToKeepResultsFor: {
47
+ env: 'PROVER_BROKER_MAX_EPOCHS_TO_KEEP_RESULTS_FOR',
48
+ description: 'The maximum number of epochs to keep results for',
49
+ ...numberConfigHelper(1)
50
+ },
51
+ proverBrokerStoreMapSizeKb: {
52
+ env: 'PROVER_BROKER_STORE_MAP_SIZE_KB',
53
+ ...optionalNumberConfigHelper(),
54
+ description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set."
55
+ },
56
+ proverBrokerDebugReplayEnabled: {
57
+ env: 'PROVER_BROKER_DEBUG_REPLAY_ENABLED',
58
+ description: 'Enable debug replay mode for replaying proving jobs from stored inputs',
59
+ ...booleanConfigHelper(false)
60
+ },
61
+ ...dataConfigMappings,
62
+ ...l1ReaderConfigMappings,
63
+ ...pickConfigMappings(chainConfigMappings, [
64
+ 'rollupVersion'
65
+ ])
66
+ };
67
+ export const defaultProverBrokerConfig = getDefaultConfig(proverBrokerConfigMappings);
68
+ export const ProverAgentConfig = z.object({
69
+ /** The number of prover agents to start */ proverAgentCount: z.number(),
70
+ /** The types of proofs the prover agent can generate */ proverAgentProofTypes: z.array(z.nativeEnum(ProvingRequestType)),
71
+ /** How often the prover agents poll for jobs */ proverAgentPollIntervalMs: z.number(),
72
+ /** The URL where this agent takes jobs from */ proverBrokerUrl: z.string().optional(),
73
+ /** Whether to construct real proofs */ realProofs: z.boolean(),
74
+ /** The type of artificial delay to introduce */ proverTestDelayType: z.enum([
75
+ 'fixed',
76
+ 'realistic'
77
+ ]),
78
+ /** If using fixed delay, the time each operation takes. */ proverTestDelayMs: z.number(),
79
+ /** If using realistic delays, what percentage of realistic times to apply. */ proverTestDelayFactor: z.number(),
80
+ /** The delay (ms) to inject during fake proof verification */ proverTestVerificationDelayMs: z.number().optional(),
81
+ /** Whether to abort pending proving jobs when the orchestrator is cancelled */ cancelJobsOnStop: z.boolean(),
82
+ /** Where to store proving results. Must be accessible to both prover node and agents. If not set will inline-encode the parameters */ proofStore: z.string().optional()
83
+ });
84
+ export const proverAgentConfigMappings = {
85
+ proverAgentCount: {
86
+ env: 'PROVER_AGENT_COUNT',
87
+ description: 'Whether this prover has a local prover agent',
88
+ ...numberConfigHelper(1)
89
+ },
90
+ proverAgentPollIntervalMs: {
91
+ env: 'PROVER_AGENT_POLL_INTERVAL_MS',
92
+ description: 'The interval agents poll for jobs at',
93
+ ...numberConfigHelper(1000)
94
+ },
95
+ proverAgentProofTypes: {
96
+ env: 'PROVER_AGENT_PROOF_TYPES',
97
+ description: 'The types of proofs the prover agent can generate',
98
+ parseEnv: (val)=>val.split(',').map((v)=>ProvingRequestType[v]).filter((v)=>typeof v === 'number')
99
+ },
100
+ proverBrokerUrl: {
101
+ env: 'PROVER_BROKER_HOST',
102
+ description: 'The URL where this agent takes jobs from'
103
+ },
104
+ realProofs: {
105
+ env: 'PROVER_REAL_PROOFS',
106
+ description: 'Whether to construct real proofs',
107
+ ...booleanConfigHelper(true)
108
+ },
109
+ proverTestDelayType: {
110
+ env: 'PROVER_TEST_DELAY_TYPE',
111
+ description: 'The type of artificial delay to introduce',
112
+ defaultValue: 'fixed'
113
+ },
114
+ proverTestDelayMs: {
115
+ env: 'PROVER_TEST_DELAY_MS',
116
+ description: 'Artificial delay to introduce to all operations to the test prover.',
117
+ ...numberConfigHelper(0)
118
+ },
119
+ proverTestDelayFactor: {
120
+ env: 'PROVER_TEST_DELAY_FACTOR',
121
+ description: 'If using realistic delays, what percentage of realistic times to apply.',
122
+ ...numberConfigHelper(1)
123
+ },
124
+ proverTestVerificationDelayMs: {
125
+ env: 'PROVER_TEST_VERIFICATION_DELAY_MS',
126
+ description: 'The delay (ms) to inject during fake proof verification',
127
+ ...numberConfigHelper(10)
128
+ },
129
+ cancelJobsOnStop: {
130
+ env: 'PROVER_CANCEL_JOBS_ON_STOP',
131
+ description: 'Whether to abort pending proving jobs when the orchestrator is cancelled. ' + 'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
132
+ ...booleanConfigHelper(false)
133
+ },
134
+ proofStore: {
135
+ env: 'PROVER_PROOF_STORE',
136
+ description: 'Optional proof input store for the prover'
137
+ }
138
+ };
@@ -0,0 +1,5 @@
1
+ import type { TelemetryClient } from '@aztec-labs/telemetry-client';
2
+ import type { ProverBrokerConfig } from './config.js';
3
+ import { ProvingBroker } from './proving_broker.js';
4
+ export declare function createAndStartProvingBroker(_config: ProverBrokerConfig, client: TelemetryClient): Promise<ProvingBroker>;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFcEUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXBELHdCQUFzQiwyQkFBMkIsQ0FDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUMzQixNQUFNLEVBQUUsZUFBZSxHQUN0QixPQUFPLENBQUMsYUFBYSxDQUFDLENBUXhCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/proving_broker/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAQxB"}
@@ -0,0 +1,13 @@
1
+ import { ProvingBroker } from './proving_broker.js';
2
+ import { InMemoryBrokerDatabase } from './proving_broker_database/memory.js';
3
+ import { KVBrokerDatabase } from './proving_broker_database/persisted.js';
4
+ export async function createAndStartProvingBroker(_config, client) {
5
+ const config = {
6
+ ..._config,
7
+ dataStoreMapSizeKb: _config.proverBrokerStoreMapSizeKb ?? _config.dataStoreMapSizeKb
8
+ };
9
+ const database = config.dataDirectory ? await KVBrokerDatabase.new(config, client) : new InMemoryBrokerDatabase();
10
+ const broker = new ProvingBroker(database, config, client);
11
+ await broker.start();
12
+ return broker;
13
+ }
@@ -0,0 +1,6 @@
1
+ import { EpochNumber } from '@aztec-labs/foundation/branded-types';
2
+ import { type ProofUri, type ProvingJobId } from '@aztec-labs/stdlib/interfaces/server';
3
+ export declare function makeRandomProvingJobId(epochNumber?: EpochNumber): ProvingJobId;
4
+ export declare function makeInputsUri(): ProofUri;
5
+ export declare function makeOutputsUri(): ProofUri;
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssWUFBWSxFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBRzFHLHdCQUFnQixzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEdBQUcsWUFBWSxDQU05RTtBQUVELHdCQUFnQixhQUFhLElBQUksUUFBUSxDQUV4QztBQUVELHdCQUFnQixjQUFjLElBQUksUUFBUSxDQUV6QyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/proving_broker/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAoB,MAAM,sCAAsC,CAAC;AAG1G,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,YAAY,CAM9E;AAED,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAEzC"}
@@ -0,0 +1,13 @@
1
+ import { EpochNumber } from '@aztec-labs/foundation/branded-types';
2
+ import { randomBytes } from '@aztec-labs/foundation/crypto/random';
3
+ import { makeProvingJobId } from '@aztec-labs/stdlib/interfaces/server';
4
+ import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
5
+ export function makeRandomProvingJobId(epochNumber) {
6
+ return makeProvingJobId(epochNumber ?? EpochNumber(1), ProvingRequestType.INBOX_PARITY, randomBytes(8).toString('hex'));
7
+ }
8
+ export function makeInputsUri() {
9
+ return randomBytes(8).toString('hex');
10
+ }
11
+ export function makeOutputsUri() {
12
+ return randomBytes(8).toString('hex');
13
+ }
@@ -0,0 +1,11 @@
1
+ export * from './proving_agent.js';
2
+ export * from './proving_broker.js';
3
+ export * from './rpc.js';
4
+ export * from './proving_broker_database.js';
5
+ export * from './proving_broker_database/memory.js';
6
+ export * from './proving_broker_database/persisted.js';
7
+ export * from './proof_store/index.js';
8
+ export * from './factory.js';
9
+ export * from './config.js';
10
+ export { BrokerCircuitProverFacade } from './broker_prover_facade.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proving_broker/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './proving_agent.js';
2
+ export * from './proving_broker.js';
3
+ export * from './rpc.js';
4
+ export * from './proving_broker_database.js';
5
+ export * from './proving_broker_database/memory.js';
6
+ export * from './proving_broker_database/persisted.js';
7
+ export * from './proof_store/index.js';
8
+ export * from './factory.js';
9
+ export * from './config.js';
10
+ export { BrokerCircuitProverFacade } from './broker_prover_facade.js';
@@ -0,0 +1,3 @@
1
+ import type { ProofStore } from './proof_store.js';
2
+ export declare function createProofStore(config: string | undefined, logger?: import("@aztec-labs/foundation/log").Logger): Promise<ProofStore>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsd0JBQXNCLGdCQUFnQixDQUNwQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDMUIsTUFBTSw4Q0FBNEMsR0FDakQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQVNyQiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/factory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,8CAA4C,GACjD,OAAO,CAAC,UAAU,CAAC,CASrB"}
@@ -0,0 +1,13 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { createFileStore } from '@aztec-labs/stdlib/file-store';
3
+ import { FileStoreProofStore } from './file_store_proof_store.js';
4
+ import { InlineProofStore } from './inline_proof_store.js';
5
+ export async function createProofStore(config, logger = createLogger('prover-client:proof-store')) {
6
+ if (!config) {
7
+ logger.info('Creating inline proof store');
8
+ return new InlineProofStore();
9
+ }
10
+ const fileStore = await createFileStore(config, logger);
11
+ logger.info(`Creating file store proof store at ${config}`);
12
+ return new FileStoreProofStore(fileStore);
13
+ }