@aztec/prover-client 0.0.0-test.1 → 0.0.1-fake-ceab37513c

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 (107) hide show
  1. package/dest/bin/get-proof-inputs.js +1 -1
  2. package/dest/block-factory/index.d.ts +2 -0
  3. package/dest/block-factory/index.d.ts.map +1 -0
  4. package/dest/block-factory/light.d.ts +36 -0
  5. package/dest/block-factory/light.d.ts.map +1 -0
  6. package/dest/{block_builder → block-factory}/light.js +35 -30
  7. package/dest/config.d.ts +6 -6
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +11 -1
  10. package/dest/mocks/fixtures.d.ts +3 -3
  11. package/dest/mocks/fixtures.d.ts.map +1 -1
  12. package/dest/mocks/fixtures.js +2 -2
  13. package/dest/mocks/test_context.d.ts +18 -13
  14. package/dest/mocks/test_context.d.ts.map +1 -1
  15. package/dest/mocks/test_context.js +44 -38
  16. package/dest/orchestrator/block-building-helpers.d.ts +18 -11
  17. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  18. package/dest/orchestrator/block-building-helpers.js +80 -63
  19. package/dest/orchestrator/block-proving-state.d.ts +19 -10
  20. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/block-proving-state.js +63 -46
  22. package/dest/orchestrator/epoch-proving-state.d.ts +13 -6
  23. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/epoch-proving-state.js +40 -14
  25. package/dest/orchestrator/orchestrator.d.ts +7 -5
  26. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  27. package/dest/orchestrator/orchestrator.js +78 -52
  28. package/dest/orchestrator/orchestrator_metrics.d.ts +2 -0
  29. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
  30. package/dest/orchestrator/orchestrator_metrics.js +9 -0
  31. package/dest/orchestrator/tx-proving-state.d.ts +2 -2
  32. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  33. package/dest/orchestrator/tx-proving-state.js +9 -20
  34. package/dest/prover-client/prover-client.d.ts +3 -3
  35. package/dest/prover-client/prover-client.d.ts.map +1 -1
  36. package/dest/prover-client/prover-client.js +5 -4
  37. package/dest/prover-client/server-epoch-prover.d.ts +6 -4
  38. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  39. package/dest/prover-client/server-epoch-prover.js +4 -4
  40. package/dest/proving_broker/broker_prover_facade.d.ts +5 -3
  41. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  42. package/dest/proving_broker/broker_prover_facade.js +31 -21
  43. package/dest/proving_broker/config.d.ts +9 -4
  44. package/dest/proving_broker/config.d.ts.map +1 -1
  45. package/dest/proving_broker/config.js +15 -4
  46. package/dest/proving_broker/factory.d.ts +1 -1
  47. package/dest/proving_broker/factory.d.ts.map +1 -1
  48. package/dest/proving_broker/factory.js +5 -1
  49. package/dest/proving_broker/proof_store/factory.js +1 -1
  50. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
  51. package/dest/proving_broker/proof_store/gcs_proof_store.js +1 -0
  52. package/dest/proving_broker/proving_agent.d.ts +3 -3
  53. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  54. package/dest/proving_broker/proving_agent.js +83 -47
  55. package/dest/proving_broker/proving_broker.d.ts +11 -2
  56. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  57. package/dest/proving_broker/proving_broker.js +6 -5
  58. package/dest/proving_broker/proving_broker_database/memory.js +1 -1
  59. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  60. package/dest/proving_broker/proving_broker_database/persisted.js +9 -8
  61. package/dest/proving_broker/proving_job_controller.d.ts +7 -8
  62. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  63. package/dest/proving_broker/proving_job_controller.js +53 -45
  64. package/dest/proving_broker/rpc.d.ts +3 -5
  65. package/dest/proving_broker/rpc.d.ts.map +1 -1
  66. package/dest/proving_broker/rpc.js +1 -4
  67. package/dest/test/mock_proof_store.d.ts +9 -0
  68. package/dest/test/mock_proof_store.d.ts.map +1 -0
  69. package/dest/test/mock_proof_store.js +10 -0
  70. package/dest/test/mock_prover.d.ts +7 -5
  71. package/dest/test/mock_prover.d.ts.map +1 -1
  72. package/dest/test/mock_prover.js +6 -3
  73. package/package.json +28 -27
  74. package/src/bin/get-proof-inputs.ts +1 -1
  75. package/src/block-factory/index.ts +1 -0
  76. package/src/{block_builder → block-factory}/light.ts +42 -29
  77. package/src/config.ts +24 -8
  78. package/src/mocks/fixtures.ts +5 -5
  79. package/src/mocks/test_context.ts +79 -59
  80. package/src/orchestrator/block-building-helpers.ts +96 -92
  81. package/src/orchestrator/block-proving-state.ts +78 -52
  82. package/src/orchestrator/epoch-proving-state.ts +51 -20
  83. package/src/orchestrator/orchestrator.ts +119 -60
  84. package/src/orchestrator/orchestrator_metrics.ts +20 -1
  85. package/src/orchestrator/tx-proving-state.ts +17 -24
  86. package/src/prover-client/prover-client.ts +16 -14
  87. package/src/prover-client/server-epoch-prover.ts +16 -7
  88. package/src/proving_broker/broker_prover_facade.ts +52 -36
  89. package/src/proving_broker/config.ts +17 -6
  90. package/src/proving_broker/factory.ts +2 -1
  91. package/src/proving_broker/proof_store/factory.ts +1 -1
  92. package/src/proving_broker/proof_store/gcs_proof_store.ts +5 -1
  93. package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
  94. package/src/proving_broker/proving_agent.ts +89 -47
  95. package/src/proving_broker/proving_broker.ts +16 -15
  96. package/src/proving_broker/proving_broker_database/memory.ts +1 -1
  97. package/src/proving_broker/proving_broker_database/persisted.ts +9 -8
  98. package/src/proving_broker/proving_job_controller.ts +56 -65
  99. package/src/proving_broker/rpc.ts +1 -6
  100. package/src/test/mock_proof_store.ts +14 -0
  101. package/src/test/mock_prover.ts +27 -5
  102. package/dest/block_builder/index.d.ts +0 -6
  103. package/dest/block_builder/index.d.ts.map +0 -1
  104. package/dest/block_builder/light.d.ts +0 -33
  105. package/dest/block_builder/light.d.ts.map +0 -1
  106. package/src/block_builder/index.ts +0 -6
  107. /package/dest/{block_builder → block-factory}/index.js +0 -0
@@ -4,10 +4,10 @@ function _ts_decorate(decorators, target, key, desc) {
4
4
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
+ import { AbortError } from '@aztec/foundation/error';
7
8
  import { createLogger } from '@aztec/foundation/log';
8
9
  import { RunningPromise } from '@aztec/foundation/running-promise';
9
10
  import { truncate } from '@aztec/foundation/string';
10
- import { Timer } from '@aztec/foundation/timer';
11
11
  import { ProvingError } from '@aztec/stdlib/errors';
12
12
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
13
13
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
@@ -25,7 +25,6 @@ import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_
25
25
  currentJobController;
26
26
  runningPromise;
27
27
  instrumentation;
28
- idleTimer;
29
28
  tracer;
30
29
  constructor(/** The source of proving jobs */ broker, /** Database holding proof inputs and outputs */ proofStore, /** The prover implementation to defer jobs to */ circuitProver, /** Optional list of allowed proof types to build */ proofAllowList = [], /** How long to wait between jobs */ pollIntervalMs = 1000, /** A telemetry client through which to emit metrics */ client = getTelemetryClient(), log = createLogger('prover-client:proving-agent')){
31
30
  this.broker = broker;
@@ -34,28 +33,6 @@ import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_
34
33
  this.proofAllowList = proofAllowList;
35
34
  this.pollIntervalMs = pollIntervalMs;
36
35
  this.log = log;
37
- this.handleJobResult = async (jobId, type, err, result)=>{
38
- let maybeJob;
39
- if (err) {
40
- const retry = err.name === ProvingError.NAME ? err.retry : false;
41
- this.log.error(`Job id=${jobId} type=${ProvingRequestType[type]} failed err=${err.message} retry=${retry}`, err);
42
- maybeJob = await this.broker.reportProvingJobError(jobId, err.message, retry, {
43
- allowList: this.proofAllowList
44
- });
45
- } else if (result) {
46
- const outputUri = await this.proofStore.saveProofOutput(jobId, type, result);
47
- this.log.info(`Job id=${jobId} type=${ProvingRequestType[type]} completed outputUri=${truncate(outputUri)}`);
48
- maybeJob = await this.broker.reportProvingJobSuccess(jobId, outputUri, {
49
- allowList: this.proofAllowList
50
- });
51
- }
52
- if (maybeJob) {
53
- const { job, time } = maybeJob;
54
- await this.startJob(job, time);
55
- } else {
56
- this.idleTimer = new Timer();
57
- }
58
- };
59
36
  this.tracer = client.getTracer('ProvingAgent');
60
37
  this.instrumentation = new ProvingAgentInstrumentation(client);
61
38
  this.runningPromise = new RunningPromise(this.work.bind(this), this.log, this.pollIntervalMs);
@@ -67,42 +44,78 @@ import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_
67
44
  return this.runningPromise?.isRunning() ?? false;
68
45
  }
69
46
  start() {
70
- this.idleTimer = new Timer();
71
47
  this.runningPromise.start();
72
48
  }
73
49
  async stop() {
74
50
  this.currentJobController?.abort();
75
51
  await this.runningPromise.stop();
76
52
  }
53
+ getStatus() {
54
+ if (this.currentJobController) {
55
+ return {
56
+ status: 'proving',
57
+ jobId: this.currentJobController.getJobId(),
58
+ proofType: this.currentJobController.getProofType(),
59
+ startedAtISO: new Date(this.currentJobController.getStartedAt()).toISOString()
60
+ };
61
+ }
62
+ return this.runningPromise.isRunning() ? {
63
+ status: 'running'
64
+ } : {
65
+ status: 'stopped'
66
+ };
67
+ }
77
68
  async work() {
78
- // every tick we need to
79
- // (1) either do a heartbeat, telling the broker that we're working
80
- // (2) get a new job
81
- // If during (1) the broker returns a new job that means we can cancel the current job and start the new one
69
+ // every tick we need to take one of the following actions:
70
+ // 1. send a hearbeat to the broker that we're working on some job
71
+ // 2. if the job is complete, send its result to the broker
72
+ // 3. get a job from the broker
73
+ // Any one of these actions could give us a new job to work on. If that happens we abort the current job.
74
+ //
75
+ // This loop gets triggered in one of two ways:
76
+ // - either on a timer (see pollIntervalMs)
77
+ // - or when a proof completes
82
78
  let maybeJob;
83
- if (this.currentJobController?.getStatus() === ProvingJobControllerStatus.PROVING) {
84
- maybeJob = await this.broker.reportProvingJobProgress(this.currentJobController.getJobId(), this.currentJobController.getStartedAt(), {
85
- allowList: this.proofAllowList
86
- });
79
+ if (this.currentJobController) {
80
+ const status = this.currentJobController.getStatus();
81
+ const jobId = this.currentJobController.getJobId();
82
+ const proofType = this.currentJobController.getProofType();
83
+ const startedAt = this.currentJobController.getStartedAt();
84
+ const result = this.currentJobController.getResult();
85
+ if (status === ProvingJobControllerStatus.RUNNING) {
86
+ maybeJob = await this.broker.reportProvingJobProgress(jobId, startedAt, {
87
+ allowList: this.proofAllowList
88
+ });
89
+ } else if (status === ProvingJobControllerStatus.DONE) {
90
+ if (result) {
91
+ maybeJob = await this.reportResult(jobId, proofType, result);
92
+ } else {
93
+ this.log.warn(`Job controller for job ${this.currentJobController.getJobId()} is done but doesn't have a result`, {
94
+ jobId
95
+ });
96
+ maybeJob = await this.reportResult(jobId, proofType, new ProvingError('No result found after proving', undefined, /* retry */ true));
97
+ }
98
+ this.currentJobController = undefined;
99
+ } else {
100
+ // IDLE status should not be seen because a job is started as soon as it is created
101
+ this.log.warn(`Idle job controller for job: ${this.currentJobController.getJobId()}. Skipping main loop work`, {
102
+ jobId: this.currentJobController.getJobId()
103
+ });
104
+ return;
105
+ }
87
106
  } else {
88
107
  maybeJob = await this.broker.getProvingJob({
89
108
  allowList: this.proofAllowList
90
109
  });
91
110
  }
92
- if (!maybeJob) {
93
- return;
94
- }
95
- if (this.idleTimer) {
96
- this.instrumentation.recordIdleTime(this.idleTimer);
111
+ if (maybeJob) {
112
+ await this.startJob(maybeJob);
97
113
  }
98
- this.idleTimer = undefined;
99
- const { job, time } = maybeJob;
100
- await this.startJob(job, time);
101
114
  }
102
- async startJob(job, startedAt) {
115
+ async startJob({ job, time: startedAt }) {
103
116
  let abortedProofJobId;
104
117
  let abortedProofName;
105
- if (this.currentJobController?.getStatus() === ProvingJobControllerStatus.PROVING) {
118
+ if (this.currentJobController?.getStatus() === ProvingJobControllerStatus.RUNNING) {
106
119
  abortedProofJobId = this.currentJobController.getJobId();
107
120
  abortedProofName = this.currentJobController.getProofTypeName();
108
121
  this.currentJobController?.abort();
@@ -110,16 +123,20 @@ import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_
110
123
  let inputs;
111
124
  try {
112
125
  inputs = await this.proofStore.getProofInput(job.inputsUri);
113
- } catch (err) {
126
+ } catch {
114
127
  const maybeJob = await this.broker.reportProvingJobError(job.id, 'Failed to load proof inputs', true, {
115
128
  allowList: this.proofAllowList
116
129
  });
117
130
  if (maybeJob) {
118
- return this.startJob(maybeJob.job, maybeJob.time);
131
+ return this.startJob(maybeJob);
119
132
  }
120
133
  return;
121
134
  }
122
- this.currentJobController = new ProvingJobController(job.id, inputs, job.epochNumber, startedAt, this.circuitProver, this.handleJobResult);
135
+ this.currentJobController = new ProvingJobController(job.id, inputs, job.epochNumber, startedAt, this.circuitProver, ()=>{
136
+ // trigger a run of the main work loop when proving completes
137
+ // no need to await this here. The controller will stay alive (in DONE state) until the result is send to the broker
138
+ void this.runningPromise.trigger();
139
+ });
123
140
  if (abortedProofJobId) {
124
141
  this.log.info(`Aborting job id=${abortedProofJobId} type=${abortedProofName} to start new job id=${this.currentJobController.getJobId()} type=${this.currentJobController.getProofTypeName()} inputsUri=${truncate(job.inputsUri)}`);
125
142
  } else {
@@ -127,7 +144,26 @@ import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_
127
144
  }
128
145
  this.currentJobController.start();
129
146
  }
130
- handleJobResult;
147
+ async reportResult(jobId, type, result) {
148
+ let maybeJob;
149
+ if (result instanceof AbortError) {
150
+ // no-op
151
+ this.log.warn(`Job id=${jobId} was aborted. Not reporting result back to broker`, result);
152
+ } else if (result instanceof Error) {
153
+ const retry = result.name === ProvingError.NAME ? result.retry : false;
154
+ this.log.error(`Job id=${jobId} type=${ProvingRequestType[type]} failed err=${result.message} retry=${retry}`, result);
155
+ maybeJob = await this.broker.reportProvingJobError(jobId, result.message, retry, {
156
+ allowList: this.proofAllowList
157
+ });
158
+ } else {
159
+ const outputUri = await this.proofStore.saveProofOutput(jobId, type, result);
160
+ this.log.info(`Job id=${jobId} type=${ProvingRequestType[type]} completed outputUri=${truncate(outputUri)}`);
161
+ maybeJob = await this.broker.reportProvingJobSuccess(jobId, outputUri, {
162
+ allowList: this.proofAllowList
163
+ });
164
+ }
165
+ return maybeJob;
166
+ }
131
167
  }
132
168
  _ts_decorate([
133
169
  trackSpan('ProvingAgent.safeWork')
@@ -1,4 +1,5 @@
1
- import type { GetProvingJobResponse, ProofUri, ProvingJob, ProvingJobConsumer, ProvingJobFilter, ProvingJobId, ProvingJobProducer, ProvingJobStatus } from '@aztec/stdlib/interfaces/server';
1
+ import { type GetProvingJobResponse, type ProofUri, type ProvingJob, type ProvingJobConsumer, type ProvingJobFilter, type ProvingJobId, type ProvingJobProducer, type ProvingJobStatus } from '@aztec/stdlib/interfaces/server';
2
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
2
3
  import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
3
4
  import { type ProverBrokerConfig } from './config.js';
4
5
  import type { ProvingBrokerDatabase } from './proving_broker_database.js';
@@ -27,7 +28,7 @@ export declare class ProvingBroker implements ProvingJobProducer, ProvingJobCons
27
28
  /**
28
29
  * The broker keeps track of the highest epoch its seen.
29
30
  * This information is used for garbage collection: once it reaches the next epoch, it can start pruning the database of old state.
30
- * It is important that this value is initialised to zero. This ensures that we don't delete any old jobs until the current
31
+ * It is important that this value is initialized to zero. This ensures that we don't delete any old jobs until the current
31
32
  * process instance receives a job request informing it of the actual current highest epoch
32
33
  * Example:
33
34
  * proving epoch 11 - the broker will wipe all jobs for epochs 9 and lower
@@ -61,4 +62,12 @@ export declare class ProvingBroker implements ProvingJobProducer, ProvingJobCons
61
62
  private isJobStale;
62
63
  private oldestEpochToKeep;
63
64
  }
65
+ /**
66
+ * Relative priority of each proof type. Proofs higher up on the list are more important and should be prioritized
67
+ * over proofs lower on the list.
68
+ *
69
+ * The aim is that this will speed up block proving as the closer we get to a block's root proof the more likely it
70
+ * is to get picked up by agents
71
+ */
72
+ export declare const PROOF_TYPES_IN_PRIORITY_ORDER: ProvingRequestType[];
64
73
  //# sourceMappingURL=proving_broker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proving_broker.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_broker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proving_broker.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_broker.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { createLogger } from '@aztec/foundation/log';
8
8
  import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
9
9
  import { PriorityMemoryQueue } from '@aztec/foundation/queue';
10
10
  import { Timer } from '@aztec/foundation/timer';
11
+ import { tryStop } from '@aztec/stdlib/interfaces/server';
11
12
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
12
13
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
13
14
  import assert from 'assert';
@@ -46,7 +47,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
46
47
  /**
47
48
  * The broker keeps track of the highest epoch its seen.
48
49
  * This information is used for garbage collection: once it reaches the next epoch, it can start pruning the database of old state.
49
- * It is important that this value is initialised to zero. This ensures that we don't delete any old jobs until the current
50
+ * It is important that this value is initialized to zero. This ensures that we don't delete any old jobs until the current
50
51
  * process instance receives a job request informing it of the actual current highest epoch
51
52
  * Example:
52
53
  * proving epoch 11 - the broker will wipe all jobs for epochs 9 and lower
@@ -69,6 +70,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
69
70
  [ProvingRequestType.BLOCK_ROOT_ROLLUP]: new PriorityMemoryQueue(provingJobComparator),
70
71
  [ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP]: new PriorityMemoryQueue(provingJobComparator),
71
72
  [ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP]: new PriorityMemoryQueue(provingJobComparator),
73
+ [ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP]: new PriorityMemoryQueue(provingJobComparator),
72
74
  [ProvingRequestType.BASE_PARITY]: new PriorityMemoryQueue(provingJobComparator),
73
75
  [ProvingRequestType.ROOT_PARITY]: new PriorityMemoryQueue(provingJobComparator)
74
76
  };
@@ -135,7 +137,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
135
137
  this.logger.warn('ProvingBroker not started');
136
138
  return Promise.resolve();
137
139
  }
138
- await this.cleanupPromise.stop();
140
+ await tryStop(this.cleanupPromise);
139
141
  }
140
142
  enqueueProvingJob(job) {
141
143
  return this.#enqueueProvingJob(job);
@@ -244,7 +246,6 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
244
246
  this.completedJobNotifications = [];
245
247
  return Promise.resolve(notifications.concat(completedJobs));
246
248
  }
247
- // eslint-disable-next-line require-await
248
249
  #getProvingJob(filter = {
249
250
  allowList: []
250
251
  }) {
@@ -462,7 +463,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
462
463
  }
463
464
  if (jobsToClean.length > 0) {
464
465
  this.cleanUpProvingJobState(jobsToClean);
465
- this.logger.info(`Cleaned up jobs=${jobsToClean.length}`);
466
+ this.logger.verbose(`Cleaned up proving jobs=${jobsToClean.length}`);
466
467
  }
467
468
  }
468
469
  reEnqueueExpiredJobs() {
@@ -554,7 +555,7 @@ _ts_decorate([
554
555
  *
555
556
  * The aim is that this will speed up block proving as the closer we get to a block's root proof the more likely it
556
557
  * is to get picked up by agents
557
- */ const PROOF_TYPES_IN_PRIORITY_ORDER = [
558
+ */ export const PROOF_TYPES_IN_PRIORITY_ORDER = [
558
559
  ProvingRequestType.BLOCK_ROOT_ROLLUP,
559
560
  ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP,
560
561
  ProvingRequestType.BLOCK_MERGE_ROLLUP,
@@ -41,7 +41,7 @@ export class InMemoryBrokerDatabase {
41
41
  return this.deleteProvingJobs(toDelete);
42
42
  }
43
43
  async *allProvingJobs() {
44
- for await (const item of this.jobs.values()){
44
+ for (const item of this.jobs.values()){
45
45
  yield [
46
46
  item,
47
47
  this.results.get(item.id)
@@ -1 +1 @@
1
- {"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proving_broker_database/persisted.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EACL,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,YAAY,EACjB,uBAAuB,EAExB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAA2B,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAK5G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAwD3E,qBAAa,gBAAiB,YAAW,qBAAqB;IAM1D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO;IAuBM,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM;YAQnG,YAAY;WASN,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,GAAE,eAAsC,EAC9C,MAAM,SAAwD;IAgChE,OAAO,CAAC,KAAK;IAIP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,IAAI,qBAAqB,CAAC,CAAC,UAAU,EAAE,uBAAuB,GAAG,SAAS,CAAC,CAAC;IAOjG,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAIvD,gBAAgB;CAoB/B"}
1
+ {"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proving_broker_database/persisted.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EACL,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,YAAY,EACjB,uBAAuB,EAExB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAA2B,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAK5G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAwD3E,qBAAa,gBAAiB,YAAW,qBAAqB;IAM1D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO;IAuBM,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM;YAQnG,YAAY;WAUN,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,GAAE,eAAsC,EAC9C,MAAM,SAAwD;IAgChE,OAAO,CAAC,KAAK;IAIP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,IAAI,qBAAqB,CAAC,CAAC,UAAU,EAAE,uBAAuB,GAAG,SAAS,CAAC,CAAC;IAOjG,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAIvD,gBAAgB;CAoB/B"}
@@ -31,9 +31,9 @@ class SingleEpochDatabase {
31
31
  }
32
32
  async *allProvingJobs() {
33
33
  for await (const jobStr of this.jobs.valuesAsync()){
34
- const job = await jsonParseWithSchema(jobStr, ProvingJob);
34
+ const job = jsonParseWithSchema(jobStr, ProvingJob);
35
35
  const resultStr = await this.jobResults.getAsync(job.id);
36
- const result = resultStr ? await jsonParseWithSchema(resultStr, ProvingJobSettledResult) : undefined;
36
+ const result = resultStr ? jsonParseWithSchema(resultStr, ProvingJobSettledResult) : undefined;
37
37
  yield [
38
38
  job,
39
39
  result
@@ -86,7 +86,8 @@ export class KVBrokerDatabase {
86
86
  async estimateSize() {
87
87
  const sizes = await Promise.all(Array.from(this.epochs.values()).map((x)=>x.estimateSize()));
88
88
  return {
89
- mappingSize: this.config.dataStoreMapSizeKB,
89
+ mappingSize: this.config.dataStoreMapSizeKb,
90
+ physicalFileSize: sizes.reduce((prev, curr)=>prev + curr.physicalFileSize, 0),
90
91
  numItems: sizes.reduce((prev, curr)=>prev + curr.numItems, 0),
91
92
  actualSize: sizes.reduce((prev, curr)=>prev + curr.actualSize, 0)
92
93
  };
@@ -108,8 +109,8 @@ export class KVBrokerDatabase {
108
109
  logger.warn(`Found invalid epoch directory ${fullDirectory} when loading epoch databases, ignoring`);
109
110
  continue;
110
111
  }
111
- logger.info(`Loading broker database for epoch ${epochNumber} from ${fullDirectory} with map size ${config.dataStoreMapSizeKB}KB`);
112
- const db = await openVersionedStoreAt(fullDirectory, SingleEpochDatabase.SCHEMA_VERSION, config.l1Contracts.rollupAddress, config.dataStoreMapSizeKB);
112
+ logger.info(`Loading broker database for epoch ${epochNumber} from ${fullDirectory} with map size ${config.dataStoreMapSizeKb}KB`);
113
+ const db = await openVersionedStoreAt(fullDirectory, SingleEpochDatabase.SCHEMA_VERSION, config.l1Contracts.rollupAddress, config.dataStoreMapSizeKb);
113
114
  const epochDb = new SingleEpochDatabase(db);
114
115
  epochs.set(epochNumber, epochDb);
115
116
  }
@@ -133,7 +134,7 @@ export class KVBrokerDatabase {
133
134
  if (!db) {
134
135
  continue;
135
136
  }
136
- this.logger.info(`Deleting broker database for epoch ${old}`);
137
+ this.logger.verbose(`Deleting broker database for epoch ${old}`);
137
138
  await db.delete();
138
139
  this.epochs.delete(old);
139
140
  }
@@ -172,8 +173,8 @@ export class KVBrokerDatabase {
172
173
  await mkdir(newEpochDirectory, {
173
174
  recursive: true
174
175
  });
175
- this.logger.info(`Creating broker database for epoch ${epochNumber} at ${newEpochDirectory} with map size ${this.config.dataStoreMapSizeKB}`);
176
- const db = await openVersionedStoreAt(newEpochDirectory, SingleEpochDatabase.SCHEMA_VERSION, this.config.l1Contracts.rollupAddress, this.config.dataStoreMapSizeKB);
176
+ this.logger.info(`Creating broker database for epoch ${epochNumber} at ${newEpochDirectory} with map size ${this.config.dataStoreMapSizeKb}`);
177
+ const db = await openVersionedStoreAt(newEpochDirectory, SingleEpochDatabase.SCHEMA_VERSION, this.config.l1Contracts.rollupAddress, this.config.dataStoreMapSizeKb);
177
178
  epochDb = new SingleEpochDatabase(db);
178
179
  this.epochs.set(epochNumber, epochDb);
179
180
  }
@@ -2,12 +2,8 @@ import type { ProvingJobId, ProvingJobInputs, ProvingJobResultsMap, ServerCircui
2
2
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
3
3
  export declare enum ProvingJobControllerStatus {
4
4
  IDLE = "idle",
5
- PROVING = "proving",
6
- DONE = "done",
7
- ABORTED = "aborted"
8
- }
9
- interface ProvingJobCompletionCallback<T extends ProvingRequestType = ProvingRequestType> {
10
- (jobId: ProvingJobId, type: T, error: Error | undefined, result: ProvingJobResultsMap[T] | undefined): void | Promise<void>;
5
+ RUNNING = "running",
6
+ DONE = "done"
11
7
  }
12
8
  export declare class ProvingJobController {
13
9
  private jobId;
@@ -20,14 +16,17 @@ export declare class ProvingJobController {
20
16
  private status;
21
17
  private promise?;
22
18
  private abortController;
23
- constructor(jobId: ProvingJobId, inputs: ProvingJobInputs, epochNumber: number, startedAt: number, circuitProver: ServerCircuitProver, onComplete: ProvingJobCompletionCallback, log?: import("@aztec/foundation/log").Logger);
19
+ private result?;
20
+ constructor(jobId: ProvingJobId, inputs: ProvingJobInputs, epochNumber: number, startedAt: number, circuitProver: ServerCircuitProver, onComplete: () => void, log?: import("@aztec/foundation/log").Logger);
24
21
  start(): void;
25
22
  getStatus(): ProvingJobControllerStatus;
23
+ getResult(): ProvingJobResultsMap[ProvingRequestType] | Error | undefined;
26
24
  abort(): void;
27
25
  getJobId(): ProvingJobId;
26
+ getProofType(): ProvingRequestType;
28
27
  getStartedAt(): number;
29
28
  getProofTypeName(): string;
29
+ private run;
30
30
  private generateProof;
31
31
  }
32
- export {};
33
32
  //# sourceMappingURL=proving_job_controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proving_job_controller.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_job_controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,oBAAY,0BAA0B;IACpC,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,UAAU,4BAA4B,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB;IACtF,CACE,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAAS,GAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,qBAAa,oBAAoB;IAM7B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAXb,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,eAAe,CAAyB;gBAGtC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,mBAAmB,EAClC,UAAU,EAAE,4BAA4B,EACxC,GAAG,yCAA6D;IAGnE,KAAK,IAAI,IAAI;IA+Db,SAAS,IAAI,0BAA0B;IAIvC,KAAK,IAAI,IAAI;IAgBb,QAAQ,IAAI,YAAY;IAIxB,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM;YAInB,aAAa;CA0D5B"}
1
+ {"version":3,"file":"proving_job_controller.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_job_controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,oBAAY,0BAA0B;IACpC,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,MAAM,CAAC,CAAmD;gBAGxD,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,mBAAmB,EAClC,UAAU,EAAE,MAAM,IAAI,EACtB,GAAG,yCAA+F;IAGrG,KAAK,IAAI,IAAI;IAmBb,SAAS,IAAI,0BAA0B;IAIvC,SAAS,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,GAAG,KAAK,GAAG,SAAS;IAIzE,KAAK,IAAI,IAAI;IAeb,QAAQ,IAAI,YAAY;IAIxB,YAAY,IAAI,kBAAkB;IAIlC,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM;IAIjC,OAAO,CAAC,GAAG,CA4BT;YAEY,aAAa;CA+D5B"}
@@ -1,10 +1,11 @@
1
+ import { randomBytes } from '@aztec/foundation/crypto';
2
+ import { AbortError } from '@aztec/foundation/error';
1
3
  import { createLogger } from '@aztec/foundation/log';
2
4
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
3
5
  export var ProvingJobControllerStatus = /*#__PURE__*/ function(ProvingJobControllerStatus) {
4
6
  ProvingJobControllerStatus["IDLE"] = "idle";
5
- ProvingJobControllerStatus["PROVING"] = "proving";
7
+ ProvingJobControllerStatus["RUNNING"] = "running";
6
8
  ProvingJobControllerStatus["DONE"] = "done";
7
- ProvingJobControllerStatus["ABORTED"] = "aborted";
8
9
  return ProvingJobControllerStatus;
9
10
  }({});
10
11
  export class ProvingJobController {
@@ -18,7 +19,8 @@ export class ProvingJobController {
18
19
  status;
19
20
  promise;
20
21
  abortController;
21
- constructor(jobId, inputs, epochNumber, startedAt, circuitProver, onComplete, log = createLogger('prover-client:proving-agent:job-controller')){
22
+ result;
23
+ constructor(jobId, inputs, epochNumber, startedAt, circuitProver, onComplete, log = createLogger('prover-client:proving-agent:job-controller-' + randomBytes(4).toString('hex'))){
22
24
  this.jobId = jobId;
23
25
  this.inputs = inputs;
24
26
  this.epochNumber = epochNumber;
@@ -28,89 +30,91 @@ export class ProvingJobController {
28
30
  this.log = log;
29
31
  this.status = "idle";
30
32
  this.abortController = new AbortController();
31
- }
32
- start() {
33
- if (this.status !== "idle") {
34
- this.log.verbose(`Job controller for jobId=${this.jobId} not starting because it is not idle currentStatus=${this.status}`, {
35
- currentStatus: this.status,
36
- jobId: this.jobId
37
- });
38
- return;
39
- }
40
- this.status = "proving";
41
- this.log.verbose(`Job controller started jobId=${this.jobId}`, {
42
- jobId: this.jobId
43
- });
44
- this.promise = this.generateProof().then((result)=>{
45
- if (this.status === "aborted") {
46
- this.log.warn(`Job controller for jobId=${this.jobId} completed successfully but job was aborted`, {
33
+ this.run = async ()=>{
34
+ this.status = "running";
35
+ let result;
36
+ try {
37
+ result = await this.generateProof();
38
+ } catch (err) {
39
+ if (err && err instanceof Error) {
40
+ result = err;
41
+ } else {
42
+ result = new Error('Unknown proving error: ' + String(err), {
43
+ cause: err
44
+ });
45
+ }
46
+ }
47
+ if (this.abortController.signal.aborted) {
48
+ this.log.warn(`Job controller for jobId=${this.jobId} completed but job was aborted`, {
47
49
  currentStatus: this.status,
48
50
  jobId: this.jobId
49
51
  });
50
- return;
52
+ result = new AbortError('Proof was aborted');
51
53
  }
54
+ this.result = result;
52
55
  this.status = "done";
53
- this.log.verbose(`Job controller for jobId=${this.jobId} completed successfully`, {
54
- jobId: this.jobId
55
- });
56
- return this.onComplete(this.jobId, this.inputs.type, undefined, result);
57
- }, (error)=>{
58
- if (this.status === "aborted") {
59
- this.log.warn(`Job controller for jobId=${this.jobId} finished with an error but job was aborted`, {
60
- currentStatus: this.status,
56
+ try {
57
+ this.onComplete();
58
+ } catch (err) {
59
+ this.log.warn(`On complete handler error: ${err}`, {
61
60
  jobId: this.jobId
62
61
  });
63
- return;
64
62
  }
65
- if (error.name === 'AbortError') {
66
- // Ignore abort errors
67
- return;
68
- }
69
- this.log.verbose(`Job controller for jobId=${this.jobId} finished with an error`, {
70
- jobId: this.jobId,
71
- err: error
72
- });
73
- this.status = "done";
74
- return this.onComplete(this.jobId, this.inputs.type, error, undefined);
75
- }).catch((err)=>{
76
- this.log.error(`Job constroller failed to send result for jobId=${this.jobId}: ${err}`, err, {
63
+ };
64
+ }
65
+ start() {
66
+ if (this.status !== "idle") {
67
+ this.log.warn(`Job controller for jobId=${this.jobId} not starting because it is not idle currentStatus=${this.status}`, {
68
+ currentStatus: this.status,
77
69
  jobId: this.jobId
78
70
  });
71
+ return;
72
+ }
73
+ this.promise = this.run();
74
+ this.log.info(`Job controller started jobId=${this.jobId}`, {
75
+ jobId: this.jobId
79
76
  });
80
77
  }
81
78
  getStatus() {
82
79
  return this.status;
83
80
  }
81
+ getResult() {
82
+ return this.result;
83
+ }
84
84
  abort() {
85
- if (this.status !== "proving") {
85
+ if (this.status !== "running") {
86
86
  this.log.warn(`Tried to abort job controller for jobId=${this.jobId} but it is not running`, {
87
87
  currentStatus: this.status,
88
88
  jobId: this.jobId
89
89
  });
90
90
  return;
91
91
  }
92
- this.status = "aborted";
93
92
  this.abortController.abort();
94
- this.log.verbose(`Aborted job controller for jobId=${this.jobId}`, {
93
+ this.log.warn(`Aborted job controller for jobId=${this.jobId}`, {
95
94
  jobId: this.jobId
96
95
  });
97
96
  }
98
97
  getJobId() {
99
98
  return this.jobId;
100
99
  }
100
+ getProofType() {
101
+ return this.inputs.type;
102
+ }
101
103
  getStartedAt() {
102
104
  return this.startedAt;
103
105
  }
104
106
  getProofTypeName() {
105
107
  return ProvingRequestType[this.inputs.type];
106
108
  }
109
+ run;
107
110
  async generateProof() {
108
111
  const { type, inputs } = this.inputs;
109
112
  const signal = this.abortController.signal;
110
113
  switch(type){
111
114
  case ProvingRequestType.PUBLIC_VM:
112
115
  {
113
- return await this.circuitProver.getAvmProof(inputs, signal, this.epochNumber);
116
+ // TODO(#14234)[Unconditional PIs validation]: Remove argument "undefined".
117
+ return await this.circuitProver.getAvmProof(inputs, undefined, signal, this.epochNumber);
114
118
  }
115
119
  case ProvingRequestType.PRIVATE_BASE_ROLLUP:
116
120
  {
@@ -128,6 +132,10 @@ export class ProvingJobController {
128
132
  {
129
133
  return await this.circuitProver.getEmptyBlockRootRollupProof(inputs, signal, this.epochNumber);
130
134
  }
135
+ case ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP:
136
+ {
137
+ return await this.circuitProver.getPaddingBlockRootRollupProof(inputs, signal, this.epochNumber);
138
+ }
131
139
  case ProvingRequestType.BLOCK_ROOT_ROLLUP:
132
140
  {
133
141
  return await this.circuitProver.getBlockRootRollupProof(inputs, signal, this.epochNumber);
@@ -1,24 +1,22 @@
1
- import type { SafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
2
1
  import { type ProvingJobBroker, type ProvingJobConsumer, type ProvingJobProducer } from '@aztec/stdlib/interfaces/server';
3
2
  import { type ApiSchemaFor } from '@aztec/stdlib/schemas';
4
3
  import { type ComponentsVersions } from '@aztec/stdlib/versioning';
5
4
  export declare const ProvingJobProducerSchema: ApiSchemaFor<ProvingJobProducer>;
6
5
  export declare const ProvingJobConsumerSchema: ApiSchemaFor<ProvingJobConsumer>;
7
6
  export declare const ProvingJobBrokerSchema: ApiSchemaFor<ProvingJobBroker>;
8
- export declare function createProvingBrokerServer(broker: ProvingJobBroker): SafeJsonRpcServer;
9
- export declare function createProvingJobBrokerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<{
7
+ export declare function createProvingJobBrokerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
10
8
  response: any;
11
9
  headers: {
12
10
  get: (header: string) => string | null | undefined;
13
11
  };
14
12
  }>): ProvingJobBroker;
15
- export declare function createProvingJobProducerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<{
13
+ export declare function createProvingJobProducerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
16
14
  response: any;
17
15
  headers: {
18
16
  get: (header: string) => string | null | undefined;
19
17
  };
20
18
  }>): ProvingJobProducer;
21
- export declare function createProvingJobConsumerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<{
19
+ export declare function createProvingJobConsumerClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
22
20
  response: any;
23
21
  headers: {
24
22
  get: (header: string) => string | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/proving_broker/rpc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,0BAA0B,CAAC;AAcjG,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,kBAAkB,CAKrE,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,kBAAkB,CAcrE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAAY,CAAC,gBAAgB,CAGjE,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAErF;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,gBAAgB,CAMlB;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,kBAAkB,CAMpB;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,kBAAkB,CAMpB"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/proving_broker/rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,0BAA0B,CAAC;AAcjG,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,kBAAkB,CAKrE,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,kBAAkB,CAcrE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAAY,CAAC,gBAAgB,CAGjE,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,gBAAgB,CAMlB;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,kBAAkB,CAMpB;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAoC,GACxC,kBAAkB,CAMpB"}
@@ -3,7 +3,7 @@ import { ProofUri, ProvingJob, ProvingJobId, ProvingJobStatus } from '@aztec/std
3
3
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
4
4
  import { optional } from '@aztec/stdlib/schemas';
5
5
  import { getVersioningResponseHandler } from '@aztec/stdlib/versioning';
6
- import { createTracedJsonRpcServer, makeTracedFetch } from '@aztec/telemetry-client';
6
+ import { makeTracedFetch } from '@aztec/telemetry-client';
7
7
  import { z } from 'zod';
8
8
  const ProvingJobFilterSchema = z.object({
9
9
  allowList: z.array(z.nativeEnum(ProvingRequestType))
@@ -28,9 +28,6 @@ export const ProvingJobBrokerSchema = {
28
28
  ...ProvingJobConsumerSchema,
29
29
  ...ProvingJobProducerSchema
30
30
  };
31
- export function createProvingBrokerServer(broker) {
32
- return createTracedJsonRpcServer(broker, ProvingJobBrokerSchema);
33
- }
34
31
  export function createProvingJobBrokerClient(url, versions, fetch = makeTracedFetch([
35
32
  1,
36
33
  2,