@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,144 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ProvingJob,
|
|
3
|
+
type ProvingJobSource,
|
|
4
|
+
type ProvingRequest,
|
|
5
|
+
type ProvingRequestResult,
|
|
6
|
+
ProvingRequestType,
|
|
7
|
+
type ServerCircuitProver,
|
|
8
|
+
} from '@aztec/circuit-types';
|
|
9
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
10
|
+
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
11
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
12
|
+
|
|
13
|
+
import { ProvingError } from './proving-error.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
17
|
+
*/
|
|
18
|
+
export class ProverAgent {
|
|
19
|
+
private inFlightPromises = new Set<Promise<any>>();
|
|
20
|
+
private runningPromise?: RunningPromise;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
/** The prover implementation to defer jobs to */
|
|
24
|
+
private circuitProver: ServerCircuitProver,
|
|
25
|
+
/** How many proving jobs this agent can handle in parallel */
|
|
26
|
+
private maxConcurrency = 1,
|
|
27
|
+
/** How long to wait between jobs */
|
|
28
|
+
private pollIntervalMs = 100,
|
|
29
|
+
private log = createDebugLogger('aztec:prover-client:prover-agent'),
|
|
30
|
+
) {}
|
|
31
|
+
|
|
32
|
+
setMaxConcurrency(maxConcurrency: number): void {
|
|
33
|
+
if (maxConcurrency < 1) {
|
|
34
|
+
throw new Error('Concurrency must be at least 1');
|
|
35
|
+
}
|
|
36
|
+
this.maxConcurrency = maxConcurrency;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
setCircuitProver(circuitProver: ServerCircuitProver): void {
|
|
40
|
+
this.circuitProver = circuitProver;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
isRunning() {
|
|
44
|
+
return this.runningPromise?.isRunning() ?? false;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
start(jobSource: ProvingJobSource): void {
|
|
48
|
+
if (this.runningPromise) {
|
|
49
|
+
throw new Error('Agent is already running');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.runningPromise = new RunningPromise(async () => {
|
|
53
|
+
while (this.inFlightPromises.size < this.maxConcurrency) {
|
|
54
|
+
const job = await jobSource.getProvingJob();
|
|
55
|
+
if (!job) {
|
|
56
|
+
// job source is fully drained, sleep for a bit and try again
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(promise));
|
|
61
|
+
this.inFlightPromises.add(promise);
|
|
62
|
+
}
|
|
63
|
+
}, this.pollIntervalMs);
|
|
64
|
+
|
|
65
|
+
this.runningPromise.start();
|
|
66
|
+
this.log.info('Agent started');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async stop(): Promise<void> {
|
|
70
|
+
if (!this.runningPromise?.isRunning()) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
await this.runningPromise.stop();
|
|
75
|
+
this.runningPromise = undefined;
|
|
76
|
+
|
|
77
|
+
this.log.info('Agent stopped');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private async work(jobSource: ProvingJobSource, job: ProvingJob<ProvingRequest>): Promise<void> {
|
|
81
|
+
try {
|
|
82
|
+
const [time, result] = await elapsed(this.getProof(job.request));
|
|
83
|
+
await jobSource.resolveProvingJob(job.id, result);
|
|
84
|
+
this.log.debug(
|
|
85
|
+
`Processed proving job id=${job.id} type=${ProvingRequestType[job.request.type]} duration=${time}ms`,
|
|
86
|
+
);
|
|
87
|
+
} catch (err) {
|
|
88
|
+
this.log.error(`Error processing proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: ${err}`);
|
|
89
|
+
await jobSource.rejectProvingJob(job.id, new ProvingError((err as any)?.message ?? String(err)));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private getProof(request: ProvingRequest): Promise<ProvingRequestResult<typeof type>> {
|
|
94
|
+
const { type, inputs } = request;
|
|
95
|
+
switch (type) {
|
|
96
|
+
case ProvingRequestType.PUBLIC_VM: {
|
|
97
|
+
return this.circuitProver.getAvmProof(inputs);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
case ProvingRequestType.PUBLIC_KERNEL_NON_TAIL: {
|
|
101
|
+
return this.circuitProver.getPublicKernelProof({
|
|
102
|
+
type: request.kernelType,
|
|
103
|
+
inputs,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
case ProvingRequestType.PUBLIC_KERNEL_TAIL: {
|
|
108
|
+
return this.circuitProver.getPublicTailProof({
|
|
109
|
+
type: request.kernelType,
|
|
110
|
+
inputs,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
case ProvingRequestType.BASE_ROLLUP: {
|
|
115
|
+
return this.circuitProver.getBaseRollupProof(inputs);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
case ProvingRequestType.MERGE_ROLLUP: {
|
|
119
|
+
return this.circuitProver.getMergeRollupProof(inputs);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
case ProvingRequestType.ROOT_ROLLUP: {
|
|
123
|
+
return this.circuitProver.getRootRollupProof(inputs);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
case ProvingRequestType.BASE_PARITY: {
|
|
127
|
+
return this.circuitProver.getBaseParityProof(inputs);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
case ProvingRequestType.ROOT_PARITY: {
|
|
131
|
+
return this.circuitProver.getRootParityProof(inputs);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
case ProvingRequestType.PRIVATE_KERNEL_EMPTY: {
|
|
135
|
+
return this.circuitProver.getEmptyPrivateKernelProof(inputs);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
default: {
|
|
139
|
+
const _exhaustive: never = type;
|
|
140
|
+
return Promise.reject(new Error(`Invalid proof request type: ${type}`));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type ProvingJobSource } from '@aztec/circuit-types';
|
|
2
|
+
import {
|
|
3
|
+
AvmCircuitInputs,
|
|
4
|
+
BaseOrMergeRollupPublicInputs,
|
|
5
|
+
BaseParityInputs,
|
|
6
|
+
BaseRollupInputs,
|
|
7
|
+
Fr,
|
|
8
|
+
Header,
|
|
9
|
+
KernelCircuitPublicInputs,
|
|
10
|
+
MergeRollupInputs,
|
|
11
|
+
ParityPublicInputs,
|
|
12
|
+
Proof,
|
|
13
|
+
PublicKernelCircuitPrivateInputs,
|
|
14
|
+
PublicKernelCircuitPublicInputs,
|
|
15
|
+
PublicKernelTailCircuitPrivateInputs,
|
|
16
|
+
RecursiveProof,
|
|
17
|
+
RootParityInput,
|
|
18
|
+
RootParityInputs,
|
|
19
|
+
RootRollupInputs,
|
|
20
|
+
RootRollupPublicInputs,
|
|
21
|
+
VerificationKeyData,
|
|
22
|
+
} from '@aztec/circuits.js';
|
|
23
|
+
import { createJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/client';
|
|
24
|
+
import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
25
|
+
|
|
26
|
+
import { ProvingError } from './proving-error.js';
|
|
27
|
+
|
|
28
|
+
export function createProvingJobSourceServer(queue: ProvingJobSource): JsonRpcServer {
|
|
29
|
+
return new JsonRpcServer(
|
|
30
|
+
queue,
|
|
31
|
+
{
|
|
32
|
+
Header,
|
|
33
|
+
Fr,
|
|
34
|
+
AvmCircuitInputs,
|
|
35
|
+
BaseParityInputs,
|
|
36
|
+
BaseOrMergeRollupPublicInputs,
|
|
37
|
+
BaseRollupInputs,
|
|
38
|
+
MergeRollupInputs,
|
|
39
|
+
ParityPublicInputs,
|
|
40
|
+
Proof,
|
|
41
|
+
RootParityInput,
|
|
42
|
+
RootParityInputs,
|
|
43
|
+
RootRollupInputs,
|
|
44
|
+
RootRollupPublicInputs,
|
|
45
|
+
PublicKernelCircuitPrivateInputs,
|
|
46
|
+
PublicKernelCircuitPublicInputs,
|
|
47
|
+
PublicKernelTailCircuitPrivateInputs,
|
|
48
|
+
KernelCircuitPublicInputs,
|
|
49
|
+
ProvingError,
|
|
50
|
+
RecursiveProof,
|
|
51
|
+
VerificationKeyData,
|
|
52
|
+
},
|
|
53
|
+
{},
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function createProvingJobSourceClient(
|
|
58
|
+
url: string,
|
|
59
|
+
namespace?: string,
|
|
60
|
+
fetch = makeFetch([1, 2, 3], false),
|
|
61
|
+
): ProvingJobSource {
|
|
62
|
+
return createJsonRpcClient(
|
|
63
|
+
url,
|
|
64
|
+
{
|
|
65
|
+
Header,
|
|
66
|
+
Fr,
|
|
67
|
+
AvmCircuitInputs,
|
|
68
|
+
BaseParityInputs,
|
|
69
|
+
BaseOrMergeRollupPublicInputs,
|
|
70
|
+
BaseRollupInputs,
|
|
71
|
+
MergeRollupInputs,
|
|
72
|
+
ParityPublicInputs,
|
|
73
|
+
Proof,
|
|
74
|
+
RootParityInput,
|
|
75
|
+
RootParityInputs,
|
|
76
|
+
RootRollupInputs,
|
|
77
|
+
RootRollupPublicInputs,
|
|
78
|
+
PublicKernelCircuitPrivateInputs,
|
|
79
|
+
PublicKernelCircuitPublicInputs,
|
|
80
|
+
PublicKernelTailCircuitPrivateInputs,
|
|
81
|
+
KernelCircuitPublicInputs,
|
|
82
|
+
ProvingError,
|
|
83
|
+
RecursiveProof,
|
|
84
|
+
VerificationKeyData,
|
|
85
|
+
},
|
|
86
|
+
{},
|
|
87
|
+
false,
|
|
88
|
+
namespace,
|
|
89
|
+
fetch,
|
|
90
|
+
) as ProvingJobSource;
|
|
91
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
|
+
import { type ProcessedTx } from '@aztec/circuit-types';
|
|
3
|
+
import {
|
|
4
|
+
type BlockResult,
|
|
5
|
+
type ProverClient,
|
|
6
|
+
type ProvingJobSource,
|
|
7
|
+
type ProvingTicket,
|
|
8
|
+
type ServerCircuitProver,
|
|
9
|
+
} from '@aztec/circuit-types/interfaces';
|
|
10
|
+
import { type Fr, type GlobalVariables, type Header, type VerificationKeys } from '@aztec/circuits.js';
|
|
11
|
+
import { NativeACVMSimulator } from '@aztec/simulator';
|
|
12
|
+
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
13
|
+
|
|
14
|
+
import { type ProverClientConfig } from '../config.js';
|
|
15
|
+
import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
16
|
+
import { MemoryProvingQueue } from '../prover-agent/memory-proving-queue.js';
|
|
17
|
+
import { ProverAgent } from '../prover-agent/prover-agent.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A prover accepting individual transaction requests
|
|
21
|
+
*/
|
|
22
|
+
export class TxProver implements ProverClient {
|
|
23
|
+
private orchestrator: ProvingOrchestrator;
|
|
24
|
+
private queue = new MemoryProvingQueue();
|
|
25
|
+
private running = false;
|
|
26
|
+
|
|
27
|
+
private constructor(
|
|
28
|
+
private config: ProverClientConfig,
|
|
29
|
+
private worldStateSynchronizer: WorldStateSynchronizer,
|
|
30
|
+
private vks: VerificationKeys,
|
|
31
|
+
private agent?: ProverAgent,
|
|
32
|
+
initialHeader?: Header,
|
|
33
|
+
) {
|
|
34
|
+
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async updateProverConfig(config: Partial<ProverClientConfig & { vks: VerificationKeys }>): Promise<void> {
|
|
38
|
+
const newConfig = { ...this.config, ...config };
|
|
39
|
+
|
|
40
|
+
if (config.vks) {
|
|
41
|
+
this.vks = config.vks;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (newConfig.realProofs !== this.config.realProofs && this.agent) {
|
|
45
|
+
const circuitProver = await TxProver.buildCircuitProver(newConfig);
|
|
46
|
+
this.agent.setCircuitProver(circuitProver);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (this.config.proverAgentConcurrency !== newConfig.proverAgentConcurrency) {
|
|
50
|
+
this.agent?.setMaxConcurrency(newConfig.proverAgentConcurrency);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!this.config.realProofs && newConfig.realProofs) {
|
|
54
|
+
this.orchestrator.reset();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
this.config = newConfig;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Starts the prover instance
|
|
62
|
+
*/
|
|
63
|
+
public start() {
|
|
64
|
+
if (this.running) {
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.running = true;
|
|
69
|
+
this.agent?.start(this.queue);
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Stops the prover instance
|
|
75
|
+
*/
|
|
76
|
+
public async stop() {
|
|
77
|
+
if (!this.running) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.running = false;
|
|
81
|
+
await this.agent?.stop();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Creates a new prover client and starts it
|
|
86
|
+
* @param config - The prover configuration.
|
|
87
|
+
* @param vks - The verification keys for the prover
|
|
88
|
+
* @param worldStateSynchronizer - An instance of the world state
|
|
89
|
+
* @returns An instance of the prover, constructed and started.
|
|
90
|
+
*/
|
|
91
|
+
public static async new(
|
|
92
|
+
config: ProverClientConfig,
|
|
93
|
+
vks: VerificationKeys,
|
|
94
|
+
worldStateSynchronizer: WorldStateSynchronizer,
|
|
95
|
+
initialHeader?: Header,
|
|
96
|
+
) {
|
|
97
|
+
const agent = config.proverAgentEnabled
|
|
98
|
+
? new ProverAgent(
|
|
99
|
+
await TxProver.buildCircuitProver(config),
|
|
100
|
+
config.proverAgentConcurrency,
|
|
101
|
+
config.proverAgentPollInterval,
|
|
102
|
+
)
|
|
103
|
+
: undefined;
|
|
104
|
+
|
|
105
|
+
const prover = new TxProver(config, worldStateSynchronizer, vks, agent, initialHeader);
|
|
106
|
+
await prover.start();
|
|
107
|
+
return prover;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private static async buildCircuitProver(config: ProverClientConfig): Promise<ServerCircuitProver> {
|
|
111
|
+
if (config.realProofs) {
|
|
112
|
+
return await BBNativeRollupProver.new(config);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const simulationProvider = config.acvmBinaryPath
|
|
116
|
+
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
117
|
+
: undefined;
|
|
118
|
+
|
|
119
|
+
return new TestCircuitProver(simulationProvider);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Cancels any block that is currently being built and prepares for a new one to be built
|
|
124
|
+
* @param numTxs - The complete size of the block, must be a power of 2
|
|
125
|
+
* @param globalVariables - The global variables for this block
|
|
126
|
+
* @param l1ToL2Messages - The set of L1 to L2 messages to be included in this block
|
|
127
|
+
*/
|
|
128
|
+
public async startNewBlock(
|
|
129
|
+
numTxs: number,
|
|
130
|
+
globalVariables: GlobalVariables,
|
|
131
|
+
newL1ToL2Messages: Fr[],
|
|
132
|
+
): Promise<ProvingTicket> {
|
|
133
|
+
const previousBlockNumber = globalVariables.blockNumber.toNumber() - 1;
|
|
134
|
+
await this.worldStateSynchronizer.syncImmediate(previousBlockNumber);
|
|
135
|
+
return this.orchestrator.startNewBlock(numTxs, globalVariables, newL1ToL2Messages, this.vks);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Add a processed transaction to the current block
|
|
140
|
+
* @param tx - The transaction to be added
|
|
141
|
+
*/
|
|
142
|
+
public addNewTx(tx: ProcessedTx): Promise<void> {
|
|
143
|
+
return this.orchestrator.addNewTx(tx);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Cancels the block currently being proven. Proofs already bring built may continue but further proofs should not be started.
|
|
148
|
+
*/
|
|
149
|
+
public cancelBlock(): void {
|
|
150
|
+
this.orchestrator.cancelBlock();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Performs the final archive tree insertion for this block and returns the L2Block and Proof instances
|
|
155
|
+
*/
|
|
156
|
+
public finaliseBlock(): Promise<BlockResult> {
|
|
157
|
+
return this.orchestrator.finaliseBlock();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Mark the block as having all the transactions it is going to contain.
|
|
162
|
+
* Will pad the block to it's complete size with empty transactions and prove all the way to the root rollup.
|
|
163
|
+
*/
|
|
164
|
+
public setBlockCompleted(): Promise<void> {
|
|
165
|
+
return this.orchestrator.setBlockCompleted();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public getProvingJobSource(): ProvingJobSource {
|
|
169
|
+
return this.queue;
|
|
170
|
+
}
|
|
171
|
+
}
|