@aztec/prover-client 0.0.0-test.1 → 0.0.1-fake-ceab37513c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/get-proof-inputs.js +1 -1
- package/dest/block-factory/index.d.ts +2 -0
- package/dest/block-factory/index.d.ts.map +1 -0
- package/dest/block-factory/light.d.ts +36 -0
- package/dest/block-factory/light.d.ts.map +1 -0
- package/dest/{block_builder → block-factory}/light.js +35 -30
- package/dest/config.d.ts +6 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -1
- package/dest/mocks/fixtures.d.ts +3 -3
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -2
- package/dest/mocks/test_context.d.ts +18 -13
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +44 -38
- package/dest/orchestrator/block-building-helpers.d.ts +18 -11
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +80 -63
- package/dest/orchestrator/block-proving-state.d.ts +19 -10
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +63 -46
- package/dest/orchestrator/epoch-proving-state.d.ts +13 -6
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +40 -14
- package/dest/orchestrator/orchestrator.d.ts +7 -5
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +78 -52
- package/dest/orchestrator/orchestrator_metrics.d.ts +2 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +9 -0
- package/dest/orchestrator/tx-proving-state.d.ts +2 -2
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +9 -20
- package/dest/prover-client/prover-client.d.ts +3 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +5 -4
- package/dest/prover-client/server-epoch-prover.d.ts +6 -4
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +5 -3
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +31 -21
- package/dest/proving_broker/config.d.ts +9 -4
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +15 -4
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.d.ts.map +1 -1
- package/dest/proving_broker/factory.js +5 -1
- package/dest/proving_broker/proof_store/factory.js +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +1 -0
- package/dest/proving_broker/proving_agent.d.ts +3 -3
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +83 -47
- package/dest/proving_broker/proving_broker.d.ts +11 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +6 -5
- package/dest/proving_broker/proving_broker_database/memory.js +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +9 -8
- package/dest/proving_broker/proving_job_controller.d.ts +7 -8
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +53 -45
- package/dest/proving_broker/rpc.d.ts +3 -5
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +1 -4
- package/dest/test/mock_proof_store.d.ts +9 -0
- package/dest/test/mock_proof_store.d.ts.map +1 -0
- package/dest/test/mock_proof_store.js +10 -0
- package/dest/test/mock_prover.d.ts +7 -5
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +6 -3
- package/package.json +28 -27
- package/src/bin/get-proof-inputs.ts +1 -1
- package/src/block-factory/index.ts +1 -0
- package/src/{block_builder → block-factory}/light.ts +42 -29
- package/src/config.ts +24 -8
- package/src/mocks/fixtures.ts +5 -5
- package/src/mocks/test_context.ts +79 -59
- package/src/orchestrator/block-building-helpers.ts +96 -92
- package/src/orchestrator/block-proving-state.ts +78 -52
- package/src/orchestrator/epoch-proving-state.ts +51 -20
- package/src/orchestrator/orchestrator.ts +119 -60
- package/src/orchestrator/orchestrator_metrics.ts +20 -1
- package/src/orchestrator/tx-proving-state.ts +17 -24
- package/src/prover-client/prover-client.ts +16 -14
- package/src/prover-client/server-epoch-prover.ts +16 -7
- package/src/proving_broker/broker_prover_facade.ts +52 -36
- package/src/proving_broker/config.ts +17 -6
- package/src/proving_broker/factory.ts +2 -1
- package/src/proving_broker/proof_store/factory.ts +1 -1
- package/src/proving_broker/proof_store/gcs_proof_store.ts +5 -1
- package/src/proving_broker/proof_store/inline_proof_store.ts +1 -1
- package/src/proving_broker/proving_agent.ts +89 -47
- package/src/proving_broker/proving_broker.ts +16 -15
- package/src/proving_broker/proving_broker_database/memory.ts +1 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +9 -8
- package/src/proving_broker/proving_job_controller.ts +56 -65
- package/src/proving_broker/rpc.ts +1 -6
- package/src/test/mock_proof_store.ts +14 -0
- package/src/test/mock_prover.ts +27 -5
- package/dest/block_builder/index.d.ts +0 -6
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/light.d.ts +0 -33
- package/dest/block_builder/light.d.ts.map +0 -1
- package/src/block_builder/index.ts +0 -6
- /package/dest/{block_builder → block-factory}/index.js +0 -0
|
@@ -2,6 +2,7 @@ import { Metrics, ValueType } from '@aztec/telemetry-client';
|
|
|
2
2
|
export class ProvingOrchestratorMetrics {
|
|
3
3
|
tracer;
|
|
4
4
|
baseRollupInputsDuration;
|
|
5
|
+
avmFallbackCount;
|
|
5
6
|
constructor(client, name = 'ProvingOrchestrator'){
|
|
6
7
|
this.tracer = client.getTracer(name);
|
|
7
8
|
const meter = client.getMeter(name);
|
|
@@ -10,8 +11,16 @@ export class ProvingOrchestratorMetrics {
|
|
|
10
11
|
description: 'Duration to build base rollup inputs',
|
|
11
12
|
valueType: ValueType.INT
|
|
12
13
|
});
|
|
14
|
+
this.avmFallbackCount = meter.createUpDownCounter(Metrics.PROVING_ORCHESTRATOR_AVM_FALLBACK_COUNT, {
|
|
15
|
+
description: 'How many times the AVM fallback was used',
|
|
16
|
+
valueType: ValueType.INT
|
|
17
|
+
});
|
|
18
|
+
this.avmFallbackCount.add(0);
|
|
13
19
|
}
|
|
14
20
|
recordBaseRollupInputs(durationMs) {
|
|
15
21
|
this.baseRollupInputsDuration.record(Math.ceil(durationMs));
|
|
16
22
|
}
|
|
23
|
+
incAvmFallback() {
|
|
24
|
+
this.avmFallbackCount.add(1);
|
|
25
|
+
}
|
|
17
26
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, type TUBE_PROOF_LENGTH } from '@aztec/constants';
|
|
2
2
|
import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
|
|
3
3
|
import type { ProofAndVerificationKey } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
import { type BaseRollupHints, PrivateBaseRollupInputs, PublicBaseRollupInputs, TubeInputs } from '@aztec/stdlib/rollup';
|
|
@@ -29,6 +29,6 @@ export declare class TxProvingState {
|
|
|
29
29
|
inputs: PrivateBaseRollupInputs;
|
|
30
30
|
};
|
|
31
31
|
setTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>): void;
|
|
32
|
-
setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof
|
|
32
|
+
setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>): void;
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=tx-proving-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/tx-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tx-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/tx-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EAIpC,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAEL,KAAK,eAAe,EAEpB,uBAAuB,EAGvB,sBAAsB,EAEtB,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;GAIG;AACH,qBAAa,cAAc;;aAKP,WAAW,EAAE,WAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe;aAChB,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAN1E,OAAO,CAAC,IAAI,CAAC,CAAoD;IACjE,OAAO,CAAC,GAAG,CAAC,CAAuE;gBAGjE,WAAW,EAAE,WAAW,EACvB,eAAe,EAAE,eAAe,EACjC,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAG1E,IAAI,eAAe,YAElB;IAEM,KAAK;IAIL,aAAa;IAIb,YAAY,IAAI,gBAAgB;IAIhC,0BAA0B;;;;;;;IAc1B,YAAY,CAAC,cAAc,EAAE,uBAAuB,CAAC,OAAO,iBAAiB,CAAC;IAI9E,WAAW,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,oCAAoC,CAAC;CAwDvG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AVM_VK_INDEX,
|
|
2
|
-
import {
|
|
1
|
+
import { AVM_VK_INDEX, PRIVATE_TUBE_VK_INDEX, PUBLIC_TUBE_VK_INDEX } from '@aztec/constants';
|
|
2
|
+
import { getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
3
|
import { AvmProofData, PrivateBaseRollupHints, PrivateBaseRollupInputs, PrivateTubeData, PublicBaseRollupHints, PublicBaseRollupInputs, PublicTubeData, TubeInputs } from '@aztec/stdlib/rollup';
|
|
4
|
-
import {
|
|
4
|
+
import { VkData } from '@aztec/stdlib/vks';
|
|
5
5
|
/**
|
|
6
6
|
* Helper class to manage the proving cycle of a transaction
|
|
7
7
|
* This includes the public VMs and the public kernels
|
|
@@ -24,7 +24,7 @@ import { VkWitnessData } from '@aztec/stdlib/vks';
|
|
|
24
24
|
return !!this.tube && (!this.requireAvmProof || !!this.avm);
|
|
25
25
|
}
|
|
26
26
|
getTubeInputs() {
|
|
27
|
-
return new TubeInputs(this.processedTx.clientIvcProof);
|
|
27
|
+
return new TubeInputs(!!this.processedTx.data.forPublic, this.processedTx.clientIvcProof);
|
|
28
28
|
}
|
|
29
29
|
getAvmInputs() {
|
|
30
30
|
return this.processedTx.avmProvingRequest.inputs;
|
|
@@ -52,7 +52,7 @@ import { VkWitnessData } from '@aztec/stdlib/vks';
|
|
|
52
52
|
if (!this.tube) {
|
|
53
53
|
throw new Error('Tx not ready for proving base rollup.');
|
|
54
54
|
}
|
|
55
|
-
const vkData = this.#
|
|
55
|
+
const vkData = this.#getVkData(this.tube.verificationKey, PRIVATE_TUBE_VK_INDEX);
|
|
56
56
|
const tubeData = new PrivateTubeData(this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(), this.tube.proof, vkData);
|
|
57
57
|
if (!(this.baseRollupHints instanceof PrivateBaseRollupHints)) {
|
|
58
58
|
throw new Error('Mismatched base rollup hints, expected private base rollup hints');
|
|
@@ -69,26 +69,15 @@ import { VkWitnessData } from '@aztec/stdlib/vks';
|
|
|
69
69
|
if (!this.avm) {
|
|
70
70
|
throw new Error('Tx not ready for proving base rollup: avm proof undefined');
|
|
71
71
|
}
|
|
72
|
-
const tubeData = new PublicTubeData(this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(), this.tube.proof, this.#
|
|
73
|
-
const avmProofData = new AvmProofData(this.processedTx.avmProvingRequest.inputs.publicInputs, this.avm.proof, this.#
|
|
72
|
+
const tubeData = new PublicTubeData(this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(), this.tube.proof, this.#getVkData(this.tube.verificationKey, PUBLIC_TUBE_VK_INDEX));
|
|
73
|
+
const avmProofData = new AvmProofData(this.processedTx.avmProvingRequest.inputs.publicInputs, this.avm.proof, this.#getVkData(this.avm.verificationKey, AVM_VK_INDEX));
|
|
74
74
|
if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
|
|
75
75
|
throw new Error('Mismatched base rollup hints, expected public base rollup hints');
|
|
76
76
|
}
|
|
77
77
|
return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
|
|
78
78
|
}
|
|
79
|
-
#
|
|
80
|
-
let vkIndex = TUBE_VK_INDEX;
|
|
81
|
-
try {
|
|
82
|
-
vkIndex = getVKIndex(this.tube.verificationKey);
|
|
83
|
-
} catch (_ignored) {
|
|
84
|
-
// TODO(#7410) The VK for the tube won't be in the tree for now, so we manually set it to the tube vk index
|
|
85
|
-
}
|
|
86
|
-
const vkPath = getVKSiblingPath(vkIndex);
|
|
87
|
-
return new VkWitnessData(this.tube.verificationKey, vkIndex, vkPath);
|
|
88
|
-
}
|
|
89
|
-
#getAvmVkData() {
|
|
90
|
-
const vkIndex = AVM_VK_INDEX;
|
|
79
|
+
#getVkData(verificationKey, vkIndex) {
|
|
91
80
|
const vkPath = getVKSiblingPath(vkIndex);
|
|
92
|
-
return new
|
|
81
|
+
return new VkData(verificationKey, vkIndex, vkPath);
|
|
93
82
|
}
|
|
94
83
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
|
|
2
|
-
import {
|
|
3
|
-
import type
|
|
2
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { type ActualProverConfig, type EpochProver, type EpochProverManager, type ForkMerkleTreeOperations, type ProvingJobBroker, type ProvingJobConsumer, type ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
5
|
import type { ProverClientConfig } from '../config.js';
|
|
6
6
|
/** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
|
|
@@ -17,7 +17,7 @@ export declare class ProverClient implements EpochProverManager {
|
|
|
17
17
|
private failedProofStore;
|
|
18
18
|
private constructor();
|
|
19
19
|
createEpochProver(): EpochProver;
|
|
20
|
-
getProverId():
|
|
20
|
+
getProverId(): EthAddress;
|
|
21
21
|
updateProverConfig(config: Partial<ProverClientConfig>): Promise<void>;
|
|
22
22
|
/**
|
|
23
23
|
* Starts the prover instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-client.d.ts","sourceRoot":"","sources":["../../src/prover-client/prover-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAE3G,OAAO,
|
|
1
|
+
{"version":3,"file":"prover-client.d.ts","sourceRoot":"","sources":["../../src/prover-client/prover-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,mBAAmB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD,sHAAsH;AACtH,qBAAa,YAAa,YAAW,kBAAkB;IAQnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO;IAYA,iBAAiB,IAAI,WAAW;IAMhC,WAAW,IAAI,UAAU;IAI1B,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5E;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACU,IAAI;IASjB;;;;;OAKG;WACiB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,eAAsC;IAO5C,mBAAmB,IAAI,kBAAkB;YAQlC,oBAAoB;YA2BpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
2
|
import { times } from '@aztec/foundation/collection';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
4
|
import { NativeACVMSimulator } from '@aztec/simulator/server';
|
|
5
|
+
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
6
6
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
7
7
|
import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
8
8
|
import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
@@ -38,7 +38,7 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
38
38
|
return new ServerEpochProver(facade, orchestrator);
|
|
39
39
|
}
|
|
40
40
|
getProverId() {
|
|
41
|
-
return this.config.proverId
|
|
41
|
+
return this.config.proverId;
|
|
42
42
|
}
|
|
43
43
|
async updateProverConfig(config) {
|
|
44
44
|
const newConfig = {
|
|
@@ -68,6 +68,7 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
68
68
|
}
|
|
69
69
|
this.running = false;
|
|
70
70
|
await this.stopAgents();
|
|
71
|
+
await tryStop(this.orchestratorClient);
|
|
71
72
|
}
|
|
72
73
|
/**
|
|
73
74
|
* Creates a new prover client and starts it
|
|
@@ -105,6 +106,6 @@ export function buildServerCircuitProver(config, telemetry) {
|
|
|
105
106
|
if (config.realProofs) {
|
|
106
107
|
return BBNativeRollupProver.new(config, telemetry);
|
|
107
108
|
}
|
|
108
|
-
const
|
|
109
|
-
return Promise.resolve(new TestCircuitProver(
|
|
109
|
+
const simulator = config.acvmBinaryPath ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath) : undefined;
|
|
110
|
+
return Promise.resolve(new TestCircuitProver(simulator, config, telemetry));
|
|
110
111
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { BatchedBlob, FinalBlobBatchingChallenges } from '@aztec/blob-lib';
|
|
1
2
|
import type { Fr } from '@aztec/foundation/fields';
|
|
2
|
-
import type { L2Block } from '@aztec/stdlib/block';
|
|
3
|
+
import type { EthAddress, L2Block } from '@aztec/stdlib/block';
|
|
3
4
|
import type { EpochProver } from '@aztec/stdlib/interfaces/server';
|
|
4
5
|
import type { Proof } from '@aztec/stdlib/proofs';
|
|
5
6
|
import type { RootRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
@@ -11,15 +12,16 @@ export declare class ServerEpochProver implements EpochProver {
|
|
|
11
12
|
private facade;
|
|
12
13
|
private orchestrator;
|
|
13
14
|
constructor(facade: BrokerCircuitProverFacade, orchestrator: ProvingOrchestrator);
|
|
14
|
-
startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void;
|
|
15
|
+
startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges): void;
|
|
15
16
|
startTubeCircuits(txs: Tx[]): Promise<void>;
|
|
16
17
|
setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block>;
|
|
17
|
-
|
|
18
|
+
finalizeEpoch(): Promise<{
|
|
18
19
|
publicInputs: RootRollupPublicInputs;
|
|
19
20
|
proof: Proof;
|
|
21
|
+
batchedBlobInputs: BatchedBlob;
|
|
20
22
|
}>;
|
|
21
23
|
cancel(): void;
|
|
22
|
-
getProverId():
|
|
24
|
+
getProverId(): EthAddress;
|
|
23
25
|
getBlock(index: number): L2Block;
|
|
24
26
|
stop(): Promise<void>;
|
|
25
27
|
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], previousBlockHeader: BlockHeader): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-epoch-prover.d.ts","sourceRoot":"","sources":["../../src/prover-client/server-epoch-prover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-epoch-prover.d.ts","sourceRoot":"","sources":["../../src/prover-client/server-epoch-prover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,kEAAkE;AAClE,qBAAa,iBAAkB,YAAW,WAAW;IAEjD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;gBADZ,MAAM,EAAE,yBAAyB,EACjC,YAAY,EAAE,mBAAmB;IAG3C,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,2BAA2B,EAAE,2BAA2B,GACvD,IAAI;IAIP,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAG3C,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAG3F,aAAa,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,sBAAsB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,iBAAiB,EAAE,WAAW,CAAA;KAAE,CAAC;IAGhH,MAAM,IAAI,IAAI;IAGd,WAAW,IAAI,UAAU;IAGzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAG1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,aAAa,CACX,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,mBAAmB,EAAE,WAAW,GAC/B,OAAO,CAAC,IAAI,CAAC;IAGhB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1C"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
this.facade = facade;
|
|
6
6
|
this.orchestrator = orchestrator;
|
|
7
7
|
}
|
|
8
|
-
startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks) {
|
|
9
|
-
this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks);
|
|
8
|
+
startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks, finalBlobBatchingChallenges) {
|
|
9
|
+
this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks, finalBlobBatchingChallenges);
|
|
10
10
|
this.facade.start();
|
|
11
11
|
}
|
|
12
12
|
startTubeCircuits(txs) {
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
setBlockCompleted(blockNumber, expectedBlockHeader) {
|
|
16
16
|
return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
return this.orchestrator.
|
|
18
|
+
finalizeEpoch() {
|
|
19
|
+
return this.orchestrator.finalizeEpoch();
|
|
20
20
|
}
|
|
21
21
|
cancel() {
|
|
22
22
|
this.orchestrator.cancel();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, TUBE_PROOF_LENGTH } from '@aztec/constants';
|
|
2
2
|
import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
|
|
3
3
|
import { type ProofAndVerificationKey, type ProvingJobProducer, type PublicInputsAndRecursiveProof, type ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
import type { BaseParityInputs, ParityPublicInputs, RootParityInputs } from '@aztec/stdlib/parity';
|
|
5
|
-
import type { BaseOrMergeRollupPublicInputs, BlockMergeRollupInputs, BlockRootOrBlockMergePublicInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, PrivateBaseRollupInputs, PublicBaseRollupInputs, RootRollupInputs, RootRollupPublicInputs, SingleTxBlockRootRollupInputs, TubeInputs } from '@aztec/stdlib/rollup';
|
|
5
|
+
import type { BaseOrMergeRollupPublicInputs, BlockMergeRollupInputs, BlockRootOrBlockMergePublicInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, PaddingBlockRootRollupInputs, PrivateBaseRollupInputs, PublicBaseRollupInputs, RootRollupInputs, RootRollupPublicInputs, SingleTxBlockRootRollupInputs, TubeInputs } from '@aztec/stdlib/rollup';
|
|
6
6
|
import { type ProofStore } from './proof_store/index.js';
|
|
7
7
|
export declare class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
8
8
|
private broker;
|
|
@@ -29,12 +29,14 @@ export declare class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
|
29
29
|
private retrieveJobsThatShouldBeReady;
|
|
30
30
|
private backupFailedProofInputs;
|
|
31
31
|
private monitorForCompletedJobs;
|
|
32
|
-
getAvmProof(inputs: AvmCircuitInputs,
|
|
32
|
+
getAvmProof(inputs: AvmCircuitInputs, skipPublicInputsValidation?: boolean, // TODO(#14234)[Unconditional PIs validation]: remove this argument
|
|
33
|
+
signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>>;
|
|
33
34
|
getBaseParityProof(inputs: BaseParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
|
|
34
35
|
getBlockMergeRollupProof(input: BlockMergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
35
36
|
getBlockRootRollupProof(input: BlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
36
37
|
getSingleTxBlockRootRollupProof(input: SingleTxBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
37
38
|
getEmptyBlockRootRollupProof(input: EmptyBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
39
|
+
getPaddingBlockRootRollupProof(input: PaddingBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
38
40
|
getMergeRollupProof(input: MergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
39
41
|
getPrivateBaseRollupProof(baseRollupInput: PrivateBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
40
42
|
getPublicBaseRollupProof(inputs: PublicBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker_prover_facade.d.ts","sourceRoot":"","sources":["../../src/proving_broker/broker_prover_facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"broker_prover_facade.d.ts","sourceRoot":"","sources":["../../src/proving_broker/broker_prover_facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { sha256 } from '@aztec/foundation/crypto';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
4
|
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
4
5
|
import { truncate } from '@aztec/foundation/string';
|
|
@@ -49,7 +50,13 @@ export class BrokerCircuitProverFacade {
|
|
|
49
50
|
}
|
|
50
51
|
// Create a promise for this job id, regardless of whether it was enqueued at the broker
|
|
51
52
|
// The running promise will monitor for the job to be completed and resolve it either way
|
|
53
|
+
// We install an error handler to prevent unhandled rejections in the process before the
|
|
54
|
+
// job promise is awaited by the caller (see #13166)
|
|
52
55
|
const promise = promiseWithResolvers();
|
|
56
|
+
promise.promise.catch((err)=>this.log.error(`Job errored with '${err.message ?? err}' id=${id} type=${ProvingRequestType[type]}`, {
|
|
57
|
+
provingJobId: id,
|
|
58
|
+
provingJobType: ProvingRequestType[type]
|
|
59
|
+
}));
|
|
53
60
|
const abortFn = ()=>{
|
|
54
61
|
signal?.removeEventListener('abort', abortFn);
|
|
55
62
|
void this.broker.cancelProvingJob(id).catch((err)=>this.log.warn(`Error cancelling job id=${id}`, err));
|
|
@@ -75,23 +82,28 @@ export class BrokerCircuitProverFacade {
|
|
|
75
82
|
try {
|
|
76
83
|
const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
|
|
77
84
|
job.inputsUri = inputsUri;
|
|
85
|
+
// Send the job to the broker
|
|
78
86
|
const jobStatus = await this.broker.enqueueProvingJob({
|
|
79
87
|
id,
|
|
80
88
|
type,
|
|
81
89
|
inputsUri,
|
|
82
90
|
epochNumber
|
|
83
91
|
});
|
|
92
|
+
const jobLogText = `id=${id} type=${ProvingRequestType[type]} epochNumber=${epochNumber}`;
|
|
93
|
+
const jobLogData = {
|
|
94
|
+
provingJobId: id,
|
|
95
|
+
provingJobType: ProvingRequestType[type],
|
|
96
|
+
epochNumber,
|
|
97
|
+
inputsUri: truncate(inputsUri),
|
|
98
|
+
status: jobStatus.status,
|
|
99
|
+
numOutstandingJobs: this.jobs.size
|
|
100
|
+
};
|
|
84
101
|
// If we are here then the job was successfully accepted by the broker
|
|
85
102
|
// the returned status is for before any action was performed
|
|
86
103
|
if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
|
|
87
104
|
// Job was already completed by the broker
|
|
88
105
|
// No need to notify the broker on aborted job
|
|
89
|
-
this.log.verbose(`Job already completed when sent to broker
|
|
90
|
-
provingJobId: id,
|
|
91
|
-
provingJobType: ProvingRequestType[type],
|
|
92
|
-
epochNumber,
|
|
93
|
-
inputsUri: truncate(inputsUri)
|
|
94
|
-
});
|
|
106
|
+
this.log.verbose(`Job already completed when sent to broker ${jobLogText}`, jobLogData);
|
|
95
107
|
// Job was not enqueued. It must be completed already, add to our set of already completed jobs
|
|
96
108
|
this.jobsToRetrieve.add(id);
|
|
97
109
|
} else {
|
|
@@ -99,21 +111,10 @@ export class BrokerCircuitProverFacade {
|
|
|
99
111
|
signal?.addEventListener('abort', job.abortFn);
|
|
100
112
|
// Job added for the first time
|
|
101
113
|
if (jobStatus.status === 'not-found') {
|
|
102
|
-
this.log.verbose(`Job enqueued with broker
|
|
103
|
-
provingJobId: id,
|
|
104
|
-
provingJobType: ProvingRequestType[type],
|
|
105
|
-
epochNumber,
|
|
106
|
-
inputsUri: truncate(inputsUri),
|
|
107
|
-
numOutstandingJobs: this.jobs.size
|
|
108
|
-
});
|
|
114
|
+
this.log.verbose(`Job enqueued with broker ${jobLogText}`, jobLogData);
|
|
109
115
|
} else {
|
|
110
116
|
// Job was previously sent to the broker but is not completed
|
|
111
|
-
this.log.verbose(`Job already in queue or in progress when sent to broker
|
|
112
|
-
provingJobId: id,
|
|
113
|
-
provingJobType: ProvingRequestType[type],
|
|
114
|
-
epochNumber,
|
|
115
|
-
inputsUri: truncate(inputsUri)
|
|
116
|
-
});
|
|
117
|
+
this.log.verbose(`Job already in queue or in progress when sent to broker ${jobLogText}`, jobLogData);
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
} catch (err) {
|
|
@@ -301,8 +302,14 @@ export class BrokerCircuitProverFacade {
|
|
|
301
302
|
// We have a list of jobs that we have been told are ready, so we go ahead and ask for their results
|
|
302
303
|
await this.retrieveJobsThatShouldBeReady();
|
|
303
304
|
}
|
|
304
|
-
getAvmProof(inputs, signal, epochNumber) {
|
|
305
|
-
|
|
305
|
+
getAvmProof(inputs, skipPublicInputsValidation, signal, epochNumber) {
|
|
306
|
+
this.log.info(`getAvmProof() called with skipPublicInputsValidation: ${skipPublicInputsValidation}`);
|
|
307
|
+
return this.enqueueJob(this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber), ProvingRequestType.PUBLIC_VM, inputs, epochNumber, signal).then((result)=>{
|
|
308
|
+
// TODO(#14234)[Unconditional PIs validation]: Remove ".then()".
|
|
309
|
+
// Override the default value of skipPublicInputsValidation potentially set in BBNativeRollupProver.getAvmProof().
|
|
310
|
+
result.proof.proof[0] = skipPublicInputsValidation ? new Fr(1) : new Fr(0);
|
|
311
|
+
return result;
|
|
312
|
+
});
|
|
306
313
|
}
|
|
307
314
|
getBaseParityProof(inputs, signal, epochNumber) {
|
|
308
315
|
return this.enqueueJob(this.generateId(ProvingRequestType.BASE_PARITY, inputs, epochNumber), ProvingRequestType.BASE_PARITY, inputs, epochNumber, signal);
|
|
@@ -319,6 +326,9 @@ export class BrokerCircuitProverFacade {
|
|
|
319
326
|
getEmptyBlockRootRollupProof(input, signal, epochNumber) {
|
|
320
327
|
return this.enqueueJob(this.generateId(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
|
|
321
328
|
}
|
|
329
|
+
getPaddingBlockRootRollupProof(input, signal, epochNumber) {
|
|
330
|
+
return this.enqueueJob(this.generateId(ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP, input, epochNumber), ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP, input, epochNumber, signal);
|
|
331
|
+
}
|
|
322
332
|
getMergeRollupProof(input, signal, epochNumber) {
|
|
323
333
|
return this.enqueueJob(this.generateId(ProvingRequestType.MERGE_ROLLUP, input, epochNumber), ProvingRequestType.MERGE_ROLLUP, input, epochNumber, signal);
|
|
324
334
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type L1ReaderConfig } from '@aztec/ethereum';
|
|
2
2
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
3
3
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
4
|
+
import { type ChainConfig } from '@aztec/stdlib/config';
|
|
4
5
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
5
6
|
import { z } from 'zod';
|
|
6
7
|
export declare const ProverBrokerConfig: z.ZodObject<{
|
|
@@ -13,7 +14,9 @@ export declare const ProverBrokerConfig: z.ZodObject<{
|
|
|
13
14
|
/** If starting a prover broker locally, the directory to store broker data */
|
|
14
15
|
dataDirectory: z.ZodOptional<z.ZodString>;
|
|
15
16
|
/** The size of the data store map */
|
|
16
|
-
|
|
17
|
+
dataStoreMapSizeKb: z.ZodNumber;
|
|
18
|
+
/** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */
|
|
19
|
+
proverBrokerStoreMapSizeKb: z.ZodOptional<z.ZodNumber>;
|
|
17
20
|
/** The prover broker may batch jobs together before writing to the database */
|
|
18
21
|
proverBrokerBatchSize: z.ZodNumber;
|
|
19
22
|
/** How often the job batches get flushed */
|
|
@@ -24,22 +27,24 @@ export declare const ProverBrokerConfig: z.ZodObject<{
|
|
|
24
27
|
proverBrokerJobMaxRetries: number;
|
|
25
28
|
proverBrokerJobTimeoutMs: number;
|
|
26
29
|
proverBrokerPollIntervalMs: number;
|
|
27
|
-
|
|
30
|
+
dataStoreMapSizeKb: number;
|
|
28
31
|
proverBrokerBatchSize: number;
|
|
29
32
|
proverBrokerBatchIntervalMs: number;
|
|
30
33
|
proverBrokerMaxEpochsToKeepResultsFor: number;
|
|
31
34
|
dataDirectory?: string | undefined;
|
|
35
|
+
proverBrokerStoreMapSizeKb?: number | undefined;
|
|
32
36
|
}, {
|
|
33
37
|
proverBrokerJobMaxRetries: number;
|
|
34
38
|
proverBrokerJobTimeoutMs: number;
|
|
35
39
|
proverBrokerPollIntervalMs: number;
|
|
36
|
-
|
|
40
|
+
dataStoreMapSizeKb: number;
|
|
37
41
|
proverBrokerBatchSize: number;
|
|
38
42
|
proverBrokerBatchIntervalMs: number;
|
|
39
43
|
proverBrokerMaxEpochsToKeepResultsFor: number;
|
|
40
44
|
dataDirectory?: string | undefined;
|
|
45
|
+
proverBrokerStoreMapSizeKb?: number | undefined;
|
|
41
46
|
}>;
|
|
42
|
-
export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, '
|
|
47
|
+
export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> & L1ReaderConfig & Pick<ChainConfig, 'rollupVersion'>;
|
|
43
48
|
export declare const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>;
|
|
44
49
|
export declare const defaultProverBrokerConfig: ProverBrokerConfig;
|
|
45
50
|
export declare const ProverAgentConfig: z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,qFAAqF;;IAErF,uHAAuH;;IAEvH,6FAA6F;;IAE7F,8EAA8E;;IAE9E,qCAAqC;;IAErC,6FAA6F;;IAE7F,+EAA+E;;IAE/E,4CAA4C;;IAE5C,uDAAuD;;;;;;;;;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,GAC7D,cAAc,GACd,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAErC,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAuC7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;IAC5B,2CAA2C;;IAE3C,wDAAwD;;IAExD,gDAAgD;;IAEhD,+CAA+C;;IAE/C,uCAAuC;;IAEvC,gDAAgD;;IAEhD,2DAA2D;;IAE3D,8EAA8E;;;;;;;;;;;;;;;;;;;;EAE9E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CA4C3E,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { l1ReaderConfigMappings } from '@aztec/ethereum';
|
|
2
2
|
import { booleanConfigHelper, getDefaultConfig, numberConfigHelper } from '@aztec/foundation/config';
|
|
3
|
+
import { pickConfigMappings } from '@aztec/foundation/config';
|
|
3
4
|
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
5
|
+
import { chainConfigMappings } from '@aztec/stdlib/config';
|
|
4
6
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
5
7
|
import { z } from 'zod';
|
|
6
8
|
export const ProverBrokerConfig = z.object({
|
|
@@ -8,7 +10,8 @@ export const ProverBrokerConfig = z.object({
|
|
|
8
10
|
/** If starting a prover broker locally, the time after which a job times out and gets assigned to a different agent */ proverBrokerJobTimeoutMs: z.number().int().nonnegative(),
|
|
9
11
|
/** If starting a prover broker locally, the interval the broker checks for timed out jobs */ proverBrokerPollIntervalMs: z.number().int().nonnegative(),
|
|
10
12
|
/** If starting a prover broker locally, the directory to store broker data */ dataDirectory: z.string().optional(),
|
|
11
|
-
/** The size of the data store map */
|
|
13
|
+
/** The size of the data store map */ dataStoreMapSizeKb: z.number().int().nonnegative(),
|
|
14
|
+
/** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */ proverBrokerStoreMapSizeKb: z.number().int().nonnegative().optional(),
|
|
12
15
|
/** The prover broker may batch jobs together before writing to the database */ proverBrokerBatchSize: z.number().int().nonnegative(),
|
|
13
16
|
/** How often the job batches get flushed */ proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
|
|
14
17
|
/** The maximum number of epochs to keep results for */ proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative()
|
|
@@ -44,8 +47,16 @@ export const proverBrokerConfigMappings = {
|
|
|
44
47
|
description: 'The maximum number of epochs to keep results for',
|
|
45
48
|
...numberConfigHelper(1)
|
|
46
49
|
},
|
|
50
|
+
proverBrokerStoreMapSizeKb: {
|
|
51
|
+
env: 'PROVER_BROKER_STORE_MAP_SIZE_KB',
|
|
52
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
53
|
+
description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set."
|
|
54
|
+
},
|
|
55
|
+
...dataConfigMappings,
|
|
47
56
|
...l1ReaderConfigMappings,
|
|
48
|
-
...
|
|
57
|
+
...pickConfigMappings(chainConfigMappings, [
|
|
58
|
+
'rollupVersion'
|
|
59
|
+
])
|
|
49
60
|
};
|
|
50
61
|
export const defaultProverBrokerConfig = getDefaultConfig(proverBrokerConfigMappings);
|
|
51
62
|
export const ProverAgentConfig = z.object({
|
|
@@ -70,7 +81,7 @@ export const proverAgentConfigMappings = {
|
|
|
70
81
|
proverAgentPollIntervalMs: {
|
|
71
82
|
env: 'PROVER_AGENT_POLL_INTERVAL_MS',
|
|
72
83
|
description: 'The interval agents poll for jobs at',
|
|
73
|
-
...numberConfigHelper(
|
|
84
|
+
...numberConfigHelper(1000)
|
|
74
85
|
},
|
|
75
86
|
proverAgentProofTypes: {
|
|
76
87
|
env: 'PROVER_AGENT_PROOF_TYPES',
|
|
@@ -84,7 +95,7 @@ export const proverAgentConfigMappings = {
|
|
|
84
95
|
realProofs: {
|
|
85
96
|
env: 'PROVER_REAL_PROOFS',
|
|
86
97
|
description: 'Whether to construct real proofs',
|
|
87
|
-
...booleanConfigHelper(
|
|
98
|
+
...booleanConfigHelper(true)
|
|
88
99
|
},
|
|
89
100
|
proverTestDelayType: {
|
|
90
101
|
env: 'PROVER_TEST_DELAY_TYPE',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
2
2
|
import type { ProverBrokerConfig } from './config.js';
|
|
3
3
|
import { ProvingBroker } from './proving_broker.js';
|
|
4
|
-
export declare function createAndStartProvingBroker(
|
|
4
|
+
export declare function createAndStartProvingBroker(_config: ProverBrokerConfig, client: TelemetryClient): Promise<ProvingBroker>;
|
|
5
5
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/proving_broker/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,wBAAsB,2BAA2B,CAC/C,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/proving_broker/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAQxB"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ProvingBroker } from './proving_broker.js';
|
|
2
2
|
import { InMemoryBrokerDatabase } from './proving_broker_database/memory.js';
|
|
3
3
|
import { KVBrokerDatabase } from './proving_broker_database/persisted.js';
|
|
4
|
-
export async function createAndStartProvingBroker(
|
|
4
|
+
export async function createAndStartProvingBroker(_config, client) {
|
|
5
|
+
const config = {
|
|
6
|
+
..._config,
|
|
7
|
+
dataStoreMapSizeKb: _config.proverBrokerStoreMapSizeKb ?? _config.dataStoreMapSizeKb
|
|
8
|
+
};
|
|
5
9
|
const database = config.dataDirectory ? await KVBrokerDatabase.new(config, client) : new InMemoryBrokerDatabase();
|
|
6
10
|
const broker = new ProvingBroker(database, config, client);
|
|
7
11
|
await broker.start();
|
|
@@ -15,7 +15,7 @@ export function createProofStore(config, logger = createLogger('prover-client:pr
|
|
|
15
15
|
path
|
|
16
16
|
});
|
|
17
17
|
return new GoogleCloudStorageProofStore(bucket, path);
|
|
18
|
-
} catch
|
|
18
|
+
} catch {
|
|
19
19
|
throw new Error(`Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
|
|
20
20
|
}
|
|
21
21
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcs_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/gcs_proof_store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"gcs_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/gcs_proof_store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,qBAAa,4BAA6B,YAAW,UAAU;IAI3D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM;IAKlB,cAAc,CAAC,CAAC,SAAS,kBAAkB,EACtD,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC;IAOpB,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAC1C,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,QAAQ,CAAC;IAIP,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBpE,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAG1D"}
|
|
@@ -3,6 +3,7 @@ import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
|
3
3
|
import { Storage } from '@google-cloud/storage';
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
const INPUTS_PATH = 'inputs';
|
|
6
|
+
// REFACTOR(#13067): Use the stdlib/file-store instead of referencing google-cloud-storage directly.
|
|
6
7
|
export class GoogleCloudStorageProofStore {
|
|
7
8
|
bucketName;
|
|
8
9
|
path;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ProverAgentStatus, ProvingJobConsumer, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
2
2
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
3
3
|
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
4
4
|
import type { ProofStore } from './proof_store/index.js';
|
|
@@ -20,7 +20,6 @@ export declare class ProvingAgent implements Traceable {
|
|
|
20
20
|
private currentJobController?;
|
|
21
21
|
private runningPromise;
|
|
22
22
|
private instrumentation;
|
|
23
|
-
private idleTimer;
|
|
24
23
|
readonly tracer: Tracer;
|
|
25
24
|
constructor(
|
|
26
25
|
/** The source of proving jobs */
|
|
@@ -39,8 +38,9 @@ export declare class ProvingAgent implements Traceable {
|
|
|
39
38
|
isRunning(): boolean;
|
|
40
39
|
start(): void;
|
|
41
40
|
stop(): Promise<void>;
|
|
41
|
+
getStatus(): ProverAgentStatus;
|
|
42
42
|
private work;
|
|
43
43
|
private startJob;
|
|
44
|
-
|
|
44
|
+
private reportResult;
|
|
45
45
|
}
|
|
46
46
|
//# sourceMappingURL=proving_agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proving_agent.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,
|
|
1
|
+
{"version":3,"file":"proving_agent.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAIlB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IAQ1C,iCAAiC;IACjC,OAAO,CAAC,MAAM;IACd,gDAAgD;IAChD,OAAO,CAAC,UAAU;IAClB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IACrB,oDAAoD;IACpD,OAAO,CAAC,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,GAAG;IAnBb,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAA8B;IAErD,SAAgB,MAAM,EAAE,MAAM,CAAC;;IAG7B,iCAAiC;IACzB,MAAM,EAAE,kBAAkB;IAClC,gDAAgD;IACxC,UAAU,EAAE,UAAU;IAC9B,iDAAiD;IACzC,aAAa,EAAE,mBAAmB;IAC1C,oDAAoD;IAC5C,cAAc,GAAE,KAAK,CAAC,kBAAkB,CAAM;IACtD,oCAAoC;IAC5B,cAAc,SAAO;IAC7B,uDAAuD;IACvD,MAAM,GAAE,eAAsC,EACtC,GAAG,yCAA8C;IAOpD,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,IAAI;IAI1D,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAIP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,IAAI,iBAAiB;YAcvB,IAAI;YAqDJ,QAAQ;YAuDR,YAAY;CA0B3B"}
|