@aztec/prover-node 4.0.0-nightly.20250907 → 4.0.0-nightly.20260107
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/actions/download-epoch-proving-job.d.ts +4 -4
- package/dest/actions/index.d.ts +1 -1
- package/dest/actions/rerun-epoch-proving-job.d.ts +2 -2
- package/dest/actions/upload-epoch-proof-failure.d.ts +1 -1
- package/dest/bin/run-failed-epoch.d.ts +1 -1
- package/dest/bin/run-failed-epoch.js +1 -1
- package/dest/config.d.ts +7 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +21 -15
- package/dest/factory.d.ts +2 -4
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +24 -13
- package/dest/index.d.ts +1 -1
- package/dest/job/epoch-proving-job-data.d.ts +8 -6
- package/dest/job/epoch-proving-job-data.d.ts.map +1 -1
- package/dest/job/epoch-proving-job-data.js +25 -18
- package/dest/job/epoch-proving-job.d.ts +11 -16
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +493 -77
- package/dest/metrics.d.ts +4 -3
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +9 -3
- package/dest/monitors/epoch-monitor.d.ts +5 -2
- package/dest/monitors/epoch-monitor.d.ts.map +1 -1
- package/dest/monitors/epoch-monitor.js +393 -10
- package/dest/monitors/index.d.ts +1 -1
- package/dest/prover-node-publisher.d.ts +9 -10
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +51 -53
- package/dest/prover-node.d.ts +8 -7
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +435 -50
- package/dest/prover-publisher-factory.d.ts +6 -2
- package/dest/prover-publisher-factory.d.ts.map +1 -1
- package/dest/prover-publisher-factory.js +6 -0
- package/dest/test/index.d.ts +1 -1
- package/dest/test/index.d.ts.map +1 -1
- package/package.json +26 -25
- package/src/bin/run-failed-epoch.ts +2 -2
- package/src/config.ts +33 -30
- package/src/factory.ts +26 -20
- package/src/job/epoch-proving-job-data.ts +31 -25
- package/src/job/epoch-proving-job.ts +138 -82
- package/src/metrics.ts +16 -4
- package/src/monitors/epoch-monitor.ts +15 -5
- package/src/prover-node-publisher.ts +74 -73
- package/src/prover-node.ts +52 -45
- package/src/prover-publisher-factory.ts +12 -1
|
@@ -8,11 +8,11 @@ export declare function downloadEpochProvingJob(location: string, log: Logger, c
|
|
|
8
8
|
dataDirectory: string;
|
|
9
9
|
jobDataDownloadPath: string;
|
|
10
10
|
}): Promise<{
|
|
11
|
-
rollupVersion: number;
|
|
12
11
|
l2BlockNumber: number;
|
|
13
12
|
l2BlockHash: string;
|
|
14
|
-
rollupAddress: import("@aztec/foundation/schemas").EthAddress;
|
|
15
|
-
l1ChainId: number;
|
|
16
13
|
l1BlockNumber: number;
|
|
14
|
+
l1ChainId: number;
|
|
15
|
+
rollupVersion: number;
|
|
16
|
+
rollupAddress: import("../../../foundation/dest/eth-address/index.js").EthAddress;
|
|
17
17
|
}>;
|
|
18
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtZXBvY2gtcHJvdmluZy1qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL2Rvd25sb2FkLWVwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBVXBEOzs7O0dBSUc7QUFDSCx3QkFBc0IsdUJBQXVCLENBQzNDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEdBQUcsRUFBRSxNQUFNLEVBQ1gsTUFBTSxFQUFFO0lBQ04sYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixtQkFBbUIsRUFBRSxNQUFNLENBQUM7Q0FDN0I7Ozs7Ozs7R0FxQkYifQ==
|
package/dest/actions/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './download-epoch-proving-job.js';
|
|
2
2
|
export * from './rerun-epoch-proving-job.js';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQyJ9
|
|
@@ -7,5 +7,5 @@ import { ProverBrokerConfig } from '@aztec/prover-client/broker';
|
|
|
7
7
|
* using the state snapshots, and creates a new epoch proving job to prove the downloaded proving job.
|
|
8
8
|
* Proving is done with a local proving broker and agents as specified by the config.
|
|
9
9
|
*/
|
|
10
|
-
export declare function rerunEpochProvingJob(localPath: string, log: Logger, config: DataStoreConfig & ProverBrokerConfig & ProverClientConfig): Promise<"
|
|
11
|
-
//# sourceMappingURL=
|
|
10
|
+
export declare function rerunEpochProvingJob(localPath: string, log: Logger, config: DataStoreConfig & ProverBrokerConfig & ProverClientConfig): Promise<"awaiting-prover" | "completed" | "failed" | "initialized" | "processing" | "publishing-proof" | "reorg" | "stopped" | "timed-out">;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVydW4tZXBvY2gtcHJvdmluZy1qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL3JlcnVuLWVwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQixNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBK0IsTUFBTSw2QkFBNkIsQ0FBQztBQVc5Rjs7OztHQUlHO0FBQ0gsd0JBQXNCLG9CQUFvQixDQUN4QyxTQUFTLEVBQUUsTUFBTSxFQUNqQixHQUFHLEVBQUUsTUFBTSxFQUNYLE1BQU0sRUFBRSxlQUFlLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLCtJQXFDbEUifQ==
|
|
@@ -12,4 +12,4 @@ type UploadEpochProofConfig = Pick<ChainConfig, 'l1ChainId' | 'rollupVersion'> &
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function uploadEpochProofFailure(location: string, jobId: string, jobData: EpochProvingJobData, archiver: Archiver, worldState: WorldStateSynchronizer, config: UploadEpochProofConfig, log: Logger): Promise<string>;
|
|
14
14
|
export {};
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWVwb2NoLXByb29mLWZhaWx1cmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL3VwbG9hZC1lcG9jaC1wcm9vZi1mYWlsdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsS0FBSyxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBUTlFLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFnQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTFHLEtBQUssc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUt4SDs7OztHQUlHO0FBQ0gsd0JBQXNCLHVCQUF1QixDQUMzQyxRQUFRLEVBQUUsTUFBTSxFQUNoQixLQUFLLEVBQUUsTUFBTSxFQUNiLE9BQU8sRUFBRSxtQkFBbUIsRUFDNUIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsVUFBVSxFQUFFLHNCQUFzQixFQUNsQyxNQUFNLEVBQUUsc0JBQXNCLEVBQzlCLEdBQUcsRUFBRSxNQUFNLG1CQXVDWiJ9
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWZhaWxlZC1lcG9jaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9ydW4tZmFpbGVkLWVwb2NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -18,7 +18,7 @@ async function rerunFailedEpoch(provingJobUrl, baseLocalDir) {
|
|
|
18
18
|
const config = {
|
|
19
19
|
...getProverNodeConfigFromEnv(),
|
|
20
20
|
dataDirectory: dataDir,
|
|
21
|
-
|
|
21
|
+
dataStoreMapSizeKb: env.dataStoreMapSizeKb ?? 1024 * 1024,
|
|
22
22
|
proverId: env.proverId ?? EthAddress.random()
|
|
23
23
|
};
|
|
24
24
|
let metadata;
|
package/dest/config.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type ArchiverConfig } from '@aztec/archiver/config';
|
|
2
2
|
import type { ACVMConfig, BBConfig } from '@aztec/bb-prover/config';
|
|
3
|
-
import { type GenesisStateConfig } from '@aztec/ethereum';
|
|
3
|
+
import { type GenesisStateConfig } from '@aztec/ethereum/config';
|
|
4
4
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
5
5
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
|
-
import { type
|
|
6
|
+
import { type KeyStoreConfig } from '@aztec/node-keystore/config';
|
|
7
|
+
import type { KeyStore } from '@aztec/node-keystore/types';
|
|
7
8
|
import { type SharedNodeConfig } from '@aztec/node-lib/config';
|
|
8
9
|
import { type P2PConfig } from '@aztec/p2p/config';
|
|
9
|
-
import { type ProverAgentConfig, type ProverBrokerConfig } from '@aztec/prover-client/broker';
|
|
10
|
+
import { type ProverAgentConfig, type ProverBrokerConfig } from '@aztec/prover-client/broker/config';
|
|
10
11
|
import { type ProverClientUserConfig } from '@aztec/prover-client/config';
|
|
11
12
|
import { type PublisherConfig, type TxSenderConfig } from '@aztec/sequencer-client/config';
|
|
12
13
|
import { type WorldStateConfig } from '@aztec/world-state/config';
|
|
@@ -16,6 +17,8 @@ export type SpecificProverNodeConfig = {
|
|
|
16
17
|
proverNodePollingIntervalMs: number;
|
|
17
18
|
proverNodeMaxParallelBlocksPerEpoch: number;
|
|
18
19
|
proverNodeFailedEpochStore: string | undefined;
|
|
20
|
+
proverNodeEpochProvingDelayMs: number | undefined;
|
|
21
|
+
proverNodeDisableProofPublish?: boolean;
|
|
19
22
|
txGatheringTimeoutMs: number;
|
|
20
23
|
txGatheringIntervalMs: number;
|
|
21
24
|
txGatheringBatchSize: number;
|
|
@@ -26,4 +29,4 @@ export declare function getProverNodeConfigFromEnv(): ProverNodeConfig;
|
|
|
26
29
|
export declare function getProverNodeBrokerConfigFromEnv(): ProverBrokerConfig;
|
|
27
30
|
export declare function getProverNodeAgentConfigFromEnv(): ProverAgentConfig & BBConfig & ACVMConfig;
|
|
28
31
|
export declare function createKeyStoreForProver(config: ProverNodeConfig): KeyStore | undefined;
|
|
29
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sd0JBQXdCLENBQUM7QUFDN0YsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQXFCLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUNMLEtBQUssaUJBQWlCLEVBQ3RCLEtBQUssa0JBQWtCLEVBR3hCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssc0JBQXNCLEVBQWdELE1BQU0sNkJBQTZCLENBQUM7QUFDeEgsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixLQUFLLGNBQWMsRUFHcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBNEIsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxHQUMzQyxzQkFBc0IsR0FDdEIsU0FBUyxHQUNULGdCQUFnQixHQUNoQixlQUFlLEdBQ2YsY0FBYyxHQUNkLGVBQWUsR0FDZixjQUFjLEdBQ2QsZ0JBQWdCLEdBQ2hCLHdCQUF3QixHQUN4QixrQkFBa0IsQ0FBQztBQUVyQixNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFDckMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDO0lBQ2pDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztJQUNwQyxtQ0FBbUMsRUFBRSxNQUFNLENBQUM7SUFDNUMsMEJBQTBCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMvQyw2QkFBNkIsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ2xELDZCQUE2QixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3hDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixxQkFBcUIsRUFBRSxNQUFNLENBQUM7SUFDOUIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQzdCLHFDQUFxQyxFQUFFLE1BQU0sQ0FBQztDQUMvQyxDQUFDO0FBc0RGLGVBQU8sTUFBTSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FZekUsQ0FBQztBQUVGLHdCQUFnQiwwQkFBMEIsSUFBSSxnQkFBZ0IsQ0FFN0Q7QUFFRCx3QkFBZ0IsZ0NBQWdDLElBQUksa0JBQWtCLENBSXJFO0FBRUQsd0JBQWdCLCtCQUErQixJQUFJLGlCQUFpQixHQUFHLFFBQVEsR0FBRyxVQUFVLENBSzNGO0FBMERELHdCQUFnQix1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FNdEYifQ==
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,sBAAsB,EAAgD,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAsDF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F;AA0DD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAMtF"}
|
package/dest/config.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { archiverConfigMappings } from '@aztec/archiver/config';
|
|
2
|
-
import { genesisStateConfigMappings } from '@aztec/ethereum';
|
|
3
|
-
import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
+
import { genesisStateConfigMappings } from '@aztec/ethereum/config';
|
|
3
|
+
import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
4
4
|
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
5
|
-
import { keyStoreConfigMappings } from '@aztec/node-keystore';
|
|
5
|
+
import { keyStoreConfigMappings } from '@aztec/node-keystore/config';
|
|
6
|
+
import { ethPrivateKeySchema } from '@aztec/node-keystore/schemas';
|
|
6
7
|
import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
|
|
7
8
|
import { p2pConfigMappings } from '@aztec/p2p/config';
|
|
8
|
-
import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/prover-client/broker';
|
|
9
|
+
import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/prover-client/broker/config';
|
|
9
10
|
import { bbConfigMappings, proverClientConfigMappings } from '@aztec/prover-client/config';
|
|
10
11
|
import { getPublisherConfigMappings, getTxSenderConfigMappings } from '@aztec/sequencer-client/config';
|
|
11
12
|
import { worldStateConfigMappings } from '@aztec/world-state/config';
|
|
@@ -30,6 +31,10 @@ const specificProverNodeConfigMappings = {
|
|
|
30
31
|
description: 'File store where to upload node state when an epoch fails to be proven',
|
|
31
32
|
defaultValue: undefined
|
|
32
33
|
},
|
|
34
|
+
proverNodeEpochProvingDelayMs: {
|
|
35
|
+
description: 'Optional delay in milliseconds to wait before proving a new epoch',
|
|
36
|
+
defaultValue: undefined
|
|
37
|
+
},
|
|
33
38
|
txGatheringIntervalMs: {
|
|
34
39
|
env: 'PROVER_NODE_TX_GATHERING_INTERVAL_MS',
|
|
35
40
|
description: 'How often to check that tx data is available',
|
|
@@ -49,6 +54,11 @@ const specificProverNodeConfigMappings = {
|
|
|
49
54
|
env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
|
|
50
55
|
description: 'How long to wait for tx data to be available before giving up',
|
|
51
56
|
...numberConfigHelper(120_000)
|
|
57
|
+
},
|
|
58
|
+
proverNodeDisableProofPublish: {
|
|
59
|
+
env: 'PROVER_NODE_DISABLE_PROOF_PUBLISH',
|
|
60
|
+
description: 'Whether the prover node skips publishing proofs to L1',
|
|
61
|
+
...booleanConfigHelper(false)
|
|
52
62
|
}
|
|
53
63
|
};
|
|
54
64
|
export const proverNodeConfigMappings = {
|
|
@@ -79,14 +89,12 @@ export function getProverNodeAgentConfigFromEnv() {
|
|
|
79
89
|
};
|
|
80
90
|
}
|
|
81
91
|
function createKeyStoreFromWeb3Signer(config) {
|
|
82
|
-
// See what we have been given for proverId.
|
|
83
|
-
const proverId = config.proverId ? config.proverId.toString() : undefined;
|
|
84
92
|
// If we don't have a valid prover Id then we can't build a valid key store with remote signers
|
|
85
|
-
if (proverId === undefined) {
|
|
93
|
+
if (config.proverId === undefined) {
|
|
86
94
|
return undefined;
|
|
87
95
|
}
|
|
88
96
|
// Also, we need at least one publisher address.
|
|
89
|
-
const publishers = config.publisherAddresses
|
|
97
|
+
const publishers = config.publisherAddresses ?? [];
|
|
90
98
|
if (publishers.length === 0) {
|
|
91
99
|
return undefined;
|
|
92
100
|
}
|
|
@@ -94,7 +102,7 @@ function createKeyStoreFromWeb3Signer(config) {
|
|
|
94
102
|
schemaVersion: 1,
|
|
95
103
|
slasher: undefined,
|
|
96
104
|
prover: {
|
|
97
|
-
id: proverId,
|
|
105
|
+
id: config.proverId,
|
|
98
106
|
publisher: publishers
|
|
99
107
|
},
|
|
100
108
|
remoteSigner: config.web3SignerUrl,
|
|
@@ -104,21 +112,19 @@ function createKeyStoreFromWeb3Signer(config) {
|
|
|
104
112
|
}
|
|
105
113
|
function createKeyStoreFromPublisherKeys(config) {
|
|
106
114
|
// Extract the publisher keys from the provided config.
|
|
107
|
-
const publisherKeys = config.publisherPrivateKeys ? config.publisherPrivateKeys.map((k)=>k.getValue()) : [];
|
|
115
|
+
const publisherKeys = config.publisherPrivateKeys ? config.publisherPrivateKeys.map((k)=>ethPrivateKeySchema.parse(k.getValue())) : [];
|
|
108
116
|
// There must be at least 1.
|
|
109
117
|
if (publisherKeys.length === 0) {
|
|
110
118
|
return undefined;
|
|
111
119
|
}
|
|
112
|
-
// Now see what we have been given for proverId.
|
|
113
|
-
const proverId = config.proverId ? config.proverId.toString() : undefined;
|
|
114
120
|
// If we have a valid proverId then create a prover key store of the form { id, publisher: [publisherKeys] }
|
|
115
121
|
// Otherwise create one of the form ("0x12345678....." as EthAccount).
|
|
116
122
|
const keyStore = {
|
|
117
123
|
schemaVersion: 1,
|
|
118
124
|
slasher: undefined,
|
|
119
|
-
prover: proverId === undefined ? publisherKeys[0] : {
|
|
120
|
-
id: proverId,
|
|
121
|
-
publisher: publisherKeys
|
|
125
|
+
prover: config.proverId === undefined ? publisherKeys[0] : {
|
|
126
|
+
id: config.proverId,
|
|
127
|
+
publisher: publisherKeys
|
|
122
128
|
},
|
|
123
129
|
remoteSigner: undefined,
|
|
124
130
|
validators: undefined
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type Archiver } from '@aztec/archiver';
|
|
2
|
-
import {
|
|
3
|
-
import { L1TxUtils } from '@aztec/ethereum';
|
|
2
|
+
import { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
4
3
|
import { type Logger } from '@aztec/foundation/log';
|
|
5
4
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
6
5
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
@@ -17,7 +16,6 @@ export type ProverNodeDeps = {
|
|
|
17
16
|
aztecNodeTxProvider?: Pick<AztecNode, 'getTxsByHash'>;
|
|
18
17
|
archiver?: Archiver;
|
|
19
18
|
publisherFactory?: ProverPublisherFactory;
|
|
20
|
-
blobSinkClient?: BlobSinkClientInterface;
|
|
21
19
|
broker?: ProvingJobBroker;
|
|
22
20
|
l1TxUtils?: L1TxUtils;
|
|
23
21
|
dateProvider?: DateProvider;
|
|
@@ -26,4 +24,4 @@ export type ProverNodeDeps = {
|
|
|
26
24
|
export declare function createProverNode(userConfig: ProverNodeConfig & DataStoreConfig & KeyStoreConfig, deps?: ProverNodeDeps, options?: {
|
|
27
25
|
prefilledPublicData?: PublicDataTreeLeaf[];
|
|
28
26
|
}): Promise<ProverNode>;
|
|
29
|
-
//# sourceMappingURL=
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBTWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBa0QsTUFBTSxzQkFBc0IsQ0FBQztBQU0zRyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RixPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBMkIsTUFBTSxhQUFhLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZFLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNiLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RCxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDcEIsZ0JBQWdCLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztJQUMxQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztJQUMxQixTQUFTLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDdEIsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDO0NBQzdCLENBQUM7QUFFRixnREFBZ0Q7QUFDaEQsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLGNBQWMsRUFDL0QsSUFBSSxHQUFFLGNBQW1CLEVBQ3pCLE9BQU8sR0FBRTtJQUNQLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztDQUN2Qyx1QkEwS1AifQ==
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAMhE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAkD,MAAM,sBAAsB,CAAC;AAM3G,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAK9F,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,gBAAgB,GAAG,eAAe,GAAG,cAAc,EAC/D,IAAI,GAAE,cAAmB,EACzB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC,uBA0KP"}
|
package/dest/factory.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { createArchiver } from '@aztec/archiver';
|
|
2
2
|
import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
3
|
-
import {
|
|
3
|
+
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
4
4
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
5
|
-
import {
|
|
5
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
6
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
|
+
import { PublisherManager } from '@aztec/ethereum/publisher-manager';
|
|
6
8
|
import { pick } from '@aztec/foundation/collection';
|
|
7
9
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
10
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
9
11
|
import { KeystoreManager, loadKeystores, mergeKeystores } from '@aztec/node-keystore';
|
|
10
12
|
import { trySnapshotSync } from '@aztec/node-lib/actions';
|
|
13
|
+
import { createL1TxUtilsFromEthSignerWithStore } from '@aztec/node-lib/factories';
|
|
11
14
|
import { NodeRpcTxSource, createP2PClient } from '@aztec/p2p';
|
|
12
15
|
import { createProverClient } from '@aztec/prover-client';
|
|
13
16
|
import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
|
|
@@ -26,9 +29,7 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
26
29
|
};
|
|
27
30
|
const telemetry = deps.telemetry ?? getTelemetryClient();
|
|
28
31
|
const dateProvider = deps.dateProvider ?? new DateProvider();
|
|
29
|
-
const
|
|
30
|
-
logger: createLogger('prover-node:blob-sink:client')
|
|
31
|
-
});
|
|
32
|
+
const blobClient = await createBlobClientWithFileStores(config, createLogger('prover-node:blob-client:client'));
|
|
32
33
|
const log = deps.log ?? createLogger('prover-node');
|
|
33
34
|
// Build a key store from file if given or from environment otherwise
|
|
34
35
|
let keyStoreManager;
|
|
@@ -42,6 +43,7 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
42
43
|
keyStoreManager = new KeystoreManager(keyStore);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
46
|
+
await keyStoreManager?.validateSigners();
|
|
45
47
|
// Extract the prover signers from the key store and verify that we have one.
|
|
46
48
|
const proverSigners = keyStoreManager?.createProverSigners();
|
|
47
49
|
if (proverSigners === undefined) {
|
|
@@ -51,6 +53,7 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
51
53
|
} else if (!keyStoreProvided) {
|
|
52
54
|
log.warn('KEY STORE CREATED FROM ENVIRONMENT, IT IS RECOMMENDED TO USE A FILE-BASED KEY STORE IN PRODUCTION ENVIRONMENTS');
|
|
53
55
|
}
|
|
56
|
+
log.info(`Creating prover with publishers ${proverSigners.signers.map((signer)=>signer.address.toString()).join()}`);
|
|
54
57
|
// Only consider user provided config if it is valid
|
|
55
58
|
const proverIdInUserConfig = config.proverId === undefined || config.proverId.isZero() ? undefined : config.proverId;
|
|
56
59
|
// ProverId: Take from key store if provided, otherwise from user config if valid, otherwise address of first signer
|
|
@@ -63,7 +66,7 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
63
66
|
await trySnapshotSync(config, log);
|
|
64
67
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
|
|
65
68
|
const archiver = deps.archiver ?? await createArchiver(config, {
|
|
66
|
-
|
|
69
|
+
blobClient,
|
|
67
70
|
epochCache,
|
|
68
71
|
telemetry,
|
|
69
72
|
dateProvider
|
|
@@ -83,21 +86,28 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
83
86
|
const chain = createEthereumChain(rpcUrls, chainId);
|
|
84
87
|
const publicClient = createPublicClient({
|
|
85
88
|
chain: chain.chainInfo,
|
|
86
|
-
transport: fallback(config.l1RpcUrls.map((url)=>http(url
|
|
89
|
+
transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
|
|
90
|
+
batch: false
|
|
91
|
+
}))),
|
|
87
92
|
pollingInterval: config.viemPollingIntervalMS
|
|
88
93
|
});
|
|
89
94
|
const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
|
|
90
95
|
const l1TxUtils = deps.l1TxUtils ? [
|
|
91
96
|
deps.l1TxUtils
|
|
92
|
-
] : proverSigners.signers
|
|
93
|
-
|
|
97
|
+
] : await createL1TxUtilsFromEthSignerWithStore(publicClient, proverSigners.signers, {
|
|
98
|
+
...config,
|
|
99
|
+
scope: 'prover'
|
|
100
|
+
}, {
|
|
101
|
+
telemetry,
|
|
102
|
+
logger: log.createChild('l1-tx-utils'),
|
|
103
|
+
dateProvider
|
|
94
104
|
});
|
|
95
105
|
const publisherFactory = deps.publisherFactory ?? new ProverPublisherFactory(config, {
|
|
96
106
|
rollupContract,
|
|
97
|
-
publisherManager: new PublisherManager(l1TxUtils),
|
|
107
|
+
publisherManager: new PublisherManager(l1TxUtils, config),
|
|
98
108
|
telemetry
|
|
99
109
|
});
|
|
100
|
-
const proofVerifier = new QueuedIVCVerifier(config, config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier());
|
|
110
|
+
const proofVerifier = new QueuedIVCVerifier(config, config.realProofs || config.debugForceTxProofVerification ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(config.proverTestVerificationDelayMs));
|
|
101
111
|
const p2pClient = await createP2PClient(P2PClientType.Prover, config, archiver, proofVerifier, worldStateSynchronizer, epochCache, getPackageVersion() ?? '', dateProvider, telemetry, {
|
|
102
112
|
txCollectionNodeSources: deps.aztecNodeTxProvider ? [
|
|
103
113
|
new NodeRpcTxSource(deps.aztecNodeTxProvider, 'TestNode')
|
|
@@ -105,10 +115,11 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
105
115
|
});
|
|
106
116
|
await p2pClient.start();
|
|
107
117
|
const proverNodeConfig = {
|
|
108
|
-
...pick(config, 'proverNodeMaxPendingJobs', 'proverNodeMaxParallelBlocksPerEpoch', 'proverNodePollingIntervalMs', 'txGatheringMaxParallelRequests', 'txGatheringIntervalMs', 'txGatheringTimeoutMs', 'proverNodeFailedEpochStore', 'dataDirectory', 'l1ChainId', 'rollupVersion')
|
|
118
|
+
...pick(config, 'proverNodeMaxPendingJobs', 'proverNodeMaxParallelBlocksPerEpoch', 'proverNodePollingIntervalMs', 'proverNodeEpochProvingDelayMs', 'txGatheringMaxParallelRequests', 'txGatheringIntervalMs', 'txGatheringTimeoutMs', 'proverNodeFailedEpochStore', 'proverNodeDisableProofPublish', 'dataDirectory', 'l1ChainId', 'rollupVersion')
|
|
109
119
|
};
|
|
110
120
|
const epochMonitor = await EpochMonitor.create(archiver, {
|
|
111
|
-
pollingIntervalMs: config.proverNodePollingIntervalMs
|
|
121
|
+
pollingIntervalMs: config.proverNodePollingIntervalMs,
|
|
122
|
+
provingDelayMs: config.proverNodeEpochProvingDelayMs
|
|
112
123
|
}, telemetry);
|
|
113
124
|
const l1Metrics = new L1Metrics(telemetry.getMeter('ProverNodeL1Metrics'), publicClient, l1TxUtils.map((utils)=>utils.getSenderAddress()));
|
|
114
125
|
return new ProverNode(prover, publisherFactory, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, epochMonitor, rollupContract, l1Metrics, proverNodeConfig, telemetry);
|
package/dest/index.d.ts
CHANGED
|
@@ -3,4 +3,4 @@ export * from './config.js';
|
|
|
3
3
|
export * from './factory.js';
|
|
4
4
|
export * from './prover-node-publisher.js';
|
|
5
5
|
export * from './prover-node.js';
|
|
6
|
-
//# sourceMappingURL=
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxrQkFBa0IsQ0FBQyJ9
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { CommitteeAttestation } from '@aztec/stdlib/block';
|
|
4
|
+
import { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
3
5
|
import { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
4
6
|
/** All data from an epoch used in proving. */
|
|
5
7
|
export type EpochProvingJobData = {
|
|
6
|
-
epochNumber:
|
|
7
|
-
|
|
8
|
+
epochNumber: EpochNumber;
|
|
9
|
+
checkpoints: Checkpoint[];
|
|
8
10
|
txs: Map<string, Tx>;
|
|
9
|
-
l1ToL2Messages: Record<
|
|
11
|
+
l1ToL2Messages: Record<CheckpointNumber, Fr[]>;
|
|
10
12
|
previousBlockHeader: BlockHeader;
|
|
11
13
|
attestations: CommitteeAttestation[];
|
|
12
14
|
};
|
|
13
15
|
export declare function validateEpochProvingJobData(data: EpochProvingJobData): void;
|
|
14
16
|
export declare function serializeEpochProvingJobData(data: EpochProvingJobData): Buffer;
|
|
15
17
|
export declare function deserializeEpochProvingJobData(buf: Buffer): EpochProvingJobData;
|
|
16
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2ItZGF0YS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pvYi9lcG9jaC1wcm92aW5nLWpvYi1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsOENBQThDO0FBQzlDLE1BQU0sTUFBTSxtQkFBbUIsR0FBRztJQUNoQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMxQixHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQixjQUFjLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO0lBQ2pDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0NBQ3RDLENBQUM7QUFFRix3QkFBZ0IsMkJBQTJCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixRQWtCcEU7QUFFRCx3QkFBZ0IsNEJBQTRCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixHQUFHLE1BQU0sQ0FzQjlFO0FBRUQsd0JBQWdCLDhCQUE4QixDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBb0IvRSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,mBAAmB,EAAE,WAAW,CAAC;IACjC,YAAY,EAAE,oBAAoB,EAAE,CAAC;CACtC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,QAkBpE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAsB9E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAoB/E"}
|
|
@@ -1,40 +1,47 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
3
|
-
import { CommitteeAttestation
|
|
4
|
+
import { CommitteeAttestation } from '@aztec/stdlib/block';
|
|
5
|
+
import { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
4
6
|
import { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
5
7
|
export function validateEpochProvingJobData(data) {
|
|
6
|
-
if (data.
|
|
7
|
-
throw new Error(
|
|
8
|
+
if (data.checkpoints.length === 0) {
|
|
9
|
+
throw new Error('No checkpoints to prove');
|
|
8
10
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
const firstBlockNumber = data.checkpoints[0].blocks[0].number;
|
|
12
|
+
const previousBlockNumber = data.previousBlockHeader.getBlockNumber();
|
|
13
|
+
if (previousBlockNumber + 1 !== firstBlockNumber) {
|
|
14
|
+
throw new Error(`Initial block number ${firstBlockNumber} does not match previous block header ${previousBlockNumber}`);
|
|
15
|
+
}
|
|
16
|
+
for (const checkpoint of data.checkpoints){
|
|
17
|
+
if (!(checkpoint.number in data.l1ToL2Messages)) {
|
|
18
|
+
throw new Error(`Missing L1 to L2 messages for checkpoint number ${checkpoint.number}`);
|
|
12
19
|
}
|
|
13
20
|
}
|
|
14
21
|
}
|
|
15
22
|
export function serializeEpochProvingJobData(data) {
|
|
16
|
-
const
|
|
23
|
+
const checkpoints = data.checkpoints.map((checkpoint)=>checkpoint.toBuffer());
|
|
17
24
|
const txs = Array.from(data.txs.values()).map((tx)=>tx.toBuffer());
|
|
18
|
-
const l1ToL2Messages = Object.entries(data.l1ToL2Messages).map(([
|
|
19
|
-
Number(
|
|
25
|
+
const l1ToL2Messages = Object.entries(data.l1ToL2Messages).map(([checkpointNumber, messages])=>[
|
|
26
|
+
Number(checkpointNumber),
|
|
20
27
|
messages.length,
|
|
21
28
|
...messages
|
|
22
29
|
]);
|
|
23
30
|
const attestations = data.attestations.map((attestation)=>attestation.toBuffer());
|
|
24
|
-
return serializeToBuffer(
|
|
31
|
+
return serializeToBuffer(data.epochNumber, data.previousBlockHeader, checkpoints.length, ...checkpoints, txs.length, ...txs, l1ToL2Messages.length, ...l1ToL2Messages, attestations.length, ...attestations);
|
|
25
32
|
}
|
|
26
33
|
export function deserializeEpochProvingJobData(buf) {
|
|
27
34
|
const reader = BufferReader.asReader(buf);
|
|
28
|
-
const epochNumber =
|
|
35
|
+
const epochNumber = EpochNumber(reader.readNumber());
|
|
29
36
|
const previousBlockHeader = reader.readObject(BlockHeader);
|
|
30
|
-
const
|
|
37
|
+
const checkpoints = reader.readVector(Checkpoint);
|
|
31
38
|
const txArray = reader.readVector(Tx);
|
|
32
|
-
const
|
|
39
|
+
const l1ToL2MessageCheckpointCount = reader.readNumber();
|
|
33
40
|
const l1ToL2Messages = {};
|
|
34
|
-
for(let i = 0; i <
|
|
35
|
-
const
|
|
41
|
+
for(let i = 0; i < l1ToL2MessageCheckpointCount; i++){
|
|
42
|
+
const checkpointNumber = CheckpointNumber(reader.readNumber());
|
|
36
43
|
const messages = reader.readVector(Fr);
|
|
37
|
-
l1ToL2Messages[
|
|
44
|
+
l1ToL2Messages[checkpointNumber] = messages;
|
|
38
45
|
}
|
|
39
46
|
const attestations = reader.readVector(CommitteeAttestation);
|
|
40
47
|
const txs = new Map(txArray.map((tx)=>[
|
|
@@ -44,7 +51,7 @@ export function deserializeEpochProvingJobData(buf) {
|
|
|
44
51
|
return {
|
|
45
52
|
epochNumber,
|
|
46
53
|
previousBlockHeader,
|
|
47
|
-
|
|
54
|
+
checkpoints,
|
|
48
55
|
txs,
|
|
49
56
|
l1ToL2Messages,
|
|
50
57
|
attestations
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import type { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
2
3
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
3
4
|
import { type EpochProver, type EpochProvingJobState, EpochProvingJobTerminalState, type ForkMerkleTreeOperations } from '@aztec/stdlib/interfaces/server';
|
|
@@ -5,6 +6,11 @@ import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
|
5
6
|
import type { ProverNodeJobMetrics } from '../metrics.js';
|
|
6
7
|
import type { ProverNodePublisher } from '../prover-node-publisher.js';
|
|
7
8
|
import { type EpochProvingJobData } from './epoch-proving-job-data.js';
|
|
9
|
+
export type EpochProvingJobOptions = {
|
|
10
|
+
parallelBlockLimit?: number;
|
|
11
|
+
skipEpochCheck?: boolean;
|
|
12
|
+
skipSubmitProof?: boolean;
|
|
13
|
+
};
|
|
8
14
|
/**
|
|
9
15
|
* Job that grabs a range of blocks from the unfinalized chain from L1, gets their txs given their hashes,
|
|
10
16
|
* re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
|
|
@@ -27,41 +33,30 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
27
33
|
private epochCheckPromise;
|
|
28
34
|
private deadlineTimeoutHandler;
|
|
29
35
|
readonly tracer: Tracer;
|
|
30
|
-
constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config:
|
|
31
|
-
parallelBlockLimit?: number;
|
|
32
|
-
skipEpochCheck?: boolean;
|
|
33
|
-
});
|
|
36
|
+
constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: EpochProvingJobOptions);
|
|
34
37
|
getId(): string;
|
|
35
38
|
getState(): EpochProvingJobState;
|
|
36
|
-
getEpochNumber():
|
|
39
|
+
getEpochNumber(): EpochNumber;
|
|
37
40
|
getDeadline(): Date | undefined;
|
|
38
41
|
getProvingData(): EpochProvingJobData;
|
|
39
42
|
private get epochNumber();
|
|
40
|
-
private get
|
|
43
|
+
private get checkpoints();
|
|
41
44
|
private get txs();
|
|
42
45
|
private get attestations();
|
|
43
46
|
/**
|
|
44
47
|
* Proves the given epoch and submits the proof to L1.
|
|
45
48
|
*/
|
|
46
49
|
run(): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* Create a new db fork for tx processing, inserting all L1 to L2.
|
|
49
|
-
* REFACTOR: The prover already spawns a db fork of its own for each block, so we may be able to do away with just one fork.
|
|
50
|
-
*/
|
|
51
50
|
private createFork;
|
|
52
51
|
private progressState;
|
|
53
52
|
private checkState;
|
|
54
53
|
stop(state?: EpochProvingJobTerminalState): Promise<void>;
|
|
55
54
|
private scheduleDeadlineStop;
|
|
56
|
-
/**
|
|
57
|
-
* Kicks off a running promise that queries the archiver for the set of L2 blocks of the current epoch.
|
|
58
|
-
* If those change, stops the proving job with a `rerun` state, so the node re-enqueues it.
|
|
59
|
-
*/
|
|
60
55
|
private scheduleEpochCheck;
|
|
61
|
-
private
|
|
56
|
+
private gatherPreviousBlockHeaders;
|
|
62
57
|
private getTxs;
|
|
63
58
|
private getL1ToL2Messages;
|
|
64
59
|
private processTxs;
|
|
65
60
|
}
|
|
66
61
|
export { type EpochProvingJobState };
|
|
67
|
-
//# sourceMappingURL=
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvZXBvY2gtcHJvdmluZy1qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBUzNFLE9BQU8sS0FBSyxFQUFtQixzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZGLE9BQU8sS0FBSyxFQUFjLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJFLE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFDaEIsS0FBSyxvQkFBb0IsRUFDekIsNEJBQTRCLEVBQzVCLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0saUNBQWlDLENBQUM7QUFJekMsT0FBTyxFQUFjLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFhLE1BQU0seUJBQXlCLENBQUM7QUFJN0YsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBK0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVwRyxNQUFNLE1BQU0sc0JBQXNCLEdBQUc7SUFDbkMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDNUIsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3pCLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUMzQixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHFCQUFhLGVBQWdCLFlBQVcsU0FBUztJQVk3QyxPQUFPLENBQUMsSUFBSTtJQUNaLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLHNCQUFzQjtJQUM5QixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxNQUFNO0lBbkJoQixPQUFPLENBQUMsS0FBSyxDQUF1QztJQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFpRDtJQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFTO0lBRXJCLE9BQU8sQ0FBQyxVQUFVLENBQTRCO0lBQzlDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBNkI7SUFDdEQsT0FBTyxDQUFDLHNCQUFzQixDQUE2QjtJQUUzRCxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFlBQ1UsSUFBSSxFQUFFLG1CQUFtQixFQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUNsRCxNQUFNLEVBQUUsV0FBVyxFQUNuQixzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUN4RCxhQUFhLEVBQUUsYUFBYSxHQUFHLFNBQVMsRUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUM3QixRQUFRLEVBQUUsSUFBSSxHQUFHLFNBQVMsRUFDMUIsTUFBTSxFQUFFLHNCQUFzQixFQUt2QztJQUVNLEtBQUssSUFBSSxNQUFNLENBRXJCO0lBRU0sUUFBUSxJQUFJLG9CQUFvQixDQUV0QztJQUVNLGNBQWMsSUFBSSxXQUFXLENBRW5DO0lBRU0sV0FBVyxJQUFJLElBQUksR0FBRyxTQUFTLENBRXJDO0lBRU0sY0FBYyxJQUFJLG1CQUFtQixDQUUzQztJQUVELE9BQU8sS0FBSyxXQUFXLEdBRXRCO0lBRUQsT0FBTyxLQUFLLFdBQVcsR0FFdEI7SUFFRCxPQUFPLEtBQUssR0FBRyxHQUVkO0lBRUQsT0FBTyxLQUFLLFlBQVksR0FFdkI7SUFFRDs7T0FFRztJQUlVLEdBQUcsa0JBaUxmO1lBTWEsVUFBVTtJQWdCeEIsT0FBTyxDQUFDLGFBQWE7SUFLckIsT0FBTyxDQUFDLFVBQVU7SUFNTCxJQUFJLENBQUMsS0FBSyxHQUFFLDRCQUF3QyxpQkFNaEU7SUFFRCxPQUFPLENBQUMsb0JBQW9CO1lBd0JkLGtCQUFrQjtJQStCaEMsT0FBTyxDQUFDLDBCQUEwQjtJQUtsQyxPQUFPLENBQUMsTUFBTTtJQUlkLE9BQU8sQ0FBQyxpQkFBaUI7WUFJWCxVQUFVO0NBbUJ6QjtBQVNELE9BQU8sRUFBRSxLQUFLLG9CQUFvQixFQUFFLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAS3E,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG,MAAM,MAAM,sBAAsB,GAAG;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACU,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE,sBAAsB,EAKvC;IAEM,KAAK,IAAI,MAAM,CAErB;IAEM,QAAQ,IAAI,oBAAoB,CAEtC;IAEM,cAAc,IAAI,WAAW,CAEnC;IAEM,WAAW,IAAI,IAAI,GAAG,SAAS,CAErC;IAEM,cAAc,IAAI,mBAAmB,CAE3C;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG,kBAiLf;YAMa,UAAU;IAgBxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC,iBAMhE;IAED,OAAO,CAAC,oBAAoB;YAwBd,kBAAkB;IA+BhC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|