@aztec/prover-client 0.69.1 → 0.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/block_builder/light.d.ts +0 -1
- package/dest/block_builder/light.d.ts.map +1 -1
- package/dest/block_builder/light.js +3 -13
- package/dest/config.d.ts +2 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +3 -2
- package/dest/mocks/fixtures.d.ts +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -2
- package/dest/mocks/test_context.d.ts +1 -1
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +3 -3
- package/dest/orchestrator/block-building-helpers.d.ts +10 -25
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +34 -45
- package/dest/orchestrator/block-proving-state.d.ts +40 -44
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +149 -85
- package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +92 -65
- package/dest/orchestrator/orchestrator.d.ts +16 -47
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +204 -341
- package/dest/orchestrator/tx-proving-state.d.ts +10 -6
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +57 -46
- package/dest/prover-agent/memory-proving-queue.d.ts +3 -3
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
- package/dest/prover-agent/memory-proving-queue.js +4 -4
- package/dest/prover-agent/prover-agent.js +4 -4
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +6 -3
- package/dest/prover-client/server-epoch-prover.d.ts +25 -0
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
- package/dest/prover-client/server-epoch-prover.js +40 -0
- package/dest/proving_broker/broker_prover_facade.d.ts +15 -4
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +247 -44
- package/dest/proving_broker/config.d.ts +61 -0
- package/dest/proving_broker/config.d.ts.map +1 -0
- package/dest/proving_broker/config.js +83 -0
- 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 +2 -5
- package/dest/proving_broker/fixtures.d.ts +5 -0
- package/dest/proving_broker/fixtures.d.ts.map +1 -0
- package/dest/proving_broker/fixtures.js +12 -0
- package/dest/proving_broker/index.d.ts +1 -0
- package/dest/proving_broker/index.d.ts.map +1 -1
- package/dest/proving_broker/index.js +2 -1
- package/dest/proving_broker/proving_broker.d.ts +16 -12
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +306 -273
- package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/memory.js +17 -4
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +105 -13
- package/dest/proving_broker/proving_broker_database.d.ts +7 -3
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +4 -4
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +4 -4
- package/dest/test/mock_prover.d.ts +7 -7
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +6 -6
- package/package.json +11 -11
- package/src/block_builder/light.ts +1 -20
- package/src/config.ts +4 -4
- package/src/mocks/fixtures.ts +1 -1
- package/src/mocks/test_context.ts +2 -2
- package/src/orchestrator/block-building-helpers.ts +45 -119
- package/src/orchestrator/block-proving-state.ts +251 -121
- package/src/orchestrator/epoch-proving-state.ts +159 -88
- package/src/orchestrator/orchestrator.ts +251 -527
- package/src/orchestrator/tx-proving-state.ts +30 -18
- package/src/prover-agent/memory-proving-queue.ts +11 -15
- package/src/prover-agent/prover-agent.ts +4 -4
- package/src/prover-client/prover-client.ts +5 -7
- package/src/prover-client/server-epoch-prover.ts +44 -0
- package/src/proving_broker/broker_prover_facade.ts +321 -64
- package/src/proving_broker/config.ts +93 -0
- package/src/proving_broker/factory.ts +2 -5
- package/src/proving_broker/fixtures.ts +14 -0
- package/src/proving_broker/index.ts +1 -0
- package/src/proving_broker/proving_broker.ts +114 -71
- package/src/proving_broker/proving_broker_database/memory.ts +24 -4
- package/src/proving_broker/proving_broker_database/persisted.ts +141 -19
- package/src/proving_broker/proving_broker_database.ts +8 -3
- package/src/proving_broker/proving_job_controller.ts +5 -5
- package/src/proving_broker/rpc.ts +2 -3
- package/src/test/mock_prover.ts +9 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type MerkleTreeId, type ProcessedTx, type ProofAndVerificationKey } from '@aztec/circuit-types';
|
|
2
|
+
import { type CircuitName } from '@aztec/circuit-types/stats';
|
|
2
3
|
import {
|
|
3
4
|
type AVM_PROOF_LENGTH_IN_FIELDS,
|
|
4
5
|
AVM_VK_INDEX,
|
|
@@ -18,7 +19,7 @@ import {
|
|
|
18
19
|
PublicTubeData,
|
|
19
20
|
TubeInputs,
|
|
20
21
|
} from '@aztec/circuits.js/rollup';
|
|
21
|
-
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types';
|
|
22
|
+
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vks';
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Helper class to manage the proving cycle of a transaction
|
|
@@ -51,15 +52,34 @@ export class TxProvingState {
|
|
|
51
52
|
return this.processedTx.avmProvingRequest!.inputs;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
public
|
|
55
|
+
public getBaseRollupTypeAndInputs() {
|
|
55
56
|
if (this.requireAvmProof) {
|
|
56
|
-
|
|
57
|
+
return {
|
|
58
|
+
rollupType: 'public-base-rollup' satisfies CircuitName,
|
|
59
|
+
inputs: this.#getPublicBaseInputs(),
|
|
60
|
+
};
|
|
61
|
+
} else {
|
|
62
|
+
return {
|
|
63
|
+
rollupType: 'private-base-rollup' satisfies CircuitName,
|
|
64
|
+
inputs: this.#getPrivateBaseInputs(),
|
|
65
|
+
};
|
|
57
66
|
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public setTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) {
|
|
70
|
+
this.tube = tubeProofAndVk;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
|
|
74
|
+
this.avm = avmProofAndVk;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#getPrivateBaseInputs() {
|
|
58
78
|
if (!this.tube) {
|
|
59
79
|
throw new Error('Tx not ready for proving base rollup.');
|
|
60
80
|
}
|
|
61
81
|
|
|
62
|
-
const vkData = this
|
|
82
|
+
const vkData = this.#getTubeVkData();
|
|
63
83
|
const tubeData = new PrivateTubeData(
|
|
64
84
|
this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
|
|
65
85
|
this.tube.proof,
|
|
@@ -72,7 +92,7 @@ export class TxProvingState {
|
|
|
72
92
|
return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
|
|
73
93
|
}
|
|
74
94
|
|
|
75
|
-
|
|
95
|
+
#getPublicBaseInputs() {
|
|
76
96
|
if (!this.processedTx.avmProvingRequest) {
|
|
77
97
|
throw new Error('Should create private base rollup for a tx not requiring avm proof.');
|
|
78
98
|
}
|
|
@@ -84,15 +104,15 @@ export class TxProvingState {
|
|
|
84
104
|
}
|
|
85
105
|
|
|
86
106
|
const tubeData = new PublicTubeData(
|
|
87
|
-
this.processedTx.data.
|
|
107
|
+
this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
|
|
88
108
|
this.tube.proof,
|
|
89
|
-
this
|
|
109
|
+
this.#getTubeVkData(),
|
|
90
110
|
);
|
|
91
111
|
|
|
92
112
|
const avmProofData = new AvmProofData(
|
|
93
113
|
this.processedTx.avmProvingRequest.inputs.output,
|
|
94
114
|
this.avm.proof,
|
|
95
|
-
this
|
|
115
|
+
this.#getAvmVkData(),
|
|
96
116
|
);
|
|
97
117
|
|
|
98
118
|
if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
|
|
@@ -102,15 +122,7 @@ export class TxProvingState {
|
|
|
102
122
|
return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
|
|
103
123
|
}
|
|
104
124
|
|
|
105
|
-
|
|
106
|
-
this.tube = tubeProofAndVk;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
public assignAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
|
|
110
|
-
this.avm = avmProofAndVk;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
private getTubeVkData() {
|
|
125
|
+
#getTubeVkData() {
|
|
114
126
|
let vkIndex = TUBE_VK_INDEX;
|
|
115
127
|
try {
|
|
116
128
|
vkIndex = getVKIndex(this.tube!.verificationKey);
|
|
@@ -122,7 +134,7 @@ export class TxProvingState {
|
|
|
122
134
|
return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
|
|
123
135
|
}
|
|
124
136
|
|
|
125
|
-
|
|
137
|
+
#getAvmVkData() {
|
|
126
138
|
const vkIndex = AVM_VK_INDEX;
|
|
127
139
|
const vkPath = getVKSiblingPath(vkIndex);
|
|
128
140
|
return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
|
|
@@ -15,8 +15,6 @@ import type {
|
|
|
15
15
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
16
16
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
17
17
|
ParityPublicInputs,
|
|
18
|
-
PrivateKernelEmptyInputData,
|
|
19
|
-
PrivateToRollupKernelCircuitPublicInputs,
|
|
20
18
|
RECURSIVE_PROOF_LENGTH,
|
|
21
19
|
RootParityInputs,
|
|
22
20
|
TUBE_PROOF_LENGTH,
|
|
@@ -32,6 +30,7 @@ import {
|
|
|
32
30
|
type PublicBaseRollupInputs,
|
|
33
31
|
type RootRollupInputs,
|
|
34
32
|
type RootRollupPublicInputs,
|
|
33
|
+
type SingleTxBlockRootRollupInputs,
|
|
35
34
|
type TubeInputs,
|
|
36
35
|
} from '@aztec/circuits.js/rollup';
|
|
37
36
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
@@ -271,19 +270,6 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
271
270
|
return promise.then(({ result }) => result);
|
|
272
271
|
}
|
|
273
272
|
|
|
274
|
-
getEmptyPrivateKernelProof(
|
|
275
|
-
inputs: PrivateKernelEmptyInputData,
|
|
276
|
-
signal?: AbortSignal,
|
|
277
|
-
epochNumber?: number,
|
|
278
|
-
): Promise<
|
|
279
|
-
PublicInputsAndRecursiveProof<
|
|
280
|
-
PrivateToRollupKernelCircuitPublicInputs,
|
|
281
|
-
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
282
|
-
>
|
|
283
|
-
> {
|
|
284
|
-
return this.enqueue(ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs, signal, epochNumber);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
273
|
getTubeProof(
|
|
288
274
|
inputs: TubeInputs,
|
|
289
275
|
signal?: AbortSignal,
|
|
@@ -364,6 +350,16 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
364
350
|
return this.enqueue(ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
|
|
365
351
|
}
|
|
366
352
|
|
|
353
|
+
getSingleTxBlockRootRollupProof(
|
|
354
|
+
inputs: SingleTxBlockRootRollupInputs,
|
|
355
|
+
signal?: AbortSignal,
|
|
356
|
+
epochNumber?: number,
|
|
357
|
+
): Promise<
|
|
358
|
+
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
359
|
+
> {
|
|
360
|
+
return this.enqueue(ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
|
|
361
|
+
}
|
|
362
|
+
|
|
367
363
|
getEmptyBlockRootRollupProof(
|
|
368
364
|
inputs: EmptyBlockRootRollupInputs,
|
|
369
365
|
signal?: AbortSignal,
|
|
@@ -209,6 +209,10 @@ export class ProverAgent implements ProverAgentApi, Traceable {
|
|
|
209
209
|
return this.circuitProver.getBlockRootRollupProof(inputs);
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
case ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP: {
|
|
213
|
+
return this.circuitProver.getSingleTxBlockRootRollupProof(inputs);
|
|
214
|
+
}
|
|
215
|
+
|
|
212
216
|
case ProvingRequestType.BLOCK_MERGE_ROLLUP: {
|
|
213
217
|
return this.circuitProver.getBlockMergeRollupProof(inputs);
|
|
214
218
|
}
|
|
@@ -225,10 +229,6 @@ export class ProverAgent implements ProverAgentApi, Traceable {
|
|
|
225
229
|
return this.circuitProver.getRootParityProof(inputs);
|
|
226
230
|
}
|
|
227
231
|
|
|
228
|
-
case ProvingRequestType.PRIVATE_KERNEL_EMPTY: {
|
|
229
|
-
return this.circuitProver.getEmptyPrivateKernelProof(inputs);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
232
|
case ProvingRequestType.TUBE_PROOF: {
|
|
233
233
|
return this.circuitProver.getTubeProof(inputs);
|
|
234
234
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import { Fr } from '@aztec/circuits.js';
|
|
13
13
|
import { times } from '@aztec/foundation/collection';
|
|
14
14
|
import { createLogger } from '@aztec/foundation/log';
|
|
15
|
-
import { NativeACVMSimulator } from '@aztec/simulator';
|
|
15
|
+
import { NativeACVMSimulator } from '@aztec/simulator/server';
|
|
16
16
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
17
17
|
|
|
18
18
|
import { type ProverClientConfig } from '../config.js';
|
|
@@ -20,6 +20,7 @@ import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
|
20
20
|
import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
21
21
|
import { InlineProofStore } from '../proving_broker/proof_store.js';
|
|
22
22
|
import { ProvingAgent } from '../proving_broker/proving_agent.js';
|
|
23
|
+
import { ServerEpochProver } from './server-epoch-prover.js';
|
|
23
24
|
|
|
24
25
|
/** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
|
|
25
26
|
export class ProverClient implements EpochProverManager {
|
|
@@ -39,12 +40,9 @@ export class ProverClient implements EpochProverManager {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
public createEpochProver(): EpochProver {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.telemetry,
|
|
46
|
-
this.config.proverId,
|
|
47
|
-
);
|
|
43
|
+
const facade = new BrokerCircuitProverFacade(this.orchestratorClient);
|
|
44
|
+
const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.telemetry, this.config.proverId);
|
|
45
|
+
return new ServerEpochProver(facade, orchestrator);
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
public getProverId(): Fr {
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type EpochProver, type L2Block, type ProcessedTx, type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type BlockHeader, type Fr, type GlobalVariables, type Proof } from '@aztec/circuits.js';
|
|
3
|
+
import { type RootRollupPublicInputs } from '@aztec/circuits.js/rollup';
|
|
4
|
+
|
|
5
|
+
import { type ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
6
|
+
import { type BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
7
|
+
|
|
8
|
+
/** Encapsulates the proving orchestrator and the broker facade */
|
|
9
|
+
export class ServerEpochProver implements EpochProver {
|
|
10
|
+
constructor(private facade: BrokerCircuitProverFacade, private orchestrator: ProvingOrchestrator) {}
|
|
11
|
+
|
|
12
|
+
startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void {
|
|
13
|
+
this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks);
|
|
14
|
+
this.facade.start();
|
|
15
|
+
}
|
|
16
|
+
startTubeCircuits(txs: Tx[]): void {
|
|
17
|
+
this.orchestrator.startTubeCircuits(txs);
|
|
18
|
+
}
|
|
19
|
+
setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block> {
|
|
20
|
+
return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
|
|
21
|
+
}
|
|
22
|
+
finaliseEpoch(): Promise<{ publicInputs: RootRollupPublicInputs; proof: Proof }> {
|
|
23
|
+
return this.orchestrator.finaliseEpoch();
|
|
24
|
+
}
|
|
25
|
+
cancel(): void {
|
|
26
|
+
this.orchestrator.cancel();
|
|
27
|
+
}
|
|
28
|
+
getProverId(): Fr {
|
|
29
|
+
return this.orchestrator.getProverId();
|
|
30
|
+
}
|
|
31
|
+
getBlock(index: number): L2Block {
|
|
32
|
+
return this.orchestrator.getBlock(index);
|
|
33
|
+
}
|
|
34
|
+
async stop(): Promise<void> {
|
|
35
|
+
await this.facade.stop();
|
|
36
|
+
await this.orchestrator.stop();
|
|
37
|
+
}
|
|
38
|
+
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void> {
|
|
39
|
+
return this.orchestrator.startNewBlock(globalVariables, l1ToL2Messages);
|
|
40
|
+
}
|
|
41
|
+
addTxs(txs: ProcessedTx[]): Promise<void> {
|
|
42
|
+
return this.orchestrator.addTxs(txs);
|
|
43
|
+
}
|
|
44
|
+
}
|