@aztec/prover-client 0.75.0 → 0.76.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.
- package/dest/mocks/test_context.d.ts +4 -4
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +17 -19
- package/dest/orchestrator/block-building-helpers.d.ts +1 -1
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +5 -23
- package/dest/orchestrator/block-proving-state.d.ts +2 -2
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +16 -16
- package/dest/orchestrator/epoch-proving-state.d.ts +2 -2
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +8 -11
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +35 -35
- package/dest/orchestrator/tx-proving-state.d.ts +2 -2
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +14 -14
- package/dest/proving_broker/proving_agent.d.ts +1 -0
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +26 -11
- package/dest/proving_broker/proving_broker.d.ts +4 -7
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +21 -23
- package/dest/proving_broker/rpc.d.ts +19 -4
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +28 -10
- package/dest/test/mock_prover.d.ts +2 -0
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +5 -1
- package/package.json +12 -12
- package/src/mocks/test_context.ts +23 -22
- package/src/orchestrator/block-building-helpers.ts +2 -39
- package/src/orchestrator/block-proving-state.ts +15 -15
- package/src/orchestrator/epoch-proving-state.ts +7 -10
- package/src/orchestrator/orchestrator.ts +36 -39
- package/src/orchestrator/tx-proving-state.ts +13 -13
- package/src/proving_broker/proving_agent.ts +30 -11
- package/src/proving_broker/proving_broker.ts +53 -27
- package/src/proving_broker/rpc.ts +32 -6
- package/src/test/mock_prover.ts +7 -1
- package/dest/prover-agent/index.d.ts +0 -4
- package/dest/prover-agent/index.d.ts.map +0 -1
- package/dest/prover-agent/index.js +0 -4
- package/dest/prover-agent/memory-proving-queue.d.ts +0 -82
- package/dest/prover-agent/memory-proving-queue.d.ts.map +0 -1
- package/dest/prover-agent/memory-proving-queue.js +0 -260
- package/dest/prover-agent/prover-agent.d.ts +0 -43
- package/dest/prover-agent/prover-agent.d.ts.map +0 -1
- package/dest/prover-agent/prover-agent.js +0 -204
- package/dest/prover-agent/proving-error.d.ts +0 -5
- package/dest/prover-agent/proving-error.d.ts.map +0 -1
- package/dest/prover-agent/proving-error.js +0 -9
- package/dest/prover-agent/queue_metrics.d.ts +0 -10
- package/dest/prover-agent/queue_metrics.d.ts.map +0 -1
- package/dest/prover-agent/queue_metrics.js +0 -23
- package/dest/prover-agent/rpc.d.ts +0 -11
- package/dest/prover-agent/rpc.d.ts.map +0 -1
- package/dest/prover-agent/rpc.js +0 -18
- package/src/prover-agent/index.ts +0 -3
- package/src/prover-agent/memory-proving-queue.ts +0 -416
- package/src/prover-agent/prover-agent.ts +0 -248
- package/src/prover-agent/proving-error.ts +0 -9
- package/src/prover-agent/queue_metrics.ts +0 -29
- 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
|
|
55
|
+
public getBaseRollupTypeAndInputs() {
|
|
56
56
|
if (this.requireAvmProof) {
|
|
57
57
|
return {
|
|
58
58
|
rollupType: 'public-base-rollup' satisfies CircuitName,
|
|
59
|
-
inputs:
|
|
59
|
+
inputs: this.#getPublicBaseInputs(),
|
|
60
60
|
};
|
|
61
61
|
} else {
|
|
62
62
|
return {
|
|
63
63
|
rollupType: 'private-base-rollup' satisfies CircuitName,
|
|
64
|
-
inputs:
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
125
|
+
#getTubeVkData() {
|
|
126
126
|
let vkIndex = TUBE_VK_INDEX;
|
|
127
127
|
try {
|
|
128
|
-
vkIndex =
|
|
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 =
|
|
132
|
+
const vkPath = getVKSiblingPath(vkIndex);
|
|
133
133
|
|
|
134
134
|
return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
#getAvmVkData() {
|
|
138
138
|
const vkIndex = AVM_VK_INDEX;
|
|
139
|
-
const vkPath =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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<
|
|
209
|
+
public getProvingJob(filter?: ProvingJobFilter): Promise<GetProvingJobResponse | undefined> {
|
|
209
210
|
return this.requestQueue.put(() => this.#getProvingJob(filter));
|
|
210
211
|
}
|
|
211
212
|
|
|
212
|
-
public reportProvingJobSuccess(
|
|
213
|
-
|
|
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(
|
|
217
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
):
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
55
|
-
|
|
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,
|
|
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,
|
|
91
|
+
return createSafeJsonRpcClient(url, ProvingJobConsumerSchema, {
|
|
92
|
+
namespaceMethods: 'provingJobConsumer',
|
|
93
|
+
fetch,
|
|
94
|
+
onResponse: getVersioningResponseHandler(versions),
|
|
95
|
+
});
|
|
70
96
|
}
|
package/src/test/mock_prover.ts
CHANGED
|
@@ -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
|
|
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 +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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"}
|