@aztec/prover-client 0.67.1 → 0.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dest/block_builder/light.d.ts +4 -3
  2. package/dest/block_builder/light.d.ts.map +1 -1
  3. package/dest/block_builder/light.js +23 -16
  4. package/dest/index.d.ts +0 -1
  5. package/dest/index.d.ts.map +1 -1
  6. package/dest/index.js +1 -2
  7. package/dest/mocks/fixtures.d.ts.map +1 -1
  8. package/dest/mocks/fixtures.js +3 -3
  9. package/dest/mocks/test_context.d.ts +3 -2
  10. package/dest/mocks/test_context.d.ts.map +1 -1
  11. package/dest/mocks/test_context.js +22 -11
  12. package/dest/orchestrator/block-building-helpers.d.ts +8 -2
  13. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  14. package/dest/orchestrator/block-building-helpers.js +20 -7
  15. package/dest/orchestrator/block-proving-state.d.ts +8 -5
  16. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  17. package/dest/orchestrator/block-proving-state.js +16 -7
  18. package/dest/orchestrator/epoch-proving-state.d.ts +3 -2
  19. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  20. package/dest/orchestrator/epoch-proving-state.js +3 -3
  21. package/dest/orchestrator/orchestrator.d.ts +10 -7
  22. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  23. package/dest/orchestrator/orchestrator.js +94 -56
  24. package/dest/orchestrator/tx-proving-state.d.ts +2 -1
  25. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  26. package/dest/orchestrator/tx-proving-state.js +3 -2
  27. package/dest/prover-agent/memory-proving-queue.d.ts +4 -2
  28. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  29. package/dest/prover-agent/memory-proving-queue.js +240 -224
  30. package/dest/prover-agent/prover-agent.d.ts +11 -2
  31. package/dest/prover-agent/prover-agent.d.ts.map +1 -1
  32. package/dest/prover-agent/prover-agent.js +186 -159
  33. package/dest/prover-client/prover-client.d.ts +2 -3
  34. package/dest/prover-client/prover-client.d.ts.map +1 -1
  35. package/dest/prover-client/prover-client.js +4 -7
  36. package/dest/proving_broker/{caching_broker_facade.d.ts → broker_prover_facade.d.ts} +6 -9
  37. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
  38. package/dest/proving_broker/broker_prover_facade.js +107 -0
  39. package/dest/proving_broker/proving_agent.d.ts +4 -3
  40. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  41. package/dest/proving_broker/proving_agent.js +73 -64
  42. package/dest/proving_broker/proving_broker.d.ts +4 -3
  43. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  44. package/dest/proving_broker/proving_broker.js +403 -324
  45. package/dest/proving_broker/proving_job_controller.d.ts +2 -1
  46. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  47. package/dest/proving_broker/proving_job_controller.js +15 -14
  48. package/dest/proving_broker/rpc.d.ts.map +1 -1
  49. package/dest/proving_broker/rpc.js +1 -2
  50. package/dest/test/mock_prover.d.ts +6 -6
  51. package/dest/test/mock_prover.d.ts.map +1 -1
  52. package/dest/test/mock_prover.js +3 -6
  53. package/package.json +16 -15
  54. package/src/block_builder/light.ts +23 -16
  55. package/src/index.ts +0 -1
  56. package/src/mocks/fixtures.ts +2 -2
  57. package/src/mocks/test_context.ts +31 -16
  58. package/src/orchestrator/block-building-helpers.ts +34 -18
  59. package/src/orchestrator/block-proving-state.ts +18 -8
  60. package/src/orchestrator/epoch-proving-state.ts +1 -4
  61. package/src/orchestrator/orchestrator.ts +113 -62
  62. package/src/orchestrator/tx-proving-state.ts +6 -4
  63. package/src/prover-agent/memory-proving-queue.ts +21 -15
  64. package/src/prover-agent/prover-agent.ts +65 -46
  65. package/src/prover-client/prover-client.ts +3 -10
  66. package/src/proving_broker/{caching_broker_facade.ts → broker_prover_facade.ts} +46 -83
  67. package/src/proving_broker/proving_agent.ts +72 -76
  68. package/src/proving_broker/proving_broker.ts +114 -36
  69. package/src/proving_broker/proving_job_controller.ts +13 -12
  70. package/src/proving_broker/rpc.ts +0 -1
  71. package/src/test/mock_prover.ts +17 -14
  72. package/dest/proving_broker/caching_broker_facade.d.ts.map +0 -1
  73. package/dest/proving_broker/caching_broker_facade.js +0 -153
  74. package/dest/proving_broker/prover_cache/memory.d.ts +0 -9
  75. package/dest/proving_broker/prover_cache/memory.d.ts.map +0 -1
  76. package/dest/proving_broker/prover_cache/memory.js +0 -16
  77. package/src/proving_broker/prover_cache/memory.ts +0 -20
@@ -14,7 +14,7 @@ import { createLogger } from '@aztec/foundation/log';
14
14
  import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
15
15
  import { PriorityMemoryQueue } from '@aztec/foundation/queue';
16
16
  import { Timer } from '@aztec/foundation/timer';
17
- import { type TelemetryClient } from '@aztec/telemetry-client';
17
+ import { type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
18
18
 
19
19
  import assert from 'assert';
20
20
 
@@ -41,7 +41,7 @@ type EnqueuedProvingJob = Pick<ProvingJob, 'id' | 'epochNumber'>;
41
41
  * A broker that manages proof requests and distributes them to workers based on their priority.
42
42
  * It takes a backend that is responsible for storing and retrieving proof requests and results.
43
43
  */
44
- export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
44
+ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Traceable {
45
45
  private queues: ProvingQueues = {
46
46
  [ProvingRequestType.PUBLIC_VM]: new PriorityMemoryQueue<EnqueuedProvingJob>(provingJobComparator),
47
47
  [ProvingRequestType.TUBE_PROOF]: new PriorityMemoryQueue<EnqueuedProvingJob>(provingJobComparator),
@@ -87,6 +87,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
87
87
  private maxRetries: number;
88
88
 
89
89
  private instrumentation: ProvingBrokerInstrumentation;
90
+ public readonly tracer: Tracer;
90
91
 
91
92
  private maxParallelCleanUps: number;
92
93
 
@@ -115,8 +116,9 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
115
116
  }: ProofRequestBrokerConfig = {},
116
117
  private logger = createLogger('prover-client:proving-broker'),
117
118
  ) {
119
+ this.tracer = client.getTracer('ProvingBroker');
118
120
  this.instrumentation = new ProvingBrokerInstrumentation(client);
119
- this.cleanupPromise = new RunningPromise(this.cleanupPass, timeoutIntervalMs);
121
+ this.cleanupPromise = new RunningPromise(this.cleanupPass.bind(this), this.logger, timeoutIntervalMs);
120
122
  this.jobTimeoutMs = jobTimeoutMs;
121
123
  this.maxRetries = maxRetries;
122
124
  this.maxEpochsToKeepResultsFor = maxEpochsToKeepResultsFor;
@@ -141,7 +143,10 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
141
143
 
142
144
  public start(): Promise<void> {
143
145
  for (const [item, result] of this.database.allProvingJobs()) {
144
- this.logger.info(`Restoring proving job id=${item.id} settled=${!!result}`);
146
+ this.logger.info(`Restoring proving job id=${item.id} settled=${!!result}`, {
147
+ provingJobId: item.id,
148
+ status: result ? result.status : 'pending',
149
+ });
145
150
 
146
151
  this.jobsCache.set(item.id, item);
147
152
  this.promises.set(item.id, promiseWithResolvers());
@@ -150,7 +155,6 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
150
155
  this.promises.get(item.id)!.resolve(result);
151
156
  this.resultsCache.set(item.id, result);
152
157
  } else {
153
- this.logger.debug(`Re-enqueuing proving job id=${item.id}`);
154
158
  this.enqueueJobInternal(item);
155
159
  }
156
160
  }
@@ -171,37 +175,66 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
171
175
  if (this.jobsCache.has(job.id)) {
172
176
  const existing = this.jobsCache.get(job.id);
173
177
  assert.deepStrictEqual(job, existing, 'Duplicate proving job ID');
178
+ this.logger.debug(`Duplicate proving job id=${job.id} epochNumber=${job.epochNumber}. Ignoring`, {
179
+ provingJobId: job.id,
180
+ });
174
181
  return;
175
182
  }
176
183
 
177
- await this.database.addProvingJob(job);
178
- this.jobsCache.set(job.id, job);
179
- this.enqueueJobInternal(job);
184
+ if (this.isJobStale(job)) {
185
+ this.logger.warn(`Tried enqueueing stale proving job id=${job.id} epochNumber=${job.epochNumber}`, {
186
+ provingJobId: job.id,
187
+ });
188
+ throw new Error(`Epoch too old: job epoch ${job.epochNumber}, current epoch: ${this.epochHeight}`);
189
+ }
190
+
191
+ this.logger.info(`New proving job id=${job.id} epochNumber=${job.epochNumber}`, { provingJobId: job.id });
192
+ try {
193
+ // do this first so it acts as a "lock". If this job is enqueued again while we're saving it the if at the top will catch it.
194
+ this.jobsCache.set(job.id, job);
195
+ await this.database.addProvingJob(job);
196
+ this.enqueueJobInternal(job);
197
+ } catch (err) {
198
+ this.logger.error(`Failed to save proving job id=${job.id}: ${err}`, err, { provingJobId: job.id });
199
+ this.jobsCache.delete(job.id);
200
+ throw err;
201
+ }
180
202
  }
181
203
 
182
204
  public waitForJobToSettle(id: ProvingJobId): Promise<ProvingJobSettledResult> {
183
205
  const promiseWithResolvers = this.promises.get(id);
184
206
  if (!promiseWithResolvers) {
207
+ this.logger.warn(`Job id=${id} not found`, { provingJobId: id });
185
208
  return Promise.resolve({ status: 'rejected', reason: `Job ${id} not found` });
186
209
  }
187
210
  return promiseWithResolvers.promise;
188
211
  }
189
212
 
190
213
  public async cancelProvingJob(id: ProvingJobId): Promise<void> {
214
+ if (!this.jobsCache.has(id)) {
215
+ this.logger.warn(`Can't cancel a job that doesn't exist id=${id}`, { provingJobId: id });
216
+ return;
217
+ }
218
+
191
219
  // notify listeners of the cancellation
192
220
  if (!this.resultsCache.has(id)) {
193
- this.logger.info(`Cancelling job id=${id}`);
221
+ this.logger.info(`Cancelling job id=${id}`, { provingJobId: id });
194
222
  await this.reportProvingJobError(id, 'Aborted', false);
195
223
  }
196
224
  }
197
225
 
198
- public async cleanUpProvingJobState(id: ProvingJobId): Promise<void> {
226
+ private async cleanUpProvingJobState(id: ProvingJobId): Promise<void> {
227
+ if (!this.jobsCache.has(id)) {
228
+ this.logger.warn(`Can't clean up a job that doesn't exist id=${id}`, { provingJobId: id });
229
+ return;
230
+ }
231
+
199
232
  if (!this.resultsCache.has(id)) {
200
- this.logger.warn(`Can't cleanup busy proving job: id=${id}`);
233
+ this.logger.warn(`Can't cleanup busy proving job: id=${id}`, { provingJobId: id });
201
234
  return;
202
235
  }
203
236
 
204
- this.logger.debug(`Cleaning up state for job id=${id}`);
237
+ this.logger.debug(`Cleaning up state for job id=${id}`, { provingJobId: id });
205
238
  await this.database.deleteProvingJobAndResult(id);
206
239
  this.jobsCache.delete(id);
207
240
  this.promises.delete(id);
@@ -219,7 +252,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
219
252
  const item = this.jobsCache.get(id);
220
253
 
221
254
  if (!item) {
222
- this.logger.warn(`Proving job id=${id} not found`);
255
+ this.logger.warn(`Proving job id=${id} not found`, { provingJobId: id });
223
256
  return Promise.resolve({ status: 'not-found' });
224
257
  }
225
258
 
@@ -272,45 +305,68 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
272
305
  const retries = this.retries.get(id) ?? 0;
273
306
 
274
307
  if (!item) {
275
- this.logger.warn(`Proving job id=${id} not found`);
308
+ this.logger.warn(`Can't set error on unknown proving job id=${id} err=${err}`, { provingJoId: id });
276
309
  return;
277
310
  }
278
311
 
279
312
  if (!info) {
280
- this.logger.warn(`Proving job id=${id} type=${ProvingRequestType[item.type]} not in the in-progress set`);
313
+ this.logger.warn(`Proving job id=${id} type=${ProvingRequestType[item.type]} not in the in-progress set`, {
314
+ provingJobId: id,
315
+ });
281
316
  } else {
282
317
  this.inProgress.delete(id);
283
318
  }
284
319
 
285
320
  if (this.resultsCache.has(id)) {
286
- this.logger.warn(`Proving job id=${id} already is already settled, ignoring error`);
321
+ this.logger.warn(`Proving job id=${id} is already settled, ignoring err=${err}`, {
322
+ provingJobId: id,
323
+ });
287
324
  return;
288
325
  }
289
326
 
290
327
  if (retry && retries + 1 < this.maxRetries && !this.isJobStale(item)) {
291
- this.logger.info(`Retrying proving job id=${id} type=${ProvingRequestType[item.type]} retry=${retries + 1}`);
328
+ this.logger.info(
329
+ `Retrying proving job id=${id} type=${ProvingRequestType[item.type]} retry=${retries + 1} err=${err}`,
330
+ {
331
+ provingJobId: id,
332
+ },
333
+ );
292
334
  this.retries.set(id, retries + 1);
293
335
  this.enqueueJobInternal(item);
294
336
  this.instrumentation.incRetriedJobs(item.type);
295
337
  return;
296
338
  }
297
339
 
298
- this.logger.warn(
340
+ this.logger.info(
299
341
  `Marking proving job as failed id=${id} type=${ProvingRequestType[item.type]} totalAttempts=${
300
342
  retries + 1
301
343
  } err=${err}`,
344
+ {
345
+ provingJobId: id,
346
+ },
302
347
  );
303
348
 
304
- await this.database.setProvingJobError(id, err);
305
-
349
+ // save the result to the cache and notify clients of the job status
350
+ // this should work even if our database breaks because the result is cached in memory
306
351
  const result: ProvingJobSettledResult = { status: 'rejected', reason: String(err) };
307
352
  this.resultsCache.set(id, result);
308
353
  this.promises.get(id)!.resolve(result);
354
+
309
355
  this.instrumentation.incRejectedJobs(item.type);
310
356
  if (info) {
311
357
  const duration = this.msTimeSource() - info.startedAt;
312
358
  this.instrumentation.recordJobDuration(item.type, duration);
313
359
  }
360
+
361
+ try {
362
+ await this.database.setProvingJobError(id, err);
363
+ } catch (saveErr) {
364
+ this.logger.error(`Failed to save proving job error status id=${id} jobErr=${err}`, saveErr, {
365
+ provingJobId: id,
366
+ });
367
+
368
+ throw saveErr;
369
+ }
314
370
  }
315
371
 
316
372
  reportProvingJobProgress(
@@ -320,12 +376,12 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
320
376
  ): Promise<{ job: ProvingJob; time: number } | undefined> {
321
377
  const job = this.jobsCache.get(id);
322
378
  if (!job) {
323
- this.logger.warn(`Proving job id=${id} does not exist`);
379
+ this.logger.warn(`Proving job id=${id} does not exist`, { provingJobId: id });
324
380
  return filter ? this.getProvingJob(filter) : Promise.resolve(undefined);
325
381
  }
326
382
 
327
383
  if (this.resultsCache.has(id)) {
328
- this.logger.warn(`Proving job id=${id} has already been completed`);
384
+ this.logger.warn(`Proving job id=${id} has already been completed`, { provingJobId: id });
329
385
  return filter ? this.getProvingJob(filter) : Promise.resolve(undefined);
330
386
  }
331
387
 
@@ -334,6 +390,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
334
390
  if (!metadata) {
335
391
  this.logger.warn(
336
392
  `Proving job id=${id} type=${ProvingRequestType[job.type]} not found in the in-progress cache, adding it`,
393
+ { provingJobId: id },
337
394
  );
338
395
  // the queue will still contain the item at this point!
339
396
  // we need to be careful when popping off the queue to make sure we're not sending
@@ -346,11 +403,12 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
346
403
  return Promise.resolve(undefined);
347
404
  } else if (startedAt <= metadata.startedAt) {
348
405
  if (startedAt < metadata.startedAt) {
349
- this.logger.debug(
406
+ this.logger.info(
350
407
  `Proving job id=${id} type=${ProvingRequestType[job.type]} startedAt=${startedAt} older agent has taken job`,
408
+ { provingJobId: id },
351
409
  );
352
410
  } else {
353
- this.logger.debug(`Proving job id=${id} type=${ProvingRequestType[job.type]} heartbeat`);
411
+ this.logger.debug(`Proving job id=${id} type=${ProvingRequestType[job.type]} heartbeat`, { provingJobId: id });
354
412
  }
355
413
  metadata.startedAt = startedAt;
356
414
  metadata.lastUpdatedAt = now;
@@ -360,6 +418,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
360
418
  `Proving job id=${id} type=${
361
419
  ProvingRequestType[job.type]
362
420
  } already being worked on by another agent. Sending new one`,
421
+ { provingJobId: id },
363
422
  );
364
423
  return this.getProvingJob(filter);
365
424
  } else {
@@ -372,37 +431,57 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
372
431
  const item = this.jobsCache.get(id);
373
432
  const retries = this.retries.get(id) ?? 0;
374
433
  if (!item) {
375
- this.logger.warn(`Proving job id=${id} not found`);
434
+ this.logger.warn(`Proving job id=${id} not found`, { provingJobId: id });
376
435
  return;
377
436
  }
378
437
 
379
438
  if (!info) {
380
- this.logger.warn(`Proving job id=${id} type=${ProvingRequestType[item.type]} not in the in-progress set`);
439
+ this.logger.warn(`Proving job id=${id} type=${ProvingRequestType[item.type]} not in the in-progress set`, {
440
+ provingJobId: id,
441
+ });
381
442
  } else {
382
443
  this.inProgress.delete(id);
383
444
  }
384
445
 
385
446
  if (this.resultsCache.has(id)) {
386
- this.logger.warn(`Proving job id=${id} already settled, ignoring result`);
447
+ this.logger.warn(`Proving job id=${id} already settled, ignoring result`, { provingJobId: id });
387
448
  return;
388
449
  }
389
450
 
390
- this.logger.debug(
451
+ this.logger.info(
391
452
  `Proving job complete id=${id} type=${ProvingRequestType[item.type]} totalAttempts=${retries + 1}`,
453
+ { provingJobId: id },
392
454
  );
393
455
 
394
- await this.database.setProvingJobResult(id, value);
395
-
456
+ // save result to our local cache and notify clients
457
+ // if save to database fails, that's ok because we have the result in memory
458
+ // if the broker crashes and needs the result again, we're covered because we can just recompute it
396
459
  const result: ProvingJobSettledResult = { status: 'fulfilled', value };
397
460
  this.resultsCache.set(id, result);
398
461
  this.promises.get(id)!.resolve(result);
462
+
399
463
  this.instrumentation.incResolvedJobs(item.type);
464
+ if (info) {
465
+ const duration = this.msTimeSource() - info.startedAt;
466
+ this.instrumentation.recordJobDuration(item.type, duration);
467
+ }
468
+
469
+ try {
470
+ await this.database.setProvingJobResult(id, value);
471
+ } catch (saveErr) {
472
+ this.logger.error(`Failed to save proving job result id=${id}`, saveErr, {
473
+ provingJobId: id,
474
+ });
475
+
476
+ throw saveErr;
477
+ }
400
478
  }
401
479
 
402
- private cleanupPass = async () => {
480
+ @trackSpan('ProvingBroker.cleanupPass')
481
+ private async cleanupPass() {
403
482
  await this.cleanupStaleJobs();
404
483
  await this.reEnqueueExpiredJobs();
405
- };
484
+ }
406
485
 
407
486
  private async cleanupStaleJobs() {
408
487
  const jobIds = Array.from(this.jobsCache.keys());
@@ -416,7 +495,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
416
495
  }
417
496
 
418
497
  if (jobsToClean.length > 0) {
419
- this.logger.info(`Cleaning up [${jobsToClean.join(',')}]`);
498
+ this.logger.info(`Cleaning up jobs=${jobsToClean.length}`);
420
499
  await asyncPool(this.maxParallelCleanUps, jobsToClean, async jobId => {
421
500
  await this.cleanUpProvingJobState(jobId);
422
501
  });
@@ -428,7 +507,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
428
507
  for (const [id, metadata] of inProgressEntries) {
429
508
  const item = this.jobsCache.get(id);
430
509
  if (!item) {
431
- this.logger.warn(`Proving job id=${id} not found. Removing it from the queue.`);
510
+ this.logger.warn(`Proving job id=${id} not found. Removing it from the queue.`, { provingJobId: id });
432
511
  this.inProgress.delete(id);
433
512
  continue;
434
513
  }
@@ -440,7 +519,7 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
440
519
  // the job has timed out and it's also old, just cancel and move on
441
520
  await this.cancelProvingJob(item.id);
442
521
  } else {
443
- this.logger.warn(`Proving job id=${id} timed out. Adding it back to the queue.`);
522
+ this.logger.warn(`Proving job id=${id} timed out. Adding it back to the queue.`, { provingJobId: id });
444
523
  this.inProgress.delete(id);
445
524
  this.enqueueJobInternal(item);
446
525
  this.instrumentation.incTimedOutJobs(item.type);
@@ -459,7 +538,6 @@ export class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer {
459
538
  });
460
539
  this.enqueuedAt.set(job.id, new Timer());
461
540
  this.epochHeight = Math.max(this.epochHeight, job.epochNumber);
462
- this.logger.debug(`Enqueued new proving job id=${job.id}`);
463
541
  }
464
542
 
465
543
  private isJobStale(job: ProvingJob) {
@@ -30,6 +30,7 @@ export class ProvingJobController {
30
30
  constructor(
31
31
  private jobId: ProvingJobId,
32
32
  private inputs: ProvingJobInputs,
33
+ private epochNumber: number,
33
34
  private startedAt: number,
34
35
  private circuitProver: ServerCircuitProver,
35
36
  private onComplete: ProvingJobCompletionCallback,
@@ -100,51 +101,51 @@ export class ProvingJobController {
100
101
  const signal = this.abortController.signal;
101
102
  switch (type) {
102
103
  case ProvingRequestType.PUBLIC_VM: {
103
- return await this.circuitProver.getAvmProof(inputs, signal);
104
+ return await this.circuitProver.getAvmProof(inputs, signal, this.epochNumber);
104
105
  }
105
106
 
106
107
  case ProvingRequestType.PRIVATE_BASE_ROLLUP: {
107
- return await this.circuitProver.getPrivateBaseRollupProof(inputs, signal);
108
+ return await this.circuitProver.getPrivateBaseRollupProof(inputs, signal, this.epochNumber);
108
109
  }
109
110
 
110
111
  case ProvingRequestType.PUBLIC_BASE_ROLLUP: {
111
- return await this.circuitProver.getPublicBaseRollupProof(inputs, signal);
112
+ return await this.circuitProver.getPublicBaseRollupProof(inputs, signal, this.epochNumber);
112
113
  }
113
114
 
114
115
  case ProvingRequestType.MERGE_ROLLUP: {
115
- return await this.circuitProver.getMergeRollupProof(inputs, signal);
116
+ return await this.circuitProver.getMergeRollupProof(inputs, signal, this.epochNumber);
116
117
  }
117
118
 
118
119
  case ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP: {
119
- return await this.circuitProver.getEmptyBlockRootRollupProof(inputs, signal);
120
+ return await this.circuitProver.getEmptyBlockRootRollupProof(inputs, signal, this.epochNumber);
120
121
  }
121
122
 
122
123
  case ProvingRequestType.BLOCK_ROOT_ROLLUP: {
123
- return await this.circuitProver.getBlockRootRollupProof(inputs, signal);
124
+ return await this.circuitProver.getBlockRootRollupProof(inputs, signal, this.epochNumber);
124
125
  }
125
126
 
126
127
  case ProvingRequestType.BLOCK_MERGE_ROLLUP: {
127
- return await this.circuitProver.getBlockMergeRollupProof(inputs, signal);
128
+ return await this.circuitProver.getBlockMergeRollupProof(inputs, signal, this.epochNumber);
128
129
  }
129
130
 
130
131
  case ProvingRequestType.ROOT_ROLLUP: {
131
- return await this.circuitProver.getRootRollupProof(inputs, signal);
132
+ return await this.circuitProver.getRootRollupProof(inputs, signal, this.epochNumber);
132
133
  }
133
134
 
134
135
  case ProvingRequestType.BASE_PARITY: {
135
- return await this.circuitProver.getBaseParityProof(inputs, signal);
136
+ return await this.circuitProver.getBaseParityProof(inputs, signal, this.epochNumber);
136
137
  }
137
138
 
138
139
  case ProvingRequestType.ROOT_PARITY: {
139
- return await this.circuitProver.getRootParityProof(inputs, signal);
140
+ return await this.circuitProver.getRootParityProof(inputs, signal, this.epochNumber);
140
141
  }
141
142
 
142
143
  case ProvingRequestType.PRIVATE_KERNEL_EMPTY: {
143
- return await this.circuitProver.getEmptyPrivateKernelProof(inputs, signal);
144
+ return await this.circuitProver.getEmptyPrivateKernelProof(inputs, signal, this.epochNumber);
144
145
  }
145
146
 
146
147
  case ProvingRequestType.TUBE_PROOF: {
147
- return await this.circuitProver.getTubeProof(inputs, signal);
148
+ return await this.circuitProver.getTubeProof(inputs, signal, this.epochNumber);
148
149
  }
149
150
 
150
151
  default: {
@@ -28,7 +28,6 @@ const GetProvingJobResponse = z.object({
28
28
  export const ProvingJobProducerSchema: ApiSchemaFor<ProvingJobProducer> = {
29
29
  enqueueProvingJob: z.function().args(ProvingJob).returns(z.void()),
30
30
  getProvingJobStatus: z.function().args(ProvingJobId).returns(ProvingJobStatus),
31
- cleanUpProvingJobState: z.function().args(ProvingJobId).returns(z.void()),
32
31
  cancelProvingJob: z.function().args(ProvingJobId).returns(z.void()),
33
32
  waitForJobToSettle: z.function().args(ProvingJobId).returns(ProvingJobSettledResult),
34
33
  };
@@ -14,27 +14,29 @@ import {
14
14
  AVM_PROOF_LENGTH_IN_FIELDS,
15
15
  AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS,
16
16
  type AvmCircuitInputs,
17
- type BaseOrMergeRollupPublicInputs,
18
17
  type BaseParityInputs,
19
- type BlockMergeRollupInputs,
20
- type BlockRootOrBlockMergePublicInputs,
21
- type BlockRootRollupInputs,
22
- type EmptyBlockRootRollupInputs,
23
18
  type KernelCircuitPublicInputs,
24
- type MergeRollupInputs,
25
19
  NESTED_RECURSIVE_PROOF_LENGTH,
26
- type PrivateBaseRollupInputs,
27
20
  type PrivateKernelEmptyInputData,
28
- type PublicBaseRollupInputs,
29
21
  RECURSIVE_PROOF_LENGTH,
30
22
  type RootParityInputs,
31
- type RootRollupInputs,
32
- type RootRollupPublicInputs,
33
23
  TUBE_PROOF_LENGTH,
34
24
  VerificationKeyData,
35
25
  makeEmptyRecursiveProof,
36
26
  makeRecursiveProof,
37
27
  } from '@aztec/circuits.js';
28
+ import {
29
+ type BaseOrMergeRollupPublicInputs,
30
+ type BlockMergeRollupInputs,
31
+ type BlockRootOrBlockMergePublicInputs,
32
+ type BlockRootRollupInputs,
33
+ type EmptyBlockRootRollupInputs,
34
+ type MergeRollupInputs,
35
+ type PrivateBaseRollupInputs,
36
+ type PublicBaseRollupInputs,
37
+ type RootRollupInputs,
38
+ type RootRollupPublicInputs,
39
+ } from '@aztec/circuits.js/rollup';
38
40
  import {
39
41
  makeBaseOrMergeRollupPublicInputs,
40
42
  makeBlockRootOrBlockMergeRollupPublicInputs,
@@ -58,8 +60,12 @@ export class TestBroker implements ProvingJobProducer {
58
60
  agentCount: number,
59
61
  prover: ServerCircuitProver,
60
62
  private proofStore: ProofStore = new InlineProofStore(),
63
+ agentPollInterval = 100,
61
64
  ) {
62
- this.agents = times(agentCount, () => new ProvingAgent(this.broker, proofStore, prover, new NoopTelemetryClient()));
65
+ this.agents = times(
66
+ agentCount,
67
+ () => new ProvingAgent(this.broker, proofStore, prover, new NoopTelemetryClient(), undefined, agentPollInterval),
68
+ );
63
69
  }
64
70
 
65
71
  public async start() {
@@ -82,9 +88,6 @@ export class TestBroker implements ProvingJobProducer {
82
88
  getProvingJobStatus(id: ProvingJobId): Promise<ProvingJobStatus> {
83
89
  return this.broker.getProvingJobStatus(id);
84
90
  }
85
- cleanUpProvingJobState(id: ProvingJobId): Promise<void> {
86
- return this.broker.cleanUpProvingJobState(id);
87
- }
88
91
  cancelProvingJob(id: string): Promise<void> {
89
92
  return this.broker.cancelProvingJob(id);
90
93
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"caching_broker_facade.d.ts","sourceRoot":"","sources":["../../src/proving_broker/caching_broker_facade.ts"],"names":[],"mappings":"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"}