@aztec/prover-client 0.0.1-fake-ceab37513c → 0.0.2-commit.217f559981
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/config.d.ts +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/light/index.d.ts +2 -0
- package/dest/light/index.d.ts.map +1 -0
- package/dest/light/index.js +1 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts +48 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +202 -0
- package/dest/mocks/fixtures.d.ts +5 -5
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +35 -16
- package/dest/mocks/test_context.d.ts +39 -33
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +141 -82
- package/dest/orchestrator/block-building-helpers.d.ts +34 -34
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +151 -187
- package/dest/orchestrator/block-proving-state.d.ts +71 -55
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +280 -185
- package/dest/orchestrator/checkpoint-proving-state.d.ts +76 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +243 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +40 -32
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +165 -85
- package/dest/orchestrator/index.d.ts +1 -1
- package/dest/orchestrator/orchestrator.d.ts +51 -35
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +847 -329
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -3
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +2 -15
- package/dest/orchestrator/tx-proving-state.d.ts +15 -12
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +27 -33
- package/dest/prover-client/factory.d.ts +3 -3
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/index.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts +5 -5
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +15 -10
- package/dest/prover-client/server-epoch-prover.d.ts +13 -11
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +9 -9
- package/dest/proving_broker/broker_prover_facade.d.ts +28 -21
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +45 -36
- package/dest/proving_broker/config.d.ts +24 -8
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +26 -3
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/fixtures.d.ts +3 -2
- package/dest/proving_broker/fixtures.d.ts.map +1 -1
- package/dest/proving_broker/fixtures.js +3 -2
- package/dest/proving_broker/index.d.ts +1 -1
- package/dest/proving_broker/proof_store/factory.d.ts +2 -5
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/factory.js +7 -30
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
- package/dest/proving_broker/proof_store/index.d.ts +2 -1
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
- package/dest/proving_broker/proving_agent.d.ts +5 -9
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +4 -19
- package/dest/proving_broker/proving_broker.d.ts +7 -4
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +64 -30
- package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +392 -3
- package/dest/proving_broker/proving_broker_database.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +15 -35
- package/dest/proving_broker/proving_job_controller.d.ts +5 -3
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +46 -24
- package/dest/proving_broker/rpc.d.ts +7 -5
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +8 -0
- package/dest/test/mock_proof_store.d.ts +1 -1
- package/dest/test/mock_proof_store.d.ts.map +1 -1
- package/dest/test/mock_prover.d.ts +23 -19
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +38 -23
- package/package.json +21 -20
- package/src/config.ts +2 -2
- package/src/light/index.ts +1 -0
- package/src/light/lightweight_checkpoint_builder.ts +294 -0
- package/src/mocks/fixtures.ts +43 -37
- package/src/mocks/test_context.ts +201 -114
- package/src/orchestrator/block-building-helpers.ts +233 -313
- package/src/orchestrator/block-proving-state.ts +324 -247
- package/src/orchestrator/checkpoint-proving-state.ts +349 -0
- package/src/orchestrator/epoch-proving-state.ts +229 -132
- package/src/orchestrator/orchestrator.ts +630 -385
- package/src/orchestrator/orchestrator_metrics.ts +2 -25
- package/src/orchestrator/tx-proving-state.ts +49 -60
- package/src/prover-client/factory.ts +6 -2
- package/src/prover-client/prover-client.ts +31 -23
- package/src/prover-client/server-epoch-prover.ts +30 -21
- package/src/proving_broker/broker_prover_facade.ts +183 -118
- package/src/proving_broker/config.ts +30 -1
- package/src/proving_broker/fixtures.ts +8 -3
- package/src/proving_broker/proof_store/factory.ts +10 -32
- package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
- package/src/proving_broker/proof_store/index.ts +1 -0
- package/src/proving_broker/proving_agent.ts +6 -19
- package/src/proving_broker/proving_broker.ts +72 -28
- package/src/proving_broker/proving_broker_database/memory.ts +2 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +20 -5
- package/src/proving_broker/proving_broker_database.ts +2 -1
- package/src/proving_broker/proving_broker_instrumentation.ts +14 -35
- package/src/proving_broker/proving_job_controller.ts +51 -25
- package/src/proving_broker/rpc.ts +14 -0
- package/src/test/mock_prover.ts +144 -74
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/bin/get-proof-inputs.js +0 -51
- package/dest/block-factory/index.d.ts +0 -2
- package/dest/block-factory/index.d.ts.map +0 -1
- package/dest/block-factory/index.js +0 -1
- package/dest/block-factory/light.d.ts +0 -36
- package/dest/block-factory/light.d.ts.map +0 -1
- package/dest/block-factory/light.js +0 -87
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -52
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
- package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
- package/src/bin/get-proof-inputs.ts +0 -59
- package/src/block-factory/index.ts +0 -1
- package/src/block-factory/light.ts +0 -114
- package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
- package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
|
@@ -1,41 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type Histogram,
|
|
3
|
-
Metrics,
|
|
4
|
-
type TelemetryClient,
|
|
5
|
-
type Tracer,
|
|
6
|
-
type UpDownCounter,
|
|
7
|
-
ValueType,
|
|
8
|
-
} from '@aztec/telemetry-client';
|
|
1
|
+
import { type Histogram, Metrics, type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
9
2
|
|
|
10
3
|
export class ProvingOrchestratorMetrics {
|
|
11
4
|
public readonly tracer: Tracer;
|
|
12
5
|
|
|
13
6
|
private baseRollupInputsDuration: Histogram;
|
|
14
|
-
private avmFallbackCount: UpDownCounter;
|
|
15
7
|
|
|
16
8
|
constructor(client: TelemetryClient, name = 'ProvingOrchestrator') {
|
|
17
9
|
this.tracer = client.getTracer(name);
|
|
18
10
|
const meter = client.getMeter(name);
|
|
19
11
|
|
|
20
|
-
this.baseRollupInputsDuration = meter.createHistogram(Metrics.PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION
|
|
21
|
-
unit: 'ms',
|
|
22
|
-
description: 'Duration to build base rollup inputs',
|
|
23
|
-
valueType: ValueType.INT,
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
this.avmFallbackCount = meter.createUpDownCounter(Metrics.PROVING_ORCHESTRATOR_AVM_FALLBACK_COUNT, {
|
|
27
|
-
description: 'How many times the AVM fallback was used',
|
|
28
|
-
valueType: ValueType.INT,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
this.avmFallbackCount.add(0);
|
|
12
|
+
this.baseRollupInputsDuration = meter.createHistogram(Metrics.PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION);
|
|
32
13
|
}
|
|
33
14
|
|
|
34
15
|
recordBaseRollupInputs(durationMs: number) {
|
|
35
16
|
this.baseRollupInputsDuration.record(Math.ceil(durationMs));
|
|
36
17
|
}
|
|
37
|
-
|
|
38
|
-
incAvmFallback() {
|
|
39
|
-
this.avmFallbackCount.add(1);
|
|
40
|
-
}
|
|
41
18
|
}
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
PRIVATE_TUBE_VK_INDEX,
|
|
5
|
-
PUBLIC_TUBE_VK_INDEX,
|
|
6
|
-
type TUBE_PROOF_LENGTH,
|
|
7
|
-
} from '@aztec/constants';
|
|
8
|
-
import { getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
1
|
+
import { AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
2
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { getVkData } from '@aztec/noir-protocol-circuits-types/server/vks';
|
|
9
4
|
import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
|
|
10
|
-
import type {
|
|
5
|
+
import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
6
|
+
import { ProofData, ProofDataForFixedVk, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
11
7
|
import {
|
|
12
|
-
AvmProofData,
|
|
13
8
|
type BaseRollupHints,
|
|
14
9
|
PrivateBaseRollupHints,
|
|
15
|
-
|
|
16
|
-
PrivateTubeData,
|
|
10
|
+
PrivateTxBaseRollupPrivateInputs,
|
|
17
11
|
PublicBaseRollupHints,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
TubeInputs,
|
|
12
|
+
PublicChonkVerifierPublicInputs,
|
|
13
|
+
PublicTxBaseRollupPrivateInputs,
|
|
21
14
|
} from '@aztec/stdlib/rollup';
|
|
22
15
|
import type { CircuitName } from '@aztec/stdlib/stats';
|
|
23
16
|
import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
24
17
|
import type { ProcessedTx } from '@aztec/stdlib/tx';
|
|
25
|
-
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
getChonkProofFromTx,
|
|
21
|
+
getPublicChonkVerifierPrivateInputsFromTx,
|
|
22
|
+
toProofData,
|
|
23
|
+
} from './block-building-helpers.js';
|
|
26
24
|
|
|
27
25
|
/**
|
|
28
26
|
* Helper class to manage the proving cycle of a transaction
|
|
@@ -30,13 +28,17 @@ import { VerificationKeyData, VkData } from '@aztec/stdlib/vks';
|
|
|
30
28
|
* Also stores the inputs to the base rollup for this transaction and the tree snapshots
|
|
31
29
|
*/
|
|
32
30
|
export class TxProvingState {
|
|
33
|
-
private
|
|
34
|
-
|
|
31
|
+
private publicChonkVerifier?: PublicInputsAndRecursiveProof<
|
|
32
|
+
PublicChonkVerifierPublicInputs,
|
|
33
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
34
|
+
>;
|
|
35
|
+
private avmProof?: RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>;
|
|
35
36
|
|
|
36
37
|
constructor(
|
|
37
38
|
public readonly processedTx: ProcessedTx,
|
|
38
39
|
private readonly baseRollupHints: BaseRollupHints,
|
|
39
40
|
public readonly treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>,
|
|
41
|
+
private readonly proverId: Fr,
|
|
40
42
|
) {}
|
|
41
43
|
|
|
42
44
|
get requireAvmProof() {
|
|
@@ -44,89 +46,76 @@ export class TxProvingState {
|
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
public ready() {
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public getTubeInputs() {
|
|
51
|
-
return new TubeInputs(!!this.processedTx.data.forPublic, this.processedTx.clientIvcProof);
|
|
49
|
+
return !this.requireAvmProof || (!!this.avmProof && !!this.publicChonkVerifier);
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
public getAvmInputs(): AvmCircuitInputs {
|
|
55
53
|
return this.processedTx.avmProvingRequest!.inputs;
|
|
56
54
|
}
|
|
57
55
|
|
|
56
|
+
public getPublicChonkVerifierPrivateInputs() {
|
|
57
|
+
return getPublicChonkVerifierPrivateInputsFromTx(this.processedTx, this.proverId);
|
|
58
|
+
}
|
|
59
|
+
|
|
58
60
|
public getBaseRollupTypeAndInputs() {
|
|
59
61
|
if (this.requireAvmProof) {
|
|
60
62
|
return {
|
|
61
|
-
rollupType: '
|
|
63
|
+
rollupType: 'rollup-tx-base-public' satisfies CircuitName,
|
|
62
64
|
inputs: this.#getPublicBaseInputs(),
|
|
63
65
|
};
|
|
64
66
|
} else {
|
|
65
67
|
return {
|
|
66
|
-
rollupType: '
|
|
68
|
+
rollupType: 'rollup-tx-base-private' satisfies CircuitName,
|
|
67
69
|
inputs: this.#getPrivateBaseInputs(),
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
public
|
|
73
|
-
|
|
74
|
+
public setPublicChonkVerifierProof(
|
|
75
|
+
publicChonkVerifierProofAndVk: PublicInputsAndRecursiveProof<
|
|
76
|
+
PublicChonkVerifierPublicInputs,
|
|
77
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
78
|
+
>,
|
|
79
|
+
) {
|
|
80
|
+
this.publicChonkVerifier = publicChonkVerifierProofAndVk;
|
|
74
81
|
}
|
|
75
82
|
|
|
76
|
-
public setAvmProof(
|
|
77
|
-
this.
|
|
83
|
+
public setAvmProof(avmProof: RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>) {
|
|
84
|
+
this.avmProof = avmProof;
|
|
78
85
|
}
|
|
79
86
|
|
|
80
87
|
#getPrivateBaseInputs() {
|
|
81
|
-
if (!this.
|
|
82
|
-
throw new Error('
|
|
88
|
+
if (!(this.baseRollupHints instanceof PrivateBaseRollupHints)) {
|
|
89
|
+
throw new Error('Mismatched base rollup hints, expected private base rollup hints');
|
|
83
90
|
}
|
|
84
91
|
|
|
85
|
-
const
|
|
86
|
-
const tubeData = new PrivateTubeData(
|
|
92
|
+
const privateTailProofData = new ProofData(
|
|
87
93
|
this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
|
|
88
|
-
this.
|
|
89
|
-
|
|
94
|
+
getChonkProofFromTx(this.processedTx),
|
|
95
|
+
getVkData('HidingKernelToRollup'),
|
|
90
96
|
);
|
|
91
97
|
|
|
92
|
-
|
|
93
|
-
throw new Error('Mismatched base rollup hints, expected private base rollup hints');
|
|
94
|
-
}
|
|
95
|
-
return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
|
|
98
|
+
return new PrivateTxBaseRollupPrivateInputs(privateTailProofData, this.baseRollupHints);
|
|
96
99
|
}
|
|
97
100
|
|
|
98
101
|
#getPublicBaseInputs() {
|
|
99
102
|
if (!this.processedTx.avmProvingRequest) {
|
|
100
103
|
throw new Error('Should create private base rollup for a tx not requiring avm proof.');
|
|
101
104
|
}
|
|
102
|
-
if (!this.
|
|
103
|
-
throw new Error('Tx not ready for proving base rollup:
|
|
105
|
+
if (!this.publicChonkVerifier) {
|
|
106
|
+
throw new Error('Tx not ready for proving base rollup: public chonk verifier proof undefined');
|
|
104
107
|
}
|
|
105
|
-
if (!this.
|
|
108
|
+
if (!this.avmProof) {
|
|
106
109
|
throw new Error('Tx not ready for proving base rollup: avm proof undefined');
|
|
107
110
|
}
|
|
108
|
-
|
|
109
|
-
const tubeData = new PublicTubeData(
|
|
110
|
-
this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
|
|
111
|
-
this.tube.proof,
|
|
112
|
-
this.#getVkData(this.tube!.verificationKey, PUBLIC_TUBE_VK_INDEX),
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
const avmProofData = new AvmProofData(
|
|
116
|
-
this.processedTx.avmProvingRequest.inputs.publicInputs,
|
|
117
|
-
this.avm.proof,
|
|
118
|
-
this.#getVkData(this.avm!.verificationKey, AVM_VK_INDEX),
|
|
119
|
-
);
|
|
120
|
-
|
|
121
111
|
if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
|
|
122
112
|
throw new Error('Mismatched base rollup hints, expected public base rollup hints');
|
|
123
113
|
}
|
|
124
114
|
|
|
125
|
-
|
|
126
|
-
|
|
115
|
+
const publicChonkVerifierProofData = toProofData(this.publicChonkVerifier);
|
|
116
|
+
|
|
117
|
+
const avmProofData = new ProofDataForFixedVk(this.processedTx.avmProvingRequest.inputs.publicInputs, this.avmProof);
|
|
127
118
|
|
|
128
|
-
|
|
129
|
-
const vkPath = getVKSiblingPath(vkIndex);
|
|
130
|
-
return new VkData(verificationKey, vkIndex, vkPath);
|
|
119
|
+
return new PublicTxBaseRollupPrivateInputs(publicChonkVerifierProofData, avmProofData, this.baseRollupHints);
|
|
131
120
|
}
|
|
132
121
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
ForkMerkleTreeOperations,
|
|
3
|
+
ProvingJobBroker,
|
|
4
|
+
ReadonlyWorldStateAccess,
|
|
5
|
+
} from '@aztec/stdlib/interfaces/server';
|
|
2
6
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
3
7
|
|
|
4
8
|
import type { ProverClientConfig } from '../config.js';
|
|
@@ -6,7 +10,7 @@ import { ProverClient } from './prover-client.js';
|
|
|
6
10
|
|
|
7
11
|
export function createProverClient(
|
|
8
12
|
config: ProverClientConfig,
|
|
9
|
-
worldState: ForkMerkleTreeOperations,
|
|
13
|
+
worldState: ForkMerkleTreeOperations & ReadonlyWorldStateAccess,
|
|
10
14
|
broker: ProvingJobBroker,
|
|
11
15
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
12
16
|
) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ACVMConfig, type BBConfig, BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
2
|
import { times } from '@aztec/foundation/collection';
|
|
3
3
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { NativeACVMSimulator } from '@aztec/simulator/server';
|
|
6
6
|
import {
|
|
7
7
|
type ActualProverConfig,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
type ProvingJobBroker,
|
|
12
12
|
type ProvingJobConsumer,
|
|
13
13
|
type ProvingJobProducer,
|
|
14
|
+
type ReadonlyWorldStateAccess,
|
|
14
15
|
type ServerCircuitProver,
|
|
15
16
|
tryStop,
|
|
16
17
|
} from '@aztec/stdlib/interfaces/server';
|
|
@@ -28,24 +29,34 @@ export class ProverClient implements EpochProverManager {
|
|
|
28
29
|
private running = false;
|
|
29
30
|
private agents: ProvingAgent[] = [];
|
|
30
31
|
|
|
31
|
-
private proofStore: ProofStore;
|
|
32
|
-
private failedProofStore: ProofStore | undefined;
|
|
33
|
-
|
|
34
32
|
private constructor(
|
|
35
33
|
private config: ProverClientConfig,
|
|
36
|
-
private worldState: ForkMerkleTreeOperations,
|
|
34
|
+
private worldState: ForkMerkleTreeOperations & ReadonlyWorldStateAccess,
|
|
37
35
|
private orchestratorClient: ProvingJobProducer,
|
|
36
|
+
private proofStore: ProofStore,
|
|
37
|
+
private failedProofStore: ProofStore | undefined,
|
|
38
38
|
private agentClient?: ProvingJobConsumer,
|
|
39
39
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
40
|
-
private log = createLogger('prover-client:tx-prover'),
|
|
41
|
-
) {
|
|
42
|
-
this.proofStore = new InlineProofStore();
|
|
43
|
-
this.failedProofStore = this.config.failedProofStore ? createProofStore(this.config.failedProofStore) : undefined;
|
|
44
|
-
}
|
|
40
|
+
private log: Logger = createLogger('prover-client:tx-prover'),
|
|
41
|
+
) {}
|
|
45
42
|
|
|
46
43
|
public createEpochProver(): EpochProver {
|
|
47
|
-
const
|
|
48
|
-
const
|
|
44
|
+
const bindings = this.log.getBindings();
|
|
45
|
+
const facade = new BrokerCircuitProverFacade(
|
|
46
|
+
this.orchestratorClient,
|
|
47
|
+
this.proofStore,
|
|
48
|
+
this.failedProofStore,
|
|
49
|
+
undefined,
|
|
50
|
+
bindings,
|
|
51
|
+
);
|
|
52
|
+
const orchestrator = new ProvingOrchestrator(
|
|
53
|
+
this.worldState,
|
|
54
|
+
facade,
|
|
55
|
+
this.config.proverId,
|
|
56
|
+
this.config.cancelJobsOnStop,
|
|
57
|
+
this.telemetry,
|
|
58
|
+
bindings,
|
|
59
|
+
);
|
|
49
60
|
return new ServerEpochProver(facade, orchestrator);
|
|
50
61
|
}
|
|
51
62
|
|
|
@@ -99,11 +110,13 @@ export class ProverClient implements EpochProverManager {
|
|
|
99
110
|
*/
|
|
100
111
|
public static async new(
|
|
101
112
|
config: ProverClientConfig,
|
|
102
|
-
worldState: ForkMerkleTreeOperations,
|
|
113
|
+
worldState: ForkMerkleTreeOperations & ReadonlyWorldStateAccess,
|
|
103
114
|
broker: ProvingJobBroker,
|
|
104
115
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
105
116
|
) {
|
|
106
|
-
const
|
|
117
|
+
const proofStore = await createProofStore(config.proofStore);
|
|
118
|
+
const failedProofStore = config.failedProofStore ? await createProofStore(config.failedProofStore) : undefined;
|
|
119
|
+
const prover = new ProverClient(config, worldState, broker, proofStore, failedProofStore, broker, telemetry);
|
|
107
120
|
await prover.start();
|
|
108
121
|
return prover;
|
|
109
122
|
}
|
|
@@ -127,17 +140,11 @@ export class ProverClient implements EpochProverManager {
|
|
|
127
140
|
|
|
128
141
|
const proofStore = new InlineProofStore();
|
|
129
142
|
const prover = await buildServerCircuitProver(this.config, this.telemetry);
|
|
143
|
+
const bindings = this.log.getBindings();
|
|
130
144
|
this.agents = times(
|
|
131
145
|
this.config.proverAgentCount,
|
|
132
146
|
() =>
|
|
133
|
-
new ProvingAgent(
|
|
134
|
-
this.agentClient!,
|
|
135
|
-
proofStore,
|
|
136
|
-
prover,
|
|
137
|
-
[],
|
|
138
|
-
this.config.proverAgentPollIntervalMs,
|
|
139
|
-
this.telemetry,
|
|
140
|
-
),
|
|
147
|
+
new ProvingAgent(this.agentClient!, proofStore, prover, [], this.config.proverAgentPollIntervalMs, bindings),
|
|
141
148
|
);
|
|
142
149
|
|
|
143
150
|
await Promise.all(this.agents.map(agent => agent.start()));
|
|
@@ -156,8 +163,9 @@ export function buildServerCircuitProver(
|
|
|
156
163
|
return BBNativeRollupProver.new(config, telemetry);
|
|
157
164
|
}
|
|
158
165
|
|
|
166
|
+
const logger = createLogger('prover-client:acvm-native');
|
|
159
167
|
const simulator = config.acvmBinaryPath
|
|
160
|
-
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
168
|
+
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath, undefined, logger)
|
|
161
169
|
: undefined;
|
|
162
170
|
|
|
163
171
|
return Promise.resolve(new TestCircuitProver(simulator, config, telemetry));
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { BatchedBlob, FinalBlobBatchingChallenges } from '@aztec/blob-lib';
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
1
|
+
import type { BatchedBlob, FinalBlobBatchingChallenges } from '@aztec/blob-lib/types';
|
|
2
|
+
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import type { EthAddress } from '@aztec/stdlib/block';
|
|
4
5
|
import type { EpochProver } from '@aztec/stdlib/interfaces/server';
|
|
5
6
|
import type { Proof } from '@aztec/stdlib/proofs';
|
|
6
|
-
import type { RootRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
7
|
-
import type { BlockHeader,
|
|
7
|
+
import type { CheckpointConstantData, RootRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
8
|
+
import type { BlockHeader, ProcessedTx, Tx } from '@aztec/stdlib/tx';
|
|
9
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
8
10
|
|
|
9
11
|
import type { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
10
12
|
import type { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
@@ -17,18 +19,32 @@ export class ServerEpochProver implements EpochProver {
|
|
|
17
19
|
) {}
|
|
18
20
|
|
|
19
21
|
startNewEpoch(
|
|
20
|
-
epochNumber:
|
|
21
|
-
|
|
22
|
-
totalNumBlocks: number,
|
|
22
|
+
epochNumber: EpochNumber,
|
|
23
|
+
totalNumCheckpoints: number,
|
|
23
24
|
finalBlobBatchingChallenges: FinalBlobBatchingChallenges,
|
|
24
25
|
): void {
|
|
25
|
-
this.orchestrator.startNewEpoch(epochNumber,
|
|
26
|
+
this.orchestrator.startNewEpoch(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges);
|
|
26
27
|
this.facade.start();
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
startNewCheckpoint(
|
|
30
|
+
checkpointIndex: number,
|
|
31
|
+
constants: CheckpointConstantData,
|
|
32
|
+
l1ToL2Messages: Fr[],
|
|
33
|
+
totalNumBlocks: number,
|
|
34
|
+
headerOfLastBlockInPreviousCheckpoint: BlockHeader,
|
|
35
|
+
): Promise<void> {
|
|
36
|
+
return this.orchestrator.startNewCheckpoint(
|
|
37
|
+
checkpointIndex,
|
|
38
|
+
constants,
|
|
39
|
+
l1ToL2Messages,
|
|
40
|
+
totalNumBlocks,
|
|
41
|
+
headerOfLastBlockInPreviousCheckpoint,
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
startChonkVerifierCircuits(txs: Tx[]): Promise<void> {
|
|
45
|
+
return this.orchestrator.startChonkVerifierCircuits(txs);
|
|
30
46
|
}
|
|
31
|
-
setBlockCompleted(blockNumber:
|
|
47
|
+
setBlockCompleted(blockNumber: BlockNumber, expectedBlockHeader?: BlockHeader): Promise<BlockHeader> {
|
|
32
48
|
return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
|
|
33
49
|
}
|
|
34
50
|
finalizeEpoch(): Promise<{ publicInputs: RootRollupPublicInputs; proof: Proof; batchedBlobInputs: BatchedBlob }> {
|
|
@@ -40,19 +56,12 @@ export class ServerEpochProver implements EpochProver {
|
|
|
40
56
|
getProverId(): EthAddress {
|
|
41
57
|
return this.orchestrator.getProverId();
|
|
42
58
|
}
|
|
43
|
-
getBlock(index: number): L2Block {
|
|
44
|
-
return this.orchestrator.getBlock(index);
|
|
45
|
-
}
|
|
46
59
|
async stop(): Promise<void> {
|
|
47
60
|
await this.facade.stop();
|
|
48
61
|
await this.orchestrator.stop();
|
|
49
62
|
}
|
|
50
|
-
startNewBlock(
|
|
51
|
-
|
|
52
|
-
l1ToL2Messages: Fr[],
|
|
53
|
-
previousBlockHeader: BlockHeader,
|
|
54
|
-
): Promise<void> {
|
|
55
|
-
return this.orchestrator.startNewBlock(globalVariables, l1ToL2Messages, previousBlockHeader);
|
|
63
|
+
startNewBlock(blockNumber: BlockNumber, timestamp: UInt64, totalNumTxs: number): Promise<void> {
|
|
64
|
+
return this.orchestrator.startNewBlock(blockNumber, timestamp, totalNumTxs);
|
|
56
65
|
}
|
|
57
66
|
addTxs(txs: ProcessedTx[]): Promise<void> {
|
|
58
67
|
return this.orchestrator.addTxs(txs);
|