@aztec/prover-node 0.69.0 → 0.69.1
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 +3 -0
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +4 -1
- package/dest/job/epoch-proving-job.d.ts +3 -3
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +10 -17
- package/dest/prover-node.d.ts +9 -2
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +83 -13
- package/package.json +17 -17
- package/src/config.ts +18 -0
- package/src/factory.ts +3 -0
- package/src/job/epoch-proving-job.ts +8 -25
- package/src/prover-node.ts +105 -12
package/dest/config.d.ts
CHANGED
|
@@ -14,6 +14,9 @@ type SpecificProverNodeConfig = {
|
|
|
14
14
|
proverNodeMaxPendingJobs: number;
|
|
15
15
|
proverNodePollingIntervalMs: number;
|
|
16
16
|
proverNodeMaxParallelBlocksPerEpoch: number;
|
|
17
|
+
txGatheringTimeoutMs: number;
|
|
18
|
+
txGatheringIntervalMs: number;
|
|
19
|
+
txGatheringMaxParallelRequests: number;
|
|
17
20
|
};
|
|
18
21
|
export type QuoteProviderConfig = {
|
|
19
22
|
quoteProviderBasisPointFee: number;
|
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,EAAoD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAKpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAwD,MAAM,2BAA2B,CAAC;AAExH,OAAO,EAAE,KAAK,uBAAuB,EAAmC,MAAM,kBAAkB,CAAC;AACjG,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,kBAAkB,GAClB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,CAAC;AAE3B,KAAK,wBAAwB,GAAG;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAKpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAwD,MAAM,2BAA2B,CAAC;AAExH,OAAO,EAAE,KAAK,uBAAuB,EAAmC,MAAM,kBAAkB,CAAC;AACjG,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,kBAAkB,GAClB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,CAAC;AAE3B,KAAK,wBAAwB,GAAG;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,0BAA0B,EAAE,MAAM,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAqDF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAc7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F"}
|
package/dest/config.js
CHANGED
|
@@ -24,6 +24,21 @@ const specificProverNodeConfigMappings = {
|
|
|
24
24
|
description: 'The Maximum number of blocks to process in parallel while proving an epoch',
|
|
25
25
|
...numberConfigHelper(32),
|
|
26
26
|
},
|
|
27
|
+
txGatheringTimeoutMs: {
|
|
28
|
+
env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
|
|
29
|
+
description: 'The maximum amount of time to wait for tx data to be available',
|
|
30
|
+
...numberConfigHelper(60000),
|
|
31
|
+
},
|
|
32
|
+
txGatheringIntervalMs: {
|
|
33
|
+
env: 'PROVER_NODE_TX_GATHERING_INTERVAL_MS',
|
|
34
|
+
description: 'How often to check that tx data is available',
|
|
35
|
+
...numberConfigHelper(1000),
|
|
36
|
+
},
|
|
37
|
+
txGatheringMaxParallelRequests: {
|
|
38
|
+
env: 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS',
|
|
39
|
+
description: 'How many txs to load up a time',
|
|
40
|
+
...numberConfigHelper(100),
|
|
41
|
+
},
|
|
27
42
|
};
|
|
28
43
|
const quoteProviderConfigMappings = {
|
|
29
44
|
quoteProviderBasisPointFee: {
|
|
@@ -80,4 +95,4 @@ export function getProverNodeAgentConfigFromEnv() {
|
|
|
80
95
|
...getConfigFromMappings(bbConfigMappings),
|
|
81
96
|
};
|
|
82
97
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0csT0FBTyxFQUdMLHlCQUF5QixFQUN6QiwwQkFBMEIsR0FDM0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEcsT0FBTyxFQUFrQixtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNGLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixHQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFHTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQXlCLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEgsT0FBTyxFQUFnQywrQkFBK0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pHLE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsZ0NBQWdDLEdBQ2pDLE1BQU0saUNBQWlDLENBQUM7QUE2QnpDLE1BQU0sZ0NBQWdDLEdBQWlEO0lBQ3JGLHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSw4QkFBOEI7UUFDbkMsV0FBVyxFQUFFLHdEQUF3RDtRQUNyRSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELDJCQUEyQixFQUFFO1FBQzNCLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMs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
|
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;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAItF,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAKtE,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACtB,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAItF,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAKtE,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACtB,uBAgEP"}
|
package/dest/factory.js
CHANGED
|
@@ -47,6 +47,9 @@ export async function createProverNode(config, deps = {}) {
|
|
|
47
47
|
maxPendingJobs: config.proverNodeMaxPendingJobs,
|
|
48
48
|
pollingIntervalMs: config.proverNodePollingIntervalMs,
|
|
49
49
|
maxParallelBlocksPerEpoch: config.proverNodeMaxParallelBlocksPerEpoch,
|
|
50
|
+
txGatheringMaxParallelRequests: config.txGatheringMaxParallelRequests,
|
|
51
|
+
txGatheringIntervalMs: config.txGatheringIntervalMs,
|
|
52
|
+
txGatheringTimeoutMs: config.txGatheringTimeoutMs,
|
|
50
53
|
};
|
|
51
54
|
const claimsMonitor = new ClaimsMonitor(publisher, telemetry, proverNodeConfig);
|
|
52
55
|
const epochMonitor = new EpochMonitor(archiver, telemetry, proverNodeConfig);
|
|
@@ -70,4 +73,4 @@ function createQuoteSigner(config) {
|
|
|
70
73
|
const privateKey = config.publisherPrivateKey;
|
|
71
74
|
return QuoteSigner.new(Buffer32.fromString(privateKey), rollupContract);
|
|
72
75
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type EpochProver, type EpochProvingJobState, type ForkMerkleTreeOperations, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type
|
|
1
|
+
import { type EpochProver, type EpochProvingJobState, type ForkMerkleTreeOperations, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
3
3
|
import { type PublicProcessorFactory } from '@aztec/simulator';
|
|
4
4
|
import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
@@ -12,12 +12,12 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
12
12
|
private dbProvider;
|
|
13
13
|
private epochNumber;
|
|
14
14
|
private blocks;
|
|
15
|
+
private txs;
|
|
15
16
|
private prover;
|
|
16
17
|
private publicProcessorFactory;
|
|
17
18
|
private publisher;
|
|
18
19
|
private l2BlockSource;
|
|
19
20
|
private l1ToL2MessageSource;
|
|
20
|
-
private coordination;
|
|
21
21
|
private metrics;
|
|
22
22
|
private config;
|
|
23
23
|
private cleanUp;
|
|
@@ -26,7 +26,7 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
26
26
|
private uuid;
|
|
27
27
|
private runPromise;
|
|
28
28
|
readonly tracer: Tracer;
|
|
29
|
-
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource,
|
|
29
|
+
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], txs: Tx[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, metrics: ProverNodeMetrics, config?: {
|
|
30
30
|
parallelBlockLimit: number;
|
|
31
31
|
}, cleanUp?: (job: EpochProvingJob) => Promise<void>);
|
|
32
32
|
getId(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAElB,KAAK,EAAE,EACR,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAU7C,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IApBjB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAE9C,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,UAAU,EAAE,wBAAwB,EACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EAAE,EACjB,GAAG,EAAE,EAAE,EAAE,EACT,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAA+B,EACnE,OAAO,GAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAA2B;IAM7E,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIvC;;OAEG;IAIU,GAAG;IA4EH,IAAI;IAQjB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAWzB;AAED,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { EmptyTxValidator, } from '@aztec/circuit-types';
|
|
3
2
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
4
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
@@ -16,16 +15,16 @@ let EpochProvingJob = (() => {
|
|
|
16
15
|
let _instanceExtraInitializers = [];
|
|
17
16
|
let _run_decorators;
|
|
18
17
|
return _a = class EpochProvingJob {
|
|
19
|
-
constructor(dbProvider, epochNumber, blocks, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource,
|
|
18
|
+
constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, config = { parallelBlockLimit: 32 }, cleanUp = () => Promise.resolve()) {
|
|
20
19
|
this.dbProvider = (__runInitializers(this, _instanceExtraInitializers), dbProvider);
|
|
21
20
|
this.epochNumber = epochNumber;
|
|
22
21
|
this.blocks = blocks;
|
|
22
|
+
this.txs = txs;
|
|
23
23
|
this.prover = prover;
|
|
24
24
|
this.publicProcessorFactory = publicProcessorFactory;
|
|
25
25
|
this.publisher = publisher;
|
|
26
26
|
this.l2BlockSource = l2BlockSource;
|
|
27
27
|
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
28
|
-
this.coordination = coordination;
|
|
29
28
|
this.metrics = metrics;
|
|
30
29
|
this.config = config;
|
|
31
30
|
this.cleanUp = cleanUp;
|
|
@@ -63,10 +62,8 @@ let EpochProvingJob = (() => {
|
|
|
63
62
|
this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
|
|
64
63
|
await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block) => {
|
|
65
64
|
const globalVariables = block.header.globalVariables;
|
|
66
|
-
const
|
|
67
|
-
const txCount = block.body.numberOfTxsIncludingPadded;
|
|
65
|
+
const txs = this.getTxs(block);
|
|
68
66
|
const l1ToL2Messages = await this.getL1ToL2Messages(block);
|
|
69
|
-
const txs = await this.getTxs(txHashes, block.number);
|
|
70
67
|
const previousHeader = await this.getBlockHeader(block.number - 1);
|
|
71
68
|
this.log.verbose(`Starting processing block ${block.number}`, {
|
|
72
69
|
number: block.number,
|
|
@@ -84,7 +81,7 @@ let EpochProvingJob = (() => {
|
|
|
84
81
|
// Process public fns
|
|
85
82
|
const db = await this.dbProvider.fork(block.number - 1);
|
|
86
83
|
const publicProcessor = this.publicProcessorFactory.create(db, previousHeader, globalVariables, true);
|
|
87
|
-
const processed = await this.processTxs(publicProcessor, txs
|
|
84
|
+
const processed = await this.processTxs(publicProcessor, txs);
|
|
88
85
|
await this.prover.addTxs(processed);
|
|
89
86
|
await db.close();
|
|
90
87
|
this.log.verbose(`Processed all ${txs.length} txs for block ${block.number}`, {
|
|
@@ -126,19 +123,15 @@ let EpochProvingJob = (() => {
|
|
|
126
123
|
}
|
|
127
124
|
return this.l2BlockSource.getBlockHeader(blockNumber);
|
|
128
125
|
}
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
if (notFound.length) {
|
|
133
|
-
throw new Error(`Txs not found for block ${blockNumber}: ${notFound.map(([txHash]) => txHash.toString()).join(', ')}`);
|
|
134
|
-
}
|
|
135
|
-
return txs.map(([_, tx]) => tx);
|
|
126
|
+
getTxs(block) {
|
|
127
|
+
const txHashes = block.body.txEffects.map(tx => tx.txHash.toBigInt());
|
|
128
|
+
return this.txs.filter(tx => txHashes.includes(tx.getTxHash().toBigInt()));
|
|
136
129
|
}
|
|
137
130
|
getL1ToL2Messages(block) {
|
|
138
131
|
return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
|
|
139
132
|
}
|
|
140
|
-
async processTxs(publicProcessor, txs
|
|
141
|
-
const [processedTxs, failedTxs] = await publicProcessor.process(txs
|
|
133
|
+
async processTxs(publicProcessor, txs) {
|
|
134
|
+
const [processedTxs, failedTxs] = await publicProcessor.process(txs);
|
|
142
135
|
if (failedTxs.length) {
|
|
143
136
|
throw new Error(`Failed to process txs: ${failedTxs.map(({ tx, error }) => `${tx.getTxHash()} (${error})`).join(', ')}`);
|
|
144
137
|
}
|
|
@@ -156,4 +149,4 @@ let EpochProvingJob = (() => {
|
|
|
156
149
|
_a;
|
|
157
150
|
})();
|
|
158
151
|
export { EpochProvingJob };
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Vwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFVQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsVUFBVSxFQUErQixTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUl0Qzs7OztHQUlHO0lBQ1UsZUFBZTs7OztzQkFBZixlQUFlO1lBUzFCLFlBQ1UsVUFBb0MsRUFDcEMsV0FBbUIsRUFDbkIsTUFBaUIsRUFDakIsR0FBUyxFQUNULE1BQW1CLEVBQ25CLHNCQUE4QyxFQUM5QyxTQUFzQixFQUN0QixhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsT0FBMEIsRUFDMUIsU0FBeUMsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsRUFDbkUsVUFBbUQsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFYMUUsZUFBVSxJQVZULG1EQUFlLEVBVWhCLFVBQVUsRUFBMEI7Z0JBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFRO2dCQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFXO2dCQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFNO2dCQUNULFdBQU0sR0FBTixNQUFNLENBQWE7Z0JBQ25CLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7Z0JBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWE7Z0JBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO2dCQUM1Qix3QkFBbUIsR0FBbkIs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
|
package/dest/prover-node.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type EpochProofClaim, type EpochProofQuote, type EpochProverManager, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type P2PClientType, type ProverCoordination, type ProverNodeApi, type Service, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
1
|
+
import { type EpochProofClaim, type EpochProofQuote, type EpochProverManager, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type P2PClientType, type ProverCoordination, type ProverNodeApi, type Service, type Tx, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
2
2
|
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
3
3
|
import { type Maybe } from '@aztec/foundation/types';
|
|
4
4
|
import { type P2P } from '@aztec/p2p';
|
|
@@ -15,6 +15,9 @@ export type ProverNodeOptions = {
|
|
|
15
15
|
pollingIntervalMs: number;
|
|
16
16
|
maxPendingJobs: number;
|
|
17
17
|
maxParallelBlocksPerEpoch: number;
|
|
18
|
+
txGatheringTimeoutMs: number;
|
|
19
|
+
txGatheringIntervalMs: number;
|
|
20
|
+
txGatheringMaxParallelRequests: number;
|
|
18
21
|
};
|
|
19
22
|
/**
|
|
20
23
|
* An Aztec Prover Node is a standalone process that monitors the unfinalised chain on L1 for unproven blocks,
|
|
@@ -40,6 +43,7 @@ export declare class ProverNode implements ClaimsMonitorHandler, EpochMonitorHan
|
|
|
40
43
|
private dateProvider;
|
|
41
44
|
private latestEpochWeAreProving;
|
|
42
45
|
private jobs;
|
|
46
|
+
private cachedEpochData;
|
|
43
47
|
private options;
|
|
44
48
|
private metrics;
|
|
45
49
|
readonly tracer: Tracer;
|
|
@@ -91,8 +95,11 @@ export declare class ProverNode implements ClaimsMonitorHandler, EpochMonitorHan
|
|
|
91
95
|
}[]>;
|
|
92
96
|
private checkMaximumPendingJobs;
|
|
93
97
|
private createProvingJob;
|
|
98
|
+
private gatherEpochData;
|
|
99
|
+
private gatherBlocks;
|
|
100
|
+
private gatherTxs;
|
|
94
101
|
/** Extracted for testing purposes. */
|
|
95
|
-
protected doCreateEpochProvingJob(epochNumber: bigint, blocks: L2Block[], publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): EpochProvingJob;
|
|
102
|
+
protected doCreateEpochProvingJob(epochNumber: bigint, blocks: L2Block[], txs: Tx[], publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): EpochProvingJob;
|
|
96
103
|
/** Extracted for testing purposes. */
|
|
97
104
|
protected triggerMonitors(): Promise<void>;
|
|
98
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
|
package/dest/prover-node.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { EpochProofQuotePayload, tryStop, } from '@aztec/circuit-types';
|
|
3
|
+
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
3
4
|
import { compact } from '@aztec/foundation/collection';
|
|
5
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
4
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
5
8
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
6
9
|
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
7
10
|
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -17,6 +20,7 @@ let ProverNode = (() => {
|
|
|
17
20
|
var _a;
|
|
18
21
|
let _instanceExtraInitializers = [];
|
|
19
22
|
let _createProvingJob_decorators;
|
|
23
|
+
let _gatherEpochData_decorators;
|
|
20
24
|
return _a = class ProverNode {
|
|
21
25
|
constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, quoteProvider, quoteSigner, claimsMonitor, epochsMonitor, bondManager, telemetryClient, options = {}) {
|
|
22
26
|
this.prover = (__runInitializers(this, _instanceExtraInitializers), prover);
|
|
@@ -35,10 +39,14 @@ let ProverNode = (() => {
|
|
|
35
39
|
this.log = createLogger('prover-node');
|
|
36
40
|
this.dateProvider = new DateProvider();
|
|
37
41
|
this.jobs = new Map();
|
|
42
|
+
this.cachedEpochData = undefined;
|
|
38
43
|
this.options = {
|
|
39
44
|
pollingIntervalMs: 1000,
|
|
40
45
|
maxPendingJobs: 100,
|
|
41
46
|
maxParallelBlocksPerEpoch: 32,
|
|
47
|
+
txGatheringTimeoutMs: 60000,
|
|
48
|
+
txGatheringIntervalMs: 1000,
|
|
49
|
+
txGatheringMaxParallelRequests: 100,
|
|
42
50
|
...compact(options),
|
|
43
51
|
};
|
|
44
52
|
this.metrics = new ProverNodeMetrics(telemetryClient, 'ProverNode');
|
|
@@ -99,12 +107,11 @@ let ProverNode = (() => {
|
|
|
99
107
|
*/
|
|
100
108
|
async handleEpochCompleted(epochNumber) {
|
|
101
109
|
try {
|
|
110
|
+
// Gather data for the epoch
|
|
111
|
+
const epochData = await this.gatherEpochData(epochNumber);
|
|
112
|
+
const { blocks } = epochData;
|
|
113
|
+
this.cachedEpochData = { epochNumber, ...epochData };
|
|
102
114
|
// Construct a quote for the epoch
|
|
103
|
-
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
104
|
-
if (blocks.length === 0) {
|
|
105
|
-
this.log.info(`No blocks found for epoch ${epochNumber}`);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
115
|
const partialQuote = await this.quoteProvider.getQuote(Number(epochNumber), blocks);
|
|
109
116
|
if (!partialQuote) {
|
|
110
117
|
this.log.info(`No quote produced for epoch ${epochNumber}`);
|
|
@@ -198,10 +205,8 @@ let ProverNode = (() => {
|
|
|
198
205
|
throw new Error(`Maximum pending proving jobs ${this.options.maxPendingJobs} reached. Cannot create new job.`);
|
|
199
206
|
}
|
|
200
207
|
// Gather blocks for this epoch
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
throw new Error(`No blocks found for epoch ${epochNumber}`);
|
|
204
|
-
}
|
|
208
|
+
const cachedEpochData = this.cachedEpochData?.epochNumber === epochNumber ? this.cachedEpochData : undefined;
|
|
209
|
+
const { blocks, txs } = cachedEpochData ?? (await this.gatherEpochData(epochNumber));
|
|
205
210
|
const fromBlock = blocks[0].number;
|
|
206
211
|
const toBlock = blocks.at(-1).number;
|
|
207
212
|
// Fast forward world state to right before the target block and get a fork
|
|
@@ -213,13 +218,76 @@ let ProverNode = (() => {
|
|
|
213
218
|
this.jobs.delete(job.getId());
|
|
214
219
|
return Promise.resolve();
|
|
215
220
|
};
|
|
216
|
-
const job = this.doCreateEpochProvingJob(epochNumber, blocks, publicProcessorFactory, cleanUp);
|
|
221
|
+
const job = this.doCreateEpochProvingJob(epochNumber, blocks, txs, publicProcessorFactory, cleanUp);
|
|
217
222
|
this.jobs.set(job.getId(), job);
|
|
218
223
|
return job;
|
|
219
224
|
}
|
|
225
|
+
async gatherEpochData(epochNumber) {
|
|
226
|
+
// Gather blocks for this epoch and their txs
|
|
227
|
+
const blocks = await this.gatherBlocks(epochNumber);
|
|
228
|
+
const txs = await this.gatherTxs(epochNumber, blocks);
|
|
229
|
+
return { blocks, txs };
|
|
230
|
+
}
|
|
231
|
+
async gatherBlocks(epochNumber) {
|
|
232
|
+
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
233
|
+
if (blocks.length === 0) {
|
|
234
|
+
throw new Error(`No blocks found for epoch ${epochNumber}`);
|
|
235
|
+
}
|
|
236
|
+
return blocks;
|
|
237
|
+
}
|
|
238
|
+
async gatherTxs(epochNumber, blocks) {
|
|
239
|
+
let txsToFind = [];
|
|
240
|
+
const txHashToBlock = new Map();
|
|
241
|
+
const results = new Map();
|
|
242
|
+
for (const block of blocks) {
|
|
243
|
+
for (const tx of block.body.txEffects) {
|
|
244
|
+
txsToFind.push(tx.txHash);
|
|
245
|
+
txHashToBlock.set(tx.txHash.toString(), block.number);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const totalTxsRequired = txsToFind.length;
|
|
249
|
+
this.log.info(`Gathering a total of ${totalTxsRequired} txs for epoch=${epochNumber} made up of ${blocks.length} blocks`, { epochNumber });
|
|
250
|
+
let iteration = 0;
|
|
251
|
+
try {
|
|
252
|
+
await retryUntil(async () => {
|
|
253
|
+
const batch = [...txsToFind];
|
|
254
|
+
txsToFind = [];
|
|
255
|
+
const batchResults = await asyncPool(this.options.txGatheringMaxParallelRequests, batch, async (txHash) => {
|
|
256
|
+
const tx = await this.coordination.getTxByHash(txHash);
|
|
257
|
+
return [txHash, tx];
|
|
258
|
+
});
|
|
259
|
+
let found = 0;
|
|
260
|
+
for (const [txHash, maybeTx] of batchResults) {
|
|
261
|
+
if (maybeTx) {
|
|
262
|
+
found++;
|
|
263
|
+
results.set(txHash.toString(), maybeTx);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
txsToFind.push(txHash);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
this.log.verbose(`Gathered ${found}/${batch.length} txs in iteration ${iteration} for epoch ${epochNumber}. In total ${results.size}/${totalTxsRequired} have been retrieved.`, { epochNumber });
|
|
270
|
+
iteration++;
|
|
271
|
+
// stop when we found all transactions
|
|
272
|
+
return txsToFind.length === 0;
|
|
273
|
+
}, 'Gather txs', this.options.txGatheringTimeoutMs / 1000, this.options.txGatheringIntervalMs / 1000);
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
if (err && err instanceof TimeoutError) {
|
|
277
|
+
const notFoundList = txsToFind
|
|
278
|
+
.map(txHash => `${txHash.toString()} (block ${txHashToBlock.get(txHash.toString())})`)
|
|
279
|
+
.join(', ');
|
|
280
|
+
throw new Error(`Txs not found for epoch ${epochNumber}: ${notFoundList}`);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
throw err;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return Array.from(results.values());
|
|
287
|
+
}
|
|
220
288
|
/** Extracted for testing purposes. */
|
|
221
|
-
doCreateEpochProvingJob(epochNumber, blocks, publicProcessorFactory, cleanUp) {
|
|
222
|
-
return new EpochProvingJob(this.worldState, epochNumber, blocks, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.
|
|
289
|
+
doCreateEpochProvingJob(epochNumber, blocks, txs, publicProcessorFactory, cleanUp) {
|
|
290
|
+
return new EpochProvingJob(this.worldState, epochNumber, blocks, txs, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.metrics, { parallelBlockLimit: this.options.maxParallelBlocksPerEpoch }, cleanUp);
|
|
223
291
|
}
|
|
224
292
|
/** Extracted for testing purposes. */
|
|
225
293
|
async triggerMonitors() {
|
|
@@ -230,10 +298,12 @@ let ProverNode = (() => {
|
|
|
230
298
|
(() => {
|
|
231
299
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
232
300
|
_createProvingJob_decorators = [trackSpan('ProverNode.createProvingJob', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
|
|
301
|
+
_gatherEpochData_decorators = [trackSpan('ProverNode.gatherEpochData', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
|
|
233
302
|
__esDecorate(_a, null, _createProvingJob_decorators, { kind: "method", name: "createProvingJob", static: false, private: false, access: { has: obj => "createProvingJob" in obj, get: obj => obj.createProvingJob }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
303
|
+
__esDecorate(_a, null, _gatherEpochData_decorators, { kind: "method", name: "gatherEpochData", static: false, private: false, access: { has: obj => "gatherEpochData" in obj, get: obj => obj.gatherEpochData }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
234
304
|
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
235
305
|
})(),
|
|
236
306
|
_a;
|
|
237
307
|
})();
|
|
238
308
|
export { ProverNode };
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxzQkFBc0IsRUFVdEIsT0FBTyxHQUNSLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBcUQsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkgsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFZakQ7Ozs7O0dBS0c7SUFDVSxVQUFVOzs7O3NCQUFWLFVBQVU7WUFXckIsWUFDbUIsTUFBMEIsRUFDMUIsU0FBc0IsRUFDdEIsYUFBNkMsRUFDN0MsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxVQUFrQyxFQUNsQyxZQUFpRCxFQUNqRCxhQUE0QixFQUM1QixXQUF3QixFQUN4QixhQUE0QixFQUM1QixhQUEyQixFQUMzQixXQUF3QixFQUN4QixlQUFnQyxFQUNqRCxVQUFzQyxFQUFFO2dCQWJ2QixXQUFNLElBWmQsbURBQVUsRUFZRixNQUFNLEVBQW9CO2dCQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFhO2dCQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0M7Z0JBQzdDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7Z0JBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7Z0JBQ3RDLGVBQVUsR0FBVixVQUFVLENBQXdCO2dCQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUM7Z0JBQ2pELGtCQUFhLEdBQWIsYUFBYSxDQUFlO2dCQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtnQkFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7Z0JBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO2dCQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtnQkFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO2dCQXZCM0MsUUFBRyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUdsQyxTQUFJLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBc0JyRCxJQUFJLENBQUMsT0FBTyxHQUFHO29CQUNiLGlCQUFpQixFQUFFLElBQUs7b0JBQ3hCLGNBQWMsRUFBRSxHQUFHO29CQUNuQix5QkFBeUIsRUFBRSxFQUFFO29CQUM3QixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7aUJBQ3BCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFTSxNQUFNO2dCQUNYLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUF5QyxDQUFDO2dCQUNuRSxJQUFJLE9BQU8sV0FBVyxDQUFDLFdBQVcsS0FBSyxVQUFVLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQy9FLE9BQU8sV0FBVyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQTJCO2dCQUMzQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDL0UsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLFlBQVksSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLFVBQVUsQ0FBQyxZQUFZLG9CQUFvQixDQUFDLENBQUM7b0JBQ2pGLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3pELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO2dCQUVELElBQUksQ0FBQztvQkFDSCxnR0FBZ0c7b0JBQ2hHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEMsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlHLENBQUM7WUFDSCxDQUFDO1lBRUQ7Ozs7ZUFJRztZQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUFtQjtnQkFDOUMsSUFBSSxDQUFDO29CQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLFdBQVcsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsV0FBVyw0QkFBNEIsQ0FBQyxDQUFDO3dCQUM1RSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDL0MsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDSCxDQUFDO1lBRUQ7OztlQUdHO1lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFdBQW1CO2dCQUM1QyxJQUFJLENBQUM7b0JBQ0gsa0NBQWtDO29CQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLFdBQVcsRUFBRSxDQUFDLENBQUM7d0JBQzFELE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywrQkFBK0IsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFDNUQsT0FBTztvQkFDVCxDQUFDO29CQUVELCtEQUErRDtvQkFDL0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBRTNELCtCQUErQjtvQkFDL0IsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDO3dCQUN4QyxHQUFHLFlBQVk7d0JBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7d0JBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO3dCQUN6QyxjQUFjLEVBQUUsWUFBWSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsNEJBQTRCO3FCQUM3RyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFbEQsNkJBQTZCO29CQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWCwyQkFBMkIsV0FBVyxnQkFBZ0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxFQUFFLEVBQ3BHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FDbkIsQ0FBQztvQkFDRixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO1lBQ0gsQ0FBQztZQUVEOzs7O2VBSUc7WUFDSCxLQUFLLENBQUMsS0FBSztnQkFDVCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRDs7ZUFFRztZQUNILEtBQUssQ0FBQyxJQUFJO2dCQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUVELHFEQUFxRDtZQUM5QyxtQkFBbUIsQ0FBQyxLQUFzQjtnQkFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBRU8scUJBQXFCLENBQUMsS0FBc0I7Z0JBQ2xELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBRUQ7O2VBRUc7WUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQTRCO2dCQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkIsQ0FBQztZQUVEOztlQUVHO1lBQ0ksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUE0QjtnQkFDbEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7WUFFRDs7ZUFFRztZQUNJLFNBQVM7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3JCLENBQUM7WUFFRDs7ZUFFRztZQUNJLE9BQU87Z0JBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuSCxDQUFDO1lBRU8sdUJBQXVCO2dCQUM3QixNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsT0FBTyxjQUFjLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUNqRSxDQUFDO1lBR08sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQW1CO2dCQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ2pILENBQUM7Z0JBRUQsK0JBQStCO2dCQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDO2dCQUV0QywyRUFBMkU7Z0JBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxXQUFXLG9CQUFvQixTQUFTLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0csTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRW5ELGtEQUFrRDtnQkFDbEQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixDQUN2RCxJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxlQUFlLENBQ3JCLENBQUM7Z0JBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO29CQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQztnQkFFRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7WUFFRCxzQ0FBc0M7WUFDNUIsdUJBQXVCLENBQy9CLFdBQW1CLEVBQ25CLE1BQWlCLEVBQ2pCLHNCQUE4QyxFQUM5QyxPQUE0QjtnQkFFNUIsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsSUFBSSxDQUFDLFVBQVUsRUFDZixXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFDL0Isc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsT0FBTyxFQUNaLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxFQUM5RCxPQUFPLENBQ1IsQ0FBQztZQUNKLENBQUM7WUFFRCxzQ0FBc0M7WUFDNUIsS0FBSyxDQUFDLGVBQWU7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLENBQUM7Ozs7NENBOURBLFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlHLGlNQUFjLGdCQUFnQiw2REFnQzdCOzs7OztTQS9PVSxVQUFVIn0=
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxzQkFBc0IsRUFZdEIsT0FBTyxHQUNSLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBcUQsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkgsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFlakQ7Ozs7O0dBS0c7SUFDVSxVQUFVOzs7OztzQkFBVixVQUFVO1lBWXJCLFlBQ21CLE1BQTBCLEVBQzFCLFNBQXNCLEVBQ3RCLGFBQTZDLEVBQzdDLG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFDdEMsVUFBa0MsRUFDbEMsWUFBaUQsRUFDakQsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsYUFBMkIsRUFDM0IsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDakQsVUFBc0MsRUFBRTtnQkFidkIsV0FBTSxJQWJkLG1EQUFVLEVBYUYsTUFBTSxFQUFvQjtnQkFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBYTtn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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -52,22 +52,22 @@
|
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@aztec/archiver": "0.69.
|
|
56
|
-
"@aztec/bb-prover": "0.69.
|
|
57
|
-
"@aztec/circuit-types": "0.69.
|
|
58
|
-
"@aztec/circuits.js": "0.69.
|
|
59
|
-
"@aztec/epoch-cache": "0.69.
|
|
60
|
-
"@aztec/ethereum": "0.69.
|
|
61
|
-
"@aztec/foundation": "0.69.
|
|
62
|
-
"@aztec/kv-store": "0.69.
|
|
63
|
-
"@aztec/l1-artifacts": "0.69.
|
|
64
|
-
"@aztec/p2p": "0.69.
|
|
65
|
-
"@aztec/prover-client": "0.69.
|
|
66
|
-
"@aztec/sequencer-client": "0.69.
|
|
67
|
-
"@aztec/simulator": "0.69.
|
|
68
|
-
"@aztec/telemetry-client": "0.69.
|
|
69
|
-
"@aztec/types": "0.69.
|
|
70
|
-
"@aztec/world-state": "0.69.
|
|
55
|
+
"@aztec/archiver": "0.69.1",
|
|
56
|
+
"@aztec/bb-prover": "0.69.1",
|
|
57
|
+
"@aztec/circuit-types": "0.69.1",
|
|
58
|
+
"@aztec/circuits.js": "0.69.1",
|
|
59
|
+
"@aztec/epoch-cache": "0.69.1",
|
|
60
|
+
"@aztec/ethereum": "0.69.1",
|
|
61
|
+
"@aztec/foundation": "0.69.1",
|
|
62
|
+
"@aztec/kv-store": "0.69.1",
|
|
63
|
+
"@aztec/l1-artifacts": "0.69.1",
|
|
64
|
+
"@aztec/p2p": "0.69.1",
|
|
65
|
+
"@aztec/prover-client": "0.69.1",
|
|
66
|
+
"@aztec/sequencer-client": "0.69.1",
|
|
67
|
+
"@aztec/simulator": "0.69.1",
|
|
68
|
+
"@aztec/telemetry-client": "0.69.1",
|
|
69
|
+
"@aztec/types": "0.69.1",
|
|
70
|
+
"@aztec/world-state": "0.69.1",
|
|
71
71
|
"source-map-support": "^0.5.21",
|
|
72
72
|
"tslib": "^2.4.0",
|
|
73
73
|
"viem": "^2.7.15"
|
package/src/config.ts
CHANGED
|
@@ -53,6 +53,9 @@ type SpecificProverNodeConfig = {
|
|
|
53
53
|
proverNodeMaxPendingJobs: number;
|
|
54
54
|
proverNodePollingIntervalMs: number;
|
|
55
55
|
proverNodeMaxParallelBlocksPerEpoch: number;
|
|
56
|
+
txGatheringTimeoutMs: number;
|
|
57
|
+
txGatheringIntervalMs: number;
|
|
58
|
+
txGatheringMaxParallelRequests: number;
|
|
56
59
|
};
|
|
57
60
|
|
|
58
61
|
export type QuoteProviderConfig = {
|
|
@@ -77,6 +80,21 @@ const specificProverNodeConfigMappings: ConfigMappingsType<SpecificProverNodeCon
|
|
|
77
80
|
description: 'The Maximum number of blocks to process in parallel while proving an epoch',
|
|
78
81
|
...numberConfigHelper(32),
|
|
79
82
|
},
|
|
83
|
+
txGatheringTimeoutMs: {
|
|
84
|
+
env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
|
|
85
|
+
description: 'The maximum amount of time to wait for tx data to be available',
|
|
86
|
+
...numberConfigHelper(60_000),
|
|
87
|
+
},
|
|
88
|
+
txGatheringIntervalMs: {
|
|
89
|
+
env: 'PROVER_NODE_TX_GATHERING_INTERVAL_MS',
|
|
90
|
+
description: 'How often to check that tx data is available',
|
|
91
|
+
...numberConfigHelper(1_000),
|
|
92
|
+
},
|
|
93
|
+
txGatheringMaxParallelRequests: {
|
|
94
|
+
env: 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS',
|
|
95
|
+
description: 'How many txs to load up a time',
|
|
96
|
+
...numberConfigHelper(100),
|
|
97
|
+
},
|
|
80
98
|
};
|
|
81
99
|
|
|
82
100
|
const quoteProviderConfigMappings: ConfigMappingsType<QuoteProviderConfig> = {
|
package/src/factory.ts
CHANGED
|
@@ -71,6 +71,9 @@ export async function createProverNode(
|
|
|
71
71
|
maxPendingJobs: config.proverNodeMaxPendingJobs,
|
|
72
72
|
pollingIntervalMs: config.proverNodePollingIntervalMs,
|
|
73
73
|
maxParallelBlocksPerEpoch: config.proverNodeMaxParallelBlocksPerEpoch,
|
|
74
|
+
txGatheringMaxParallelRequests: config.txGatheringMaxParallelRequests,
|
|
75
|
+
txGatheringIntervalMs: config.txGatheringIntervalMs,
|
|
76
|
+
txGatheringTimeoutMs: config.txGatheringTimeoutMs,
|
|
74
77
|
};
|
|
75
78
|
|
|
76
79
|
const claimsMonitor = new ClaimsMonitor(publisher, telemetry, proverNodeConfig);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
EmptyTxValidator,
|
|
3
2
|
type EpochProver,
|
|
4
3
|
type EpochProvingJobState,
|
|
5
4
|
type ForkMerkleTreeOperations,
|
|
@@ -7,9 +6,7 @@ import {
|
|
|
7
6
|
type L2Block,
|
|
8
7
|
type L2BlockSource,
|
|
9
8
|
type ProcessedTx,
|
|
10
|
-
type ProverCoordination,
|
|
11
9
|
type Tx,
|
|
12
|
-
type TxHash,
|
|
13
10
|
} from '@aztec/circuit-types';
|
|
14
11
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
15
12
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -41,12 +38,12 @@ export class EpochProvingJob implements Traceable {
|
|
|
41
38
|
private dbProvider: ForkMerkleTreeOperations,
|
|
42
39
|
private epochNumber: bigint,
|
|
43
40
|
private blocks: L2Block[],
|
|
41
|
+
private txs: Tx[],
|
|
44
42
|
private prover: EpochProver,
|
|
45
43
|
private publicProcessorFactory: PublicProcessorFactory,
|
|
46
44
|
private publisher: L1Publisher,
|
|
47
45
|
private l2BlockSource: L2BlockSource,
|
|
48
46
|
private l1ToL2MessageSource: L1ToL2MessageSource,
|
|
49
|
-
private coordination: ProverCoordination,
|
|
50
47
|
private metrics: ProverNodeMetrics,
|
|
51
48
|
private config: { parallelBlockLimit: number } = { parallelBlockLimit: 32 },
|
|
52
49
|
private cleanUp: (job: EpochProvingJob) => Promise<void> = () => Promise.resolve(),
|
|
@@ -92,10 +89,8 @@ export class EpochProvingJob implements Traceable {
|
|
|
92
89
|
|
|
93
90
|
await asyncPool(this.config.parallelBlockLimit, this.blocks, async block => {
|
|
94
91
|
const globalVariables = block.header.globalVariables;
|
|
95
|
-
const
|
|
96
|
-
const txCount = block.body.numberOfTxsIncludingPadded;
|
|
92
|
+
const txs = this.getTxs(block);
|
|
97
93
|
const l1ToL2Messages = await this.getL1ToL2Messages(block);
|
|
98
|
-
const txs = await this.getTxs(txHashes, block.number);
|
|
99
94
|
const previousHeader = await this.getBlockHeader(block.number - 1);
|
|
100
95
|
|
|
101
96
|
this.log.verbose(`Starting processing block ${block.number}`, {
|
|
@@ -115,7 +110,7 @@ export class EpochProvingJob implements Traceable {
|
|
|
115
110
|
// Process public fns
|
|
116
111
|
const db = await this.dbProvider.fork(block.number - 1);
|
|
117
112
|
const publicProcessor = this.publicProcessorFactory.create(db, previousHeader, globalVariables, true);
|
|
118
|
-
const processed = await this.processTxs(publicProcessor, txs
|
|
113
|
+
const processed = await this.processTxs(publicProcessor, txs);
|
|
119
114
|
await this.prover.addTxs(processed);
|
|
120
115
|
await db.close();
|
|
121
116
|
this.log.verbose(`Processed all ${txs.length} txs for block ${block.number}`, {
|
|
@@ -162,29 +157,17 @@ export class EpochProvingJob implements Traceable {
|
|
|
162
157
|
return this.l2BlockSource.getBlockHeader(blockNumber);
|
|
163
158
|
}
|
|
164
159
|
|
|
165
|
-
private
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
);
|
|
169
|
-
const notFound = txs.filter(([_, tx]) => !tx);
|
|
170
|
-
if (notFound.length) {
|
|
171
|
-
throw new Error(
|
|
172
|
-
`Txs not found for block ${blockNumber}: ${notFound.map(([txHash]) => txHash.toString()).join(', ')}`,
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
return txs.map(([_, tx]) => tx!);
|
|
160
|
+
private getTxs(block: L2Block): Tx[] {
|
|
161
|
+
const txHashes = block.body.txEffects.map(tx => tx.txHash.toBigInt());
|
|
162
|
+
return this.txs.filter(tx => txHashes.includes(tx.getTxHash().toBigInt()));
|
|
176
163
|
}
|
|
177
164
|
|
|
178
165
|
private getL1ToL2Messages(block: L2Block) {
|
|
179
166
|
return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
|
|
180
167
|
}
|
|
181
168
|
|
|
182
|
-
private async processTxs(
|
|
183
|
-
|
|
184
|
-
txs: Tx[],
|
|
185
|
-
totalNumberOfTxs: number,
|
|
186
|
-
): Promise<ProcessedTx[]> {
|
|
187
|
-
const [processedTxs, failedTxs] = await publicProcessor.process(txs, totalNumberOfTxs, new EmptyTxValidator());
|
|
169
|
+
private async processTxs(publicProcessor: PublicProcessor, txs: Tx[]): Promise<ProcessedTx[]> {
|
|
170
|
+
const [processedTxs, failedTxs] = await publicProcessor.process(txs);
|
|
188
171
|
|
|
189
172
|
if (failedTxs.length) {
|
|
190
173
|
throw new Error(
|
package/src/prover-node.ts
CHANGED
|
@@ -10,12 +10,17 @@ import {
|
|
|
10
10
|
type ProverCoordination,
|
|
11
11
|
type ProverNodeApi,
|
|
12
12
|
type Service,
|
|
13
|
+
type Tx,
|
|
14
|
+
type TxHash,
|
|
13
15
|
type WorldStateSynchronizer,
|
|
14
16
|
tryStop,
|
|
15
17
|
} from '@aztec/circuit-types';
|
|
16
18
|
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
19
|
+
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
17
20
|
import { compact } from '@aztec/foundation/collection';
|
|
21
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
18
22
|
import { createLogger } from '@aztec/foundation/log';
|
|
23
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
19
24
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
20
25
|
import { type Maybe } from '@aztec/foundation/types';
|
|
21
26
|
import { type P2P } from '@aztec/p2p';
|
|
@@ -35,6 +40,9 @@ export type ProverNodeOptions = {
|
|
|
35
40
|
pollingIntervalMs: number;
|
|
36
41
|
maxPendingJobs: number;
|
|
37
42
|
maxParallelBlocksPerEpoch: number;
|
|
43
|
+
txGatheringTimeoutMs: number;
|
|
44
|
+
txGatheringIntervalMs: number;
|
|
45
|
+
txGatheringMaxParallelRequests: number;
|
|
38
46
|
};
|
|
39
47
|
|
|
40
48
|
/**
|
|
@@ -49,6 +57,7 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
49
57
|
|
|
50
58
|
private latestEpochWeAreProving: bigint | undefined;
|
|
51
59
|
private jobs: Map<string, EpochProvingJob> = new Map();
|
|
60
|
+
private cachedEpochData: { epochNumber: bigint; blocks: L2Block[]; txs: Tx[] } | undefined = undefined;
|
|
52
61
|
private options: ProverNodeOptions;
|
|
53
62
|
private metrics: ProverNodeMetrics;
|
|
54
63
|
|
|
@@ -74,6 +83,9 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
74
83
|
pollingIntervalMs: 1_000,
|
|
75
84
|
maxPendingJobs: 100,
|
|
76
85
|
maxParallelBlocksPerEpoch: 32,
|
|
86
|
+
txGatheringTimeoutMs: 60_000,
|
|
87
|
+
txGatheringIntervalMs: 1_000,
|
|
88
|
+
txGatheringMaxParallelRequests: 100,
|
|
77
89
|
...compact(options),
|
|
78
90
|
};
|
|
79
91
|
|
|
@@ -139,13 +151,12 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
139
151
|
*/
|
|
140
152
|
async handleEpochCompleted(epochNumber: bigint): Promise<void> {
|
|
141
153
|
try {
|
|
142
|
-
//
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
154
|
+
// Gather data for the epoch
|
|
155
|
+
const epochData = await this.gatherEpochData(epochNumber);
|
|
156
|
+
const { blocks } = epochData;
|
|
157
|
+
this.cachedEpochData = { epochNumber, ...epochData };
|
|
148
158
|
|
|
159
|
+
// Construct a quote for the epoch
|
|
149
160
|
const partialQuote = await this.quoteProvider.getQuote(Number(epochNumber), blocks);
|
|
150
161
|
if (!partialQuote) {
|
|
151
162
|
this.log.info(`No quote produced for epoch ${epochNumber}`);
|
|
@@ -256,10 +267,9 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
256
267
|
}
|
|
257
268
|
|
|
258
269
|
// Gather blocks for this epoch
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
270
|
+
const cachedEpochData = this.cachedEpochData?.epochNumber === epochNumber ? this.cachedEpochData : undefined;
|
|
271
|
+
const { blocks, txs } = cachedEpochData ?? (await this.gatherEpochData(epochNumber));
|
|
272
|
+
|
|
263
273
|
const fromBlock = blocks[0].number;
|
|
264
274
|
const toBlock = blocks.at(-1)!.number;
|
|
265
275
|
|
|
@@ -279,15 +289,98 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
279
289
|
return Promise.resolve();
|
|
280
290
|
};
|
|
281
291
|
|
|
282
|
-
const job = this.doCreateEpochProvingJob(epochNumber, blocks, publicProcessorFactory, cleanUp);
|
|
292
|
+
const job = this.doCreateEpochProvingJob(epochNumber, blocks, txs, publicProcessorFactory, cleanUp);
|
|
283
293
|
this.jobs.set(job.getId(), job);
|
|
284
294
|
return job;
|
|
285
295
|
}
|
|
286
296
|
|
|
297
|
+
@trackSpan('ProverNode.gatherEpochData', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))
|
|
298
|
+
private async gatherEpochData(epochNumber: bigint) {
|
|
299
|
+
// Gather blocks for this epoch and their txs
|
|
300
|
+
const blocks = await this.gatherBlocks(epochNumber);
|
|
301
|
+
const txs = await this.gatherTxs(epochNumber, blocks);
|
|
302
|
+
|
|
303
|
+
return { blocks, txs };
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
private async gatherBlocks(epochNumber: bigint) {
|
|
307
|
+
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
308
|
+
if (blocks.length === 0) {
|
|
309
|
+
throw new Error(`No blocks found for epoch ${epochNumber}`);
|
|
310
|
+
}
|
|
311
|
+
return blocks;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
private async gatherTxs(epochNumber: bigint, blocks: L2Block[]) {
|
|
315
|
+
let txsToFind: TxHash[] = [];
|
|
316
|
+
const txHashToBlock = new Map<string, number>();
|
|
317
|
+
const results = new Map<string, Tx>();
|
|
318
|
+
|
|
319
|
+
for (const block of blocks) {
|
|
320
|
+
for (const tx of block.body.txEffects) {
|
|
321
|
+
txsToFind.push(tx.txHash);
|
|
322
|
+
txHashToBlock.set(tx.txHash.toString(), block.number);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const totalTxsRequired = txsToFind.length;
|
|
327
|
+
this.log.info(
|
|
328
|
+
`Gathering a total of ${totalTxsRequired} txs for epoch=${epochNumber} made up of ${blocks.length} blocks`,
|
|
329
|
+
{ epochNumber },
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
let iteration = 0;
|
|
333
|
+
try {
|
|
334
|
+
await retryUntil(
|
|
335
|
+
async () => {
|
|
336
|
+
const batch = [...txsToFind];
|
|
337
|
+
txsToFind = [];
|
|
338
|
+
const batchResults = await asyncPool(this.options.txGatheringMaxParallelRequests, batch, async txHash => {
|
|
339
|
+
const tx = await this.coordination.getTxByHash(txHash);
|
|
340
|
+
return [txHash, tx] as const;
|
|
341
|
+
});
|
|
342
|
+
let found = 0;
|
|
343
|
+
for (const [txHash, maybeTx] of batchResults) {
|
|
344
|
+
if (maybeTx) {
|
|
345
|
+
found++;
|
|
346
|
+
results.set(txHash.toString(), maybeTx);
|
|
347
|
+
} else {
|
|
348
|
+
txsToFind.push(txHash);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
this.log.verbose(
|
|
353
|
+
`Gathered ${found}/${batch.length} txs in iteration ${iteration} for epoch ${epochNumber}. In total ${results.size}/${totalTxsRequired} have been retrieved.`,
|
|
354
|
+
{ epochNumber },
|
|
355
|
+
);
|
|
356
|
+
iteration++;
|
|
357
|
+
|
|
358
|
+
// stop when we found all transactions
|
|
359
|
+
return txsToFind.length === 0;
|
|
360
|
+
},
|
|
361
|
+
'Gather txs',
|
|
362
|
+
this.options.txGatheringTimeoutMs / 1_000,
|
|
363
|
+
this.options.txGatheringIntervalMs / 1_000,
|
|
364
|
+
);
|
|
365
|
+
} catch (err) {
|
|
366
|
+
if (err && err instanceof TimeoutError) {
|
|
367
|
+
const notFoundList = txsToFind
|
|
368
|
+
.map(txHash => `${txHash.toString()} (block ${txHashToBlock.get(txHash.toString())})`)
|
|
369
|
+
.join(', ');
|
|
370
|
+
throw new Error(`Txs not found for epoch ${epochNumber}: ${notFoundList}`);
|
|
371
|
+
} else {
|
|
372
|
+
throw err;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return Array.from(results.values());
|
|
377
|
+
}
|
|
378
|
+
|
|
287
379
|
/** Extracted for testing purposes. */
|
|
288
380
|
protected doCreateEpochProvingJob(
|
|
289
381
|
epochNumber: bigint,
|
|
290
382
|
blocks: L2Block[],
|
|
383
|
+
txs: Tx[],
|
|
291
384
|
publicProcessorFactory: PublicProcessorFactory,
|
|
292
385
|
cleanUp: () => Promise<void>,
|
|
293
386
|
) {
|
|
@@ -295,12 +388,12 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
295
388
|
this.worldState,
|
|
296
389
|
epochNumber,
|
|
297
390
|
blocks,
|
|
391
|
+
txs,
|
|
298
392
|
this.prover.createEpochProver(),
|
|
299
393
|
publicProcessorFactory,
|
|
300
394
|
this.publisher,
|
|
301
395
|
this.l2BlockSource,
|
|
302
396
|
this.l1ToL2MessageSource,
|
|
303
|
-
this.coordination,
|
|
304
397
|
this.metrics,
|
|
305
398
|
{ parallelBlockLimit: this.options.maxParallelBlocksPerEpoch },
|
|
306
399
|
cleanUp,
|