@aztec/prover-client 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.75.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/bin/get-proof-inputs.d.ts +2 -0
- package/dest/bin/get-proof-inputs.d.ts.map +1 -0
- package/dest/bin/get-proof-inputs.js +16 -18
- package/dest/block_builder/index.d.ts +6 -0
- package/dest/block_builder/index.d.ts.map +1 -0
- package/dest/block_builder/index.js +1 -0
- package/dest/block_builder/light.d.ts +31 -0
- package/dest/block_builder/light.d.ts.map +1 -0
- package/dest/block_builder/light.js +13 -23
- package/dest/config.d.ts +17 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +11 -9
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -0
- package/dest/mocks/fixtures.d.ts +19 -0
- package/dest/mocks/fixtures.d.ts.map +1 -0
- package/dest/mocks/fixtures.js +26 -28
- package/dest/mocks/test_context.d.ts +49 -0
- package/dest/mocks/test_context.d.ts.map +1 -0
- package/dest/mocks/test_context.js +31 -55
- package/dest/orchestrator/block-building-helpers.d.ts +50 -0
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
- package/dest/orchestrator/block-building-helpers.js +90 -90
- package/dest/orchestrator/block-proving-state.d.ts +71 -0
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/block-proving-state.js +70 -95
- package/dest/orchestrator/epoch-proving-state.d.ts +56 -0
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-state.js +40 -53
- package/dest/orchestrator/index.d.ts +2 -0
- package/dest/orchestrator/index.d.ts.map +1 -0
- package/dest/orchestrator/index.js +1 -0
- package/dest/orchestrator/orchestrator.d.ts +108 -0
- package/dest/orchestrator/orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator.js +653 -649
- package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator_metrics.js +3 -4
- package/dest/orchestrator/tx-proving-state.d.ts +31 -0
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/tx-proving-state.js +51 -52
- 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 +1 -0
- package/dest/prover-agent/memory-proving-queue.d.ts +82 -0
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -0
- package/dest/prover-agent/memory-proving-queue.js +248 -237
- package/dest/prover-agent/prover-agent.d.ts +43 -0
- package/dest/prover-agent/prover-agent.d.ts.map +1 -0
- package/dest/prover-agent/prover-agent.js +187 -184
- 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 +1 -0
- package/dest/prover-agent/queue_metrics.d.ts +10 -0
- package/dest/prover-agent/queue_metrics.d.ts.map +1 -0
- package/dest/prover-agent/queue_metrics.js +5 -6
- package/dest/prover-agent/rpc.d.ts +11 -0
- package/dest/prover-agent/rpc.d.ts.map +1 -0
- package/dest/prover-agent/rpc.js +4 -6
- package/dest/prover-client/factory.d.ts +6 -0
- package/dest/prover-client/factory.d.ts.map +1 -0
- package/dest/prover-client/factory.js +1 -0
- package/dest/prover-client/index.d.ts +3 -0
- package/dest/prover-client/index.d.ts.map +1 -0
- package/dest/prover-client/index.js +1 -0
- package/dest/prover-client/prover-client.d.ts +42 -0
- package/dest/prover-client/prover-client.d.ts.map +1 -0
- package/dest/prover-client/prover-client.js +25 -30
- 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 +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +39 -0
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
- package/dest/proving_broker/broker_prover_facade.js +59 -70
- 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 +37 -22
- package/dest/proving_broker/factory.d.ts +5 -0
- package/dest/proving_broker/factory.d.ts.map +1 -0
- package/dest/proving_broker/factory.js +2 -1
- 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 +1 -0
- package/dest/proving_broker/index.d.ts +10 -0
- package/dest/proving_broker/index.d.ts.map +1 -0
- package/dest/proving_broker/index.js +1 -0
- package/dest/proving_broker/proof_store/factory.d.ts +6 -0
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/factory.js +12 -9
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.js +7 -11
- package/dest/proving_broker/proof_store/index.d.ts +4 -0
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.js +7 -11
- package/dest/proving_broker/proof_store/proof_store.d.ts +35 -0
- package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/proof_store.js +2 -3
- package/dest/proving_broker/proving_agent.d.ts +44 -0
- package/dest/proving_broker/proving_agent.d.ts.map +1 -0
- package/dest/proving_broker/proving_agent.js +110 -121
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
- package/dest/proving_broker/proving_agent_instrumentation.js +3 -3
- package/dest/proving_broker/proving_broker.d.ts +75 -0
- package/dest/proving_broker/proving_broker.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker.js +451 -491
- package/dest/proving_broker/proving_broker_database/memory.d.ts +16 -0
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/memory.js +13 -19
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +21 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/persisted.js +21 -41
- package/dest/proving_broker/proving_broker_database.d.ts +39 -0
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database.js +2 -3
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +25 -0
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_instrumentation.js +21 -28
- package/dest/proving_broker/proving_job_controller.d.ts +31 -0
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
- package/dest/proving_broker/proving_job_controller.js +62 -81
- package/dest/proving_broker/rpc.d.ts +11 -0
- package/dest/proving_broker/rpc.d.ts.map +1 -0
- package/dest/proving_broker/rpc.js +15 -23
- package/dest/test/mock_prover.d.ts +33 -0
- package/dest/test/mock_prover.d.ts.map +1 -0
- package/dest/test/mock_prover.js +9 -11
- package/package.json +11 -12
- package/src/index.ts +1 -1
- package/src/orchestrator/block-building-helpers.ts +1 -1
- package/src/proving_broker/proving_agent.ts +11 -30
- package/src/proving_broker/proving_broker.ts +27 -53
- package/src/proving_broker/rpc.ts +2 -8
|
@@ -9,18 +9,9 @@ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facad
|
|
|
9
9
|
import { InlineProofStore, createProofStore } from '../proving_broker/proof_store/index.js';
|
|
10
10
|
import { ProvingAgent } from '../proving_broker/proving_agent.js';
|
|
11
11
|
import { ServerEpochProver } from './server-epoch-prover.js';
|
|
12
|
-
/** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
|
|
13
|
-
|
|
14
|
-
worldState
|
|
15
|
-
orchestratorClient;
|
|
16
|
-
agentClient;
|
|
17
|
-
telemetry;
|
|
18
|
-
log;
|
|
19
|
-
running;
|
|
20
|
-
agents;
|
|
21
|
-
proofStore;
|
|
22
|
-
failedProofStore;
|
|
23
|
-
constructor(config, worldState, orchestratorClient, agentClient, telemetry = getTelemetryClient(), log = createLogger('prover-client:tx-prover')){
|
|
12
|
+
/** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
|
|
13
|
+
export class ProverClient {
|
|
14
|
+
constructor(config, worldState, orchestratorClient, agentClient, telemetry = getTelemetryClient(), log = createLogger('prover-client:tx-prover')) {
|
|
24
15
|
this.config = config;
|
|
25
16
|
this.worldState = worldState;
|
|
26
17
|
this.orchestratorClient = orchestratorClient;
|
|
@@ -41,19 +32,18 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
41
32
|
return this.config.proverId ?? Fr.ZERO;
|
|
42
33
|
}
|
|
43
34
|
async updateProverConfig(config) {
|
|
44
|
-
const newConfig = {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
if (newConfig.realProofs !== this.config.realProofs || newConfig.proverAgentCount !== this.config.proverAgentCount) {
|
|
35
|
+
const newConfig = { ...this.config, ...config };
|
|
36
|
+
if (newConfig.realProofs !== this.config.realProofs ||
|
|
37
|
+
newConfig.proverAgentCount !== this.config.proverAgentCount) {
|
|
49
38
|
await this.stopAgents();
|
|
50
39
|
await this.createAndStartAgents();
|
|
51
40
|
}
|
|
52
41
|
this.config = newConfig;
|
|
53
42
|
}
|
|
54
43
|
/**
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
* Starts the prover instance
|
|
45
|
+
*/
|
|
46
|
+
async start() {
|
|
57
47
|
if (this.running) {
|
|
58
48
|
return Promise.resolve();
|
|
59
49
|
}
|
|
@@ -61,8 +51,9 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
61
51
|
await this.createAndStartAgents();
|
|
62
52
|
}
|
|
63
53
|
/**
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
* Stops the prover instance
|
|
55
|
+
*/
|
|
56
|
+
async stop() {
|
|
66
57
|
if (!this.running) {
|
|
67
58
|
return;
|
|
68
59
|
}
|
|
@@ -70,11 +61,12 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
70
61
|
await this.stopAgents();
|
|
71
62
|
}
|
|
72
63
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
64
|
+
* Creates a new prover client and starts it
|
|
65
|
+
* @param config - The prover configuration.
|
|
66
|
+
* @param worldState - An instance of the world state
|
|
67
|
+
* @returns An instance of the prover, constructed and started.
|
|
68
|
+
*/
|
|
69
|
+
static async new(config, worldState, broker, telemetry = getTelemetryClient()) {
|
|
78
70
|
const prover = new ProverClient(config, worldState, broker, broker, telemetry);
|
|
79
71
|
await prover.start();
|
|
80
72
|
return prover;
|
|
@@ -94,17 +86,20 @@ import { ServerEpochProver } from './server-epoch-prover.js';
|
|
|
94
86
|
}
|
|
95
87
|
const proofStore = new InlineProofStore();
|
|
96
88
|
const prover = await buildServerCircuitProver(this.config, this.telemetry);
|
|
97
|
-
this.agents = times(this.config.proverAgentCount, ()=>new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs, this.telemetry));
|
|
98
|
-
await Promise.all(this.agents.map(
|
|
89
|
+
this.agents = times(this.config.proverAgentCount, () => new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs, this.telemetry));
|
|
90
|
+
await Promise.all(this.agents.map(agent => agent.start()));
|
|
99
91
|
}
|
|
100
92
|
async stopAgents() {
|
|
101
|
-
await Promise.all(this.agents.map(
|
|
93
|
+
await Promise.all(this.agents.map(agent => agent.stop()));
|
|
102
94
|
}
|
|
103
95
|
}
|
|
104
96
|
export function buildServerCircuitProver(config, telemetry) {
|
|
105
97
|
if (config.realProofs) {
|
|
106
98
|
return BBNativeRollupProver.new(config, telemetry);
|
|
107
99
|
}
|
|
108
|
-
const simulationProvider = config.acvmBinaryPath
|
|
100
|
+
const simulationProvider = config.acvmBinaryPath
|
|
101
|
+
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
102
|
+
: undefined;
|
|
109
103
|
return Promise.resolve(new TestCircuitProver(simulationProvider, config, telemetry));
|
|
110
104
|
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXItY2xpZW50L3Byb3Zlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQyxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBVzNHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBd0Isa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUduRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdELHNIQUFzSDtBQUN0SCxNQUFNLE9BQU8sWUFBWTtJQU92QixZQUNVLE1BQTBCLEVBQzFCLFVBQW9DLEVBQ3BDLGtCQUFzQyxFQUN0QyxXQUFnQyxFQUNoQyxZQUE2QixrQkFBa0IsRUFBRSxFQUNqRCxNQUFNLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztRQUw3QyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxD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
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
import { type ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
5
|
+
import { type BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
6
|
+
/** Encapsulates the proving orchestrator and the broker facade */
|
|
7
|
+
export declare class ServerEpochProver implements EpochProver {
|
|
8
|
+
private facade;
|
|
9
|
+
private orchestrator;
|
|
10
|
+
constructor(facade: BrokerCircuitProverFacade, orchestrator: ProvingOrchestrator);
|
|
11
|
+
startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void;
|
|
12
|
+
startTubeCircuits(txs: Tx[]): Promise<void>;
|
|
13
|
+
setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block>;
|
|
14
|
+
finaliseEpoch(): Promise<{
|
|
15
|
+
publicInputs: RootRollupPublicInputs;
|
|
16
|
+
proof: Proof;
|
|
17
|
+
}>;
|
|
18
|
+
cancel(): void;
|
|
19
|
+
getProverId(): Fr;
|
|
20
|
+
getBlock(index: number): L2Block;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], previousBlockHeader: BlockHeader): Promise<void>;
|
|
23
|
+
addTxs(txs: ProcessedTx[]): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=server-epoch-prover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-epoch-prover.d.ts","sourceRoot":"","sources":["../../src/prover-client/server-epoch-prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,kEAAkE;AAClE,qBAAa,iBAAkB,YAAW,WAAW;IACvC,OAAO,CAAC,MAAM;IAA6B,OAAO,CAAC,YAAY;gBAAvD,MAAM,EAAE,yBAAyB,EAAU,YAAY,EAAE,mBAAmB;IAEhG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAI1F,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,CAAA;KAAE,CAAC;IAGhF,MAAM,IAAI,IAAI;IAGd,WAAW,IAAI,EAAE;IAGjB,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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/** Encapsulates the proving orchestrator and the broker facade */
|
|
2
|
-
|
|
3
|
-
orchestrator
|
|
4
|
-
constructor(facade, orchestrator){
|
|
1
|
+
/** Encapsulates the proving orchestrator and the broker facade */
|
|
2
|
+
export class ServerEpochProver {
|
|
3
|
+
constructor(facade, orchestrator) {
|
|
5
4
|
this.facade = facade;
|
|
6
5
|
this.orchestrator = orchestrator;
|
|
7
6
|
}
|
|
@@ -38,3 +37,4 @@
|
|
|
38
37
|
return this.orchestrator.addTxs(txs);
|
|
39
38
|
}
|
|
40
39
|
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLWVwb2NoLXByb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXItY2xpZW50L3NlcnZlci1lcG9jaC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0Esa0VBQWtFO0FBQ2xFLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBb0IsTUFBaUMsRUFBVSxZQUFpQztRQUE1RSxXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUFHLENBQUM7SUFFcEcsYUFBYSxDQUFDLFdBQW1CLEVBQUUsZ0JBQXdCLEVBQUUsY0FBc0I7UUFDakYsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEdBQVM7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxXQUFtQixFQUFFLG1CQUFpQztRQUN0RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELE1BQU07UUFDSixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELGFBQWEsQ0FDWCxlQUFnQyxFQUNoQyxjQUFvQixFQUNwQixtQkFBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type ProofAndVerificationKey, type ProvingJobProducer, type PublicInputsAndRecursiveProof, type ServerCircuitProver } from '@aztec/circuit-types';
|
|
2
|
+
import { type AVM_PROOF_LENGTH_IN_FIELDS, type AvmCircuitInputs, type BaseParityInputs, type NESTED_RECURSIVE_PROOF_LENGTH, type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, type ParityPublicInputs, type RECURSIVE_PROOF_LENGTH, type RootParityInputs, type TUBE_PROOF_LENGTH } from '@aztec/circuits.js';
|
|
3
|
+
import { type BaseOrMergeRollupPublicInputs, type BlockMergeRollupInputs, type BlockRootOrBlockMergePublicInputs, type BlockRootRollupInputs, type EmptyBlockRootRollupInputs, type MergeRollupInputs, type PrivateBaseRollupInputs, type PublicBaseRollupInputs, type RootRollupInputs, type RootRollupPublicInputs, type SingleTxBlockRootRollupInputs, type TubeInputs } from '@aztec/circuits.js/rollup';
|
|
4
|
+
import { type ProofStore } from './proof_store/index.js';
|
|
5
|
+
export declare class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
6
|
+
private broker;
|
|
7
|
+
private proofStore;
|
|
8
|
+
private failedProofStore?;
|
|
9
|
+
private pollIntervalMs;
|
|
10
|
+
private log;
|
|
11
|
+
private jobs;
|
|
12
|
+
private runningPromise?;
|
|
13
|
+
private timeOfLastSnapshotSync;
|
|
14
|
+
private queue;
|
|
15
|
+
private jobsToRetrieve;
|
|
16
|
+
constructor(broker: ProvingJobProducer, proofStore?: ProofStore, failedProofStore?: ProofStore | undefined, pollIntervalMs?: number, log?: import("@aztec/foundation/log").Logger);
|
|
17
|
+
private enqueueJob;
|
|
18
|
+
private _enqueueJob;
|
|
19
|
+
start(): void;
|
|
20
|
+
stop(): Promise<void>;
|
|
21
|
+
private updateCompletedJobs;
|
|
22
|
+
private retrieveJobsThatShouldBeReady;
|
|
23
|
+
private backupFailedProofInputs;
|
|
24
|
+
private monitorForCompletedJobs;
|
|
25
|
+
getAvmProof(inputs: AvmCircuitInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>>;
|
|
26
|
+
getBaseParityProof(inputs: BaseParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
|
|
27
|
+
getBlockMergeRollupProof(input: BlockMergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
28
|
+
getBlockRootRollupProof(input: BlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
29
|
+
getSingleTxBlockRootRollupProof(input: SingleTxBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
30
|
+
getEmptyBlockRootRollupProof(input: EmptyBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
31
|
+
getMergeRollupProof(input: MergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
32
|
+
getPrivateBaseRollupProof(baseRollupInput: PrivateBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
33
|
+
getPublicBaseRollupProof(inputs: PublicBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
|
|
34
|
+
getRootParityProof(inputs: RootParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>>;
|
|
35
|
+
getRootRollupProof(input: RootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
|
|
36
|
+
getTubeProof(tubeInput: TubeInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>;
|
|
37
|
+
private generateId;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=broker_prover_facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,4 @@
|
|
|
1
|
-
import { ProvingRequestType, makeProvingJobId } from '@aztec/circuit-types';
|
|
1
|
+
import { ProvingRequestType, makeProvingJobId, } from '@aztec/circuit-types';
|
|
2
2
|
import { sha256 } from '@aztec/foundation/crypto';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
@@ -6,21 +6,11 @@ import { SerialQueue } from '@aztec/foundation/queue';
|
|
|
6
6
|
import { truncate } from '@aztec/foundation/string';
|
|
7
7
|
import { InlineProofStore } from './proof_store/index.js';
|
|
8
8
|
// Perform a snapshot sync every 30 seconds
|
|
9
|
-
const SNAPSHOT_SYNC_INTERVAL_MS =
|
|
9
|
+
const SNAPSHOT_SYNC_INTERVAL_MS = 30000;
|
|
10
10
|
const MAX_CONCURRENT_JOB_SETTLED_REQUESTS = 10;
|
|
11
11
|
const SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE = 1000;
|
|
12
12
|
export class BrokerCircuitProverFacade {
|
|
13
|
-
broker
|
|
14
|
-
proofStore;
|
|
15
|
-
failedProofStore;
|
|
16
|
-
pollIntervalMs;
|
|
17
|
-
log;
|
|
18
|
-
jobs;
|
|
19
|
-
runningPromise;
|
|
20
|
-
timeOfLastSnapshotSync;
|
|
21
|
-
queue;
|
|
22
|
-
jobsToRetrieve;
|
|
23
|
-
constructor(broker, proofStore = new InlineProofStore(), failedProofStore, pollIntervalMs = 1000, log = createLogger('prover-client:broker-circuit-prover-facade')){
|
|
13
|
+
constructor(broker, proofStore = new InlineProofStore(), failedProofStore, pollIntervalMs = 1000, log = createLogger('prover-client:broker-circuit-prover-facade')) {
|
|
24
14
|
this.broker = broker;
|
|
25
15
|
this.proofStore = proofStore;
|
|
26
16
|
this.failedProofStore = failedProofStore;
|
|
@@ -35,7 +25,7 @@ export class BrokerCircuitProverFacade {
|
|
|
35
25
|
if (!this.queue) {
|
|
36
26
|
throw new Error('BrokerCircuitProverFacade not started');
|
|
37
27
|
}
|
|
38
|
-
return this.queue.put(()=>this._enqueueJob(id, type, inputs, epochNumber, signal)).then(({ enqueuedPromise })=>enqueuedPromise);
|
|
28
|
+
return this.queue.put(() => this._enqueueJob(id, type, inputs, epochNumber, signal)).then(({ enqueuedPromise }) => enqueuedPromise);
|
|
39
29
|
}
|
|
40
30
|
async _enqueueJob(id, type, inputs, epochNumber = 0, signal) {
|
|
41
31
|
// Check if there is already a promise for this job
|
|
@@ -44,25 +34,23 @@ export class BrokerCircuitProverFacade {
|
|
|
44
34
|
this.log.verbose(`Job already found in facade id=${id} type=${ProvingRequestType[type]}`, {
|
|
45
35
|
provingJobId: id,
|
|
46
36
|
provingJobType: ProvingRequestType[type],
|
|
47
|
-
epochNumber
|
|
37
|
+
epochNumber,
|
|
48
38
|
});
|
|
49
|
-
return {
|
|
50
|
-
enqueuedPromise: existingPromise.promise.promise
|
|
51
|
-
};
|
|
39
|
+
return { enqueuedPromise: existingPromise.promise.promise };
|
|
52
40
|
}
|
|
53
41
|
const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
|
|
54
42
|
const jobStatus = await this.broker.enqueueProvingJob({
|
|
55
43
|
id,
|
|
56
44
|
type,
|
|
57
45
|
inputsUri,
|
|
58
|
-
epochNumber
|
|
46
|
+
epochNumber,
|
|
59
47
|
});
|
|
60
48
|
// Create a promise for this job id, regardless of whether it was enqueued at the broker
|
|
61
49
|
// The running promise will monitor for the job to be completed and resolve it either way
|
|
62
50
|
const promise = promiseWithResolvers();
|
|
63
|
-
const abortFn = ()=>{
|
|
51
|
+
const abortFn = () => {
|
|
64
52
|
signal?.removeEventListener('abort', abortFn);
|
|
65
|
-
void this.broker.cancelProvingJob(id).catch(
|
|
53
|
+
void this.broker.cancelProvingJob(id).catch(err => this.log.warn(`Error cancelling job id=${id}`, err));
|
|
66
54
|
};
|
|
67
55
|
const job = {
|
|
68
56
|
id,
|
|
@@ -70,7 +58,7 @@ export class BrokerCircuitProverFacade {
|
|
|
70
58
|
inputsUri,
|
|
71
59
|
promise,
|
|
72
60
|
abortFn,
|
|
73
|
-
signal
|
|
61
|
+
signal,
|
|
74
62
|
};
|
|
75
63
|
this.jobs.set(id, job);
|
|
76
64
|
// If we are here then the job was successfully accepted by the broker
|
|
@@ -84,9 +72,10 @@ export class BrokerCircuitProverFacade {
|
|
|
84
72
|
provingJobType: ProvingRequestType[type],
|
|
85
73
|
epochNumber,
|
|
86
74
|
inputsUri: truncate(inputsUri),
|
|
87
|
-
numOutstandingJobs: this.jobs.size
|
|
75
|
+
numOutstandingJobs: this.jobs.size,
|
|
88
76
|
});
|
|
89
|
-
}
|
|
77
|
+
}
|
|
78
|
+
else if (jobStatus.status === 'fulfilled' || jobStatus.status === 'rejected') {
|
|
90
79
|
// Job was already completed by the broker
|
|
91
80
|
// No need to notify the broker on aborted job
|
|
92
81
|
job.abortFn = undefined;
|
|
@@ -94,11 +83,12 @@ export class BrokerCircuitProverFacade {
|
|
|
94
83
|
provingJobId: id,
|
|
95
84
|
provingJobType: ProvingRequestType[type],
|
|
96
85
|
epochNumber,
|
|
97
|
-
inputsUri: truncate(inputsUri)
|
|
86
|
+
inputsUri: truncate(inputsUri),
|
|
98
87
|
});
|
|
99
88
|
// Job was not enqueued. It must be completed already, add to our set of already completed jobs
|
|
100
89
|
this.jobsToRetrieve.add(id);
|
|
101
|
-
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
102
92
|
// Job was previously sent to the broker but is not completed
|
|
103
93
|
// notify the broker if job is aborted
|
|
104
94
|
signal?.addEventListener('abort', abortFn);
|
|
@@ -106,20 +96,18 @@ export class BrokerCircuitProverFacade {
|
|
|
106
96
|
provingJobId: id,
|
|
107
97
|
provingJobType: ProvingRequestType[type],
|
|
108
98
|
epochNumber,
|
|
109
|
-
inputsUri: truncate(inputsUri)
|
|
99
|
+
inputsUri: truncate(inputsUri),
|
|
110
100
|
});
|
|
111
101
|
}
|
|
112
102
|
const typedPromise = promise.promise;
|
|
113
|
-
return {
|
|
114
|
-
enqueuedPromise: typedPromise
|
|
115
|
-
};
|
|
103
|
+
return { enqueuedPromise: typedPromise };
|
|
116
104
|
}
|
|
117
105
|
start() {
|
|
118
106
|
if (this.runningPromise) {
|
|
119
107
|
throw new Error('BrokerCircuitProverFacade already started');
|
|
120
108
|
}
|
|
121
109
|
this.log.verbose('Starting BrokerCircuitProverFacade');
|
|
122
|
-
this.runningPromise = new RunningPromise(()=>this.monitorForCompletedJobs(), this.log, this.pollIntervalMs);
|
|
110
|
+
this.runningPromise = new RunningPromise(() => this.monitorForCompletedJobs(), this.log, this.pollIntervalMs);
|
|
123
111
|
this.runningPromise.start();
|
|
124
112
|
this.queue = new SerialQueue();
|
|
125
113
|
this.queue.start();
|
|
@@ -135,7 +123,7 @@ export class BrokerCircuitProverFacade {
|
|
|
135
123
|
await this.queue.end();
|
|
136
124
|
}
|
|
137
125
|
// Reject any outstanding promises as stopped
|
|
138
|
-
for (const [_, v] of this.jobs){
|
|
126
|
+
for (const [_, v] of this.jobs) {
|
|
139
127
|
v.promise.reject(new Error('Broker facade stopped'));
|
|
140
128
|
}
|
|
141
129
|
this.jobs.clear();
|
|
@@ -148,23 +136,24 @@ export class BrokerCircuitProverFacade {
|
|
|
148
136
|
// and have the broker report on whether they are completed or not.
|
|
149
137
|
// We perform an incremental sync on every call of this function with a full snapshot sync periodically.
|
|
150
138
|
// This should keep us in sync without over-burdening the broker with snapshot sync requests
|
|
151
|
-
const getAllCompletedJobs = async (ids)=>{
|
|
139
|
+
const getAllCompletedJobs = async (ids) => {
|
|
152
140
|
// In this function we take whatever set of snapshot ids and we ask the broker for completed job notifications
|
|
153
141
|
// We collect all returned notifications and return them
|
|
154
142
|
const allCompleted = new Set();
|
|
155
143
|
try {
|
|
156
144
|
let numRequests = 0;
|
|
157
|
-
while(ids.length > 0){
|
|
145
|
+
while (ids.length > 0) {
|
|
158
146
|
const slice = ids.splice(0, SNAPSHOT_SYNC_CHECK_MAX_REQUEST_SIZE);
|
|
159
147
|
const completed = await this.broker.getCompletedJobs(slice);
|
|
160
|
-
completed.forEach(
|
|
148
|
+
completed.forEach(id => allCompleted.add(id));
|
|
161
149
|
++numRequests;
|
|
162
150
|
}
|
|
163
151
|
if (numRequests === 0) {
|
|
164
152
|
const final = await this.broker.getCompletedJobs([]);
|
|
165
|
-
final.forEach(
|
|
153
|
+
final.forEach(id => allCompleted.add(id));
|
|
166
154
|
}
|
|
167
|
-
}
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
168
157
|
this.log.error(`Error thrown when requesting completed job notifications from the broker`, err);
|
|
169
158
|
}
|
|
170
159
|
return allCompleted;
|
|
@@ -176,7 +165,8 @@ export class BrokerCircuitProverFacade {
|
|
|
176
165
|
this.timeOfLastSnapshotSync = currentTime;
|
|
177
166
|
snapshotSyncIds.push(...this.jobs.keys());
|
|
178
167
|
this.log.trace(`Performing full snapshot sync of completed jobs with ${snapshotSyncIds.length} job(s)`);
|
|
179
|
-
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
180
170
|
this.log.trace(`Performing incremental sync of completed jobs`);
|
|
181
171
|
}
|
|
182
172
|
// Now request the notifications from the broker
|
|
@@ -184,48 +174,41 @@ export class BrokerCircuitProverFacade {
|
|
|
184
174
|
const completedJobs = await getAllCompletedJobs(snapshotSyncIds);
|
|
185
175
|
// We now have an additional set of completed job notifications to add to our cached set giving us the full set of jobs that we have been told are ready
|
|
186
176
|
// We filter this list to what we actually need, in case for any reason it is different and store in our cache
|
|
187
|
-
const allJobsReady = [
|
|
188
|
-
|
|
189
|
-
...this.jobsToRetrieve
|
|
190
|
-
];
|
|
191
|
-
this.jobsToRetrieve = new Set(allJobsReady.filter((id)=>this.jobs.has(id)));
|
|
177
|
+
const allJobsReady = [...completedJobs, ...this.jobsToRetrieve];
|
|
178
|
+
this.jobsToRetrieve = new Set(allJobsReady.filter(id => this.jobs.has(id)));
|
|
192
179
|
if (completedJobs.size > 0) {
|
|
193
180
|
this.log.verbose(`Check for job completion notifications returned ${completedJobs.size} job(s), snapshot ids length: ${snapshotIdsLength}, num outstanding jobs: ${this.jobs.size}, total jobs ready: ${this.jobsToRetrieve.size}`);
|
|
194
|
-
}
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
195
183
|
this.log.trace(`Check for job completion notifications returned 0 jobs, snapshot ids length: ${snapshotIdsLength}, num outstanding jobs: ${this.jobs.size}, total jobs ready: ${this.jobsToRetrieve.size}`);
|
|
196
184
|
}
|
|
197
185
|
}
|
|
198
186
|
async retrieveJobsThatShouldBeReady() {
|
|
199
|
-
const convertJobResult = async (result, jobType)=>{
|
|
187
|
+
const convertJobResult = async (result, jobType) => {
|
|
200
188
|
if (result.status === 'fulfilled') {
|
|
201
189
|
const output = await this.proofStore.getProofOutput(result.value);
|
|
202
190
|
if (output.type === jobType) {
|
|
203
|
-
return {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
};
|
|
207
|
-
} else {
|
|
208
|
-
return {
|
|
209
|
-
success: false,
|
|
210
|
-
reason: `Unexpected proof type: ${output.type}. Expected: ${jobType}`
|
|
211
|
-
};
|
|
191
|
+
return { result: output.result, success: true };
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return { success: false, reason: `Unexpected proof type: ${output.type}. Expected: ${jobType}` };
|
|
212
195
|
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
} else {
|
|
196
|
+
}
|
|
197
|
+
else if (result.status === 'rejected') {
|
|
198
|
+
return { success: false, reason: result.reason };
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
219
201
|
throw new Error(`Unexpected proving job status ${result.status}`);
|
|
220
202
|
}
|
|
221
203
|
};
|
|
222
|
-
const processJob = async (job)=>{
|
|
204
|
+
const processJob = async (job) => {
|
|
223
205
|
// First retrieve the settled job from the broker
|
|
224
206
|
this.log.debug(`Received notification of completed job id=${job.id} type=${ProvingRequestType[job.type]}`);
|
|
225
207
|
let settledResult;
|
|
226
208
|
try {
|
|
227
209
|
settledResult = await this.broker.getProvingJobStatus(job.id);
|
|
228
|
-
}
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
229
212
|
// If an error occurs retrieving the job result then just log it and move on.
|
|
230
213
|
// We will try again on the next iteration
|
|
231
214
|
this.log.error(`Error retrieving job result from broker job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
|
|
@@ -235,7 +218,8 @@ export class BrokerCircuitProverFacade {
|
|
|
235
218
|
let result;
|
|
236
219
|
try {
|
|
237
220
|
result = await convertJobResult(settledResult, job.type);
|
|
238
|
-
}
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
239
223
|
// If an error occurs retrieving the job result then just log it and move on.
|
|
240
224
|
// We will try again on the next iteration
|
|
241
225
|
this.log.error(`Error processing job result job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
|
|
@@ -244,7 +228,8 @@ export class BrokerCircuitProverFacade {
|
|
|
244
228
|
if (result.success) {
|
|
245
229
|
this.log.verbose(`Resolved proving job id=${job.id} type=${ProvingRequestType[job.type]}`);
|
|
246
230
|
job.promise.resolve(result.result);
|
|
247
|
-
}
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
248
233
|
this.log.error(`Resolving proving job with error id=${job.id} type=${ProvingRequestType[job.type]}`, result.reason);
|
|
249
234
|
if (result.reason !== 'Aborted') {
|
|
250
235
|
void this.backupFailedProofInputs(job);
|
|
@@ -259,13 +244,15 @@ export class BrokerCircuitProverFacade {
|
|
|
259
244
|
this.jobsToRetrieve.delete(job.id);
|
|
260
245
|
return true;
|
|
261
246
|
};
|
|
262
|
-
const toBeRetrieved = Array.from(this.jobsToRetrieve.values())
|
|
247
|
+
const toBeRetrieved = Array.from(this.jobsToRetrieve.values())
|
|
248
|
+
.map(id => this.jobs.get(id))
|
|
249
|
+
.filter(x => x !== undefined);
|
|
263
250
|
const totalJobsToRetrieve = toBeRetrieved.length;
|
|
264
251
|
let totalJobsRetrieved = 0;
|
|
265
|
-
while(toBeRetrieved.length > 0){
|
|
252
|
+
while (toBeRetrieved.length > 0) {
|
|
266
253
|
const slice = toBeRetrieved.splice(0, MAX_CONCURRENT_JOB_SETTLED_REQUESTS);
|
|
267
|
-
const results = await Promise.all(slice.map(
|
|
268
|
-
totalJobsRetrieved += results.filter(
|
|
254
|
+
const results = await Promise.all(slice.map(job => processJob(job)));
|
|
255
|
+
totalJobsRetrieved += results.filter(x => x).length;
|
|
269
256
|
}
|
|
270
257
|
if (totalJobsToRetrieve > 0) {
|
|
271
258
|
this.log.verbose(`Successfully retrieved ${totalJobsRetrieved} of ${totalJobsToRetrieve} jobs that should be ready, total ready jobs is now: ${this.jobsToRetrieve.size}`);
|
|
@@ -281,9 +268,10 @@ export class BrokerCircuitProverFacade {
|
|
|
281
268
|
this.log.info(`Stored proof inputs for failed job id=${job.id} type=${ProvingRequestType[job.type]} at ${uri}`, {
|
|
282
269
|
id: job.id,
|
|
283
270
|
type: job.type,
|
|
284
|
-
uri
|
|
271
|
+
uri,
|
|
285
272
|
});
|
|
286
|
-
}
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
287
275
|
this.log.error(`Error backing up proof inputs for failed job id=${job.id} type=${ProvingRequestType[job.type]}`, err);
|
|
288
276
|
}
|
|
289
277
|
}
|
|
@@ -338,3 +326,4 @@ export class BrokerCircuitProverFacade {
|
|
|
338
326
|
return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
|
|
339
327
|
}
|
|
340
328
|
}
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJva2VyX3Byb3Zlcl9mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvYnJva2VyX3Byb3Zlcl9mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFMLGtCQUFrQixFQUdsQixnQkFBZ0IsR0FDakIsTUFBTSxzQkFBc0IsQ0FBQztBQTBCOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsMkNBQTJDO0FBQzNDLE1BQU0seUJBQXlCLEdBQUcsS0FBTSxDQUFDO0FBRXpDLE1BQU0sbUNBQW1DLEdBQUcsRUFBRSxDQUFDO0FBQy9DLE1BQU0sb0NBQW9DLEdBQUcsSUFBSSxDQUFDO0FBV2xELE1BQU0sT0FBTyx5QkFBeUI7SUFPcEMsWUFDVSxNQUEwQixFQUMxQixhQUF5QixJQUFJLGdCQUFnQixFQUFFLEVBQy9DLGdCQUE2QixFQUM3QixpQkFBaUIsSUFBSSxFQUNyQixNQUFNLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQztRQUpoRSxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFxQztRQUMvQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWE7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQU87UUFDckIsUUFBRyxHQUFILEdBQUcsQ0FBNkQ7UUFYbEUsU0FBSSxHQUFrQyxJQUFJLEdBQUcsRUFBRSxDQUFD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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ProvingRequestType } from '@aztec/circuit-types';
|
|
2
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
3
|
+
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare const ProverBrokerConfig: z.ZodObject<{
|
|
6
|
+
/** If starting a prover broker locally, the max number of retries per proving job */
|
|
7
|
+
proverBrokerJobMaxRetries: z.ZodNumber;
|
|
8
|
+
/** If starting a prover broker locally, the time after which a job times out and gets assigned to a different agent */
|
|
9
|
+
proverBrokerJobTimeoutMs: z.ZodNumber;
|
|
10
|
+
/** If starting a prover broker locally, the interval the broker checks for timed out jobs */
|
|
11
|
+
proverBrokerPollIntervalMs: z.ZodNumber;
|
|
12
|
+
/** If starting a prover broker locally, the directory to store broker data */
|
|
13
|
+
dataDirectory: z.ZodOptional<z.ZodString>;
|
|
14
|
+
/** The size of the data store map */
|
|
15
|
+
dataStoreMapSizeKB: z.ZodNumber;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
proverBrokerJobMaxRetries: number;
|
|
18
|
+
proverBrokerJobTimeoutMs: number;
|
|
19
|
+
proverBrokerPollIntervalMs: number;
|
|
20
|
+
dataStoreMapSizeKB: number;
|
|
21
|
+
dataDirectory?: string | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
proverBrokerJobMaxRetries: number;
|
|
24
|
+
proverBrokerJobTimeoutMs: number;
|
|
25
|
+
proverBrokerPollIntervalMs: number;
|
|
26
|
+
dataStoreMapSizeKB: number;
|
|
27
|
+
dataDirectory?: string | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKB' | 'dataDirectory'>;
|
|
30
|
+
export declare const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>;
|
|
31
|
+
export declare const ProverAgentConfig: z.ZodObject<{
|
|
32
|
+
/** The number of prover agents to start */
|
|
33
|
+
proverAgentCount: z.ZodNumber;
|
|
34
|
+
/** The types of proofs the prover agent can generate */
|
|
35
|
+
proverAgentProofTypes: z.ZodArray<z.ZodNativeEnum<typeof ProvingRequestType>, "many">;
|
|
36
|
+
/** How often the prover agents poll for jobs */
|
|
37
|
+
proverAgentPollIntervalMs: z.ZodNumber;
|
|
38
|
+
/** The URL where this agent takes jobs from */
|
|
39
|
+
proverBrokerUrl: z.ZodOptional<z.ZodString>;
|
|
40
|
+
/** Whether to construct real proofs */
|
|
41
|
+
realProofs: z.ZodBoolean;
|
|
42
|
+
/** Artificial delay to introduce to all operations to the test prover. */
|
|
43
|
+
proverTestDelayMs: z.ZodNumber;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
proverAgentCount: number;
|
|
46
|
+
proverAgentProofTypes: ProvingRequestType[];
|
|
47
|
+
proverAgentPollIntervalMs: number;
|
|
48
|
+
realProofs: boolean;
|
|
49
|
+
proverTestDelayMs: number;
|
|
50
|
+
proverBrokerUrl?: string | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
proverAgentCount: number;
|
|
53
|
+
proverAgentProofTypes: ProvingRequestType[];
|
|
54
|
+
proverAgentPollIntervalMs: number;
|
|
55
|
+
realProofs: boolean;
|
|
56
|
+
proverTestDelayMs: number;
|
|
57
|
+
proverBrokerUrl?: string | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
|
|
60
|
+
export declare const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig>;
|
|
61
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,kBAAkB,EAA2C,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,qFAAqF;;IAErF,uHAAuH;;IAEvH,6FAA6F;;IAE7F,8EAA8E;;IAE9E,qCAAqC;;;;;;;;;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,eAAe,CAAC,CAAC;AAEhE,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAiB7E,CAAC;AAEF,eAAO,MAAM,iBAAiB;IAC5B,2CAA2C;;IAE3C,wDAAwD;;IAExD,gDAAgD;;IAEhD,+CAA+C;;IAE/C,uCAAuC;;IAEvC,0EAA0E;;;;;;;;;;;;;;;;EAE1E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAkC3E,CAAC"}
|