@aztec/prover-client 0.0.1-commit.e3c1de76 → 0.0.1-commit.e57c76e
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 +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -2
- package/dest/light/lightweight_checkpoint_builder.d.ts +10 -5
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +53 -22
- package/dest/mocks/test_context.d.ts +3 -1
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +18 -9
- package/dest/orchestrator/block-building-helpers.d.ts +4 -4
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +2 -2
- package/dest/orchestrator/block-proving-state.d.ts +4 -1
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +7 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts +10 -3
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +13 -4
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +107 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +151 -0
- package/dest/orchestrator/epoch-proving-context.d.ts +51 -0
- package/dest/orchestrator/epoch-proving-context.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-context.js +81 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +3 -3
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +5 -3
- package/dest/orchestrator/index.d.ts +4 -1
- package/dest/orchestrator/index.d.ts.map +1 -1
- package/dest/orchestrator/index.js +3 -0
- package/dest/orchestrator/orchestrator.d.ts +16 -26
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +76 -206
- package/dest/orchestrator/proving-scheduler.d.ts +72 -0
- package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/proving-scheduler.js +117 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts +83 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-orchestrator.js +182 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts +62 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-scheduler.js +73 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-state.js +185 -0
- package/dest/prover-client/prover-client.d.ts +64 -5
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +58 -8
- package/dest/proving_broker/broker_prover_facade.d.ts +1 -1
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +13 -19
- package/dest/proving_broker/config.d.ts +11 -67
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +16 -5
- package/dest/proving_broker/index.d.ts +2 -1
- package/dest/proving_broker/index.d.ts.map +1 -1
- package/dest/proving_broker/index.js +1 -0
- 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 -2
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -1
- package/dest/proving_broker/proving_broker.d.ts +8 -5
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +68 -11
- package/dest/proving_broker/proving_broker_database/persisted.js +2 -2
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +3 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +7 -0
- package/dest/proving_broker/rpc.d.ts +6 -2
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +87 -23
- package/dest/test/mock_prover.d.ts +4 -4
- package/package.json +18 -19
- package/src/config.ts +18 -2
- package/src/light/lightweight_checkpoint_builder.ts +56 -25
- package/src/mocks/test_context.ts +13 -10
- package/src/orchestrator/block-building-helpers.ts +2 -2
- package/src/orchestrator/block-proving-state.ts +9 -0
- package/src/orchestrator/checkpoint-proving-state.ts +18 -5
- package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +271 -0
- package/src/orchestrator/epoch-proving-context.ts +101 -0
- package/src/orchestrator/epoch-proving-state.ts +6 -4
- package/src/orchestrator/index.ts +8 -0
- package/src/orchestrator/orchestrator.ts +98 -268
- package/src/orchestrator/proving-scheduler.ts +156 -0
- package/src/orchestrator/top-tree-orchestrator.ts +314 -0
- package/src/orchestrator/top-tree-proving-scheduler.ts +154 -0
- package/src/orchestrator/top-tree-proving-state.ts +220 -0
- package/src/prover-client/prover-client.ts +132 -9
- package/src/proving_broker/broker_prover_facade.ts +17 -20
- package/src/proving_broker/config.ts +16 -2
- package/src/proving_broker/index.ts +1 -0
- 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 -1
- package/src/proving_broker/proving_broker.ts +64 -8
- package/src/proving_broker/proving_broker_database/persisted.ts +2 -2
- package/src/proving_broker/proving_broker_instrumentation.ts +9 -0
- package/src/proving_broker/rpc.ts +46 -20
- 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/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
|
@@ -1,96 +1,40 @@
|
|
|
1
1
|
import { type L1ReaderConfig } from '@aztec/ethereum/l1-reader';
|
|
2
2
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
3
|
-
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
4
3
|
import { type ChainConfig } from '@aztec/stdlib/config';
|
|
4
|
+
import { type DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
5
5
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
export declare const ProverBrokerConfig: z.ZodObject<{
|
|
8
|
-
/** If starting a prover broker locally, the max number of retries per proving job */
|
|
9
8
|
proverBrokerJobMaxRetries: z.ZodNumber;
|
|
10
|
-
/** If starting a prover broker locally, the time after which a job times out and gets assigned to a different agent */
|
|
11
9
|
proverBrokerJobTimeoutMs: z.ZodNumber;
|
|
12
|
-
/** If starting a prover broker locally, the interval the broker checks for timed out jobs */
|
|
13
10
|
proverBrokerPollIntervalMs: z.ZodNumber;
|
|
14
|
-
/** If starting a prover broker locally, the directory to store broker data */
|
|
15
11
|
dataDirectory: z.ZodOptional<z.ZodString>;
|
|
16
|
-
/** The size of the data store map */
|
|
17
12
|
dataStoreMapSizeKb: z.ZodNumber;
|
|
18
|
-
/** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */
|
|
19
13
|
proverBrokerStoreMapSizeKb: z.ZodOptional<z.ZodNumber>;
|
|
20
|
-
/** The prover broker may batch jobs together before writing to the database */
|
|
21
14
|
proverBrokerBatchSize: z.ZodNumber;
|
|
22
|
-
/** How often the job batches get flushed */
|
|
23
15
|
proverBrokerBatchIntervalMs: z.ZodNumber;
|
|
24
|
-
/** The maximum number of epochs to keep results for */
|
|
25
16
|
proverBrokerMaxEpochsToKeepResultsFor: z.ZodNumber;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
proverBrokerJobTimeoutMs: number;
|
|
29
|
-
proverBrokerPollIntervalMs: number;
|
|
30
|
-
dataDirectory?: string | undefined;
|
|
31
|
-
dataStoreMapSizeKb: number;
|
|
32
|
-
proverBrokerStoreMapSizeKb?: number | undefined;
|
|
33
|
-
proverBrokerBatchSize: number;
|
|
34
|
-
proverBrokerBatchIntervalMs: number;
|
|
35
|
-
proverBrokerMaxEpochsToKeepResultsFor: number;
|
|
36
|
-
}, {
|
|
37
|
-
proverBrokerJobMaxRetries: number;
|
|
38
|
-
proverBrokerJobTimeoutMs: number;
|
|
39
|
-
proverBrokerPollIntervalMs: number;
|
|
40
|
-
dataDirectory?: string | undefined;
|
|
41
|
-
dataStoreMapSizeKb: number;
|
|
42
|
-
proverBrokerStoreMapSizeKb?: number | undefined;
|
|
43
|
-
proverBrokerBatchSize: number;
|
|
44
|
-
proverBrokerBatchIntervalMs: number;
|
|
45
|
-
proverBrokerMaxEpochsToKeepResultsFor: number;
|
|
46
|
-
}>;
|
|
17
|
+
proverBrokerDebugReplayEnabled: z.ZodBoolean;
|
|
18
|
+
}, z.core.$strip>;
|
|
47
19
|
export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> & Pick<DataStoreConfig, 'dataStoreMapSizeKb' | 'dataDirectory'> & L1ReaderConfig & Pick<ChainConfig, 'rollupVersion'>;
|
|
48
20
|
export declare const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>;
|
|
49
21
|
export declare const defaultProverBrokerConfig: ProverBrokerConfig;
|
|
50
22
|
export declare const ProverAgentConfig: z.ZodObject<{
|
|
51
|
-
/** The number of prover agents to start */
|
|
52
23
|
proverAgentCount: z.ZodNumber;
|
|
53
|
-
|
|
54
|
-
proverAgentProofTypes: z.ZodArray<z.ZodNativeEnum<typeof ProvingRequestType>, "many">;
|
|
55
|
-
/** How often the prover agents poll for jobs */
|
|
24
|
+
proverAgentProofTypes: z.ZodArray<z.ZodEnum<typeof ProvingRequestType>>;
|
|
56
25
|
proverAgentPollIntervalMs: z.ZodNumber;
|
|
57
|
-
/** The URL where this agent takes jobs from */
|
|
58
26
|
proverBrokerUrl: z.ZodOptional<z.ZodString>;
|
|
59
|
-
/** Whether to construct real proofs */
|
|
60
27
|
realProofs: z.ZodBoolean;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
28
|
+
proverTestDelayType: z.ZodEnum<{
|
|
29
|
+
fixed: "fixed";
|
|
30
|
+
realistic: "realistic";
|
|
31
|
+
}>;
|
|
64
32
|
proverTestDelayMs: z.ZodNumber;
|
|
65
|
-
/** If using realistic delays, what percentage of realistic times to apply. */
|
|
66
33
|
proverTestDelayFactor: z.ZodNumber;
|
|
67
|
-
/** The delay (ms) to inject during fake proof verification */
|
|
68
34
|
proverTestVerificationDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
69
|
-
/** Whether to abort pending proving jobs when the orchestrator is cancelled */
|
|
70
35
|
cancelJobsOnStop: z.ZodBoolean;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
proverAgentProofTypes: ProvingRequestType[];
|
|
74
|
-
proverAgentPollIntervalMs: number;
|
|
75
|
-
proverBrokerUrl?: string | undefined;
|
|
76
|
-
realProofs: boolean;
|
|
77
|
-
proverTestDelayType: "fixed" | "realistic";
|
|
78
|
-
proverTestDelayMs: number;
|
|
79
|
-
proverTestDelayFactor: number;
|
|
80
|
-
proverTestVerificationDelayMs?: number | undefined;
|
|
81
|
-
cancelJobsOnStop: boolean;
|
|
82
|
-
}, {
|
|
83
|
-
proverAgentCount: number;
|
|
84
|
-
proverAgentProofTypes: ProvingRequestType[];
|
|
85
|
-
proverAgentPollIntervalMs: number;
|
|
86
|
-
proverBrokerUrl?: string | undefined;
|
|
87
|
-
realProofs: boolean;
|
|
88
|
-
proverTestDelayType: "fixed" | "realistic";
|
|
89
|
-
proverTestDelayMs: number;
|
|
90
|
-
proverTestDelayFactor: number;
|
|
91
|
-
proverTestVerificationDelayMs?: number | undefined;
|
|
92
|
-
cancelJobsOnStop: boolean;
|
|
93
|
-
}>;
|
|
36
|
+
proofStore: z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>;
|
|
94
38
|
export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
|
|
95
39
|
export declare const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig>;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsZUFBTyxNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7aUJBcUI3QixDQUFDO0FBRUgsTUFBTSxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxHQUNqRSxJQUFJLENBQUMsZUFBZSxFQUFFLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxHQUM3RCxjQUFjLEdBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUVyQyxlQUFPLE1BQU0sMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBNEM3RSxDQUFDO0FBRUYsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFpRSxDQUFDO0FBRTFHLGVBQU8sTUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7Ozs7OztpQkF1QjVCLENBQUM7QUFFSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFFbEUsZUFBTyxNQUFNLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQTREM0UsQ0FBQyJ9
|
|
@@ -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,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proving_broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAqB7B,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,CA4C7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAiE,CAAC;AAE1G,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;iBAuB5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CA4D3E,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
|
|
2
|
-
import { booleanConfigHelper, getDefaultConfig, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
+
import { booleanConfigHelper, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
|
|
3
3
|
import { pickConfigMappings } from '@aztec/foundation/config';
|
|
4
|
-
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
5
4
|
import { chainConfigMappings } from '@aztec/stdlib/config';
|
|
5
|
+
import { dataConfigMappings } from '@aztec/stdlib/kv-store';
|
|
6
6
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
export const ProverBrokerConfig = z.object({
|
|
@@ -14,7 +14,8 @@ export const ProverBrokerConfig = z.object({
|
|
|
14
14
|
/** The size of the prover broker's database. Will override the dataStoreMapSizeKb if set. */ proverBrokerStoreMapSizeKb: z.number().int().nonnegative().optional(),
|
|
15
15
|
/** The prover broker may batch jobs together before writing to the database */ proverBrokerBatchSize: z.number().int().nonnegative(),
|
|
16
16
|
/** How often the job batches get flushed */ proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
|
|
17
|
-
/** The maximum number of epochs to keep results for */ proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative()
|
|
17
|
+
/** The maximum number of epochs to keep results for */ proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative(),
|
|
18
|
+
/** Enable debug replay mode for replaying proving jobs from stored inputs */ proverBrokerDebugReplayEnabled: z.boolean()
|
|
18
19
|
});
|
|
19
20
|
export const proverBrokerConfigMappings = {
|
|
20
21
|
proverBrokerJobTimeoutMs: {
|
|
@@ -49,9 +50,14 @@ export const proverBrokerConfigMappings = {
|
|
|
49
50
|
},
|
|
50
51
|
proverBrokerStoreMapSizeKb: {
|
|
51
52
|
env: 'PROVER_BROKER_STORE_MAP_SIZE_KB',
|
|
52
|
-
|
|
53
|
+
...optionalNumberConfigHelper(),
|
|
53
54
|
description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set."
|
|
54
55
|
},
|
|
56
|
+
proverBrokerDebugReplayEnabled: {
|
|
57
|
+
env: 'PROVER_BROKER_DEBUG_REPLAY_ENABLED',
|
|
58
|
+
description: 'Enable debug replay mode for replaying proving jobs from stored inputs',
|
|
59
|
+
...booleanConfigHelper(false)
|
|
60
|
+
},
|
|
55
61
|
...dataConfigMappings,
|
|
56
62
|
...l1ReaderConfigMappings,
|
|
57
63
|
...pickConfigMappings(chainConfigMappings, [
|
|
@@ -72,7 +78,8 @@ export const ProverAgentConfig = z.object({
|
|
|
72
78
|
/** If using fixed delay, the time each operation takes. */ proverTestDelayMs: z.number(),
|
|
73
79
|
/** If using realistic delays, what percentage of realistic times to apply. */ proverTestDelayFactor: z.number(),
|
|
74
80
|
/** The delay (ms) to inject during fake proof verification */ proverTestVerificationDelayMs: z.number().optional(),
|
|
75
|
-
/** Whether to abort pending proving jobs when the orchestrator is cancelled */ cancelJobsOnStop: z.boolean()
|
|
81
|
+
/** Whether to abort pending proving jobs when the orchestrator is cancelled */ cancelJobsOnStop: z.boolean(),
|
|
82
|
+
/** Where to store proving results. Must be accessible to both prover node and agents. If not set will inline-encode the parameters */ proofStore: z.string().optional()
|
|
76
83
|
});
|
|
77
84
|
export const proverAgentConfigMappings = {
|
|
78
85
|
proverAgentCount: {
|
|
@@ -123,5 +130,9 @@ export const proverAgentConfigMappings = {
|
|
|
123
130
|
env: 'PROVER_CANCEL_JOBS_ON_STOP',
|
|
124
131
|
description: 'Whether to abort pending proving jobs when the orchestrator is cancelled. ' + 'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
|
|
125
132
|
...booleanConfigHelper(false)
|
|
133
|
+
},
|
|
134
|
+
proofStore: {
|
|
135
|
+
env: 'PROVER_PROOF_STORE',
|
|
136
|
+
description: 'Optional proof input store for the prover'
|
|
126
137
|
}
|
|
127
138
|
};
|
|
@@ -7,4 +7,5 @@ export * from './proving_broker_database/persisted.js';
|
|
|
7
7
|
export * from './proof_store/index.js';
|
|
8
8
|
export * from './factory.js';
|
|
9
9
|
export * from './config.js';
|
|
10
|
-
|
|
10
|
+
export { BrokerCircuitProverFacade } from './broker_prover_facade.js';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proving_broker/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proving_broker/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { GoogleCloudStorageProofStore } from './gcs_proof_store.js';
|
|
2
|
-
import { InlineProofStore } from './inline_proof_store.js';
|
|
3
1
|
import type { ProofStore } from './proof_store.js';
|
|
4
|
-
export declare function createProofStore(config: string | undefined, logger?: import("@aztec/foundation/log").Logger):
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsd0JBQWdCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLE1BQU0seUNBQTRDLG1EQW1COUc7QUFFRCx3QkFBZ0Isc0JBQXNCLENBQ3BDLEdBQUcsRUFBRSxNQUFNLEVBQ1gsTUFBTSx5Q0FBNEMsR0FDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsQ0FXdEQifQ==
|
|
2
|
+
export declare function createProofStore(config: string | undefined, logger?: import("@aztec/foundation/log").Logger): Promise<ProofStore>;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsd0JBQXNCLGdCQUFnQixDQUNwQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDMUIsTUFBTSx5Q0FBNEMsR0FDakQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQVNyQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/factory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,yCAA4C,GACjD,OAAO,CAAC,UAAU,CAAC,CASrB"}
|
|
@@ -1,36 +1,13 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import {
|
|
2
|
+
import { createFileStore } from '@aztec/stdlib/file-store';
|
|
3
|
+
import { FileStoreProofStore } from './file_store_proof_store.js';
|
|
3
4
|
import { InlineProofStore } from './inline_proof_store.js';
|
|
4
|
-
export function createProofStore(config, logger = createLogger('prover-client:proof-store')) {
|
|
5
|
-
if (config
|
|
5
|
+
export async function createProofStore(config, logger = createLogger('prover-client:proof-store')) {
|
|
6
|
+
if (!config) {
|
|
6
7
|
logger.info('Creating inline proof store');
|
|
7
8
|
return new InlineProofStore();
|
|
8
|
-
} else if (config.startsWith('gs://')) {
|
|
9
|
-
try {
|
|
10
|
-
const url = new URL(config);
|
|
11
|
-
const bucket = url.host;
|
|
12
|
-
const path = url.pathname.replace(/^\/+/, '');
|
|
13
|
-
logger.info(`Creating google cloud proof store at ${bucket}`, {
|
|
14
|
-
bucket,
|
|
15
|
-
path
|
|
16
|
-
});
|
|
17
|
-
return new GoogleCloudStorageProofStore(bucket, path);
|
|
18
|
-
} catch {
|
|
19
|
-
throw new Error(`Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
|
|
20
|
-
}
|
|
21
|
-
} else {
|
|
22
|
-
throw new Error(`Unknown proof store config: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export function createProofStoreForUri(uri, logger = createLogger('prover-client:proof-store')) {
|
|
26
|
-
if (uri.startsWith('data://')) {
|
|
27
|
-
return createProofStore(undefined, logger);
|
|
28
|
-
} else if (uri.startsWith('gs://')) {
|
|
29
|
-
const url = new URL(uri);
|
|
30
|
-
const basePath = url.pathname.replace(/^\/+/, '').split('/').slice(0, -3);
|
|
31
|
-
url.pathname = basePath.join('/');
|
|
32
|
-
return createProofStore(uri, logger);
|
|
33
|
-
} else {
|
|
34
|
-
throw new Error(`Unknown proof store config: '${uri}'. Supported protocols are 'data://' and 'gs://'.`);
|
|
35
9
|
}
|
|
10
|
+
const fileStore = await createFileStore(config, logger);
|
|
11
|
+
logger.info(`Creating file store proof store at ${config}`);
|
|
12
|
+
return new FileStoreProofStore(fileStore);
|
|
36
13
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FileStore } from '@aztec/stdlib/file-store';
|
|
2
|
+
import { type ProofUri, type ProvingJobId, type ProvingJobInputs, type ProvingJobInputsMap, ProvingJobResult, type ProvingJobResultsMap } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
4
|
+
import type { ProofStore } from './proof_store.js';
|
|
5
|
+
/**
|
|
6
|
+
* A proof store implementation backed by a generic FileStore.
|
|
7
|
+
* Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
|
|
8
|
+
*/
|
|
9
|
+
export declare class FileStoreProofStore implements ProofStore {
|
|
10
|
+
private readonly fileStore;
|
|
11
|
+
constructor(fileStore: FileStore);
|
|
12
|
+
saveProofInput<T extends ProvingRequestType>(id: ProvingJobId, type: T, inputs: ProvingJobInputsMap[T]): Promise<ProofUri>;
|
|
13
|
+
saveProofOutput<T extends ProvingRequestType>(id: ProvingJobId, type: T, result: ProvingJobResultsMap[T]): Promise<ProofUri>;
|
|
14
|
+
getProofInput(uri: ProofUri): Promise<ProvingJobInputs>;
|
|
15
|
+
getProofOutput(uri: ProofUri): Promise<ProvingJobResult>;
|
|
16
|
+
private extractTypeFromUri;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV9wcm9vZl9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZpbGVfc3RvcmVfcHJvb2Zfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLEtBQUssUUFBUSxFQUNiLEtBQUssWUFBWSxFQUNqQixLQUFLLGdCQUFnQixFQUNyQixLQUFLLG1CQUFtQixFQUN4QixnQkFBZ0IsRUFDaEIsS0FBSyxvQkFBb0IsRUFFMUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUtuRDs7O0dBR0c7QUFDSCxxQkFBYSxtQkFBb0IsWUFBVyxVQUFVO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUF0QyxZQUE2QixTQUFTLEVBQUUsU0FBUyxFQUFJO0lBRS9DLGNBQWMsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEVBQy9DLEVBQUUsRUFBRSxZQUFZLEVBQ2hCLElBQUksRUFBRSxDQUFDLEVBQ1AsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLENBSW5CO0lBRUssZUFBZSxDQUFDLENBQUMsU0FBUyxrQkFBa0IsRUFDaEQsRUFBRSxFQUFFLFlBQVksRUFDaEIsSUFBSSxFQUFFLENBQUMsRUFDUCxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FNbkI7SUFFSyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FTNUQ7SUFFSyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FPN0Q7SUFFRCxPQUFPLENBQUMsa0JBQWtCO0NBVTNCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_store_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/file_store_proof_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,SAAS,EAAI;IAE/C,cAAc,CAAC,CAAC,SAAS,kBAAkB,EAC/C,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAInB;IAEK,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAChD,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAMnB;IAEK,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS5D;IAEK,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO7D;IAED,OAAO,CAAC,kBAAkB;CAU3B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
|
|
2
|
+
import { ProvingJobResult, getProvingJobInputClassFor } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
4
|
+
const INPUTS_PATH = 'inputs';
|
|
5
|
+
const OUTPUTS_PATH = 'outputs';
|
|
6
|
+
/**
|
|
7
|
+
* A proof store implementation backed by a generic FileStore.
|
|
8
|
+
* Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
|
|
9
|
+
*/ export class FileStoreProofStore {
|
|
10
|
+
fileStore;
|
|
11
|
+
constructor(fileStore){
|
|
12
|
+
this.fileStore = fileStore;
|
|
13
|
+
}
|
|
14
|
+
async saveProofInput(id, type, inputs) {
|
|
15
|
+
const path = `${INPUTS_PATH}/${ProvingRequestType[type]}/${id}`;
|
|
16
|
+
const uri = await this.fileStore.save(path, inputs.toBuffer());
|
|
17
|
+
return uri;
|
|
18
|
+
}
|
|
19
|
+
async saveProofOutput(id, type, result) {
|
|
20
|
+
const jobResult = {
|
|
21
|
+
type,
|
|
22
|
+
result
|
|
23
|
+
};
|
|
24
|
+
const json = jsonStringify(jobResult);
|
|
25
|
+
const path = `${OUTPUTS_PATH}/${ProvingRequestType[type]}/${id}.json`;
|
|
26
|
+
const uri = await this.fileStore.save(path, Buffer.from(json, 'utf-8'));
|
|
27
|
+
return uri;
|
|
28
|
+
}
|
|
29
|
+
async getProofInput(uri) {
|
|
30
|
+
try {
|
|
31
|
+
const buffer = await this.fileStore.read(uri);
|
|
32
|
+
const type = this.extractTypeFromUri(uri);
|
|
33
|
+
const inputs = getProvingJobInputClassFor(type).fromBuffer(buffer);
|
|
34
|
+
return {
|
|
35
|
+
inputs,
|
|
36
|
+
type
|
|
37
|
+
};
|
|
38
|
+
} catch (err) {
|
|
39
|
+
throw new Error(`Error getting proof input at ${uri}: ${err}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async getProofOutput(uri) {
|
|
43
|
+
try {
|
|
44
|
+
const buffer = await this.fileStore.read(uri);
|
|
45
|
+
return jsonParseWithSchema(buffer.toString('utf-8'), ProvingJobResult);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
throw new Error(`Error getting proof output at ${uri}: ${err}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
extractTypeFromUri(uri) {
|
|
51
|
+
const url = new URL(uri);
|
|
52
|
+
const pathParts = url.pathname.split('/').filter(Boolean);
|
|
53
|
+
const typeString = pathParts.at(-2);
|
|
54
|
+
const type = typeString ? ProvingRequestType[typeString] : undefined;
|
|
55
|
+
if (type === undefined) {
|
|
56
|
+
throw new Error(`Unrecognized proof type ${typeString} in URI ${uri}`);
|
|
57
|
+
}
|
|
58
|
+
return type;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './proof_store.js';
|
|
2
2
|
export * from './inline_proof_store.js';
|
|
3
3
|
export * from './factory.js';
|
|
4
|
-
export * from './
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
export * from './file_store_proof_store.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9wcm9vZl9zdG9yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyw2QkFBNkIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { type GetProvingJobResponse, type ProofUri, type ProvingJob, type ProvingJobBrokerDebug, type ProvingJobConsumer, type ProvingJobFilter, type ProvingJobId, type ProvingJobProducer, type ProvingJobStatus } from '@aztec/stdlib/interfaces/server';
|
|
2
3
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
3
4
|
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
4
5
|
import { type ProverBrokerConfig } from './config.js';
|
|
@@ -7,7 +8,7 @@ import type { ProvingBrokerDatabase } from './proving_broker_database.js';
|
|
|
7
8
|
* A broker that manages proof requests and distributes them to workers based on their priority.
|
|
8
9
|
* It takes a backend that is responsible for storing and retrieving proof requests and results.
|
|
9
10
|
*/
|
|
10
|
-
export declare class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, Traceable {
|
|
11
|
+
export declare class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, ProvingJobBrokerDebug, Traceable {
|
|
11
12
|
#private;
|
|
12
13
|
private database;
|
|
13
14
|
private logger;
|
|
@@ -38,7 +39,8 @@ export declare class ProvingBroker implements ProvingJobProducer, ProvingJobCons
|
|
|
38
39
|
private epochHeight;
|
|
39
40
|
private maxEpochsToKeepResultsFor;
|
|
40
41
|
private started;
|
|
41
|
-
|
|
42
|
+
private debugReplayEnabled;
|
|
43
|
+
constructor(database: ProvingBrokerDatabase, { proverBrokerJobTimeoutMs, proverBrokerPollIntervalMs, proverBrokerJobMaxRetries, proverBrokerMaxEpochsToKeepResultsFor, proverBrokerDebugReplayEnabled }?: Required<Pick<ProverBrokerConfig, 'proverBrokerJobTimeoutMs' | 'proverBrokerPollIntervalMs' | 'proverBrokerJobMaxRetries' | 'proverBrokerMaxEpochsToKeepResultsFor' | 'proverBrokerDebugReplayEnabled'>>, client?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
|
|
42
44
|
private measureQueueDepth;
|
|
43
45
|
private countActiveJobs;
|
|
44
46
|
start(): Promise<void>;
|
|
@@ -54,9 +56,10 @@ export declare class ProvingBroker implements ProvingJobProducer, ProvingJobCons
|
|
|
54
56
|
job: ProvingJob;
|
|
55
57
|
time: number;
|
|
56
58
|
} | undefined>;
|
|
59
|
+
replayProvingJob(jobId: ProvingJobId, type: ProvingRequestType, epochNumber: EpochNumber, inputsUri: ProofUri): Promise<ProvingJobStatus>;
|
|
57
60
|
private cleanUpProvingJobState;
|
|
58
61
|
private cleanupPass;
|
|
59
|
-
private
|
|
62
|
+
private cleanupJobsOlderThanEpoch;
|
|
60
63
|
private reEnqueueExpiredJobs;
|
|
61
64
|
private enqueueJobInternal;
|
|
62
65
|
private isJobStale;
|
|
@@ -70,4 +73,4 @@ export declare class ProvingBroker implements ProvingJobProducer, ProvingJobCons
|
|
|
70
73
|
* is to get picked up by agents
|
|
71
74
|
*/
|
|
72
75
|
export declare const PROOF_TYPES_IN_PRIORITY_ORDER: ProvingRequestType[];
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmluZ19icm9rZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9wcm92aW5nX2Jyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLOUQsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssUUFBUSxFQUNiLEtBQUssVUFBVSxFQUNmLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssWUFBWSxFQUNqQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLGdCQUFnQixFQUV0QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUloSCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBNkIsTUFBTSxhQUFhLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVcxRTs7O0dBR0c7QUFDSCxxQkFBYSxhQUFjLFlBQVcsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsU0FBUzs7SUFpRjFHLE9BQU8sQ0FBQyxRQUFRO0lBa0JoQixPQUFPLENBQUMsTUFBTTtJQWxHaEIsT0FBTyxDQUFDLE1BQU0sQ0E2Qlo7SUFJRixPQUFPLENBQUMsU0FBUyxDQUF1QztJQUV4RCxPQUFPLENBQUMsWUFBWSxDQUFvRDtJQUd4RSxPQUFPLENBQUMsVUFBVSxDQUFrQztJQU1wRCxPQUFPLENBQUMsVUFBVSxDQUErQztJQUdqRSxPQUFPLENBQUMsT0FBTyxDQUFtQztJQUdsRCxPQUFPLENBQUMsUUFBUSxDQUEwRTtJ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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proving_broker.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_broker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proving_broker.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_broker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAK9D,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAsB,MAAM,yBAAyB,CAAC;AAIhH,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAW1E;;;GAGG;AACH,qBAAa,aAAc,YAAW,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,SAAS;;IAiF1G,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,MAAM;IAlGhB,OAAO,CAAC,MAAM,CA6BZ;IAIF,OAAO,CAAC,SAAS,CAAuC;IAExD,OAAO,CAAC,YAAY,CAAoD;IAGxE,OAAO,CAAC,UAAU,CAAkC;IAMpD,OAAO,CAAC,UAAU,CAA+C;IAGjE,OAAO,CAAC,OAAO,CAAmC;IAGlD,OAAO,CAAC,QAAQ,CAA0E;IAE1F,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,eAAe,CAA+B;IACtD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,yBAAyB,CAAsB;IAEvD;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,yBAAyB,CAAK;IAEtC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,kBAAkB,CAAU;IAEpC,YACU,QAAQ,EAAE,qBAAqB,EACvC,EACE,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,qCAAqC,EACrC,8BAA8B,EAC/B,GAAE,QAAQ,CACT,IAAI,CACF,kBAAkB,EAChB,0BAA0B,GAC1B,4BAA4B,GAC5B,2BAA2B,GAC3B,uCAAuC,GACvC,gCAAgC,CACnC,CAC0B,EAC7B,MAAM,GAAE,eAAsC,EACtC,MAAM,yCAA+C,EAS9D;IAED,OAAO,CAAC,iBAAiB,CAEvB;IAEF,OAAO,CAAC,eAAe,CAUrB;IAEW,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BlC;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjC;IAEM,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEnE;IAEM,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;IAEM,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEtE;IAEM,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAEpE;IAEM,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAE1F;IAEM,uBAAuB,CAC5B,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,QAAQ,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAE5C;IAEM,qBAAqB,CAC1B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,UAAQ,EACb,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAE5C;IAEM,wBAAwB,CAC7B,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAExD;IAEY,gBAAgB,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,QAAQ,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAgB3B;IAkDD,OAAO,CAAC,sBAAsB;YAyRhB,WAAW;IAUzB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,iBAAiB;CAG1B;AAiDD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,EAmB7D,CAAC"}
|
|
@@ -51,7 +51,8 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
51
51
|
*/ epochHeight;
|
|
52
52
|
maxEpochsToKeepResultsFor;
|
|
53
53
|
started;
|
|
54
|
-
|
|
54
|
+
debugReplayEnabled;
|
|
55
|
+
constructor(database, { proverBrokerJobTimeoutMs, proverBrokerPollIntervalMs, proverBrokerJobMaxRetries, proverBrokerMaxEpochsToKeepResultsFor, proverBrokerDebugReplayEnabled } = defaultProverBrokerConfig, client = getTelemetryClient(), logger = createLogger('prover-client:proving-broker')){
|
|
55
56
|
this.database = database;
|
|
56
57
|
this.logger = logger;
|
|
57
58
|
this.queues = {
|
|
@@ -104,6 +105,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
104
105
|
this.jobTimeoutMs = proverBrokerJobTimeoutMs;
|
|
105
106
|
this.maxRetries = proverBrokerJobMaxRetries;
|
|
106
107
|
this.maxEpochsToKeepResultsFor = proverBrokerMaxEpochsToKeepResultsFor;
|
|
108
|
+
this.debugReplayEnabled = proverBrokerDebugReplayEnabled ?? false;
|
|
107
109
|
}
|
|
108
110
|
measureQueueDepth;
|
|
109
111
|
countActiveJobs;
|
|
@@ -163,6 +165,32 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
163
165
|
reportProvingJobProgress(id, startedAt, filter) {
|
|
164
166
|
return Promise.resolve(this.#reportProvingJobProgress(id, startedAt, filter));
|
|
165
167
|
}
|
|
168
|
+
async replayProvingJob(jobId, type, epochNumber, inputsUri) {
|
|
169
|
+
if (!this.debugReplayEnabled) {
|
|
170
|
+
throw new Error('Debug replay not enabled. Set PROVER_BROKER_DEBUG_REPLAY_ENABLED=true');
|
|
171
|
+
}
|
|
172
|
+
this.logger.info(`Replaying proving job`, {
|
|
173
|
+
provingJobId: jobId,
|
|
174
|
+
epochNumber,
|
|
175
|
+
inputsUri
|
|
176
|
+
});
|
|
177
|
+
// Clear existing state and enqueue
|
|
178
|
+
this.cleanUpProvingJobState([
|
|
179
|
+
jobId
|
|
180
|
+
]);
|
|
181
|
+
const job = {
|
|
182
|
+
id: jobId,
|
|
183
|
+
type,
|
|
184
|
+
epochNumber,
|
|
185
|
+
inputsUri
|
|
186
|
+
};
|
|
187
|
+
this.jobsCache.set(jobId, job);
|
|
188
|
+
await this.database.addProvingJob(job);
|
|
189
|
+
this.enqueueJobInternal(job);
|
|
190
|
+
return {
|
|
191
|
+
status: 'in-queue'
|
|
192
|
+
};
|
|
193
|
+
}
|
|
166
194
|
async #enqueueProvingJob(job) {
|
|
167
195
|
// We return the job status at the start of this call
|
|
168
196
|
const jobStatus = this.#getProvingJobStatus(job.id);
|
|
@@ -211,18 +239,27 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
211
239
|
this.logger.info(`Cancelling job id=${id}`, {
|
|
212
240
|
provingJobId: id
|
|
213
241
|
});
|
|
214
|
-
await this.#reportProvingJobError(id, 'Aborted', false);
|
|
242
|
+
await this.#reportProvingJobError(id, 'Aborted', false, undefined, true);
|
|
215
243
|
}
|
|
216
244
|
}
|
|
217
245
|
cleanUpProvingJobState(ids) {
|
|
246
|
+
const idsToClean = new Set(ids);
|
|
218
247
|
for (const id of ids){
|
|
219
248
|
this.jobsCache.delete(id);
|
|
249
|
+
const deferred = this.promises.get(id);
|
|
250
|
+
if (deferred) {
|
|
251
|
+
deferred.resolve({
|
|
252
|
+
status: 'rejected',
|
|
253
|
+
reason: 'Proving job cleaned up'
|
|
254
|
+
});
|
|
255
|
+
}
|
|
220
256
|
this.promises.delete(id);
|
|
221
257
|
this.resultsCache.delete(id);
|
|
222
258
|
this.inProgress.delete(id);
|
|
223
259
|
this.retries.delete(id);
|
|
224
260
|
this.enqueuedAt.delete(id);
|
|
225
261
|
}
|
|
262
|
+
this.completedJobNotifications = this.completedJobNotifications.filter((id)=>!idsToClean.has(id));
|
|
226
263
|
}
|
|
227
264
|
#getProvingJobStatus(id) {
|
|
228
265
|
const result = this.resultsCache.get(id);
|
|
@@ -285,7 +322,7 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
285
322
|
}
|
|
286
323
|
return undefined;
|
|
287
324
|
}
|
|
288
|
-
async #reportProvingJobError(id, err, retry = false, filter) {
|
|
325
|
+
async #reportProvingJobError(id, err, retry = false, filter, aborted = false) {
|
|
289
326
|
const info = this.inProgress.get(id);
|
|
290
327
|
const item = this.jobsCache.get(id);
|
|
291
328
|
const retries = this.retries.get(id) ?? 0;
|
|
@@ -332,7 +369,11 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
332
369
|
this.resultsCache.set(id, result);
|
|
333
370
|
this.promises.get(id).resolve(result);
|
|
334
371
|
this.completedJobNotifications.push(id);
|
|
335
|
-
|
|
372
|
+
if (aborted) {
|
|
373
|
+
this.instrumentation.incAbortedJobs(item.type);
|
|
374
|
+
} else {
|
|
375
|
+
this.instrumentation.incRejectedJobs(item.type);
|
|
376
|
+
}
|
|
336
377
|
if (info) {
|
|
337
378
|
const duration = this.msTimeSource() - info.startedAt;
|
|
338
379
|
this.instrumentation.recordJobDuration(item.type, duration);
|
|
@@ -447,20 +488,20 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
447
488
|
return this.#getProvingJob(filter);
|
|
448
489
|
}
|
|
449
490
|
async cleanupPass() {
|
|
450
|
-
this.cleanupStaleJobs();
|
|
451
491
|
this.reEnqueueExpiredJobs();
|
|
452
492
|
const oldestEpochToKeep = this.oldestEpochToKeep();
|
|
453
493
|
if (oldestEpochToKeep > 0) {
|
|
494
|
+
this.cleanupJobsOlderThanEpoch(EpochNumber(oldestEpochToKeep));
|
|
454
495
|
await this.database.deleteAllProvingJobsOlderThanEpoch(EpochNumber(oldestEpochToKeep));
|
|
455
496
|
this.logger.trace(`Deleted all epochs older than ${oldestEpochToKeep}`);
|
|
456
497
|
}
|
|
457
498
|
}
|
|
458
|
-
|
|
499
|
+
cleanupJobsOlderThanEpoch(epochNumber) {
|
|
459
500
|
const jobIds = Array.from(this.jobsCache.keys());
|
|
460
501
|
const jobsToClean = [];
|
|
461
502
|
for (const id of jobIds){
|
|
462
503
|
const job = this.jobsCache.get(id);
|
|
463
|
-
if (
|
|
504
|
+
if (job.epochNumber < epochNumber) {
|
|
464
505
|
jobsToClean.push(id);
|
|
465
506
|
}
|
|
466
507
|
}
|
|
@@ -483,12 +524,28 @@ import { ProvingBrokerInstrumentation } from './proving_broker_instrumentation.j
|
|
|
483
524
|
const now = this.msTimeSource();
|
|
484
525
|
const msSinceLastUpdate = now - metadata.lastUpdatedAt;
|
|
485
526
|
if (msSinceLastUpdate >= this.jobTimeoutMs) {
|
|
486
|
-
this.logger.warn(`Proving job id=${id} timed out. Adding it back to the queue.`, {
|
|
487
|
-
provingJobId: id
|
|
488
|
-
});
|
|
489
527
|
this.inProgress.delete(id);
|
|
490
|
-
this.enqueueJobInternal(item);
|
|
491
528
|
this.instrumentation.incTimedOutJobs(item.type);
|
|
529
|
+
const retries = this.retries.get(id) ?? 0;
|
|
530
|
+
if (retries + 1 < this.maxRetries && !this.isJobStale(item)) {
|
|
531
|
+
this.logger.warn(`Proving job id=${id} timed out. Re-enqueueing (retry ${retries + 1}/${this.maxRetries}).`, {
|
|
532
|
+
provingJobId: id
|
|
533
|
+
});
|
|
534
|
+
this.retries.set(id, retries + 1);
|
|
535
|
+
this.enqueueJobInternal(item);
|
|
536
|
+
} else {
|
|
537
|
+
this.logger.error(`Proving job id=${id} timed out after ${retries + 1} attempts. Marking as failed.`, {
|
|
538
|
+
provingJobId: id
|
|
539
|
+
});
|
|
540
|
+
const result = {
|
|
541
|
+
status: 'rejected',
|
|
542
|
+
reason: 'Timed out'
|
|
543
|
+
};
|
|
544
|
+
this.resultsCache.set(id, result);
|
|
545
|
+
this.promises.get(id)?.resolve(result);
|
|
546
|
+
this.completedJobNotifications.push(id);
|
|
547
|
+
this.instrumentation.incRejectedJobs(item.type);
|
|
548
|
+
}
|
|
492
549
|
}
|
|
493
550
|
}
|
|
494
551
|
}
|
|
@@ -499,7 +499,7 @@ export class KVBrokerDatabase {
|
|
|
499
499
|
continue;
|
|
500
500
|
}
|
|
501
501
|
logger.info(`Loading broker database for epoch ${epochNumber} from ${fullDirectory} with map size ${config.dataStoreMapSizeKb}KB`);
|
|
502
|
-
const db = await openVersionedStoreAt(fullDirectory, SingleEpochDatabase.SCHEMA_VERSION, config.
|
|
502
|
+
const db = await openVersionedStoreAt(fullDirectory, SingleEpochDatabase.SCHEMA_VERSION, config.rollupAddress, config.dataStoreMapSizeKb);
|
|
503
503
|
const epochDb = new SingleEpochDatabase(db);
|
|
504
504
|
epochs.set(epochNumber, epochDb);
|
|
505
505
|
}
|
|
@@ -563,7 +563,7 @@ export class KVBrokerDatabase {
|
|
|
563
563
|
recursive: true
|
|
564
564
|
});
|
|
565
565
|
this.logger.info(`Creating broker database for epoch ${epochNumber} at ${newEpochDirectory} with map size ${this.config.dataStoreMapSizeKb}`);
|
|
566
|
-
const db = await openVersionedStoreAt(newEpochDirectory, SingleEpochDatabase.SCHEMA_VERSION, this.config.
|
|
566
|
+
const db = await openVersionedStoreAt(newEpochDirectory, SingleEpochDatabase.SCHEMA_VERSION, this.config.rollupAddress, this.config.dataStoreMapSizeKb);
|
|
567
567
|
epochDb = new SingleEpochDatabase(db);
|
|
568
568
|
this.epochs.set(epochNumber, epochDb);
|
|
569
569
|
}
|