@aztec/prover-client 0.75.0 → 0.76.1

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 (64) hide show
  1. package/dest/mocks/test_context.d.ts +4 -4
  2. package/dest/mocks/test_context.d.ts.map +1 -1
  3. package/dest/mocks/test_context.js +17 -19
  4. package/dest/orchestrator/block-building-helpers.d.ts +1 -1
  5. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  6. package/dest/orchestrator/block-building-helpers.js +5 -23
  7. package/dest/orchestrator/block-proving-state.d.ts +2 -2
  8. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  9. package/dest/orchestrator/block-proving-state.js +16 -16
  10. package/dest/orchestrator/epoch-proving-state.d.ts +2 -2
  11. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  12. package/dest/orchestrator/epoch-proving-state.js +8 -11
  13. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  14. package/dest/orchestrator/orchestrator.js +35 -35
  15. package/dest/orchestrator/tx-proving-state.d.ts +2 -2
  16. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  17. package/dest/orchestrator/tx-proving-state.js +14 -14
  18. package/dest/proving_broker/proving_agent.d.ts +1 -0
  19. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  20. package/dest/proving_broker/proving_agent.js +26 -11
  21. package/dest/proving_broker/proving_broker.d.ts +4 -7
  22. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  23. package/dest/proving_broker/proving_broker.js +21 -23
  24. package/dest/proving_broker/rpc.d.ts +19 -4
  25. package/dest/proving_broker/rpc.d.ts.map +1 -1
  26. package/dest/proving_broker/rpc.js +28 -10
  27. package/dest/test/mock_prover.d.ts +2 -0
  28. package/dest/test/mock_prover.d.ts.map +1 -1
  29. package/dest/test/mock_prover.js +5 -1
  30. package/package.json +12 -12
  31. package/src/mocks/test_context.ts +23 -22
  32. package/src/orchestrator/block-building-helpers.ts +2 -39
  33. package/src/orchestrator/block-proving-state.ts +15 -15
  34. package/src/orchestrator/epoch-proving-state.ts +7 -10
  35. package/src/orchestrator/orchestrator.ts +36 -39
  36. package/src/orchestrator/tx-proving-state.ts +13 -13
  37. package/src/proving_broker/proving_agent.ts +30 -11
  38. package/src/proving_broker/proving_broker.ts +53 -27
  39. package/src/proving_broker/rpc.ts +32 -6
  40. package/src/test/mock_prover.ts +7 -1
  41. package/dest/prover-agent/index.d.ts +0 -4
  42. package/dest/prover-agent/index.d.ts.map +0 -1
  43. package/dest/prover-agent/index.js +0 -4
  44. package/dest/prover-agent/memory-proving-queue.d.ts +0 -82
  45. package/dest/prover-agent/memory-proving-queue.d.ts.map +0 -1
  46. package/dest/prover-agent/memory-proving-queue.js +0 -260
  47. package/dest/prover-agent/prover-agent.d.ts +0 -43
  48. package/dest/prover-agent/prover-agent.d.ts.map +0 -1
  49. package/dest/prover-agent/prover-agent.js +0 -204
  50. package/dest/prover-agent/proving-error.d.ts +0 -5
  51. package/dest/prover-agent/proving-error.d.ts.map +0 -1
  52. package/dest/prover-agent/proving-error.js +0 -9
  53. package/dest/prover-agent/queue_metrics.d.ts +0 -10
  54. package/dest/prover-agent/queue_metrics.d.ts.map +0 -1
  55. package/dest/prover-agent/queue_metrics.js +0 -23
  56. package/dest/prover-agent/rpc.d.ts +0 -11
  57. package/dest/prover-agent/rpc.d.ts.map +0 -1
  58. package/dest/prover-agent/rpc.js +0 -18
  59. package/src/prover-agent/index.ts +0 -3
  60. package/src/prover-agent/memory-proving-queue.ts +0 -416
  61. package/src/prover-agent/prover-agent.ts +0 -248
  62. package/src/prover-agent/proving-error.ts +0 -9
  63. package/src/prover-agent/queue_metrics.ts +0 -29
  64. package/src/prover-agent/rpc.ts +0 -22
@@ -52,16 +52,16 @@ export class TxProvingState {
52
52
  return this.processedTx.avmProvingRequest!.inputs;
53
53
  }
54
54
 
55
- public async getBaseRollupTypeAndInputs() {
55
+ public getBaseRollupTypeAndInputs() {
56
56
  if (this.requireAvmProof) {
57
57
  return {
58
58
  rollupType: 'public-base-rollup' satisfies CircuitName,
59
- inputs: await this.#getPublicBaseInputs(),
59
+ inputs: this.#getPublicBaseInputs(),
60
60
  };
61
61
  } else {
62
62
  return {
63
63
  rollupType: 'private-base-rollup' satisfies CircuitName,
64
- inputs: await this.#getPrivateBaseInputs(),
64
+ inputs: this.#getPrivateBaseInputs(),
65
65
  };
66
66
  }
67
67
  }
@@ -74,12 +74,12 @@ export class TxProvingState {
74
74
  this.avm = avmProofAndVk;
75
75
  }
76
76
 
77
- async #getPrivateBaseInputs() {
77
+ #getPrivateBaseInputs() {
78
78
  if (!this.tube) {
79
79
  throw new Error('Tx not ready for proving base rollup.');
80
80
  }
81
81
 
82
- const vkData = await this.#getTubeVkData();
82
+ const vkData = this.#getTubeVkData();
83
83
  const tubeData = new PrivateTubeData(
84
84
  this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
85
85
  this.tube.proof,
@@ -92,7 +92,7 @@ export class TxProvingState {
92
92
  return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
93
93
  }
94
94
 
95
- async #getPublicBaseInputs() {
95
+ #getPublicBaseInputs() {
96
96
  if (!this.processedTx.avmProvingRequest) {
97
97
  throw new Error('Should create private base rollup for a tx not requiring avm proof.');
98
98
  }
@@ -106,13 +106,13 @@ export class TxProvingState {
106
106
  const tubeData = new PublicTubeData(
107
107
  this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
108
108
  this.tube.proof,
109
- await this.#getTubeVkData(),
109
+ this.#getTubeVkData(),
110
110
  );
111
111
 
112
112
  const avmProofData = new AvmProofData(
113
113
  this.processedTx.avmProvingRequest.inputs.publicInputs,
114
114
  this.avm.proof,
115
- await this.#getAvmVkData(),
115
+ this.#getAvmVkData(),
116
116
  );
117
117
 
118
118
  if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
@@ -122,21 +122,21 @@ export class TxProvingState {
122
122
  return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
123
123
  }
124
124
 
125
- async #getTubeVkData() {
125
+ #getTubeVkData() {
126
126
  let vkIndex = TUBE_VK_INDEX;
127
127
  try {
128
- vkIndex = await getVKIndex(this.tube!.verificationKey);
128
+ vkIndex = getVKIndex(this.tube!.verificationKey);
129
129
  } catch (_ignored) {
130
130
  // TODO(#7410) The VK for the tube won't be in the tree for now, so we manually set it to the tube vk index
131
131
  }
132
- const vkPath = await getVKSiblingPath(vkIndex);
132
+ const vkPath = getVKSiblingPath(vkIndex);
133
133
 
134
134
  return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
135
135
  }
136
136
 
137
- async #getAvmVkData() {
137
+ #getAvmVkData() {
138
138
  const vkIndex = AVM_VK_INDEX;
139
- const vkPath = await getVKSiblingPath(vkIndex);
139
+ const vkPath = getVKSiblingPath(vkIndex);
140
140
  return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
141
141
  }
142
142
  }
@@ -94,20 +94,37 @@ export class ProvingAgent implements Traceable {
94
94
  return;
95
95
  }
96
96
 
97
+ if (this.idleTimer) {
98
+ this.instrumentation.recordIdleTime(this.idleTimer);
99
+ }
100
+ this.idleTimer = undefined;
101
+
102
+ const { job, time } = maybeJob;
103
+ await this.startJob(job, time);
104
+ }
105
+
106
+ private async startJob(job: ProvingJob, startedAt: number): Promise<void> {
97
107
  let abortedProofJobId: string | undefined;
98
108
  let abortedProofName: string | undefined;
109
+
99
110
  if (this.currentJobController?.getStatus() === ProvingJobControllerStatus.PROVING) {
100
111
  abortedProofJobId = this.currentJobController.getJobId();
101
112
  abortedProofName = this.currentJobController.getProofTypeName();
102
113
  this.currentJobController?.abort();
103
114
  }
104
115
 
105
- const { job, time } = maybeJob;
106
116
  let inputs: ProvingJobInputs;
107
117
  try {
108
118
  inputs = await this.proofStore.getProofInput(job.inputsUri);
109
119
  } catch (err) {
110
- await this.broker.reportProvingJobError(job.id, 'Failed to load proof inputs', true);
120
+ const maybeJob = await this.broker.reportProvingJobError(job.id, 'Failed to load proof inputs', true, {
121
+ allowList: this.proofAllowList,
122
+ });
123
+
124
+ if (maybeJob) {
125
+ return this.startJob(maybeJob.job, maybeJob.time);
126
+ }
127
+
111
128
  return;
112
129
  }
113
130
 
@@ -115,7 +132,7 @@ export class ProvingAgent implements Traceable {
115
132
  job.id,
116
133
  inputs,
117
134
  job.epochNumber,
118
- time,
135
+ startedAt,
119
136
  this.circuitProver,
120
137
  this.handleJobResult,
121
138
  );
@@ -134,11 +151,6 @@ export class ProvingAgent implements Traceable {
134
151
  );
135
152
  }
136
153
 
137
- if (this.idleTimer) {
138
- this.instrumentation.recordIdleTime(this.idleTimer);
139
- }
140
- this.idleTimer = undefined;
141
-
142
154
  this.currentJobController.start();
143
155
  }
144
156
 
@@ -148,15 +160,22 @@ export class ProvingAgent implements Traceable {
148
160
  err: Error | undefined,
149
161
  result: ProvingJobResultsMap[T] | undefined,
150
162
  ) => {
151
- this.idleTimer = new Timer();
163
+ let maybeJob: { job: ProvingJob; time: number } | undefined;
152
164
  if (err) {
153
165
  const retry = err.name === ProvingError.NAME ? (err as ProvingError).retry : false;
154
166
  this.log.error(`Job id=${jobId} type=${ProvingRequestType[type]} failed err=${err.message} retry=${retry}`, err);
155
- return this.broker.reportProvingJobError(jobId, err.message, retry);
167
+ maybeJob = await this.broker.reportProvingJobError(jobId, err.message, retry, { allowList: this.proofAllowList });
156
168
  } else if (result) {
157
169
  const outputUri = await this.proofStore.saveProofOutput(jobId, type, result);
158
170
  this.log.info(`Job id=${jobId} type=${ProvingRequestType[type]} completed outputUri=${truncate(outputUri)}`);
159
- return this.broker.reportProvingJobSuccess(jobId, outputUri);
171
+ maybeJob = await this.broker.reportProvingJobSuccess(jobId, outputUri, { allowList: this.proofAllowList });
172
+ }
173
+
174
+ if (maybeJob) {
175
+ const { job, time } = maybeJob;
176
+ await this.startJob(job, time);
177
+ } else {
178
+ this.idleTimer = new Timer();
160
179
  }
161
180
  };
162
181
  }
@@ -1,4 +1,5 @@
1
1
  import {
2
+ type GetProvingJobResponse,
2
3
  type ProofUri,
3
4
  type ProvingJob,
4
5
  type ProvingJobConsumer,
@@ -205,16 +206,25 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
205
206
  return this.requestQueue.put(() => this.#getCompletedJobs(ids));
206
207
  }
207
208
 
208
- public getProvingJob(filter?: ProvingJobFilter): Promise<{ job: ProvingJob; time: number } | undefined> {
209
+ public getProvingJob(filter?: ProvingJobFilter): Promise<GetProvingJobResponse | undefined> {
209
210
  return this.requestQueue.put(() => this.#getProvingJob(filter));
210
211
  }
211
212
 
212
- public reportProvingJobSuccess(id: ProvingJobId, value: ProofUri): Promise<void> {
213
- return this.requestQueue.put(() => this.#reportProvingJobSuccess(id, value));
213
+ public reportProvingJobSuccess(
214
+ id: ProvingJobId,
215
+ value: ProofUri,
216
+ filter?: ProvingJobFilter,
217
+ ): Promise<GetProvingJobResponse | undefined> {
218
+ return this.requestQueue.put(() => this.#reportProvingJobSuccess(id, value, filter));
214
219
  }
215
220
 
216
- public reportProvingJobError(id: ProvingJobId, err: string, retry = false): Promise<void> {
217
- return this.requestQueue.put(() => this.#reportProvingJobError(id, err, retry));
221
+ public reportProvingJobError(
222
+ id: ProvingJobId,
223
+ err: string,
224
+ retry = false,
225
+ filter?: ProvingJobFilter,
226
+ ): Promise<GetProvingJobResponse | undefined> {
227
+ return this.requestQueue.put(() => this.#reportProvingJobError(id, err, retry, filter));
218
228
  }
219
229
 
220
230
  public reportProvingJobProgress(
@@ -305,9 +315,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
305
315
  }
306
316
 
307
317
  // eslint-disable-next-line require-await
308
- async #getProvingJob(
309
- filter: ProvingJobFilter = { allowList: [] },
310
- ): Promise<{ job: ProvingJob; time: number } | undefined> {
318
+ #getProvingJob(filter: ProvingJobFilter = { allowList: [] }): { job: ProvingJob; time: number } | undefined {
311
319
  const allowedProofs: ProvingRequestType[] =
312
320
  Array.isArray(filter.allowList) && filter.allowList.length > 0
313
321
  ? [...filter.allowList]
@@ -343,7 +351,12 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
343
351
  return undefined;
344
352
  }
345
353
 
346
- async #reportProvingJobError(id: ProvingJobId, err: string, retry = false): Promise<void> {
354
+ async #reportProvingJobError(
355
+ id: ProvingJobId,
356
+ err: string,
357
+ retry = false,
358
+ filter?: ProvingJobFilter,
359
+ ): Promise<GetProvingJobResponse | undefined> {
347
360
  const info = this.inProgress.get(id);
348
361
  const item = this.jobsCache.get(id);
349
362
  const retries = this.retries.get(id) ?? 0;
@@ -365,7 +378,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
365
378
  this.logger.warn(`Proving job id=${id} is already settled, ignoring err=${err}`, {
366
379
  provingJobId: id,
367
380
  });
368
- return;
381
+ return this.#getProvingJob(filter);
369
382
  }
370
383
 
371
384
  if (retry && retries + 1 < this.maxRetries && !this.isJobStale(item)) {
@@ -375,10 +388,16 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
375
388
  provingJobId: id,
376
389
  },
377
390
  );
391
+
392
+ // assign another job to this agent
393
+ // do this first, before we put the failed job back in the queue
394
+ const maybeAnotherJob = this.#getProvingJob(filter);
395
+
378
396
  this.retries.set(id, retries + 1);
379
397
  this.enqueueJobInternal(item);
380
398
  this.instrumentation.incRetriedJobs(item.type);
381
- return;
399
+
400
+ return maybeAnotherJob;
382
401
  }
383
402
 
384
403
  this.logger.info(
@@ -412,22 +431,24 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
412
431
 
413
432
  throw saveErr;
414
433
  }
434
+
435
+ return this.#getProvingJob(filter);
415
436
  }
416
437
 
417
438
  #reportProvingJobProgress(
418
439
  id: ProvingJobId,
419
440
  startedAt: number,
420
441
  filter?: ProvingJobFilter,
421
- ): Promise<{ job: ProvingJob; time: number } | undefined> {
442
+ ): { job: ProvingJob; time: number } | undefined {
422
443
  const job = this.jobsCache.get(id);
423
444
  if (!job) {
424
445
  this.logger.warn(`Proving job id=${id} does not exist`, { provingJobId: id });
425
- return filter ? this.#getProvingJob(filter) : Promise.resolve(undefined);
446
+ return this.#getProvingJob(filter);
426
447
  }
427
448
 
428
449
  if (this.resultsCache.has(id)) {
429
450
  this.logger.warn(`Proving job id=${id} has already been completed`, { provingJobId: id });
430
- return filter ? this.#getProvingJob(filter) : Promise.resolve(undefined);
451
+ return this.#getProvingJob(filter);
431
452
  }
432
453
 
433
454
  const metadata = this.inProgress.get(id);
@@ -445,7 +466,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
445
466
  startedAt,
446
467
  lastUpdatedAt: this.msTimeSource(),
447
468
  });
448
- return Promise.resolve(undefined);
469
+ return undefined;
449
470
  } else if (startedAt <= metadata.startedAt) {
450
471
  if (startedAt < metadata.startedAt) {
451
472
  this.logger.info(
@@ -457,21 +478,24 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
457
478
  }
458
479
  metadata.startedAt = startedAt;
459
480
  metadata.lastUpdatedAt = now;
460
- return Promise.resolve(undefined);
461
- } else if (filter) {
462
- this.logger.warn(
463
- `Proving job id=${id} type=${
464
- ProvingRequestType[job.type]
465
- } already being worked on by another agent. Sending new one`,
466
- { provingJobId: id },
467
- );
468
- return this.#getProvingJob(filter);
469
- } else {
470
- return Promise.resolve(undefined);
481
+ return undefined;
471
482
  }
483
+
484
+ this.logger.warn(
485
+ `Proving job id=${id} type=${
486
+ ProvingRequestType[job.type]
487
+ } already being worked on by another agent. Sending new one`,
488
+ { provingJobId: id },
489
+ );
490
+
491
+ return this.#getProvingJob(filter);
472
492
  }
473
493
 
474
- async #reportProvingJobSuccess(id: ProvingJobId, value: ProofUri): Promise<void> {
494
+ async #reportProvingJobSuccess(
495
+ id: ProvingJobId,
496
+ value: ProofUri,
497
+ filter?: ProvingJobFilter,
498
+ ): Promise<GetProvingJobResponse | undefined> {
475
499
  const info = this.inProgress.get(id);
476
500
  const item = this.jobsCache.get(id);
477
501
  const retries = this.retries.get(id) ?? 0;
@@ -521,6 +545,8 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Tr
521
545
 
522
546
  throw saveErr;
523
547
  }
548
+
549
+ return this.#getProvingJob(filter);
524
550
  }
525
551
 
526
552
  @trackSpan('ProvingBroker.cleanupPass')
@@ -1,4 +1,5 @@
1
1
  import {
2
+ type ComponentsVersions,
2
3
  type GetProvingJobResponse,
3
4
  ProofUri,
4
5
  ProvingJob,
@@ -8,6 +9,7 @@ import {
8
9
  type ProvingJobProducer,
9
10
  ProvingJobStatus,
10
11
  ProvingRequestType,
12
+ getVersioningResponseHandler,
11
13
  } from '@aztec/circuit-types';
12
14
  import { createSafeJsonRpcClient } from '@aztec/foundation/json-rpc/client';
13
15
  import { type SafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
@@ -34,12 +36,18 @@ export const ProvingJobProducerSchema: ApiSchemaFor<ProvingJobProducer> = {
34
36
 
35
37
  export const ProvingJobConsumerSchema: ApiSchemaFor<ProvingJobConsumer> = {
36
38
  getProvingJob: z.function().args(optional(ProvingJobFilterSchema)).returns(GetProvingJobResponse.optional()),
37
- reportProvingJobError: z.function().args(ProvingJobId, z.string(), optional(z.boolean())).returns(z.void()),
39
+ reportProvingJobError: z
40
+ .function()
41
+ .args(ProvingJobId, z.string(), optional(z.boolean()), optional(ProvingJobFilterSchema))
42
+ .returns(GetProvingJobResponse.optional()),
38
43
  reportProvingJobProgress: z
39
44
  .function()
40
45
  .args(ProvingJobId, z.number(), optional(ProvingJobFilterSchema))
41
46
  .returns(GetProvingJobResponse.optional()),
42
- reportProvingJobSuccess: z.function().args(ProvingJobId, ProofUri).returns(z.void()),
47
+ reportProvingJobSuccess: z
48
+ .function()
49
+ .args(ProvingJobId, ProofUri, optional(ProvingJobFilterSchema))
50
+ .returns(GetProvingJobResponse.optional()),
43
51
  };
44
52
 
45
53
  export const ProvingJobBrokerSchema: ApiSchemaFor<ProvingJobBroker> = {
@@ -51,20 +59,38 @@ export function createProvingBrokerServer(broker: ProvingJobBroker): SafeJsonRpc
51
59
  return createTracedJsonRpcServer(broker, ProvingJobBrokerSchema);
52
60
  }
53
61
 
54
- export function createProvingJobBrokerClient(url: string, fetch = makeTracedFetch([1, 2, 3], false)): ProvingJobBroker {
55
- return createSafeJsonRpcClient(url, ProvingJobBrokerSchema, false, 'proverBroker', fetch);
62
+ export function createProvingJobBrokerClient(
63
+ url: string,
64
+ versions: Partial<ComponentsVersions>,
65
+ fetch = makeTracedFetch([1, 2, 3], false),
66
+ ): ProvingJobBroker {
67
+ return createSafeJsonRpcClient(url, ProvingJobBrokerSchema, {
68
+ namespaceMethods: 'proverBroker',
69
+ fetch,
70
+ onResponse: getVersioningResponseHandler(versions),
71
+ });
56
72
  }
57
73
 
58
74
  export function createProvingJobProducerClient(
59
75
  url: string,
76
+ versions: Partial<ComponentsVersions>,
60
77
  fetch = makeTracedFetch([1, 2, 3], false),
61
78
  ): ProvingJobProducer {
62
- return createSafeJsonRpcClient(url, ProvingJobProducerSchema, false, 'provingJobProducer', fetch);
79
+ return createSafeJsonRpcClient(url, ProvingJobProducerSchema, {
80
+ namespaceMethods: 'provingJobProducer',
81
+ fetch,
82
+ onResponse: getVersioningResponseHandler(versions),
83
+ });
63
84
  }
64
85
 
65
86
  export function createProvingJobConsumerClient(
66
87
  url: string,
88
+ versions: Partial<ComponentsVersions>,
67
89
  fetch = makeTracedFetch([1, 2, 3], false),
68
90
  ): ProvingJobConsumer {
69
- return createSafeJsonRpcClient(url, ProvingJobConsumerSchema, false, 'provingJobConsumer', fetch);
91
+ return createSafeJsonRpcClient(url, ProvingJobConsumerSchema, {
92
+ namespaceMethods: 'provingJobConsumer',
93
+ fetch,
94
+ onResponse: getVersioningResponseHandler(versions),
95
+ });
70
96
  }
@@ -44,14 +44,16 @@ import {
44
44
  } from '@aztec/circuits.js/testing';
45
45
  import { times } from '@aztec/foundation/collection';
46
46
 
47
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
47
48
  import { InlineProofStore, type ProofStore } from '../proving_broker/proof_store/index.js';
48
49
  import { ProvingAgent } from '../proving_broker/proving_agent.js';
49
50
  import { ProvingBroker } from '../proving_broker/proving_broker.js';
50
51
  import { InMemoryBrokerDatabase } from '../proving_broker/proving_broker_database/memory.js';
51
52
 
52
53
  export class TestBroker implements ProvingJobProducer {
53
- private broker = new ProvingBroker(new InMemoryBrokerDatabase());
54
+ private broker: ProvingBroker;
54
55
  private agents: ProvingAgent[];
56
+ public facade: BrokerCircuitProverFacade;
55
57
 
56
58
  constructor(
57
59
  agentCount: number,
@@ -59,20 +61,24 @@ export class TestBroker implements ProvingJobProducer {
59
61
  private proofStore: ProofStore = new InlineProofStore(),
60
62
  agentPollInterval = 100,
61
63
  ) {
64
+ this.broker = new ProvingBroker(new InMemoryBrokerDatabase());
62
65
  this.agents = times(
63
66
  agentCount,
64
67
  () => new ProvingAgent(this.broker, proofStore, prover, undefined, agentPollInterval),
65
68
  );
69
+ this.facade = new BrokerCircuitProverFacade(this.broker, proofStore);
66
70
  }
67
71
 
68
72
  public async start() {
69
73
  await this.broker.start();
70
74
  this.agents.forEach(agent => agent.start());
75
+ this.facade.start();
71
76
  }
72
77
 
73
78
  public async stop() {
74
79
  await Promise.all(this.agents.map(agent => agent.stop()));
75
80
  await this.broker.stop();
81
+ await this.facade.stop();
76
82
  }
77
83
 
78
84
  public getProofStore(): ProofStore {
@@ -1,4 +0,0 @@
1
- export * from './prover-agent.js';
2
- export * from './memory-proving-queue.js';
3
- export * from './rpc.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prover-agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,UAAU,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './prover-agent.js';
2
- export * from './memory-proving-queue.js';
3
- export * from './rpc.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyLWFnZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLFVBQVUsQ0FBQyJ9
@@ -1,82 +0,0 @@
1
- import { type ProofAndVerificationKey, type ProvingJob, type ProvingJobSource, type ProvingRequestResultFor, ProvingRequestType, type PublicInputsAndRecursiveProof, type ServerCircuitProver } from '@aztec/circuit-types';
2
- import type { AVM_PROOF_LENGTH_IN_FIELDS, AvmCircuitInputs, BaseParityInputs, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, ParityPublicInputs, RECURSIVE_PROOF_LENGTH, RootParityInputs, TUBE_PROOF_LENGTH } from '@aztec/circuits.js';
3
- import { type BaseOrMergeRollupPublicInputs, type BlockMergeRollupInputs, type BlockRootOrBlockMergePublicInputs, type BlockRootRollupInputs, type EmptyBlockRootRollupInputs, type MergeRollupInputs, type PrivateBaseRollupInputs, type PublicBaseRollupInputs, type RootRollupInputs, type RootRollupPublicInputs, type SingleTxBlockRootRollupInputs, type TubeInputs } from '@aztec/circuits.js/rollup';
4
- import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
5
- import { type ProofStore } from '../proving_broker/proof_store/index.js';
6
- /**
7
- * A helper class that sits in between services that need proofs created and agents that can create them.
8
- * The queue accumulates jobs and provides them to agents prioritized by block number.
9
- */
10
- export declare class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource {
11
- /** Timeout the job if an agent doesn't report back in this time */
12
- private jobTimeoutMs;
13
- private generateId;
14
- private timeSource;
15
- private proofStore;
16
- private log;
17
- private queue;
18
- private jobsInProgress;
19
- private runningPromise;
20
- private metrics;
21
- readonly tracer: Tracer;
22
- constructor(client: TelemetryClient,
23
- /** Timeout the job if an agent doesn't report back in this time */
24
- jobTimeoutMs?: number,
25
- /** How often to check for timed out jobs */
26
- pollingIntervalMs?: number, generateId?: () => string, timeSource?: () => number, proofStore?: ProofStore);
27
- start(): void;
28
- stop(): Promise<void>;
29
- getProvingJob({ timeoutSec }?: {
30
- timeoutSec?: number | undefined;
31
- }): Promise<ProvingJob | undefined>;
32
- resolveProvingJob<T extends ProvingRequestType>(jobId: string, result: ProvingRequestResultFor<T>): Promise<void>;
33
- rejectProvingJob(jobId: string, reason: string): Promise<void>;
34
- heartbeat(jobId: string): Promise<void>;
35
- isJobRunning(jobId: string): boolean;
36
- private poll;
37
- private enqueue;
38
- getTubeProof(inputs: TubeInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>;
39
- /**
40
- * Creates a proof for the given input.
41
- * @param input - Input to the circuit.
42
- */
43
- getBaseParityProof(inputs: BaseParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
44
- /**
45
- * Creates a proof for the given input.
46
- * @param input - Input to the circuit.
47
- */
48
- getRootParityProof(inputs: RootParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>>;
49
- getPrivateBaseRollupProof(inputs: PrivateBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
50
- getPublicBaseRollupProof(inputs: PublicBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
51
- /**
52
- * Creates a proof for the given input.
53
- * @param input - Input to the circuit.
54
- */
55
- getMergeRollupProof(inputs: MergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
56
- /**
57
- * Creates a proof for the given input.
58
- * @param input - Input to the circuit.
59
- */
60
- getBlockRootRollupProof(inputs: BlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
61
- getSingleTxBlockRootRollupProof(inputs: SingleTxBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
62
- getEmptyBlockRootRollupProof(inputs: EmptyBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
63
- /**
64
- * Creates a proof for the given input.
65
- * @param input - Input to the circuit.
66
- */
67
- getBlockMergeRollupProof(inputs: BlockMergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
68
- /**
69
- * Creates a proof for the given input.
70
- * @param input - Input to the circuit.
71
- */
72
- getRootRollupProof(inputs: RootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>>;
73
- /**
74
- * Creates an AVM proof.
75
- */
76
- getAvmProof(inputs: AvmCircuitInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>>;
77
- /**
78
- * Verifies a circuit proof
79
- */
80
- verifyProof(): Promise<void>;
81
- }
82
- //# sourceMappingURL=memory-proving-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-proving-queue.d.ts","sourceRoot":"","sources":["../../src/prover-agent/memory-proving-queue.ts"],"names":[],"mappings":"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"}