@aztec/prover-node 0.85.0 → 0.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +8 -8
- package/dest/factory.d.ts +3 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +9 -9
- package/dest/job/epoch-proving-job.d.ts +2 -2
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +1 -1
- package/dest/metrics.d.ts +27 -4
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +104 -36
- package/dest/monitors/epoch-monitor.d.ts +1 -1
- package/dest/monitors/epoch-monitor.d.ts.map +1 -1
- package/dest/monitors/epoch-monitor.js +7 -2
- package/dest/prover-coordination/combined-prover-coordination.d.ts +22 -0
- package/dest/prover-coordination/combined-prover-coordination.d.ts.map +1 -0
- package/dest/prover-coordination/combined-prover-coordination.js +136 -0
- package/dest/prover-coordination/config.d.ts +1 -1
- package/dest/prover-coordination/config.d.ts.map +1 -1
- package/dest/prover-coordination/config.js +4 -4
- package/dest/prover-coordination/factory.d.ts +5 -4
- package/dest/prover-coordination/factory.d.ts.map +1 -1
- package/dest/prover-coordination/factory.js +20 -14
- package/dest/prover-node-publisher.d.ts +1 -2
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +7 -13
- package/dest/prover-node.d.ts +8 -10
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +21 -17
- package/package.json +20 -22
- package/src/config.ts +10 -10
- package/src/factory.ts +10 -10
- package/src/job/epoch-proving-job.ts +3 -3
- package/src/metrics.ts +111 -38
- package/src/monitors/epoch-monitor.ts +5 -3
- package/src/prover-coordination/combined-prover-coordination.ts +160 -0
- package/src/prover-coordination/config.ts +5 -5
- package/src/prover-coordination/factory.ts +36 -25
- package/src/prover-node-publisher.ts +9 -18
- package/src/prover-node.ts +35 -25
package/dest/config.d.ts
CHANGED
|
@@ -15,9 +15,9 @@ type SpecificProverNodeConfig = {
|
|
|
15
15
|
proverNodeMaxPendingJobs: number;
|
|
16
16
|
proverNodePollingIntervalMs: number;
|
|
17
17
|
proverNodeMaxParallelBlocksPerEpoch: number;
|
|
18
|
-
txGatheringTimeoutMs: number;
|
|
19
18
|
txGatheringIntervalMs: number;
|
|
20
|
-
|
|
19
|
+
txGatheringBatchSize: number;
|
|
20
|
+
txGatheringMaxParallelRequestsPerNode: number;
|
|
21
21
|
};
|
|
22
22
|
export declare const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig>;
|
|
23
23
|
export declare function getProverNodeConfigFromEnv(): ProverNodeConfig;
|
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,EAAwD,MAAM,iBAAiB,CAAC;AAChH,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,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,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAG5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,KAAK,wBAAwB,EAAoC,MAAM,iCAAiC,CAAC;AAElH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,KAAK,wBAAwB,GAAG;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,
|
|
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,EAAwD,MAAM,iBAAiB,CAAC;AAChH,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,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,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAG5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,KAAK,wBAAwB,EAAoC,MAAM,iCAAiC,CAAC;AAElH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,KAAK,wBAAwB,GAAG;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAmCF,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;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAMjG"}
|
package/dest/config.js
CHANGED
|
@@ -26,19 +26,19 @@ const specificProverNodeConfigMappings = {
|
|
|
26
26
|
description: 'The Maximum number of blocks to process in parallel while proving an epoch',
|
|
27
27
|
...numberConfigHelper(32)
|
|
28
28
|
},
|
|
29
|
-
txGatheringTimeoutMs: {
|
|
30
|
-
env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
|
|
31
|
-
description: 'The maximum amount of time to wait for tx data to be available',
|
|
32
|
-
...numberConfigHelper(60_000)
|
|
33
|
-
},
|
|
34
29
|
txGatheringIntervalMs: {
|
|
35
30
|
env: 'PROVER_NODE_TX_GATHERING_INTERVAL_MS',
|
|
36
31
|
description: 'How often to check that tx data is available',
|
|
37
32
|
...numberConfigHelper(1_000)
|
|
38
33
|
},
|
|
39
|
-
|
|
40
|
-
env: '
|
|
41
|
-
description: 'How many
|
|
34
|
+
txGatheringBatchSize: {
|
|
35
|
+
env: 'PROVER_NODE_TX_GATHERING_BATCH_SIZE',
|
|
36
|
+
description: 'How many transactions to gather from a node in a single request',
|
|
37
|
+
...numberConfigHelper(10)
|
|
38
|
+
},
|
|
39
|
+
txGatheringMaxParallelRequestsPerNode: {
|
|
40
|
+
env: 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS_PER_NODE',
|
|
41
|
+
description: 'How many tx requests to make in parallel to each node',
|
|
42
42
|
...numberConfigHelper(100)
|
|
43
43
|
}
|
|
44
44
|
};
|
package/dest/factory.d.ts
CHANGED
|
@@ -3,17 +3,18 @@ import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
|
3
3
|
import { L1TxUtils } from '@aztec/ethereum';
|
|
4
4
|
import { type Logger } from '@aztec/foundation/log';
|
|
5
5
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
|
-
import type {
|
|
6
|
+
import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
7
7
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
8
8
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
9
9
|
import { type ProverNodeConfig } from './config.js';
|
|
10
|
+
import type { TxSource } from './prover-coordination/combined-prover-coordination.js';
|
|
10
11
|
import { ProverNodePublisher } from './prover-node-publisher.js';
|
|
11
12
|
import { ProverNode } from './prover-node.js';
|
|
12
13
|
/** Creates a new prover node given a config. */
|
|
13
14
|
export declare function createProverNode(userConfig: ProverNodeConfig & DataStoreConfig, deps?: {
|
|
14
15
|
telemetry?: TelemetryClient;
|
|
15
16
|
log?: Logger;
|
|
16
|
-
aztecNodeTxProvider?:
|
|
17
|
+
aztecNodeTxProvider?: TxSource;
|
|
17
18
|
archiver?: Archiver;
|
|
18
19
|
publisher?: ProverNodePublisher;
|
|
19
20
|
blobSinkClient?: BlobSinkClientInterface;
|
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,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,SAAS,
|
|
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,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAA+D,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAEtE,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,gBAAgB,GAAG,eAAe,EAC9C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;CAClB,EACN,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC,uBAmEP"}
|
package/dest/factory.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createArchiver } from '@aztec/archiver';
|
|
2
2
|
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
3
3
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
4
|
-
import { L1TxUtils, RollupContract, createEthereumChain,
|
|
4
|
+
import { L1TxUtils, RollupContract, createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { trySnapshotSync } from '@aztec/node-lib/actions';
|
|
7
7
|
import { createProverClient } from '@aztec/prover-client';
|
|
@@ -16,7 +16,9 @@ import { ProverNode } from './prover-node.js';
|
|
|
16
16
|
/** Creates a new prover node given a config. */ export async function createProverNode(userConfig, deps = {}, options = {}) {
|
|
17
17
|
const config = resolveConfig(userConfig);
|
|
18
18
|
const telemetry = deps.telemetry ?? getTelemetryClient();
|
|
19
|
-
const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config
|
|
19
|
+
const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config, {
|
|
20
|
+
logger: createLogger('prover-node:blob-sink:client')
|
|
21
|
+
});
|
|
20
22
|
const log = deps.log ?? createLogger('prover-node');
|
|
21
23
|
await trySnapshotSync(config, log);
|
|
22
24
|
const archiver = deps.archiver ?? await createArchiver(config, blobSinkClient, {
|
|
@@ -33,9 +35,9 @@ import { ProverNode } from './prover-node.js';
|
|
|
33
35
|
const prover = await createProverClient(config, worldStateSynchronizer, broker, telemetry);
|
|
34
36
|
const { l1RpcUrls: rpcUrls, l1ChainId: chainId, publisherPrivateKey } = config;
|
|
35
37
|
const chain = createEthereumChain(rpcUrls, chainId);
|
|
36
|
-
const
|
|
37
|
-
const rollupContract = new RollupContract(
|
|
38
|
-
const l1TxUtils = deps.l1TxUtils ?? new L1TxUtils(
|
|
38
|
+
const l1Client = createExtendedL1Client(rpcUrls, publisherPrivateKey, chain.chainInfo);
|
|
39
|
+
const rollupContract = new RollupContract(l1Client, config.l1Contracts.rollupAddress.toString());
|
|
40
|
+
const l1TxUtils = deps.l1TxUtils ?? new L1TxUtils(l1Client, log, config);
|
|
39
41
|
const publisher = deps.publisher ?? new ProverNodePublisher(config, {
|
|
40
42
|
telemetry,
|
|
41
43
|
rollupContract,
|
|
@@ -43,7 +45,7 @@ import { ProverNode } from './prover-node.js';
|
|
|
43
45
|
});
|
|
44
46
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
|
|
45
47
|
// If config.p2pEnabled is true, createProverCoordination will create a p2p client where txs are requested
|
|
46
|
-
// If config.
|
|
48
|
+
// If config.proverCoordinationNodeUrls is not empty, createProverCoordination will create set of aztec node clients from which txs are requested
|
|
47
49
|
const proverCoordination = await createProverCoordination(config, {
|
|
48
50
|
aztecNodeTxProvider: deps.aztecNodeTxProvider,
|
|
49
51
|
worldStateSynchronizer,
|
|
@@ -55,9 +57,7 @@ import { ProverNode } from './prover-node.js';
|
|
|
55
57
|
maxPendingJobs: config.proverNodeMaxPendingJobs,
|
|
56
58
|
pollingIntervalMs: config.proverNodePollingIntervalMs,
|
|
57
59
|
maxParallelBlocksPerEpoch: config.proverNodeMaxParallelBlocksPerEpoch,
|
|
58
|
-
|
|
59
|
-
txGatheringIntervalMs: config.txGatheringIntervalMs,
|
|
60
|
-
txGatheringTimeoutMs: config.txGatheringTimeoutMs
|
|
60
|
+
txGatheringIntervalMs: config.txGatheringIntervalMs
|
|
61
61
|
};
|
|
62
62
|
const epochMonitor = await EpochMonitor.create(archiver, proverNodeConfig, telemetry);
|
|
63
63
|
return new ProverNode(prover, publisher, archiver, archiver, archiver, worldStateSynchronizer, proverCoordination, epochMonitor, proverNodeConfig, telemetry);
|
|
@@ -4,7 +4,7 @@ import { type EpochProver, type EpochProvingJobState, EpochProvingJobTerminalSta
|
|
|
4
4
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
5
5
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
6
6
|
import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
7
|
-
import type {
|
|
7
|
+
import type { ProverNodeJobMetrics } from '../metrics.js';
|
|
8
8
|
import type { ProverNodePublisher } from '../prover-node-publisher.js';
|
|
9
9
|
/**
|
|
10
10
|
* Job that grabs a range of blocks from the unfinalised chain from L1, gets their txs given their hashes,
|
|
@@ -31,7 +31,7 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
31
31
|
private epochCheckPromise;
|
|
32
32
|
private deadlineTimeoutHandler;
|
|
33
33
|
readonly tracer: Tracer;
|
|
34
|
-
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], txs: Tx[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, metrics:
|
|
34
|
+
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], txs: Tx[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config?: {
|
|
35
35
|
parallelBlockLimit: number;
|
|
36
36
|
});
|
|
37
37
|
getId(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAe,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAe,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxD,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;AAEvE;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,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,QAAQ;IAChB,OAAO,CAAC,MAAM;IAtBhB,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;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,mBAAmB,EAC9B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,GAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAA+B;IAMtE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAItC;;OAEG;IAIU,GAAG;IAqGhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;YA2BlB,cAAc;YAOd,MAAM;IAQpB,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
|
@@ -53,7 +53,7 @@ import * as crypto from 'node:crypto';
|
|
|
53
53
|
this.state = 'initialized';
|
|
54
54
|
this.log = createLogger('prover-node:epoch-proving-job');
|
|
55
55
|
this.uuid = crypto.randomUUID();
|
|
56
|
-
this.tracer = metrics.
|
|
56
|
+
this.tracer = metrics.tracer;
|
|
57
57
|
}
|
|
58
58
|
getId() {
|
|
59
59
|
return this.uuid;
|
package/dest/metrics.d.ts
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
|
+
import type { RollupContract } from '@aztec/ethereum';
|
|
2
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
1
3
|
import type { L1PublishProofStats } from '@aztec/stdlib/stats';
|
|
2
|
-
import { type Gauge, type Histogram, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
|
|
3
|
-
export declare class
|
|
4
|
-
|
|
4
|
+
import { type Gauge, type Histogram, type Meter, type TelemetryClient, type Tracer, type UpDownCounter } from '@aztec/telemetry-client';
|
|
5
|
+
export declare class ProverNodeJobMetrics {
|
|
6
|
+
private meter;
|
|
7
|
+
readonly tracer: Tracer;
|
|
5
8
|
private logger;
|
|
6
9
|
proverEpochExecutionDuration: Histogram;
|
|
7
10
|
provingJobDuration: Histogram;
|
|
8
11
|
provingJobBlocks: Gauge;
|
|
9
12
|
provingJobTransactions: Gauge;
|
|
13
|
+
constructor(meter: Meter, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
|
|
14
|
+
recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class ProverNodeRewardsMetrics {
|
|
17
|
+
private meter;
|
|
18
|
+
private coinbase;
|
|
19
|
+
private rollup;
|
|
20
|
+
private logger;
|
|
21
|
+
private rewards;
|
|
22
|
+
private accumulatedRewards;
|
|
23
|
+
private prevEpoch;
|
|
24
|
+
private proofSubmissionWindow;
|
|
25
|
+
constructor(meter: Meter, coinbase: EthAddress, rollup: RollupContract, logger?: import("@aztec/foundation/log").Logger);
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
stop(): void;
|
|
28
|
+
private observe;
|
|
29
|
+
}
|
|
30
|
+
export declare class ProverNodePublisherMetrics {
|
|
31
|
+
readonly client: TelemetryClient;
|
|
32
|
+
private logger;
|
|
10
33
|
gasPrice: Histogram;
|
|
11
34
|
txCount: UpDownCounter;
|
|
12
35
|
txDuration: Histogram;
|
|
@@ -17,10 +40,10 @@ export declare class ProverNodeMetrics {
|
|
|
17
40
|
txBlobDataGasCost: Histogram;
|
|
18
41
|
txTotalFee: Histogram;
|
|
19
42
|
private senderBalance;
|
|
43
|
+
private meter;
|
|
20
44
|
constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/foundation/log").Logger);
|
|
21
45
|
recordFailedTx(): void;
|
|
22
46
|
recordSubmitProof(durationMs: number, stats: L1PublishProofStats): void;
|
|
23
|
-
recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
|
|
24
47
|
recordSenderBalance(wei: bigint, senderAddress: string): void;
|
|
25
48
|
private recordTx;
|
|
26
49
|
}
|
package/dest/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAGV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IARhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;gBAGpB,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD;IAsBzD,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMxG;AAED,qBAAa,wBAAwB;IAOjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,qBAAqB,CAAM;gBAGzB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,yCAAgD;IAanD,KAAK;IAKX,IAAI;IAIX,OAAO,CAAC,OAAO,CAsBb;CACH;AAED,qBAAa,0BAA0B;aAenB,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IAhBhB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,SAAS,CAAC;IAEtB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAQ;gBAGH,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD;IAoEhE,cAAc;IAOd,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;IAIzD,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO7D,OAAO,CAAC,QAAQ;CAuCjB"}
|
package/dest/metrics.js
CHANGED
|
@@ -1,84 +1,158 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
|
|
3
|
-
import { formatEther } from 'viem';
|
|
4
|
-
export class
|
|
5
|
-
|
|
3
|
+
import { formatEther, formatUnits } from 'viem';
|
|
4
|
+
export class ProverNodeJobMetrics {
|
|
5
|
+
meter;
|
|
6
|
+
tracer;
|
|
6
7
|
logger;
|
|
7
8
|
proverEpochExecutionDuration;
|
|
8
9
|
provingJobDuration;
|
|
9
10
|
provingJobBlocks;
|
|
10
11
|
provingJobTransactions;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
txGas;
|
|
15
|
-
txCalldataSize;
|
|
16
|
-
txCalldataGas;
|
|
17
|
-
txBlobDataGasUsed;
|
|
18
|
-
txBlobDataGasCost;
|
|
19
|
-
txTotalFee;
|
|
20
|
-
senderBalance;
|
|
21
|
-
constructor(client, name = 'ProverNode', logger = createLogger('prover-node:publisher:metrics')){
|
|
22
|
-
this.client = client;
|
|
12
|
+
constructor(meter, tracer, logger = createLogger('prover-node:publisher:metrics')){
|
|
13
|
+
this.meter = meter;
|
|
14
|
+
this.tracer = tracer;
|
|
23
15
|
this.logger = logger;
|
|
24
|
-
|
|
25
|
-
this.proverEpochExecutionDuration = meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
|
|
16
|
+
this.proverEpochExecutionDuration = this.meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
|
|
26
17
|
description: 'Duration of execution of an epoch by the prover',
|
|
27
18
|
unit: 'ms',
|
|
28
19
|
valueType: ValueType.INT
|
|
29
20
|
});
|
|
30
|
-
this.provingJobDuration = meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
|
|
21
|
+
this.provingJobDuration = this.meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
|
|
31
22
|
description: 'Duration of proving job',
|
|
32
23
|
unit: 's',
|
|
33
24
|
valueType: ValueType.DOUBLE
|
|
34
25
|
});
|
|
35
|
-
this.provingJobBlocks = meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS, {
|
|
26
|
+
this.provingJobBlocks = this.meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS, {
|
|
36
27
|
description: 'Number of blocks in a proven epoch',
|
|
37
28
|
valueType: ValueType.INT
|
|
38
29
|
});
|
|
39
|
-
this.provingJobTransactions = meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS, {
|
|
30
|
+
this.provingJobTransactions = this.meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS, {
|
|
40
31
|
description: 'Number of transactions in a proven epoch',
|
|
41
32
|
valueType: ValueType.INT
|
|
42
33
|
});
|
|
43
|
-
|
|
34
|
+
}
|
|
35
|
+
recordProvingJob(executionTimeMs, totalTimeMs, numBlocks, numTxs) {
|
|
36
|
+
this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
|
|
37
|
+
this.provingJobDuration.record(totalTimeMs / 1000);
|
|
38
|
+
this.provingJobBlocks.record(Math.floor(numBlocks));
|
|
39
|
+
this.provingJobTransactions.record(Math.floor(numTxs));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class ProverNodeRewardsMetrics {
|
|
43
|
+
meter;
|
|
44
|
+
coinbase;
|
|
45
|
+
rollup;
|
|
46
|
+
logger;
|
|
47
|
+
rewards;
|
|
48
|
+
accumulatedRewards;
|
|
49
|
+
prevEpoch;
|
|
50
|
+
proofSubmissionWindow;
|
|
51
|
+
constructor(meter, coinbase, rollup, logger = createLogger('prover-node:publisher:metrics')){
|
|
52
|
+
this.meter = meter;
|
|
53
|
+
this.coinbase = coinbase;
|
|
54
|
+
this.rollup = rollup;
|
|
55
|
+
this.logger = logger;
|
|
56
|
+
this.prevEpoch = -1n;
|
|
57
|
+
this.proofSubmissionWindow = 0n;
|
|
58
|
+
this.observe = async (observer)=>{
|
|
59
|
+
const slot = await this.rollup.getSlotNumber();
|
|
60
|
+
// look at the prev epoch so that we get an accurate value, after proof submission window has closed
|
|
61
|
+
if (slot > this.proofSubmissionWindow) {
|
|
62
|
+
const closedEpoch = await this.rollup.getEpochNumberForSlotNumber(slot - this.proofSubmissionWindow);
|
|
63
|
+
const rewards = await this.rollup.getSpecificProverRewardsForEpoch(closedEpoch, this.coinbase);
|
|
64
|
+
const fmt = parseFloat(formatUnits(rewards, 18));
|
|
65
|
+
observer.observe(this.rewards, fmt, {
|
|
66
|
+
[Attributes.COINBASE]: this.coinbase.toString()
|
|
67
|
+
});
|
|
68
|
+
// only accumulate once per epoch
|
|
69
|
+
if (closedEpoch > this.prevEpoch) {
|
|
70
|
+
this.prevEpoch = closedEpoch;
|
|
71
|
+
this.accumulatedRewards.add(fmt, {
|
|
72
|
+
[Attributes.COINBASE]: this.coinbase.toString()
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
this.rewards = this.meter.createObservableGauge(Metrics.PROVER_NODE_REWARDS_PER_EPOCH, {
|
|
78
|
+
valueType: ValueType.DOUBLE,
|
|
79
|
+
description: 'The rewards earned'
|
|
80
|
+
});
|
|
81
|
+
this.accumulatedRewards = this.meter.createUpDownCounter(Metrics.PROVER_NODE_REWARDS_TOTAL, {
|
|
82
|
+
valueType: ValueType.DOUBLE,
|
|
83
|
+
description: 'The rewards earned (total)'
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async start() {
|
|
87
|
+
this.proofSubmissionWindow = await this.rollup.getProofSubmissionWindow();
|
|
88
|
+
this.meter.addBatchObservableCallback(this.observe, [
|
|
89
|
+
this.rewards
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
stop() {
|
|
93
|
+
this.meter.removeBatchObservableCallback(this.observe, [
|
|
94
|
+
this.rewards
|
|
95
|
+
]);
|
|
96
|
+
}
|
|
97
|
+
observe;
|
|
98
|
+
}
|
|
99
|
+
export class ProverNodePublisherMetrics {
|
|
100
|
+
client;
|
|
101
|
+
logger;
|
|
102
|
+
gasPrice;
|
|
103
|
+
txCount;
|
|
104
|
+
txDuration;
|
|
105
|
+
txGas;
|
|
106
|
+
txCalldataSize;
|
|
107
|
+
txCalldataGas;
|
|
108
|
+
txBlobDataGasUsed;
|
|
109
|
+
txBlobDataGasCost;
|
|
110
|
+
txTotalFee;
|
|
111
|
+
senderBalance;
|
|
112
|
+
meter;
|
|
113
|
+
constructor(client, name = 'ProverNode', logger = createLogger('prover-node:publisher:metrics')){
|
|
114
|
+
this.client = client;
|
|
115
|
+
this.logger = logger;
|
|
116
|
+
this.meter = client.getMeter(name);
|
|
117
|
+
this.gasPrice = this.meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE, {
|
|
44
118
|
description: 'The gas price used for transactions',
|
|
45
119
|
unit: 'gwei',
|
|
46
120
|
valueType: ValueType.DOUBLE
|
|
47
121
|
});
|
|
48
|
-
this.txCount = meter.createUpDownCounter(Metrics.L1_PUBLISHER_TX_COUNT, {
|
|
122
|
+
this.txCount = this.meter.createUpDownCounter(Metrics.L1_PUBLISHER_TX_COUNT, {
|
|
49
123
|
description: 'The number of transactions processed'
|
|
50
124
|
});
|
|
51
|
-
this.txDuration = meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION, {
|
|
125
|
+
this.txDuration = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION, {
|
|
52
126
|
description: 'The duration of transaction processing',
|
|
53
127
|
unit: 'ms',
|
|
54
128
|
valueType: ValueType.INT
|
|
55
129
|
});
|
|
56
|
-
this.txGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
|
|
130
|
+
this.txGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
|
|
57
131
|
description: 'The gas consumed by transactions',
|
|
58
132
|
unit: 'gas',
|
|
59
133
|
valueType: ValueType.INT
|
|
60
134
|
});
|
|
61
|
-
this.txCalldataSize = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
|
|
135
|
+
this.txCalldataSize = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
|
|
62
136
|
description: 'The size of the calldata in transactions',
|
|
63
137
|
unit: 'By',
|
|
64
138
|
valueType: ValueType.INT
|
|
65
139
|
});
|
|
66
|
-
this.txCalldataGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
|
|
140
|
+
this.txCalldataGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
|
|
67
141
|
description: 'The gas consumed by the calldata in transactions',
|
|
68
142
|
unit: 'gas',
|
|
69
143
|
valueType: ValueType.INT
|
|
70
144
|
});
|
|
71
|
-
this.txBlobDataGasUsed = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
|
|
145
|
+
this.txBlobDataGasUsed = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
|
|
72
146
|
description: 'The amount of blob gas used in transactions',
|
|
73
147
|
unit: 'gas',
|
|
74
148
|
valueType: ValueType.INT
|
|
75
149
|
});
|
|
76
|
-
this.txBlobDataGasCost = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
|
|
150
|
+
this.txBlobDataGasCost = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
|
|
77
151
|
description: 'The gas cost of blobs in transactions',
|
|
78
152
|
unit: 'gwei',
|
|
79
153
|
valueType: ValueType.INT
|
|
80
154
|
});
|
|
81
|
-
this.txTotalFee = meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE, {
|
|
155
|
+
this.txTotalFee = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE, {
|
|
82
156
|
description: 'How much L1 tx costs',
|
|
83
157
|
unit: 'gwei',
|
|
84
158
|
valueType: ValueType.DOUBLE,
|
|
@@ -104,7 +178,7 @@ export class ProverNodeMetrics {
|
|
|
104
178
|
]
|
|
105
179
|
}
|
|
106
180
|
});
|
|
107
|
-
this.senderBalance = meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
|
|
181
|
+
this.senderBalance = this.meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
|
|
108
182
|
unit: 'eth',
|
|
109
183
|
description: 'The balance of the sender address',
|
|
110
184
|
valueType: ValueType.DOUBLE
|
|
@@ -119,12 +193,6 @@ export class ProverNodeMetrics {
|
|
|
119
193
|
recordSubmitProof(durationMs, stats) {
|
|
120
194
|
this.recordTx(durationMs, stats);
|
|
121
195
|
}
|
|
122
|
-
recordProvingJob(executionTimeMs, totalTimeMs, numBlocks, numTxs) {
|
|
123
|
-
this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
|
|
124
|
-
this.provingJobDuration.record(totalTimeMs / 1000);
|
|
125
|
-
this.provingJobBlocks.record(Math.floor(numBlocks));
|
|
126
|
-
this.provingJobTransactions.record(Math.floor(numTxs));
|
|
127
|
-
}
|
|
128
196
|
recordSenderBalance(wei, senderAddress) {
|
|
129
197
|
const eth = parseFloat(formatEther(wei, 'wei'));
|
|
130
198
|
this.senderBalance.record(eth, {
|
|
@@ -2,7 +2,7 @@ import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
|
2
2
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
3
3
|
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
4
4
|
export interface EpochMonitorHandler {
|
|
5
|
-
handleEpochReadyToProve(epochNumber: bigint): Promise<
|
|
5
|
+
handleEpochReadyToProve(epochNumber: bigint): Promise<boolean>;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Fires an event when a new epoch ready to prove is detected.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/epoch-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"epoch-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/epoch-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,SAAS;IAS1C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAA6C;IACxD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAqB;gBAG3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAC9D,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,EAC9C,SAAS,GAAE,eAAsC;WAM/B,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,EACtC,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,YAAY,CAAC;IAKjB,KAAK,CAAC,OAAO,EAAE,mBAAmB;IAMzC,0BAA0B;IACnB,UAAU,CAAC,OAAO,EAAE,mBAAmB;IAIjC,IAAI;IAMJ,IAAI;YAwBH,qBAAqB;CAYpC"}
|
|
@@ -53,6 +53,10 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
|
53
53
|
}
|
|
54
54
|
async work() {
|
|
55
55
|
const { epochToProve, blockNumber, slotNumber } = await this.getEpochNumberToProve();
|
|
56
|
+
this.log.debug(`Epoch to prove: ${epochToProve}`, {
|
|
57
|
+
blockNumber,
|
|
58
|
+
slotNumber
|
|
59
|
+
});
|
|
56
60
|
if (epochToProve === undefined) {
|
|
57
61
|
this.log.trace(`Next block to prove ${blockNumber} not yet mined`, {
|
|
58
62
|
blockNumber
|
|
@@ -77,8 +81,9 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
|
77
81
|
return;
|
|
78
82
|
}
|
|
79
83
|
this.log.debug(`Epoch ${epochToProve} is ready to be proven`);
|
|
80
|
-
await this.handler?.handleEpochReadyToProve(epochToProve)
|
|
81
|
-
|
|
84
|
+
if (await this.handler?.handleEpochReadyToProve(epochToProve)) {
|
|
85
|
+
this.latestEpochNumber = epochToProve;
|
|
86
|
+
}
|
|
82
87
|
}
|
|
83
88
|
async getEpochNumberToProve() {
|
|
84
89
|
const lastBlockProven = await this.l2BlockSource.getProvenBlockNumber();
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { P2P } from '@aztec/p2p';
|
|
2
|
+
import type { P2PClient, ProverCoordination } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
4
|
+
export type CombinedCoordinationOptions = {
|
|
5
|
+
txGatheringBatchSize: number;
|
|
6
|
+
txGatheringMaxParallelRequestsPerNode: number;
|
|
7
|
+
};
|
|
8
|
+
export interface TxSource {
|
|
9
|
+
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
10
|
+
}
|
|
11
|
+
export declare class CombinedProverCoordination implements ProverCoordination {
|
|
12
|
+
#private;
|
|
13
|
+
readonly p2p: P2P | undefined;
|
|
14
|
+
readonly aztecNodes: TxSource[];
|
|
15
|
+
private readonly options;
|
|
16
|
+
private readonly log;
|
|
17
|
+
constructor(p2p: P2P | undefined, aztecNodes: TxSource[], options?: CombinedCoordinationOptions, log?: import("@aztec/foundation/log").Logger);
|
|
18
|
+
getP2PClient(): P2PClient | undefined;
|
|
19
|
+
getTxsByHash(txHashes: TxHash[]): Promise<Tx[]>;
|
|
20
|
+
gatherTxs(txHashes: TxHash[]): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=combined-prover-coordination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combined-prover-coordination.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/combined-prover-coordination.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,2BAA2B,GAAG;IAExC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AASF,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAsCD,qBAAa,0BAA2B,YAAW,kBAAkB;;aAEjD,GAAG,EAAE,GAAG,GAAG,SAAS;aACpB,UAAU,EAAE,QAAQ,EAAE;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAIxB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBANJ,GAAG,EAAE,GAAG,GAAG,SAAS,EACpB,UAAU,EAAE,QAAQ,EAAE,EACrB,OAAO,GAAE,2BAGzB,EACgB,GAAG,yCAA2D;IAG1E,YAAY,IAAI,SAAS,GAAG,SAAS;IAI/B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAY/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyE1D"}
|