@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.
Files changed (41) hide show
  1. package/dest/config.d.ts +2 -2
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +8 -8
  4. package/dest/factory.d.ts +3 -2
  5. package/dest/factory.d.ts.map +1 -1
  6. package/dest/factory.js +9 -9
  7. package/dest/job/epoch-proving-job.d.ts +2 -2
  8. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  9. package/dest/job/epoch-proving-job.js +1 -1
  10. package/dest/metrics.d.ts +27 -4
  11. package/dest/metrics.d.ts.map +1 -1
  12. package/dest/metrics.js +104 -36
  13. package/dest/monitors/epoch-monitor.d.ts +1 -1
  14. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  15. package/dest/monitors/epoch-monitor.js +7 -2
  16. package/dest/prover-coordination/combined-prover-coordination.d.ts +22 -0
  17. package/dest/prover-coordination/combined-prover-coordination.d.ts.map +1 -0
  18. package/dest/prover-coordination/combined-prover-coordination.js +136 -0
  19. package/dest/prover-coordination/config.d.ts +1 -1
  20. package/dest/prover-coordination/config.d.ts.map +1 -1
  21. package/dest/prover-coordination/config.js +4 -4
  22. package/dest/prover-coordination/factory.d.ts +5 -4
  23. package/dest/prover-coordination/factory.d.ts.map +1 -1
  24. package/dest/prover-coordination/factory.js +20 -14
  25. package/dest/prover-node-publisher.d.ts +1 -2
  26. package/dest/prover-node-publisher.d.ts.map +1 -1
  27. package/dest/prover-node-publisher.js +7 -13
  28. package/dest/prover-node.d.ts +8 -10
  29. package/dest/prover-node.d.ts.map +1 -1
  30. package/dest/prover-node.js +21 -17
  31. package/package.json +20 -22
  32. package/src/config.ts +10 -10
  33. package/src/factory.ts +10 -10
  34. package/src/job/epoch-proving-job.ts +3 -3
  35. package/src/metrics.ts +111 -38
  36. package/src/monitors/epoch-monitor.ts +5 -3
  37. package/src/prover-coordination/combined-prover-coordination.ts +160 -0
  38. package/src/prover-coordination/config.ts +5 -5
  39. package/src/prover-coordination/factory.ts +36 -25
  40. package/src/prover-node-publisher.ts +9 -18
  41. 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
- txGatheringMaxParallelRequests: number;
19
+ txGatheringBatchSize: number;
20
+ txGatheringMaxParallelRequestsPerNode: number;
21
21
  };
22
22
  export declare const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig>;
23
23
  export declare function getProverNodeConfigFromEnv(): ProverNodeConfig;
@@ -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,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;CACxC,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"}
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
- txGatheringMaxParallelRequests: {
40
- env: 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS',
41
- description: 'How many txs to load up a time',
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 { ProverCoordination, ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
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?: ProverCoordination;
17
+ aztecNodeTxProvider?: TxSource;
17
18
  archiver?: Archiver;
18
19
  publisher?: ProverNodePublisher;
19
20
  blobSinkClient?: BlobSinkClientInterface;
@@ -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,EAAwD,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,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;AAGnE,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,kBAAkB,CAAC;IACzC,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,uBAoEP"}
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, createL1Clients } from '@aztec/ethereum';
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 { publicClient, walletClient } = createL1Clients(rpcUrls, publisherPrivateKey, chain.chainInfo);
37
- const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
38
- const l1TxUtils = deps.l1TxUtils ?? new L1TxUtils(publicClient, walletClient, log, config);
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.p2pEnabled is false, createProverCoordination request information from the AztecNode
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
- txGatheringMaxParallelRequests: config.txGatheringMaxParallelRequests,
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 { ProverNodeMetrics } from '../metrics.js';
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: ProverNodeMetrics, deadline: Date | undefined, config?: {
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,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,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,iBAAiB,EAC1B,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"}
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.client.getTracer('EpochProvingJob');
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 ProverNodeMetrics {
4
- readonly client: TelemetryClient;
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,iBAAiB;aAmBV,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IApBhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,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;gBAGX,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD;IAsFhE,cAAc;IAOd,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;IAIzD,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOhG,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO7D,OAAO,CAAC,QAAQ;CAuCjB"}
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 ProverNodeMetrics {
5
- client;
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
- gasPrice;
12
- txCount;
13
- txDuration;
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
- const meter = client.getMeter(name);
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
- this.gasPrice = meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE, {
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<void>;
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,IAAI,CAAC,CAAC;CAC7D;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;YAsBH,qBAAqB;CAYpC"}
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
- this.latestEpochNumber = epochToProve;
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"}