@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.
- package/dest/bin/get-proof-inputs.js +1 -1
- package/dest/block-factory/index.d.ts +2 -0
- package/dest/block-factory/index.d.ts.map +1 -0
- package/dest/block-factory/light.d.ts +36 -0
- package/dest/block-factory/light.d.ts.map +1 -0
- package/dest/{block_builder → block-factory}/light.js +35 -30
- package/dest/config.d.ts +6 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -1
- package/dest/mocks/fixtures.d.ts +3 -3
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -2
- package/dest/mocks/test_context.d.ts +18 -13
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +44 -38
- package/dest/orchestrator/block-building-helpers.d.ts +18 -11
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +80 -63
- package/dest/orchestrator/block-proving-state.d.ts +19 -10
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +63 -46
- package/dest/orchestrator/epoch-proving-state.d.ts +13 -6
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +40 -14
- package/dest/orchestrator/orchestrator.d.ts +7 -5
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +78 -52
- package/dest/orchestrator/orchestrator_metrics.d.ts +2 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +9 -0
- 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 +9 -20
- package/dest/prover-client/prover-client.d.ts +3 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +5 -4
- package/dest/prover-client/server-epoch-prover.d.ts +6 -4
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +5 -3
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +31 -21
- package/dest/proving_broker/config.d.ts +9 -4
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +15 -4
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.d.ts.map +1 -1
- package/dest/proving_broker/factory.js +5 -1
- package/dest/proving_broker/proof_store/factory.js +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +1 -0
- package/dest/proving_broker/proving_agent.d.ts +3 -3
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +83 -47
- package/dest/proving_broker/proving_broker.d.ts +11 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +6 -5
- package/dest/proving_broker/proving_broker_database/memory.js +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +9 -8
- package/dest/proving_broker/proving_job_controller.d.ts +7 -8
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +53 -45
- package/dest/proving_broker/rpc.d.ts +3 -5
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +1 -4
- package/dest/test/mock_proof_store.d.ts +9 -0
- package/dest/test/mock_proof_store.d.ts.map +1 -0
- package/dest/test/mock_proof_store.js +10 -0
- package/dest/test/mock_prover.d.ts +7 -5
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +6 -3
- package/package.json +28 -27
- package/src/bin/get-proof-inputs.ts +1 -1
- package/src/block-factory/index.ts +1 -0
- package/src/{block_builder → block-factory}/light.ts +42 -29
- package/src/config.ts +24 -8
- package/src/mocks/fixtures.ts +5 -5
- package/src/mocks/test_context.ts +79 -59
- package/src/orchestrator/block-building-helpers.ts +96 -92
- package/src/orchestrator/block-proving-state.ts +78 -52
- package/src/orchestrator/epoch-proving-state.ts +51 -20
- package/src/orchestrator/orchestrator.ts +119 -60
- package/src/orchestrator/orchestrator_metrics.ts +20 -1
- package/src/orchestrator/tx-proving-state.ts +17 -24
- package/src/prover-client/prover-client.ts +16 -14
- package/src/prover-client/server-epoch-prover.ts +16 -7
- package/src/proving_broker/broker_prover_facade.ts +52 -36
- package/src/proving_broker/config.ts +17 -6
- package/src/proving_broker/factory.ts +2 -1
- package/src/proving_broker/proof_store/factory.ts +1 -1
- package/src/proving_broker/proof_store/gcs_proof_store.ts +5 -1
- package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
- package/src/proving_broker/proving_agent.ts +89 -47
- package/src/proving_broker/proving_broker.ts +16 -15
- package/src/proving_broker/proving_broker_database/memory.ts +1 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +9 -8
- package/src/proving_broker/proving_job_controller.ts +56 -65
- package/src/proving_broker/rpc.ts +1 -6
- package/src/test/mock_proof_store.ts +14 -0
- package/src/test/mock_prover.ts +27 -5
- package/dest/block_builder/index.d.ts +0 -6
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/light.d.ts +0 -33
- package/dest/block_builder/light.d.ts.map +0 -1
- package/src/block_builder/index.ts +0 -6
- /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
|
-
//
|
|
80
|
-
//
|
|
81
|
-
//
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
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 (
|
|
93
|
-
|
|
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.
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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":"AAIA,OAAO,KAAK,
|
|
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
|
|
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
|
|
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.
|
|
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,
|
|
@@ -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;
|
|
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 =
|
|
34
|
+
const job = jsonParseWithSchema(jobStr, ProvingJob);
|
|
35
35
|
const resultStr = await this.jobResults.getAsync(job.id);
|
|
36
|
-
const result = resultStr ?
|
|
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.
|
|
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.
|
|
112
|
-
const db = await openVersionedStoreAt(fullDirectory, SingleEpochDatabase.SCHEMA_VERSION, config.l1Contracts.rollupAddress, config.
|
|
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.
|
|
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.
|
|
176
|
-
const db = await openVersionedStoreAt(newEpochDirectory, SingleEpochDatabase.SCHEMA_VERSION, this.config.l1Contracts.rollupAddress, this.config.
|
|
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
|
-
|
|
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
|
-
|
|
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":"
|
|
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["
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (this.
|
|
46
|
-
this.log.warn(`Job controller for jobId=${this.jobId} completed
|
|
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
|
-
|
|
52
|
+
result = new AbortError('Proof was aborted');
|
|
51
53
|
}
|
|
54
|
+
this.result = result;
|
|
52
55
|
this.status = "done";
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
})
|
|
56
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.log.
|
|
70
|
-
|
|
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 !== "
|
|
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.
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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 {
|
|
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,
|