@aztec/prover-client 0.0.0-test.1 → 0.0.1-commit.017a351

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 (185) hide show
  1. package/dest/config.d.ts +8 -8
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +26 -2
  4. package/dest/index.d.ts +1 -1
  5. package/dest/light/index.d.ts +2 -0
  6. package/dest/light/index.d.ts.map +1 -0
  7. package/dest/light/index.js +1 -0
  8. package/dest/light/lightweight_checkpoint_builder.d.ts +52 -0
  9. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  10. package/dest/light/lightweight_checkpoint_builder.js +231 -0
  11. package/dest/mocks/fixtures.d.ts +8 -8
  12. package/dest/mocks/fixtures.d.ts.map +1 -1
  13. package/dest/mocks/fixtures.js +36 -17
  14. package/dest/mocks/test_context.d.ts +45 -32
  15. package/dest/mocks/test_context.d.ts.map +1 -1
  16. package/dest/mocks/test_context.js +162 -90
  17. package/dest/orchestrator/block-building-helpers.d.ts +36 -29
  18. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  19. package/dest/orchestrator/block-building-helpers.js +170 -189
  20. package/dest/orchestrator/block-proving-state.d.ts +73 -48
  21. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  22. package/dest/orchestrator/block-proving-state.js +289 -177
  23. package/dest/orchestrator/checkpoint-proving-state.d.ts +83 -0
  24. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
  25. package/dest/orchestrator/checkpoint-proving-state.js +252 -0
  26. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +107 -0
  27. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
  28. package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +151 -0
  29. package/dest/orchestrator/epoch-proving-context.d.ts +51 -0
  30. package/dest/orchestrator/epoch-proving-context.d.ts.map +1 -0
  31. package/dest/orchestrator/epoch-proving-context.js +81 -0
  32. package/dest/orchestrator/epoch-proving-state.d.ts +43 -28
  33. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  34. package/dest/orchestrator/epoch-proving-state.js +179 -73
  35. package/dest/orchestrator/index.d.ts +4 -1
  36. package/dest/orchestrator/index.d.ts.map +1 -1
  37. package/dest/orchestrator/index.js +3 -0
  38. package/dest/orchestrator/orchestrator.d.ts +59 -51
  39. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  40. package/dest/orchestrator/orchestrator.js +808 -385
  41. package/dest/orchestrator/orchestrator_metrics.d.ts +1 -1
  42. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
  43. package/dest/orchestrator/orchestrator_metrics.js +2 -6
  44. package/dest/orchestrator/proving-scheduler.d.ts +72 -0
  45. package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
  46. package/dest/orchestrator/proving-scheduler.js +117 -0
  47. package/dest/orchestrator/top-tree-orchestrator.d.ts +83 -0
  48. package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
  49. package/dest/orchestrator/top-tree-orchestrator.js +182 -0
  50. package/dest/orchestrator/top-tree-proving-scheduler.d.ts +62 -0
  51. package/dest/orchestrator/top-tree-proving-scheduler.d.ts.map +1 -0
  52. package/dest/orchestrator/top-tree-proving-scheduler.js +73 -0
  53. package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
  54. package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
  55. package/dest/orchestrator/top-tree-proving-state.js +185 -0
  56. package/dest/orchestrator/tx-proving-state.d.ts +15 -12
  57. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  58. package/dest/orchestrator/tx-proving-state.js +27 -44
  59. package/dest/prover-client/factory.d.ts +3 -3
  60. package/dest/prover-client/factory.d.ts.map +1 -1
  61. package/dest/prover-client/index.d.ts +1 -1
  62. package/dest/prover-client/prover-client.d.ts +68 -9
  63. package/dest/prover-client/prover-client.d.ts.map +1 -1
  64. package/dest/prover-client/prover-client.js +68 -14
  65. package/dest/prover-client/server-epoch-prover.d.ts +16 -12
  66. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  67. package/dest/prover-client/server-epoch-prover.js +11 -11
  68. package/dest/proving_broker/broker_prover_facade.d.ts +28 -19
  69. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  70. package/dest/proving_broker/broker_prover_facade.js +74 -61
  71. package/dest/proving_broker/config.d.ts +18 -61
  72. package/dest/proving_broker/config.d.ts.map +1 -1
  73. package/dest/proving_broker/config.js +43 -9
  74. package/dest/proving_broker/factory.d.ts +2 -2
  75. package/dest/proving_broker/factory.d.ts.map +1 -1
  76. package/dest/proving_broker/factory.js +5 -1
  77. package/dest/proving_broker/fixtures.d.ts +3 -2
  78. package/dest/proving_broker/fixtures.d.ts.map +1 -1
  79. package/dest/proving_broker/fixtures.js +3 -2
  80. package/dest/proving_broker/index.d.ts +2 -1
  81. package/dest/proving_broker/index.d.ts.map +1 -1
  82. package/dest/proving_broker/index.js +1 -0
  83. package/dest/proving_broker/proof_store/factory.d.ts +2 -5
  84. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
  85. package/dest/proving_broker/proof_store/factory.js +7 -30
  86. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
  87. package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
  88. package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
  89. package/dest/proving_broker/proof_store/index.d.ts +2 -1
  90. package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
  91. package/dest/proving_broker/proof_store/index.js +1 -0
  92. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
  93. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
  94. package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
  95. package/dest/proving_broker/proving_agent.d.ts +8 -12
  96. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  97. package/dest/proving_broker/proving_agent.js +86 -65
  98. package/dest/proving_broker/proving_broker.d.ts +18 -6
  99. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  100. package/dest/proving_broker/proving_broker.js +108 -44
  101. package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
  102. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  103. package/dest/proving_broker/proving_broker_database/memory.js +1 -1
  104. package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
  105. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  106. package/dest/proving_broker/proving_broker_database/persisted.js +401 -11
  107. package/dest/proving_broker/proving_broker_database.d.ts +3 -2
  108. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  109. package/dest/proving_broker/proving_broker_instrumentation.d.ts +3 -1
  110. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  111. package/dest/proving_broker/proving_broker_instrumentation.js +22 -35
  112. package/dest/proving_broker/proving_job_controller.d.ts +11 -10
  113. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  114. package/dest/proving_broker/proving_job_controller.js +92 -62
  115. package/dest/proving_broker/rpc.d.ts +9 -7
  116. package/dest/proving_broker/rpc.d.ts.map +1 -1
  117. package/dest/proving_broker/rpc.js +88 -27
  118. package/dest/test/mock_proof_store.d.ts +9 -0
  119. package/dest/test/mock_proof_store.d.ts.map +1 -0
  120. package/dest/test/mock_proof_store.js +10 -0
  121. package/dest/test/mock_prover.d.ts +23 -17
  122. package/dest/test/mock_prover.d.ts.map +1 -1
  123. package/dest/test/mock_prover.js +38 -20
  124. package/package.json +34 -33
  125. package/src/config.ts +41 -9
  126. package/src/light/index.ts +1 -0
  127. package/src/light/lightweight_checkpoint_builder.ts +320 -0
  128. package/src/mocks/fixtures.ts +46 -40
  129. package/src/mocks/test_context.ts +231 -120
  130. package/src/orchestrator/block-building-helpers.ts +258 -334
  131. package/src/orchestrator/block-proving-state.ts +334 -231
  132. package/src/orchestrator/checkpoint-proving-state.ts +362 -0
  133. package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +271 -0
  134. package/src/orchestrator/epoch-proving-context.ts +101 -0
  135. package/src/orchestrator/epoch-proving-state.ts +239 -111
  136. package/src/orchestrator/index.ts +8 -0
  137. package/src/orchestrator/orchestrator.ts +591 -451
  138. package/src/orchestrator/orchestrator_metrics.ts +2 -6
  139. package/src/orchestrator/proving-scheduler.ts +156 -0
  140. package/src/orchestrator/top-tree-orchestrator.ts +314 -0
  141. package/src/orchestrator/top-tree-proving-scheduler.ts +154 -0
  142. package/src/orchestrator/top-tree-proving-state.ts +220 -0
  143. package/src/orchestrator/tx-proving-state.ts +48 -66
  144. package/src/prover-client/factory.ts +6 -2
  145. package/src/prover-client/prover-client.ts +173 -38
  146. package/src/prover-client/server-epoch-prover.ts +40 -22
  147. package/src/proving_broker/broker_prover_facade.ts +227 -149
  148. package/src/proving_broker/config.ts +49 -8
  149. package/src/proving_broker/factory.ts +2 -1
  150. package/src/proving_broker/fixtures.ts +8 -3
  151. package/src/proving_broker/index.ts +1 -0
  152. package/src/proving_broker/proof_store/factory.ts +10 -32
  153. package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
  154. package/src/proving_broker/proof_store/index.ts +1 -0
  155. package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
  156. package/src/proving_broker/proving_agent.ts +95 -66
  157. package/src/proving_broker/proving_broker.ts +121 -49
  158. package/src/proving_broker/proving_broker_database/memory.ts +3 -2
  159. package/src/proving_broker/proving_broker_database/persisted.ts +31 -15
  160. package/src/proving_broker/proving_broker_database.ts +2 -1
  161. package/src/proving_broker/proving_broker_instrumentation.ts +23 -35
  162. package/src/proving_broker/proving_job_controller.ts +100 -83
  163. package/src/proving_broker/rpc.ts +46 -25
  164. package/src/test/mock_proof_store.ts +14 -0
  165. package/src/test/mock_prover.ts +156 -64
  166. package/dest/bin/get-proof-inputs.d.ts +0 -2
  167. package/dest/bin/get-proof-inputs.d.ts.map +0 -1
  168. package/dest/bin/get-proof-inputs.js +0 -51
  169. package/dest/block_builder/index.d.ts +0 -6
  170. package/dest/block_builder/index.d.ts.map +0 -1
  171. package/dest/block_builder/index.js +0 -1
  172. package/dest/block_builder/light.d.ts +0 -33
  173. package/dest/block_builder/light.d.ts.map +0 -1
  174. package/dest/block_builder/light.js +0 -82
  175. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
  176. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
  177. package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -51
  178. package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
  179. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
  180. package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
  181. package/src/bin/get-proof-inputs.ts +0 -59
  182. package/src/block_builder/index.ts +0 -6
  183. package/src/block_builder/light.ts +0 -101
  184. package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -72
  185. package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
@@ -1,9 +1,12 @@
1
- import { sha256 } from '@aztec/foundation/crypto';
1
+ import { asyncPool } from '@aztec/foundation/async-pool';
2
+ import { EpochNumber } from '@aztec/foundation/branded-types';
3
+ import { chunk } from '@aztec/foundation/collection';
2
4
  import { createLogger } from '@aztec/foundation/log';
3
5
  import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
4
6
  import { truncate } from '@aztec/foundation/string';
5
7
  import { makeProvingJobId } from '@aztec/stdlib/interfaces/server';
6
8
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
9
+ import { createHash } from 'node:crypto';
7
10
  import { InlineProofStore } from './proof_store/index.js';
8
11
  // Perform a snapshot sync every 30 seconds
9
12
  const SNAPSHOT_SYNC_INTERVAL_MS = 30_000;
@@ -14,20 +17,20 @@ export class BrokerCircuitProverFacade {
14
17
  proofStore;
15
18
  failedProofStore;
16
19
  pollIntervalMs;
17
- log;
18
20
  jobs;
19
21
  runningPromise;
20
22
  timeOfLastSnapshotSync;
21
23
  jobsToRetrieve;
22
- constructor(broker, proofStore = new InlineProofStore(), failedProofStore, pollIntervalMs = 1000, log = createLogger('prover-client:broker-circuit-prover-facade')){
24
+ log;
25
+ constructor(broker, proofStore = new InlineProofStore(), failedProofStore, pollIntervalMs = 1000, bindings){
23
26
  this.broker = broker;
24
27
  this.proofStore = proofStore;
25
28
  this.failedProofStore = failedProofStore;
26
29
  this.pollIntervalMs = pollIntervalMs;
27
- this.log = log;
28
30
  this.jobs = new Map();
29
31
  this.timeOfLastSnapshotSync = Date.now();
30
32
  this.jobsToRetrieve = new Set();
33
+ this.log = createLogger('prover-client:broker-circuit-prover-facade', bindings);
31
34
  }
32
35
  /**
33
36
  * This is a critical section. This function can not be async since it writes
@@ -49,7 +52,13 @@ export class BrokerCircuitProverFacade {
49
52
  }
50
53
  // Create a promise for this job id, regardless of whether it was enqueued at the broker
51
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)
52
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
+ }));
53
62
  const abortFn = ()=>{
54
63
  signal?.removeEventListener('abort', abortFn);
55
64
  void this.broker.cancelProvingJob(id).catch((err)=>this.log.warn(`Error cancelling job id=${id}`, err));
@@ -67,7 +76,7 @@ export class BrokerCircuitProverFacade {
67
76
  isEnqueued: false
68
77
  };
69
78
  }
70
- async enqueueJob(id, type, inputs, epochNumber = 0, signal) {
79
+ async enqueueJob(id, type, inputs, epochNumber = EpochNumber.ZERO, signal) {
71
80
  const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
72
81
  if (isEnqueued) {
73
82
  return job.deferred.promise;
@@ -75,23 +84,28 @@ export class BrokerCircuitProverFacade {
75
84
  try {
76
85
  const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
77
86
  job.inputsUri = inputsUri;
87
+ // Send the job to the broker
78
88
  const jobStatus = await this.broker.enqueueProvingJob({
79
89
  id,
80
90
  type,
81
91
  inputsUri,
82
92
  epochNumber
83
93
  });
94
+ const jobLogText = `id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`;
95
+ const jobLogData = {
96
+ provingJobId: id,
97
+ provingJobType: ProvingRequestType[type],
98
+ epochNumber,
99
+ inputsUri: truncate(inputsUri),
100
+ status: jobStatus.status,
101
+ numOutstandingJobs: this.jobs.size
102
+ };
84
103
  // If we are here then the job was successfully accepted by the broker
85
104
  // the returned status is for before any action was performed
86
105
  if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
87
106
  // Job was already completed by the broker
88
107
  // No need to notify the broker on aborted job
89
- this.log.verbose(`Job already completed when sent to broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`, {
90
- provingJobId: id,
91
- provingJobType: ProvingRequestType[type],
92
- epochNumber,
93
- inputsUri: truncate(inputsUri)
94
- });
108
+ this.log.verbose(`Job already completed when sent to broker ${jobLogText}`, jobLogData);
95
109
  // Job was not enqueued. It must be completed already, add to our set of already completed jobs
96
110
  this.jobsToRetrieve.add(id);
97
111
  } else {
@@ -99,21 +113,10 @@ export class BrokerCircuitProverFacade {
99
113
  signal?.addEventListener('abort', job.abortFn);
100
114
  // Job added for the first time
101
115
  if (jobStatus.status === 'not-found') {
102
- this.log.verbose(`Job enqueued with broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`, {
103
- provingJobId: id,
104
- provingJobType: ProvingRequestType[type],
105
- epochNumber,
106
- inputsUri: truncate(inputsUri),
107
- numOutstandingJobs: this.jobs.size
108
- });
116
+ this.log.verbose(`Job enqueued with broker ${jobLogText}`, jobLogData);
109
117
  } else {
110
118
  // Job was previously sent to the broker but is not completed
111
- this.log.verbose(`Job already in queue or in progress when sent to broker id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`, {
112
- provingJobId: id,
113
- provingJobType: ProvingRequestType[type],
114
- epochNumber,
115
- inputsUri: truncate(inputsUri)
116
- });
119
+ this.log.verbose(`Job already in queue or in progress when sent to broker ${jobLogText}`, jobLogData);
117
120
  }
118
121
  }
119
122
  } catch (err) {
@@ -155,17 +158,13 @@ export class BrokerCircuitProverFacade {
155
158
  // We collect all returned notifications and return them
156
159
  const allCompleted = new Set();
157
160
  try {
158
- let numRequests = 0;
159
- while(ids.length > 0){
160
- const slice = ids.splice(0, SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE);
161
- const completed = await this.broker.getCompletedJobs(slice);
161
+ const batches = ids.length > 0 ? chunk(ids, SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE) : [
162
+ []
163
+ ];
164
+ await asyncPool(1, batches, async (batch)=>{
165
+ const completed = await this.broker.getCompletedJobs(batch);
162
166
  completed.forEach((id)=>allCompleted.add(id));
163
- ++numRequests;
164
- }
165
- if (numRequests === 0) {
166
- const final = await this.broker.getCompletedJobs([]);
167
- final.forEach((id)=>allCompleted.add(id));
168
- }
167
+ });
169
168
  } catch (err) {
170
169
  this.log.error(`Error thrown when requesting completed job notifications from the broker`, err);
171
170
  }
@@ -265,12 +264,8 @@ export class BrokerCircuitProverFacade {
265
264
  };
266
265
  const toBeRetrieved = Array.from(this.jobsToRetrieve.values()).map((id)=>this.jobs.get(id)).filter((x)=>x !== undefined);
267
266
  const totalJobsToRetrieve = toBeRetrieved.length;
268
- let totalJobsRetrieved = 0;
269
- while(toBeRetrieved.length > 0){
270
- const slice = toBeRetrieved.splice(0, MAX_CONCURRENT_JOB_SETTLED_REQUESTS);
271
- const results = await Promise.all(slice.map((job)=>processJob(job)));
272
- totalJobsRetrieved += results.filter((x)=>x).length;
273
- }
267
+ const results = await asyncPool(MAX_CONCURRENT_JOB_SETTLED_REQUESTS, toBeRetrieved, (job)=>processJob(job));
268
+ const totalJobsRetrieved = results.filter((x)=>x).length;
274
269
  if (totalJobsToRetrieve > 0) {
275
270
  this.log.verbose(`Successfully retrieved ${totalJobsRetrieved} of ${totalJobsToRetrieve} jobs that should be ready, total ready jobs is now: ${this.jobsToRetrieve.size}`);
276
271
  }
@@ -305,40 +300,58 @@ export class BrokerCircuitProverFacade {
305
300
  return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber), ProvingRequestType.PUBLIC_VM, inputs, epochNumber, signal);
306
301
  }
307
302
  getBaseParityProof(inputs, signal, epochNumber) {
308
- return this.enqueueJob(this.generateId(ProvingRequestType.BASE_PARITY, inputs, epochNumber), ProvingRequestType.BASE_PARITY, inputs, epochNumber, signal);
303
+ return this.enqueueJob(this.generateId(ProvingRequestType.PARITY_BASE, inputs, epochNumber), ProvingRequestType.PARITY_BASE, inputs, epochNumber, signal);
309
304
  }
310
- getBlockMergeRollupProof(input, signal, epochNumber) {
311
- return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber, signal);
305
+ getTxMergeRollupProof(input, signal, epochNumber) {
306
+ return this.enqueueJob(this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber, signal);
307
+ }
308
+ getPublicChonkVerifierProof(inputs, signal, epochNumber) {
309
+ return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber), ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber, signal);
310
+ }
311
+ getPrivateTxBaseRollupProof(baseRollupInput, signal, epochNumber) {
312
+ return this.enqueueJob(this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber), ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber, signal);
313
+ }
314
+ getPublicTxBaseRollupProof(inputs, signal, epochNumber) {
315
+ return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber), ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber, signal);
316
+ }
317
+ getRootParityProof(inputs, signal, epochNumber) {
318
+ return this.enqueueJob(this.generateId(ProvingRequestType.PARITY_ROOT, inputs, epochNumber), ProvingRequestType.PARITY_ROOT, inputs, epochNumber, signal);
319
+ }
320
+ getBlockRootFirstRollupProof(input, signal, epochNumber) {
321
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber, signal);
322
+ }
323
+ getBlockRootSingleTxFirstRollupProof(input, signal, epochNumber) {
324
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber, signal);
325
+ }
326
+ getBlockRootEmptyTxFirstRollupProof(input, signal, epochNumber) {
327
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber, signal);
312
328
  }
313
329
  getBlockRootRollupProof(input, signal, epochNumber) {
314
330
  return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
315
331
  }
316
- getSingleTxBlockRootRollupProof(input, signal, epochNumber) {
317
- return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
332
+ getBlockRootSingleTxRollupProof(input, signal, epochNumber) {
333
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber, signal);
318
334
  }
319
- getEmptyBlockRootRollupProof(input, signal, epochNumber) {
320
- return this.enqueueJob(this.generateId(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
335
+ getBlockMergeRollupProof(input, signal, epochNumber) {
336
+ return this.enqueueJob(this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber, signal);
321
337
  }
322
- getMergeRollupProof(input, signal, epochNumber) {
323
- return this.enqueueJob(this.generateId(ProvingRequestType.MERGE_ROLLUP, input, epochNumber), ProvingRequestType.MERGE_ROLLUP, input, epochNumber, signal);
338
+ getCheckpointRootRollupProof(input, signal, epochNumber) {
339
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber, signal);
324
340
  }
325
- getPrivateBaseRollupProof(baseRollupInput, signal, epochNumber) {
326
- return this.enqueueJob(this.generateId(ProvingRequestType.PRIVATE_BASE_ROLLUP, baseRollupInput, epochNumber), ProvingRequestType.PRIVATE_BASE_ROLLUP, baseRollupInput, epochNumber, signal);
341
+ getCheckpointRootSingleBlockRollupProof(input, signal, epochNumber) {
342
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber, signal);
327
343
  }
328
- getPublicBaseRollupProof(inputs, signal, epochNumber) {
329
- return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, epochNumber), ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, epochNumber, signal);
344
+ getCheckpointPaddingRollupProof(input, signal, epochNumber) {
345
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber, signal);
330
346
  }
331
- getRootParityProof(inputs, signal, epochNumber) {
332
- return this.enqueueJob(this.generateId(ProvingRequestType.ROOT_PARITY, inputs, epochNumber), ProvingRequestType.ROOT_PARITY, inputs, epochNumber, signal);
347
+ getCheckpointMergeRollupProof(input, signal, epochNumber) {
348
+ return this.enqueueJob(this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber), ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber, signal);
333
349
  }
334
350
  getRootRollupProof(input, signal, epochNumber) {
335
351
  return this.enqueueJob(this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber), ProvingRequestType.ROOT_ROLLUP, input, epochNumber, signal);
336
352
  }
337
- getTubeProof(tubeInput, signal, epochNumber) {
338
- return this.enqueueJob(this.generateId(ProvingRequestType.TUBE_PROOF, tubeInput, epochNumber), ProvingRequestType.TUBE_PROOF, tubeInput, epochNumber, signal);
339
- }
340
- generateId(type, inputs, epochNumber = 0) {
341
- const inputsHash = sha256(inputs.toBuffer());
342
- return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
353
+ generateId(type, inputs, epochNumber = EpochNumber.ZERO) {
354
+ const inputsHash = createHash('sha256').update(inputs.toBuffer()).digest('hex');
355
+ return makeProvingJobId(epochNumber, type, inputsHash);
343
356
  }
344
357
  }
@@ -1,83 +1,40 @@
1
- import { type L1ReaderConfig } from '@aztec/ethereum';
1
+ import { type L1ReaderConfig } from '@aztec/ethereum/l1-reader';
2
2
  import { type ConfigMappingsType } from '@aztec/foundation/config';
3
- import { type DataStoreConfig } from '@aztec/kv-store/config';
3
+ import { type ChainConfig } from '@aztec/stdlib/config';
4
+ import { type DataStoreConfig } from '@aztec/stdlib/kv-store';
4
5
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
5
6
  import { z } from 'zod';
6
7
  export declare const ProverBrokerConfig: z.ZodObject<{
7
- /** If starting a prover broker locally, the max number of retries per proving job */
8
8
  proverBrokerJobMaxRetries: z.ZodNumber;
9
- /** If starting a prover broker locally, the time after which a job times out and gets assigned to a different agent */
10
9
  proverBrokerJobTimeoutMs: z.ZodNumber;
11
- /** If starting a prover broker locally, the interval the broker checks for timed out jobs */
12
10
  proverBrokerPollIntervalMs: z.ZodNumber;
13
- /** If starting a prover broker locally, the directory to store broker data */
14
11
  dataDirectory: z.ZodOptional<z.ZodString>;
15
- /** The size of the data store map */
16
- dataStoreMapSizeKB: z.ZodNumber;
17
- /** The prover broker may batch jobs together before writing to the database */
12
+ dataStoreMapSizeKb: z.ZodNumber;
13
+ proverBrokerStoreMapSizeKb: z.ZodOptional<z.ZodNumber>;
18
14
  proverBrokerBatchSize: z.ZodNumber;
19
- /** How often the job batches get flushed */
20
15
  proverBrokerBatchIntervalMs: z.ZodNumber;
21
- /** The maximum number of epochs to keep results for */
22
16
  proverBrokerMaxEpochsToKeepResultsFor: z.ZodNumber;
23
- }, "strip", z.ZodTypeAny, {
24
- proverBrokerJobMaxRetries: number;
25
- proverBrokerJobTimeoutMs: number;
26
- proverBrokerPollIntervalMs: number;
27
- dataStoreMapSizeKB: number;
28
- proverBrokerBatchSize: number;
29
- proverBrokerBatchIntervalMs: number;
30
- proverBrokerMaxEpochsToKeepResultsFor: number;
31
- dataDirectory?: string | undefined;
32
- }, {
33
- proverBrokerJobMaxRetries: number;
34
- proverBrokerJobTimeoutMs: number;
35
- proverBrokerPollIntervalMs: number;
36
- dataStoreMapSizeKB: number;
37
- proverBrokerBatchSize: number;
38
- proverBrokerBatchIntervalMs: number;
39
- proverBrokerMaxEpochsToKeepResultsFor: number;
40
- dataDirectory?: string | undefined;
41
- }>;
42
- export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKB' | 'dataDirectory'> & L1ReaderConfig;
17
+ proverBrokerDebugReplayEnabled: z.ZodBoolean;
18
+ }, z.core.$strip>;
19
+ export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> & L1ReaderConfig & Pick<ChainConfig, 'rollupVersion'>;
43
20
  export declare const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>;
44
21
  export declare const defaultProverBrokerConfig: ProverBrokerConfig;
45
22
  export declare const ProverAgentConfig: z.ZodObject<{
46
- /** The number of prover agents to start */
47
23
  proverAgentCount: z.ZodNumber;
48
- /** The types of proofs the prover agent can generate */
49
- proverAgentProofTypes: z.ZodArray<z.ZodNativeEnum<typeof ProvingRequestType>, "many">;
50
- /** How often the prover agents poll for jobs */
24
+ proverAgentProofTypes: z.ZodArray<z.ZodEnum<typeof ProvingRequestType>>;
51
25
  proverAgentPollIntervalMs: z.ZodNumber;
52
- /** The URL where this agent takes jobs from */
53
26
  proverBrokerUrl: z.ZodOptional<z.ZodString>;
54
- /** Whether to construct real proofs */
55
27
  realProofs: z.ZodBoolean;
56
- /** The type of artificial delay to introduce */
57
- proverTestDelayType: z.ZodEnum<["fixed", "realistic"]>;
58
- /** If using fixed delay, the time each operation takes. */
28
+ proverTestDelayType: z.ZodEnum<{
29
+ fixed: "fixed";
30
+ realistic: "realistic";
31
+ }>;
59
32
  proverTestDelayMs: z.ZodNumber;
60
- /** If using realistic delays, what percentage of realistic times to apply. */
61
33
  proverTestDelayFactor: z.ZodNumber;
62
- }, "strip", z.ZodTypeAny, {
63
- proverAgentCount: number;
64
- proverAgentProofTypes: ProvingRequestType[];
65
- proverAgentPollIntervalMs: number;
66
- realProofs: boolean;
67
- proverTestDelayType: "fixed" | "realistic";
68
- proverTestDelayMs: number;
69
- proverTestDelayFactor: number;
70
- proverBrokerUrl?: string | undefined;
71
- }, {
72
- proverAgentCount: number;
73
- proverAgentProofTypes: ProvingRequestType[];
74
- proverAgentPollIntervalMs: number;
75
- realProofs: boolean;
76
- proverTestDelayType: "fixed" | "realistic";
77
- proverTestDelayMs: number;
78
- proverTestDelayFactor: number;
79
- proverBrokerUrl?: string | undefined;
80
- }>;
34
+ proverTestVerificationDelayMs: z.ZodOptional<z.ZodNumber>;
35
+ cancelJobsOnStop: z.ZodBoolean;
36
+ proofStore: z.ZodOptional<z.ZodString>;
37
+ }, z.core.$strip>;
81
38
  export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
82
39
  export declare const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig>;
83
- //# sourceMappingURL=config.d.ts.map
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsZUFBTyxNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7aUJBcUI3QixDQUFDO0FBRUgsTUFBTSxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxHQUNqRSxJQUFJLENBQUMsZUFBZSxFQUFFLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxHQUM3RCxjQUFjLEdBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUVyQyxlQUFPLE1BQU0sMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBNEM3RSxDQUFDO0FBRUYsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFpRSxDQUFDO0FBRTFHLGVBQU8sTUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7Ozs7OztpQkF1QjVCLENBQUM7QUFFSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFFbEUsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQTREM0UsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,qFAAqF;;IAErF,uHAAuH;;IAEvH,6FAA6F;;IAE7F,8EAA8E;;IAE9E,qCAAqC;;IAErC,+EAA+E;;IAE/E,4CAA4C;;IAE5C,uDAAuD;;;;;;;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,GAC7D,cAAc,CAAC;AAEjB,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAiC7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;IAC5B,2CAA2C;;IAE3C,wDAAwD;;IAExD,gDAAgD;;IAEhD,+CAA+C;;IAE/C,uCAAuC;;IAEvC,gDAAgD;;IAEhD,2DAA2D;;IAE3D,8EAA8E;;;;;;;;;;;;;;;;;;;;EAE9E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CA4C3E,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,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"}
@@ -1,6 +1,8 @@
1
- import { l1ReaderConfigMappings } from '@aztec/ethereum';
2
- import { booleanConfigHelper, getDefaultConfig, numberConfigHelper } from '@aztec/foundation/config';
3
- import { dataConfigMappings } from '@aztec/kv-store/config';
1
+ import { l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
2
+ import { booleanConfigHelper, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
3
+ import { pickConfigMappings } from '@aztec/foundation/config';
4
+ import { chainConfigMappings } from '@aztec/stdlib/config';
5
+ import { dataConfigMappings } from '@aztec/stdlib/kv-store';
4
6
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
5
7
  import { z } from 'zod';
6
8
  export const ProverBrokerConfig = z.object({
@@ -8,10 +10,12 @@ export const ProverBrokerConfig = z.object({
8
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(),
9
11
  /** If starting a prover broker locally, the interval the broker checks for timed out jobs */ proverBrokerPollIntervalMs: z.number().int().nonnegative(),
10
12
  /** If starting a prover broker locally, the directory to store broker data */ dataDirectory: z.string().optional(),
11
- /** The size of the data store map */ dataStoreMapSizeKB: z.number().int().nonnegative(),
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(),
12
15
  /** The prover broker may batch jobs together before writing to the database */ proverBrokerBatchSize: z.number().int().nonnegative(),
13
16
  /** How often the job batches get flushed */ proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
14
- /** The maximum number of epochs to keep results for */ proverBrokerMaxEpochsToKeepResultsFor: 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()
15
19
  });
16
20
  export const proverBrokerConfigMappings = {
17
21
  proverBrokerJobTimeoutMs: {
@@ -44,8 +48,21 @@ export const proverBrokerConfigMappings = {
44
48
  description: 'The maximum number of epochs to keep results for',
45
49
  ...numberConfigHelper(1)
46
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,
47
62
  ...l1ReaderConfigMappings,
48
- ...dataConfigMappings
63
+ ...pickConfigMappings(chainConfigMappings, [
64
+ 'rollupVersion'
65
+ ])
49
66
  };
50
67
  export const defaultProverBrokerConfig = getDefaultConfig(proverBrokerConfigMappings);
51
68
  export const ProverAgentConfig = z.object({
@@ -59,7 +76,10 @@ export const ProverAgentConfig = z.object({
59
76
  'realistic'
60
77
  ]),
61
78
  /** If using fixed delay, the time each operation takes. */ proverTestDelayMs: z.number(),
62
- /** If using realistic delays, what percentage of realistic times to apply. */ proverTestDelayFactor: 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()
63
83
  });
64
84
  export const proverAgentConfigMappings = {
65
85
  proverAgentCount: {
@@ -70,7 +90,7 @@ export const proverAgentConfigMappings = {
70
90
  proverAgentPollIntervalMs: {
71
91
  env: 'PROVER_AGENT_POLL_INTERVAL_MS',
72
92
  description: 'The interval agents poll for jobs at',
73
- ...numberConfigHelper(100)
93
+ ...numberConfigHelper(1000)
74
94
  },
75
95
  proverAgentProofTypes: {
76
96
  env: 'PROVER_AGENT_PROOF_TYPES',
@@ -84,7 +104,7 @@ export const proverAgentConfigMappings = {
84
104
  realProofs: {
85
105
  env: 'PROVER_REAL_PROOFS',
86
106
  description: 'Whether to construct real proofs',
87
- ...booleanConfigHelper(false)
107
+ ...booleanConfigHelper(true)
88
108
  },
89
109
  proverTestDelayType: {
90
110
  env: 'PROVER_TEST_DELAY_TYPE',
@@ -100,5 +120,19 @@ export const proverAgentConfigMappings = {
100
120
  env: 'PROVER_TEST_DELAY_FACTOR',
101
121
  description: 'If using realistic delays, what percentage of realistic times to apply.',
102
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'
103
137
  }
104
138
  };
@@ -1,5 +1,5 @@
1
1
  import type { TelemetryClient } from '@aztec/telemetry-client';
2
2
  import type { ProverBrokerConfig } from './config.js';
3
3
  import { ProvingBroker } from './proving_broker.js';
4
- export declare function createAndStartProvingBroker(config: ProverBrokerConfig, client: TelemetryClient): Promise<ProvingBroker>;
5
- //# sourceMappingURL=factory.d.ts.map
4
+ export declare function createAndStartProvingBroker(_config: ProverBrokerConfig, client: TelemetryClient): Promise<ProvingBroker>;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXBELHdCQUFzQiwyQkFBMkIsQ0FDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUMzQixNQUFNLEVBQUUsZUFBZSxHQUN0QixPQUFPLENBQUMsYUFBYSxDQUFDLENBUXhCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/proving_broker/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAOxB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/proving_broker/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,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"}
@@ -1,7 +1,11 @@
1
1
  import { ProvingBroker } from './proving_broker.js';
2
2
  import { InMemoryBrokerDatabase } from './proving_broker_database/memory.js';
3
3
  import { KVBrokerDatabase } from './proving_broker_database/persisted.js';
4
- export async function createAndStartProvingBroker(config, client) {
4
+ export async function createAndStartProvingBroker(_config, client) {
5
+ const config = {
6
+ ..._config,
7
+ dataStoreMapSizeKb: _config.proverBrokerStoreMapSizeKb ?? _config.dataStoreMapSizeKb
8
+ };
5
9
  const database = config.dataDirectory ? await KVBrokerDatabase.new(config, client) : new InMemoryBrokerDatabase();
6
10
  const broker = new ProvingBroker(database, config, client);
7
11
  await broker.start();
@@ -1,5 +1,6 @@
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
1
2
  import { type ProofUri, type ProvingJobId } from '@aztec/stdlib/interfaces/server';
2
- export declare function makeRandomProvingJobId(epochNumber?: number): ProvingJobId;
3
+ export declare function makeRandomProvingJobId(epochNumber?: EpochNumber): ProvingJobId;
3
4
  export declare function makeInputsUri(): ProofUri;
4
5
  export declare function makeOutputsUri(): ProofUri;
5
- //# sourceMappingURL=fixtures.d.ts.map
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssWUFBWSxFQUFvQixNQUFNLGlDQUFpQyxDQUFDO0FBR3JHLHdCQUFnQixzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEdBQUcsWUFBWSxDQU05RTtBQUVELHdCQUFnQixhQUFhLElBQUksUUFBUSxDQUV4QztBQUVELHdCQUFnQixjQUFjLElBQUksUUFBUSxDQUV6QyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/proving_broker/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAGrG,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAEzE;AAED,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAEzC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/proving_broker/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAGrG,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,YAAY,CAM9E;AAED,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAEzC"}
@@ -1,8 +1,9 @@
1
- import { randomBytes } from '@aztec/foundation/crypto';
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
2
+ import { randomBytes } from '@aztec/foundation/crypto/random';
2
3
  import { makeProvingJobId } from '@aztec/stdlib/interfaces/server';
3
4
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
4
5
  export function makeRandomProvingJobId(epochNumber) {
5
- return makeProvingJobId(epochNumber ?? 1, ProvingRequestType.BASE_PARITY, randomBytes(8).toString('hex'));
6
+ return makeProvingJobId(epochNumber ?? EpochNumber(1), ProvingRequestType.PARITY_BASE, randomBytes(8).toString('hex'));
6
7
  }
7
8
  export function makeInputsUri() {
8
9
  return randomBytes(8).toString('hex');
@@ -7,4 +7,5 @@ export * from './proving_broker_database/persisted.js';
7
7
  export * from './proof_store/index.js';
8
8
  export * from './factory.js';
9
9
  export * from './config.js';
10
- //# sourceMappingURL=index.d.ts.map
10
+ export { BrokerCircuitProverFacade } from './broker_prover_facade.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyJ9
@@ -1 +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"}
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"}
@@ -7,3 +7,4 @@ export * from './proving_broker_database/persisted.js';
7
7
  export * from './proof_store/index.js';
8
8
  export * from './factory.js';
9
9
  export * from './config.js';
10
+ export { BrokerCircuitProverFacade } from './broker_prover_facade.js';
@@ -1,6 +1,3 @@
1
- import { GoogleCloudStorageProofStore } from './gcs_proof_store.js';
2
- import { InlineProofStore } from './inline_proof_store.js';
3
1
  import type { ProofStore } from './proof_store.js';
4
- export declare function createProofStore(config: string | undefined, logger?: import("@aztec/foundation/log").Logger): InlineProofStore | GoogleCloudStorageProofStore;
5
- export declare function createProofStoreForUri(uri: string, logger?: import("@aztec/foundation/log").Logger): Pick<ProofStore, 'getProofInput' | 'getProofOutput'>;
6
- //# sourceMappingURL=factory.d.ts.map
2
+ export declare function createProofStore(config: string | undefined, logger?: import("@aztec/foundation/log").Logger): Promise<ProofStore>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsd0JBQXNCLGdCQUFnQixDQUNwQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDMUIsTUFBTSx5Q0FBNEMsR0FDakQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQVNyQiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,yCAA4C,mDAmB9G;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,yCAA4C,GACjD,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,gBAAgB,CAAC,CAWtD"}
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,yCAA4C,GACjD,OAAO,CAAC,UAAU,CAAC,CASrB"}
@@ -1,36 +1,13 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { GoogleCloudStorageProofStore } from './gcs_proof_store.js';
2
+ import { createFileStore } from '@aztec/stdlib/file-store';
3
+ import { FileStoreProofStore } from './file_store_proof_store.js';
3
4
  import { InlineProofStore } from './inline_proof_store.js';
4
- export function createProofStore(config, logger = createLogger('prover-client:proof-store')) {
5
- if (config === undefined) {
5
+ export async function createProofStore(config, logger = createLogger('prover-client:proof-store')) {
6
+ if (!config) {
6
7
  logger.info('Creating inline proof store');
7
8
  return new InlineProofStore();
8
- } else if (config.startsWith('gs://')) {
9
- try {
10
- const url = new URL(config);
11
- const bucket = url.host;
12
- const path = url.pathname.replace(/^\/+/, '');
13
- logger.info(`Creating google cloud proof store at ${bucket}`, {
14
- bucket,
15
- path
16
- });
17
- return new GoogleCloudStorageProofStore(bucket, path);
18
- } catch (err) {
19
- throw new Error(`Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
20
- }
21
- } else {
22
- throw new Error(`Unknown proof store config: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
23
- }
24
- }
25
- export function createProofStoreForUri(uri, logger = createLogger('prover-client:proof-store')) {
26
- if (uri.startsWith('data://')) {
27
- return createProofStore(undefined, logger);
28
- } else if (uri.startsWith('gs://')) {
29
- const url = new URL(uri);
30
- const basePath = url.pathname.replace(/^\/+/, '').split('/').slice(0, -3);
31
- url.pathname = basePath.join('/');
32
- return createProofStore(uri, logger);
33
- } else {
34
- throw new Error(`Unknown proof store config: '${uri}'. Supported protocols are 'data://' and 'gs://'.`);
35
9
  }
10
+ const fileStore = await createFileStore(config, logger);
11
+ logger.info(`Creating file store proof store at ${config}`);
12
+ return new FileStoreProofStore(fileStore);
36
13
  }
@@ -0,0 +1,18 @@
1
+ import type { FileStore } from '@aztec/stdlib/file-store';
2
+ import { type ProofUri, type ProvingJobId, type ProvingJobInputs, type ProvingJobInputsMap, ProvingJobResult, type ProvingJobResultsMap } from '@aztec/stdlib/interfaces/server';
3
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
4
+ import type { ProofStore } from './proof_store.js';
5
+ /**
6
+ * A proof store implementation backed by a generic FileStore.
7
+ * Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
8
+ */
9
+ export declare class FileStoreProofStore implements ProofStore {
10
+ private readonly fileStore;
11
+ constructor(fileStore: FileStore);
12
+ saveProofInput<T extends ProvingRequestType>(id: ProvingJobId, type: T, inputs: ProvingJobInputsMap[T]): Promise<ProofUri>;
13
+ saveProofOutput<T extends ProvingRequestType>(id: ProvingJobId, type: T, result: ProvingJobResultsMap[T]): Promise<ProofUri>;
14
+ getProofInput(uri: ProofUri): Promise<ProvingJobInputs>;
15
+ getProofOutput(uri: ProofUri): Promise<ProvingJobResult>;
16
+ private extractTypeFromUri;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV9wcm9vZl9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZpbGVfc3RvcmVfcHJvb2Zfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLEtBQUssUUFBUSxFQUNiLEtBQUssWUFBWSxFQUNqQixLQUFLLGdCQUFnQixFQUNyQixLQUFLLG1CQUFtQixFQUN4QixnQkFBZ0IsRUFDaEIsS0FBSyxvQkFBb0IsRUFFMUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUtuRDs7O0dBR0c7QUFDSCxxQkFBYSxtQkFBb0IsWUFBVyxVQUFVO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUF0QyxZQUE2QixTQUFTLEVBQUUsU0FBUyxFQUFJO0lBRS9DLGNBQWMsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEVBQy9DLEVBQUUsRUFBRSxZQUFZLEVBQ2hCLElBQUksRUFBRSxDQUFDLEVBQ1AsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLENBSW5CO0lBRUssZUFBZSxDQUFDLENBQUMsU0FBUyxrQkFBa0IsRUFDaEQsRUFBRSxFQUFFLFlBQVksRUFDaEIsSUFBSSxFQUFFLENBQUMsRUFDUCxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FNbkI7SUFFSyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FTNUQ7SUFFSyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FPN0Q7SUFFRCxPQUFPLENBQUMsa0JBQWtCO0NBVTNCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_store_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/file_store_proof_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,SAAS,EAAI;IAE/C,cAAc,CAAC,CAAC,SAAS,kBAAkB,EAC/C,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAInB;IAEK,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAChD,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAMnB;IAEK,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS5D;IAEK,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO7D;IAED,OAAO,CAAC,kBAAkB;CAU3B"}