@aztec/prover-client 0.42.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/README.md +1 -0
- package/dest/config.d.ts +21 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +31 -0
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +3 -0
- package/dest/mocks/fixtures.d.ts +22 -0
- package/dest/mocks/fixtures.d.ts.map +1 -0
- package/dest/mocks/fixtures.js +95 -0
- package/dest/mocks/test_context.d.ts +32 -0
- package/dest/mocks/test_context.d.ts.map +1 -0
- package/dest/mocks/test_context.js +116 -0
- package/dest/orchestrator/block-building-helpers.d.ts +36 -0
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
- package/dest/orchestrator/block-building-helpers.js +236 -0
- package/dest/orchestrator/orchestrator.d.ts +113 -0
- package/dest/orchestrator/orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator.js +574 -0
- package/dest/orchestrator/proving-state.d.ts +68 -0
- package/dest/orchestrator/proving-state.d.ts.map +1 -0
- package/dest/orchestrator/proving-state.js +142 -0
- package/dest/orchestrator/tx-proving-state.d.ts +35 -0
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/tx-proving-state.js +92 -0
- package/dest/prover-agent/index.d.ts +4 -0
- package/dest/prover-agent/index.d.ts.map +1 -0
- package/dest/prover-agent/index.js +4 -0
- package/dest/prover-agent/memory-proving-queue.d.ts +64 -0
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -0
- package/dest/prover-agent/memory-proving-queue.js +187 -0
- package/dest/prover-agent/prover-agent.d.ts +30 -0
- package/dest/prover-agent/prover-agent.d.ts.map +1 -0
- package/dest/prover-agent/prover-agent.js +115 -0
- package/dest/prover-agent/proving-error.d.ts +5 -0
- package/dest/prover-agent/proving-error.d.ts.map +1 -0
- package/dest/prover-agent/proving-error.js +9 -0
- package/dest/prover-agent/rpc.d.ts +5 -0
- package/dest/prover-agent/rpc.d.ts.map +1 -0
- package/dest/prover-agent/rpc.js +53 -0
- package/dest/tx-prover/tx-prover.d.ts +65 -0
- package/dest/tx-prover/tx-prover.d.ts.map +1 -0
- package/dest/tx-prover/tx-prover.js +122 -0
- package/package.json +87 -0
- package/src/config.ts +59 -0
- package/src/index.ts +4 -0
- package/src/mocks/fixtures.ts +182 -0
- package/src/mocks/test_context.ts +217 -0
- package/src/orchestrator/block-building-helpers.ts +470 -0
- package/src/orchestrator/orchestrator.ts +883 -0
- package/src/orchestrator/proving-state.ts +210 -0
- package/src/orchestrator/tx-proving-state.ts +139 -0
- package/src/prover-agent/index.ts +3 -0
- package/src/prover-agent/memory-proving-queue.ts +303 -0
- package/src/prover-agent/prover-agent.ts +144 -0
- package/src/prover-agent/proving-error.ts +9 -0
- package/src/prover-agent/rpc.ts +91 -0
- package/src/tx-prover/tx-prover.ts +171 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { ProvingRequestType, } from '@aztec/circuit-types';
|
|
2
|
+
import { randomBytes } from '@aztec/foundation/crypto';
|
|
3
|
+
import { AbortedError, TimeoutError } from '@aztec/foundation/error';
|
|
4
|
+
import { MemoryFifo } from '@aztec/foundation/fifo';
|
|
5
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
|
+
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
7
|
+
const MAX_RETRIES = 3;
|
|
8
|
+
const defaultIdGenerator = () => randomBytes(4).toString('hex');
|
|
9
|
+
/**
|
|
10
|
+
* A helper class that sits in between services that need proofs created and agents that can create them.
|
|
11
|
+
* The queue accumulates jobs and provides them to agents in FIFO order.
|
|
12
|
+
*/
|
|
13
|
+
export class MemoryProvingQueue {
|
|
14
|
+
constructor(generateId = defaultIdGenerator) {
|
|
15
|
+
this.generateId = generateId;
|
|
16
|
+
this.log = createDebugLogger('aztec:prover-client:prover-pool:queue');
|
|
17
|
+
this.queue = new MemoryFifo();
|
|
18
|
+
this.jobsInProgress = new Map();
|
|
19
|
+
}
|
|
20
|
+
async getProvingJob({ timeoutSec = 1 } = {}) {
|
|
21
|
+
try {
|
|
22
|
+
const job = await this.queue.get(timeoutSec);
|
|
23
|
+
if (!job) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
if (job.signal?.aborted) {
|
|
27
|
+
this.log.debug(`Job ${job.id} type=${job.request.type} has been aborted`);
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
this.jobsInProgress.set(job.id, job);
|
|
31
|
+
return {
|
|
32
|
+
id: job.id,
|
|
33
|
+
request: job.request,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof TimeoutError) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
resolveProvingJob(jobId, result) {
|
|
44
|
+
const job = this.jobsInProgress.get(jobId);
|
|
45
|
+
if (!job) {
|
|
46
|
+
return Promise.reject(new Error('Job not found'));
|
|
47
|
+
}
|
|
48
|
+
this.jobsInProgress.delete(jobId);
|
|
49
|
+
if (job.signal?.aborted) {
|
|
50
|
+
return Promise.resolve();
|
|
51
|
+
}
|
|
52
|
+
job.resolve(result);
|
|
53
|
+
return Promise.resolve();
|
|
54
|
+
}
|
|
55
|
+
rejectProvingJob(jobId, err) {
|
|
56
|
+
const job = this.jobsInProgress.get(jobId);
|
|
57
|
+
if (!job) {
|
|
58
|
+
return Promise.reject(new Error('Job not found'));
|
|
59
|
+
}
|
|
60
|
+
this.jobsInProgress.delete(jobId);
|
|
61
|
+
if (job.signal?.aborted) {
|
|
62
|
+
return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
if (job.attempts < MAX_RETRIES) {
|
|
65
|
+
job.attempts++;
|
|
66
|
+
this.log.warn(`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${err}. Retry ${job.attempts}/${MAX_RETRIES}`);
|
|
67
|
+
this.queue.put(job);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.log.error(`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${err}`);
|
|
71
|
+
job.reject(err);
|
|
72
|
+
}
|
|
73
|
+
return Promise.resolve();
|
|
74
|
+
}
|
|
75
|
+
enqueue(request, signal) {
|
|
76
|
+
const { promise, resolve, reject } = promiseWithResolvers();
|
|
77
|
+
const item = {
|
|
78
|
+
id: this.generateId(),
|
|
79
|
+
request,
|
|
80
|
+
signal,
|
|
81
|
+
promise,
|
|
82
|
+
resolve,
|
|
83
|
+
reject,
|
|
84
|
+
attempts: 1,
|
|
85
|
+
};
|
|
86
|
+
if (signal) {
|
|
87
|
+
signal.addEventListener('abort', () => reject(new AbortedError('Operation has been aborted')));
|
|
88
|
+
}
|
|
89
|
+
this.log.debug(`Adding id=${item.id} type=${ProvingRequestType[request.type]} proving job to queue depth=${this.queue.length()}`);
|
|
90
|
+
// TODO (alexg) remove the `any`
|
|
91
|
+
if (!this.queue.put(item)) {
|
|
92
|
+
throw new Error();
|
|
93
|
+
}
|
|
94
|
+
return promise;
|
|
95
|
+
}
|
|
96
|
+
getEmptyPrivateKernelProof(inputs, signal) {
|
|
97
|
+
return this.enqueue({ type: ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs }, signal);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Creates a proof for the given input.
|
|
101
|
+
* @param input - Input to the circuit.
|
|
102
|
+
*/
|
|
103
|
+
getBaseParityProof(inputs, signal) {
|
|
104
|
+
return this.enqueue({
|
|
105
|
+
type: ProvingRequestType.BASE_PARITY,
|
|
106
|
+
inputs,
|
|
107
|
+
}, signal);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates a proof for the given input.
|
|
111
|
+
* @param input - Input to the circuit.
|
|
112
|
+
*/
|
|
113
|
+
getRootParityProof(inputs, signal) {
|
|
114
|
+
return this.enqueue({
|
|
115
|
+
type: ProvingRequestType.ROOT_PARITY,
|
|
116
|
+
inputs,
|
|
117
|
+
}, signal);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Creates a proof for the given input.
|
|
121
|
+
* @param input - Input to the circuit.
|
|
122
|
+
*/
|
|
123
|
+
getBaseRollupProof(input, signal) {
|
|
124
|
+
return this.enqueue({
|
|
125
|
+
type: ProvingRequestType.BASE_ROLLUP,
|
|
126
|
+
inputs: input,
|
|
127
|
+
}, signal);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Creates a proof for the given input.
|
|
131
|
+
* @param input - Input to the circuit.
|
|
132
|
+
*/
|
|
133
|
+
getMergeRollupProof(input, signal) {
|
|
134
|
+
return this.enqueue({
|
|
135
|
+
type: ProvingRequestType.MERGE_ROLLUP,
|
|
136
|
+
inputs: input,
|
|
137
|
+
}, signal);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Creates a proof for the given input.
|
|
141
|
+
* @param input - Input to the circuit.
|
|
142
|
+
*/
|
|
143
|
+
getRootRollupProof(input, signal) {
|
|
144
|
+
return this.enqueue({
|
|
145
|
+
type: ProvingRequestType.ROOT_ROLLUP,
|
|
146
|
+
inputs: input,
|
|
147
|
+
}, signal);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Create a public kernel proof.
|
|
151
|
+
* @param kernelRequest - Object containing the details of the proof required
|
|
152
|
+
*/
|
|
153
|
+
getPublicKernelProof(kernelRequest, signal) {
|
|
154
|
+
return this.enqueue({
|
|
155
|
+
type: ProvingRequestType.PUBLIC_KERNEL_NON_TAIL,
|
|
156
|
+
kernelType: kernelRequest.type,
|
|
157
|
+
inputs: kernelRequest.inputs,
|
|
158
|
+
}, signal);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a public kernel tail proof.
|
|
162
|
+
* @param kernelRequest - Object containing the details of the proof required
|
|
163
|
+
*/
|
|
164
|
+
getPublicTailProof(kernelRequest, signal) {
|
|
165
|
+
return this.enqueue({
|
|
166
|
+
type: ProvingRequestType.PUBLIC_KERNEL_TAIL,
|
|
167
|
+
kernelType: kernelRequest.type,
|
|
168
|
+
inputs: kernelRequest.inputs,
|
|
169
|
+
}, signal);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Creates an AVM proof.
|
|
173
|
+
*/
|
|
174
|
+
getAvmProof(inputs, signal) {
|
|
175
|
+
return this.enqueue({
|
|
176
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
177
|
+
inputs,
|
|
178
|
+
}, signal);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Verifies a circuit proof
|
|
182
|
+
*/
|
|
183
|
+
verifyProof() {
|
|
184
|
+
return Promise.reject('not implemented');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXByb3ZpbmctcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyLWFnZW50L21lbW9yeS1wcm92aW5nLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxrQkFBa0IsR0FLbkIsTUFBTSxzQkFBc0IsQ0FBQztBQWlCOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBNkIsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVM1RixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFLN0IsWUFBb0IsYUFBYSxrQkFBa0I7UUFBL0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFKM0MsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDakUsVUFBSyxHQUFHLElBQUksVUFBVSxFQUEyQixDQUFDO1FBQ2xELG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFFZCxDQUFDO0lBRXZELEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRTtRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxD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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ProvingJobSource, type ServerCircuitProver } from '@aztec/circuit-types';
|
|
2
|
+
/**
|
|
3
|
+
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ProverAgent {
|
|
6
|
+
/** The prover implementation to defer jobs to */
|
|
7
|
+
private circuitProver;
|
|
8
|
+
/** How many proving jobs this agent can handle in parallel */
|
|
9
|
+
private maxConcurrency;
|
|
10
|
+
/** How long to wait between jobs */
|
|
11
|
+
private pollIntervalMs;
|
|
12
|
+
private log;
|
|
13
|
+
private inFlightPromises;
|
|
14
|
+
private runningPromise?;
|
|
15
|
+
constructor(
|
|
16
|
+
/** The prover implementation to defer jobs to */
|
|
17
|
+
circuitProver: ServerCircuitProver,
|
|
18
|
+
/** How many proving jobs this agent can handle in parallel */
|
|
19
|
+
maxConcurrency?: number,
|
|
20
|
+
/** How long to wait between jobs */
|
|
21
|
+
pollIntervalMs?: number, log?: import("@aztec/foundation/log").Logger);
|
|
22
|
+
setMaxConcurrency(maxConcurrency: number): void;
|
|
23
|
+
setCircuitProver(circuitProver: ServerCircuitProver): void;
|
|
24
|
+
isRunning(): boolean;
|
|
25
|
+
start(jobSource: ProvingJobSource): void;
|
|
26
|
+
stop(): Promise<void>;
|
|
27
|
+
private work;
|
|
28
|
+
private getProof;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=prover-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prover-agent.d.ts","sourceRoot":"","sources":["../../src/prover-agent/prover-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAO9B;;GAEG;AACH,qBAAa,WAAW;IAKpB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IACrB,8DAA8D;IAC9D,OAAO,CAAC,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,cAAc,CAAC,CAAiB;;IAGtC,iDAAiD;IACzC,aAAa,EAAE,mBAAmB;IAC1C,8DAA8D;IACtD,cAAc,SAAI;IAC1B,oCAAoC;IAC5B,cAAc,SAAM,EACpB,GAAG,yCAAwD;IAGrE,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAO/C,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,IAAI;IAI1D,SAAS;IAIT,KAAK,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAsBlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,IAAI;IAalB,OAAO,CAAC,QAAQ;CAmDjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ProvingRequestType, } from '@aztec/circuit-types';
|
|
2
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
5
|
+
import { ProvingError } from './proving-error.js';
|
|
6
|
+
/**
|
|
7
|
+
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
8
|
+
*/
|
|
9
|
+
export class ProverAgent {
|
|
10
|
+
constructor(
|
|
11
|
+
/** The prover implementation to defer jobs to */
|
|
12
|
+
circuitProver,
|
|
13
|
+
/** How many proving jobs this agent can handle in parallel */
|
|
14
|
+
maxConcurrency = 1,
|
|
15
|
+
/** How long to wait between jobs */
|
|
16
|
+
pollIntervalMs = 100, log = createDebugLogger('aztec:prover-client:prover-agent')) {
|
|
17
|
+
this.circuitProver = circuitProver;
|
|
18
|
+
this.maxConcurrency = maxConcurrency;
|
|
19
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
20
|
+
this.log = log;
|
|
21
|
+
this.inFlightPromises = new Set();
|
|
22
|
+
}
|
|
23
|
+
setMaxConcurrency(maxConcurrency) {
|
|
24
|
+
if (maxConcurrency < 1) {
|
|
25
|
+
throw new Error('Concurrency must be at least 1');
|
|
26
|
+
}
|
|
27
|
+
this.maxConcurrency = maxConcurrency;
|
|
28
|
+
}
|
|
29
|
+
setCircuitProver(circuitProver) {
|
|
30
|
+
this.circuitProver = circuitProver;
|
|
31
|
+
}
|
|
32
|
+
isRunning() {
|
|
33
|
+
return this.runningPromise?.isRunning() ?? false;
|
|
34
|
+
}
|
|
35
|
+
start(jobSource) {
|
|
36
|
+
if (this.runningPromise) {
|
|
37
|
+
throw new Error('Agent is already running');
|
|
38
|
+
}
|
|
39
|
+
this.runningPromise = new RunningPromise(async () => {
|
|
40
|
+
while (this.inFlightPromises.size < this.maxConcurrency) {
|
|
41
|
+
const job = await jobSource.getProvingJob();
|
|
42
|
+
if (!job) {
|
|
43
|
+
// job source is fully drained, sleep for a bit and try again
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(promise));
|
|
47
|
+
this.inFlightPromises.add(promise);
|
|
48
|
+
}
|
|
49
|
+
}, this.pollIntervalMs);
|
|
50
|
+
this.runningPromise.start();
|
|
51
|
+
this.log.info('Agent started');
|
|
52
|
+
}
|
|
53
|
+
async stop() {
|
|
54
|
+
if (!this.runningPromise?.isRunning()) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
await this.runningPromise.stop();
|
|
58
|
+
this.runningPromise = undefined;
|
|
59
|
+
this.log.info('Agent stopped');
|
|
60
|
+
}
|
|
61
|
+
async work(jobSource, job) {
|
|
62
|
+
try {
|
|
63
|
+
const [time, result] = await elapsed(this.getProof(job.request));
|
|
64
|
+
await jobSource.resolveProvingJob(job.id, result);
|
|
65
|
+
this.log.debug(`Processed proving job id=${job.id} type=${ProvingRequestType[job.request.type]} duration=${time}ms`);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
this.log.error(`Error processing proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: ${err}`);
|
|
69
|
+
await jobSource.rejectProvingJob(job.id, new ProvingError(err?.message ?? String(err)));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
getProof(request) {
|
|
73
|
+
const { type, inputs } = request;
|
|
74
|
+
switch (type) {
|
|
75
|
+
case ProvingRequestType.PUBLIC_VM: {
|
|
76
|
+
return this.circuitProver.getAvmProof(inputs);
|
|
77
|
+
}
|
|
78
|
+
case ProvingRequestType.PUBLIC_KERNEL_NON_TAIL: {
|
|
79
|
+
return this.circuitProver.getPublicKernelProof({
|
|
80
|
+
type: request.kernelType,
|
|
81
|
+
inputs,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
case ProvingRequestType.PUBLIC_KERNEL_TAIL: {
|
|
85
|
+
return this.circuitProver.getPublicTailProof({
|
|
86
|
+
type: request.kernelType,
|
|
87
|
+
inputs,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
case ProvingRequestType.BASE_ROLLUP: {
|
|
91
|
+
return this.circuitProver.getBaseRollupProof(inputs);
|
|
92
|
+
}
|
|
93
|
+
case ProvingRequestType.MERGE_ROLLUP: {
|
|
94
|
+
return this.circuitProver.getMergeRollupProof(inputs);
|
|
95
|
+
}
|
|
96
|
+
case ProvingRequestType.ROOT_ROLLUP: {
|
|
97
|
+
return this.circuitProver.getRootRollupProof(inputs);
|
|
98
|
+
}
|
|
99
|
+
case ProvingRequestType.BASE_PARITY: {
|
|
100
|
+
return this.circuitProver.getBaseParityProof(inputs);
|
|
101
|
+
}
|
|
102
|
+
case ProvingRequestType.ROOT_PARITY: {
|
|
103
|
+
return this.circuitProver.getRootParityProof(inputs);
|
|
104
|
+
}
|
|
105
|
+
case ProvingRequestType.PRIVATE_KERNEL_EMPTY: {
|
|
106
|
+
return this.circuitProver.getEmptyPrivateKernelProof(inputs);
|
|
107
|
+
}
|
|
108
|
+
default: {
|
|
109
|
+
const _exhaustive = type;
|
|
110
|
+
return Promise.reject(new Error(`Invalid proof request type: ${type}`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1hZ2VudC9wcm92ZXItYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtMLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFJdEI7SUFDRSxpREFBaUQ7SUFDekMsYUFBa0M7SUFDMUMsOERBQThEO0lBQ3RELGlCQUFpQixDQUFDO0lBQzFCLG9DQUFvQztJQUM1QixpQkFBaUIsR0FBRyxFQUNwQixNQUFNLGlCQUFpQixDQUFDLGtDQUFrQyxDQUFDO1FBTDNELGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUVsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBSTtRQUVsQixtQkFBYyxHQUFkLGNBQWMsQ0FBTTtRQUNwQixRQUFHLEdBQUgsR0FBRyxDQUF3RDtRQVY3RCxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztJQVdoRCxDQUFDO0lBRUosaUJBQWlCLENBQUMsY0FBc0I7UUFDdEMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBa0M7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVE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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proving-error.d.ts","sourceRoot":"","sources":["../../src/prover-agent/proving-error.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IAC5B,QAAQ;IAIjB,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;CAGlC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class ProvingError extends Error {
|
|
2
|
+
toString() {
|
|
3
|
+
return this.message;
|
|
4
|
+
}
|
|
5
|
+
static fromString(message) {
|
|
6
|
+
return new ProvingError(message);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmluZy1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXItYWdlbnQvcHJvdmluZy1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBYSxTQUFRLEtBQUs7SUFDNUIsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFlO1FBQy9CLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ProvingJobSource } from '@aztec/circuit-types';
|
|
2
|
+
import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
3
|
+
export declare function createProvingJobSourceServer(queue: ProvingJobSource): JsonRpcServer;
|
|
4
|
+
export declare function createProvingJobSourceClient(url: string, namespace?: string, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean) => Promise<any>): ProvingJobSource;
|
|
5
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/prover-agent/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAuB7D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIlE,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,CA2BnF;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,yFAA8B,GAClC,gBAAgB,CA8BlB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AvmCircuitInputs, BaseOrMergeRollupPublicInputs, BaseParityInputs, BaseRollupInputs, Fr, Header, KernelCircuitPublicInputs, MergeRollupInputs, ParityPublicInputs, Proof, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelTailCircuitPrivateInputs, RecursiveProof, RootParityInput, RootParityInputs, RootRollupInputs, RootRollupPublicInputs, VerificationKeyData, } from '@aztec/circuits.js';
|
|
2
|
+
import { createJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/client';
|
|
3
|
+
import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
4
|
+
import { ProvingError } from './proving-error.js';
|
|
5
|
+
export function createProvingJobSourceServer(queue) {
|
|
6
|
+
return new JsonRpcServer(queue, {
|
|
7
|
+
Header,
|
|
8
|
+
Fr,
|
|
9
|
+
AvmCircuitInputs,
|
|
10
|
+
BaseParityInputs,
|
|
11
|
+
BaseOrMergeRollupPublicInputs,
|
|
12
|
+
BaseRollupInputs,
|
|
13
|
+
MergeRollupInputs,
|
|
14
|
+
ParityPublicInputs,
|
|
15
|
+
Proof,
|
|
16
|
+
RootParityInput,
|
|
17
|
+
RootParityInputs,
|
|
18
|
+
RootRollupInputs,
|
|
19
|
+
RootRollupPublicInputs,
|
|
20
|
+
PublicKernelCircuitPrivateInputs,
|
|
21
|
+
PublicKernelCircuitPublicInputs,
|
|
22
|
+
PublicKernelTailCircuitPrivateInputs,
|
|
23
|
+
KernelCircuitPublicInputs,
|
|
24
|
+
ProvingError,
|
|
25
|
+
RecursiveProof,
|
|
26
|
+
VerificationKeyData,
|
|
27
|
+
}, {});
|
|
28
|
+
}
|
|
29
|
+
export function createProvingJobSourceClient(url, namespace, fetch = makeFetch([1, 2, 3], false)) {
|
|
30
|
+
return createJsonRpcClient(url, {
|
|
31
|
+
Header,
|
|
32
|
+
Fr,
|
|
33
|
+
AvmCircuitInputs,
|
|
34
|
+
BaseParityInputs,
|
|
35
|
+
BaseOrMergeRollupPublicInputs,
|
|
36
|
+
BaseRollupInputs,
|
|
37
|
+
MergeRollupInputs,
|
|
38
|
+
ParityPublicInputs,
|
|
39
|
+
Proof,
|
|
40
|
+
RootParityInput,
|
|
41
|
+
RootParityInputs,
|
|
42
|
+
RootRollupInputs,
|
|
43
|
+
RootRollupPublicInputs,
|
|
44
|
+
PublicKernelCircuitPrivateInputs,
|
|
45
|
+
PublicKernelCircuitPublicInputs,
|
|
46
|
+
PublicKernelTailCircuitPrivateInputs,
|
|
47
|
+
KernelCircuitPublicInputs,
|
|
48
|
+
ProvingError,
|
|
49
|
+
RecursiveProof,
|
|
50
|
+
VerificationKeyData,
|
|
51
|
+
}, {}, false, namespace, fetch);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1hZ2VudC9ycGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGdCQUFnQixFQUNoQiw2QkFBNkIsRUFDN0IsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixFQUFFLEVBQ0YsTUFBTSxFQUNOLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQyxjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxLQUF1QjtJQUNsRSxPQUFPLElBQUksYUFBYSxDQUN0QixLQUFLLEVBQ0w7UUFDRSxNQUFNO1FBQ04sRUFBRTtRQUNGLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsNkJBQTZCO1FBQzdCLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLEtBQUs7UUFDTCxlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixzQkFBc0I7UUFDdEIsZ0NBQWdDO1FBQ2hDLCtCQUErQjtRQUMvQixvQ0FBb0M7UUFDcEMseUJBQXlCO1FBQ3pCLFlBQVk7UUFDWixjQUFjO1FBQ2QsbUJBQW1CO0tBQ3BCLEVBQ0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxHQUFXLEVBQ1gsU0FBa0IsRUFDbEIsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBRW5DLE9BQU8sbUJBQW1CLENBQ3hCLEdBQUcsRUFDSDtRQUNFLE1BQU07UUFDTixFQUFFO1FBQ0YsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQiw2QkFBNkI7UUFDN0IsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsS0FBSztRQUNMLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLHNCQUFzQjtRQUN0QixnQ0FBZ0M7UUFDaEMsK0JBQStCO1FBQy9CLG9DQUFvQztRQUNwQyx5QkFBeUI7UUFDekIsWUFBWTtRQUNaLGNBQWM7UUFDZCxtQkFBbUI7S0FDcEIsRUFDRCxFQUFFLEVBQ0YsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLENBQ2MsQ0FBQztBQUN4QixDQUFDIn0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type ProcessedTx } from '@aztec/circuit-types';
|
|
2
|
+
import { type BlockResult, type ProverClient, type ProvingJobSource, type ProvingTicket } from '@aztec/circuit-types/interfaces';
|
|
3
|
+
import { type Fr, type GlobalVariables, type Header, type VerificationKeys } from '@aztec/circuits.js';
|
|
4
|
+
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
5
|
+
import { type ProverClientConfig } from '../config.js';
|
|
6
|
+
/**
|
|
7
|
+
* A prover accepting individual transaction requests
|
|
8
|
+
*/
|
|
9
|
+
export declare class TxProver implements ProverClient {
|
|
10
|
+
private config;
|
|
11
|
+
private worldStateSynchronizer;
|
|
12
|
+
private vks;
|
|
13
|
+
private agent?;
|
|
14
|
+
private orchestrator;
|
|
15
|
+
private queue;
|
|
16
|
+
private running;
|
|
17
|
+
private constructor();
|
|
18
|
+
updateProverConfig(config: Partial<ProverClientConfig & {
|
|
19
|
+
vks: VerificationKeys;
|
|
20
|
+
}>): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Starts the prover instance
|
|
23
|
+
*/
|
|
24
|
+
start(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Stops the prover instance
|
|
27
|
+
*/
|
|
28
|
+
stop(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new prover client and starts it
|
|
31
|
+
* @param config - The prover configuration.
|
|
32
|
+
* @param vks - The verification keys for the prover
|
|
33
|
+
* @param worldStateSynchronizer - An instance of the world state
|
|
34
|
+
* @returns An instance of the prover, constructed and started.
|
|
35
|
+
*/
|
|
36
|
+
static new(config: ProverClientConfig, vks: VerificationKeys, worldStateSynchronizer: WorldStateSynchronizer, initialHeader?: Header): Promise<TxProver>;
|
|
37
|
+
private static buildCircuitProver;
|
|
38
|
+
/**
|
|
39
|
+
* Cancels any block that is currently being built and prepares for a new one to be built
|
|
40
|
+
* @param numTxs - The complete size of the block, must be a power of 2
|
|
41
|
+
* @param globalVariables - The global variables for this block
|
|
42
|
+
* @param l1ToL2Messages - The set of L1 to L2 messages to be included in this block
|
|
43
|
+
*/
|
|
44
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[]): Promise<ProvingTicket>;
|
|
45
|
+
/**
|
|
46
|
+
* Add a processed transaction to the current block
|
|
47
|
+
* @param tx - The transaction to be added
|
|
48
|
+
*/
|
|
49
|
+
addNewTx(tx: ProcessedTx): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Cancels the block currently being proven. Proofs already bring built may continue but further proofs should not be started.
|
|
52
|
+
*/
|
|
53
|
+
cancelBlock(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Performs the final archive tree insertion for this block and returns the L2Block and Proof instances
|
|
56
|
+
*/
|
|
57
|
+
finaliseBlock(): Promise<BlockResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Mark the block as having all the transactions it is going to contain.
|
|
60
|
+
* Will pad the block to it's complete size with empty transactions and prove all the way to the root rollup.
|
|
61
|
+
*/
|
|
62
|
+
setBlockCompleted(): Promise<void>;
|
|
63
|
+
getProvingJobSource(): ProvingJobSource;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=tx-prover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAMzC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK,CAAC;IARhB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAUD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxG;;OAEG;IACI,KAAK;IAUZ;;OAEG;IACU,IAAI;IAQjB;;;;;;OAMG;WACiB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,gBAAgB,EACrB,sBAAsB,EAAE,sBAAsB,EAC9C,aAAa,CAAC,EAAE,MAAM;mBAeH,kBAAkB;IAYvC;;;;;OAKG;IACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,EAAE,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC;IAMzB;;;OAGG;IACI,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;IAI5C;;;OAGG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,mBAAmB,IAAI,gBAAgB;CAG/C"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
|
+
import { NativeACVMSimulator } from '@aztec/simulator';
|
|
3
|
+
import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
4
|
+
import { MemoryProvingQueue } from '../prover-agent/memory-proving-queue.js';
|
|
5
|
+
import { ProverAgent } from '../prover-agent/prover-agent.js';
|
|
6
|
+
/**
|
|
7
|
+
* A prover accepting individual transaction requests
|
|
8
|
+
*/
|
|
9
|
+
export class TxProver {
|
|
10
|
+
constructor(config, worldStateSynchronizer, vks, agent, initialHeader) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.worldStateSynchronizer = worldStateSynchronizer;
|
|
13
|
+
this.vks = vks;
|
|
14
|
+
this.agent = agent;
|
|
15
|
+
this.queue = new MemoryProvingQueue();
|
|
16
|
+
this.running = false;
|
|
17
|
+
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
|
|
18
|
+
}
|
|
19
|
+
async updateProverConfig(config) {
|
|
20
|
+
const newConfig = { ...this.config, ...config };
|
|
21
|
+
if (config.vks) {
|
|
22
|
+
this.vks = config.vks;
|
|
23
|
+
}
|
|
24
|
+
if (newConfig.realProofs !== this.config.realProofs && this.agent) {
|
|
25
|
+
const circuitProver = await TxProver.buildCircuitProver(newConfig);
|
|
26
|
+
this.agent.setCircuitProver(circuitProver);
|
|
27
|
+
}
|
|
28
|
+
if (this.config.proverAgentConcurrency !== newConfig.proverAgentConcurrency) {
|
|
29
|
+
this.agent?.setMaxConcurrency(newConfig.proverAgentConcurrency);
|
|
30
|
+
}
|
|
31
|
+
if (!this.config.realProofs && newConfig.realProofs) {
|
|
32
|
+
this.orchestrator.reset();
|
|
33
|
+
}
|
|
34
|
+
this.config = newConfig;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Starts the prover instance
|
|
38
|
+
*/
|
|
39
|
+
start() {
|
|
40
|
+
if (this.running) {
|
|
41
|
+
return Promise.resolve();
|
|
42
|
+
}
|
|
43
|
+
this.running = true;
|
|
44
|
+
this.agent?.start(this.queue);
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Stops the prover instance
|
|
49
|
+
*/
|
|
50
|
+
async stop() {
|
|
51
|
+
if (!this.running) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.running = false;
|
|
55
|
+
await this.agent?.stop();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates a new prover client and starts it
|
|
59
|
+
* @param config - The prover configuration.
|
|
60
|
+
* @param vks - The verification keys for the prover
|
|
61
|
+
* @param worldStateSynchronizer - An instance of the world state
|
|
62
|
+
* @returns An instance of the prover, constructed and started.
|
|
63
|
+
*/
|
|
64
|
+
static async new(config, vks, worldStateSynchronizer, initialHeader) {
|
|
65
|
+
const agent = config.proverAgentEnabled
|
|
66
|
+
? new ProverAgent(await TxProver.buildCircuitProver(config), config.proverAgentConcurrency, config.proverAgentPollInterval)
|
|
67
|
+
: undefined;
|
|
68
|
+
const prover = new TxProver(config, worldStateSynchronizer, vks, agent, initialHeader);
|
|
69
|
+
await prover.start();
|
|
70
|
+
return prover;
|
|
71
|
+
}
|
|
72
|
+
static async buildCircuitProver(config) {
|
|
73
|
+
if (config.realProofs) {
|
|
74
|
+
return await BBNativeRollupProver.new(config);
|
|
75
|
+
}
|
|
76
|
+
const simulationProvider = config.acvmBinaryPath
|
|
77
|
+
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
78
|
+
: undefined;
|
|
79
|
+
return new TestCircuitProver(simulationProvider);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Cancels any block that is currently being built and prepares for a new one to be built
|
|
83
|
+
* @param numTxs - The complete size of the block, must be a power of 2
|
|
84
|
+
* @param globalVariables - The global variables for this block
|
|
85
|
+
* @param l1ToL2Messages - The set of L1 to L2 messages to be included in this block
|
|
86
|
+
*/
|
|
87
|
+
async startNewBlock(numTxs, globalVariables, newL1ToL2Messages) {
|
|
88
|
+
const previousBlockNumber = globalVariables.blockNumber.toNumber() - 1;
|
|
89
|
+
await this.worldStateSynchronizer.syncImmediate(previousBlockNumber);
|
|
90
|
+
return this.orchestrator.startNewBlock(numTxs, globalVariables, newL1ToL2Messages, this.vks);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Add a processed transaction to the current block
|
|
94
|
+
* @param tx - The transaction to be added
|
|
95
|
+
*/
|
|
96
|
+
addNewTx(tx) {
|
|
97
|
+
return this.orchestrator.addNewTx(tx);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Cancels the block currently being proven. Proofs already bring built may continue but further proofs should not be started.
|
|
101
|
+
*/
|
|
102
|
+
cancelBlock() {
|
|
103
|
+
this.orchestrator.cancelBlock();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Performs the final archive tree insertion for this block and returns the L2Block and Proof instances
|
|
107
|
+
*/
|
|
108
|
+
finaliseBlock() {
|
|
109
|
+
return this.orchestrator.finaliseBlock();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Mark the block as having all the transactions it is going to contain.
|
|
113
|
+
* Will pad the block to it's complete size with empty transactions and prove all the way to the root rollup.
|
|
114
|
+
*/
|
|
115
|
+
setBlockCompleted() {
|
|
116
|
+
return this.orchestrator.setBlockCompleted();
|
|
117
|
+
}
|
|
118
|
+
getProvingJobSource() {
|
|
119
|
+
return this.queue;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFLbkIsWUFDVSxNQUEwQixFQUMxQixzQkFBOEMsRUFDOUMsR0FBcUIsRUFDckIsS0FBbUIsRUFDM0IsYUFBc0I7UUFKZCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFQckIsVUFBSyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNqQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBK0Q7UUFDdEYsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUVoRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxH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
|