@lodestar/beacon-node 1.50.0-dev.023ad6c012 → 1.50.0-dev.040a952dd7

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 (83) hide show
  1. package/lib/chain/archiveStore/archiveStore.js +1 -1
  2. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  3. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +2 -2
  4. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  5. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +5 -7
  6. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  7. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -1
  8. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  9. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -2
  10. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  11. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  12. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  13. package/lib/chain/archiveStore/interface.d.ts +1 -1
  14. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  15. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  16. package/lib/chain/blocks/verifyBlock.js +1 -1
  17. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  18. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -1
  19. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  20. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +5 -4
  21. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  22. package/lib/chain/chain.d.ts.map +1 -1
  23. package/lib/chain/chain.js +18 -0
  24. package/lib/chain/chain.js.map +1 -1
  25. package/lib/chain/options.d.ts +1 -1
  26. package/lib/chain/options.d.ts.map +1 -1
  27. package/lib/chain/options.js +1 -1
  28. package/lib/chain/options.js.map +1 -1
  29. package/lib/chain/produceBlock/computeNewStateRoot.js +1 -1
  30. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  31. package/lib/chain/regen/regen.d.ts +2 -0
  32. package/lib/chain/regen/regen.d.ts.map +1 -1
  33. package/lib/chain/regen/regen.js +10 -4
  34. package/lib/chain/regen/regen.js.map +1 -1
  35. package/lib/chain/validatorMonitor.d.ts +5 -1
  36. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  37. package/lib/chain/validatorMonitor.js +64 -54
  38. package/lib/chain/validatorMonitor.js.map +1 -1
  39. package/lib/execution/engine/disabled.d.ts +0 -2
  40. package/lib/execution/engine/disabled.d.ts.map +1 -1
  41. package/lib/execution/engine/disabled.js +0 -6
  42. package/lib/execution/engine/disabled.js.map +1 -1
  43. package/lib/execution/engine/http.d.ts +1 -3
  44. package/lib/execution/engine/http.d.ts.map +1 -1
  45. package/lib/execution/engine/http.js +2 -17
  46. package/lib/execution/engine/http.js.map +1 -1
  47. package/lib/execution/engine/interface.d.ts +2 -4
  48. package/lib/execution/engine/interface.d.ts.map +1 -1
  49. package/lib/execution/engine/mock.d.ts +0 -2
  50. package/lib/execution/engine/mock.d.ts.map +1 -1
  51. package/lib/execution/engine/mock.js +0 -8
  52. package/lib/execution/engine/mock.js.map +1 -1
  53. package/lib/execution/engine/types.d.ts +0 -8
  54. package/lib/execution/engine/types.d.ts.map +1 -1
  55. package/lib/execution/engine/types.js.map +1 -1
  56. package/lib/metrics/metrics.d.ts +7 -3
  57. package/lib/metrics/metrics.d.ts.map +1 -1
  58. package/lib/metrics/metrics.js +4 -4
  59. package/lib/metrics/metrics.js.map +1 -1
  60. package/lib/node/nodejs.d.ts.map +1 -1
  61. package/lib/node/nodejs.js +25 -3
  62. package/lib/node/nodejs.js.map +1 -1
  63. package/package.json +15 -15
  64. package/src/chain/archiveStore/archiveStore.ts +1 -1
  65. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +5 -7
  66. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -1
  67. package/src/chain/archiveStore/historicalState/types.ts +2 -2
  68. package/src/chain/archiveStore/historicalState/worker.ts +1 -2
  69. package/src/chain/archiveStore/interface.ts +1 -1
  70. package/src/chain/blocks/verifyBlock.ts +1 -0
  71. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -3
  72. package/src/chain/chain.ts +21 -0
  73. package/src/chain/options.ts +2 -2
  74. package/src/chain/produceBlock/computeNewStateRoot.ts +1 -1
  75. package/src/chain/regen/regen.ts +12 -4
  76. package/src/chain/validatorMonitor.ts +75 -57
  77. package/src/execution/engine/disabled.ts +0 -8
  78. package/src/execution/engine/http.ts +1 -30
  79. package/src/execution/engine/interface.ts +2 -6
  80. package/src/execution/engine/mock.ts +1 -19
  81. package/src/execution/engine/types.ts +0 -10
  82. package/src/metrics/metrics.ts +21 -6
  83. package/src/node/nodejs.ts +31 -3
@@ -9,27 +9,42 @@ import {RegistryMetricCreator} from "./utils/registryMetricCreator.js";
9
9
 
10
10
  export type Metrics = BeaconMetrics &
11
11
  ForkChoiceMetrics &
12
- BeaconStateTransitionMetrics &
13
- LodestarMetrics & {register: RegistryMetricCreator; close: () => void};
12
+ LodestarMetrics & {
13
+ /** Null when we use native state transition metrics instead */
14
+ stateTransition: BeaconStateTransitionMetrics | null;
15
+ register: RegistryMetricCreator;
16
+ close: () => void;
17
+ };
18
+
19
+ export type CreateMetricsOptions = {
20
+ /*
21
+ * Toggle inclusion of state transition metrics.
22
+ *
23
+ * False when native state transition is used, so we
24
+ * can grab metrics from the native implementation instead.
25
+ * */
26
+ includeStateTransitionMetrics?: boolean;
27
+ collectNodeMetrics?: boolean;
28
+ };
14
29
 
15
30
  export function createMetrics(
16
31
  opts: MetricsOptions,
17
32
  genesisTime: number,
18
33
  externalRegistries: Registry[] = [],
19
- {collectNodeMetrics = true}: {collectNodeMetrics?: boolean} = {}
34
+ createOpts: CreateMetricsOptions = {}
20
35
  ): Metrics {
21
36
  const register = new RegistryMetricCreator();
22
37
  const beacon = createBeaconMetrics(register);
23
38
  const forkChoice = getForkChoiceMetrics(register);
24
39
  const lodestar = createLodestarMetrics(register, opts.metadata, genesisTime);
25
- const stateTransition = getMetrics(register);
40
+ const stateTransition = createOpts.includeStateTransitionMetrics === false ? null : getMetrics(register);
26
41
 
27
42
  const onUnhandledRejection = (_error: unknown): void => {
28
43
  lodestar.unhandledPromiseRejections.inc();
29
44
  };
30
45
  process.on("unhandledRejection", onUnhandledRejection);
31
46
 
32
- const nodeJsMetricsClose = collectNodeMetrics ? collectNodeJSMetrics(register) : (): void => {};
47
+ const nodeJsMetricsClose = createOpts.collectNodeMetrics === false ? (): void => {} : collectNodeJSMetrics(register);
33
48
  const close = (): void => {
34
49
  process.removeListener("unhandledRejection", onUnhandledRejection);
35
50
  nodeJsMetricsClose();
@@ -46,7 +61,7 @@ export function createMetrics(
46
61
  ...beacon,
47
62
  ...forkChoice,
48
63
  ...lodestar,
49
- ...stateTransition,
64
+ stateTransition,
50
65
  register,
51
66
  close,
52
67
  };
@@ -1,6 +1,12 @@
1
1
  import {setMaxListeners} from "node:events";
2
2
  import {PrivateKey} from "@libp2p/interface";
3
3
  import {Registry} from "prom-client";
4
+ import {
5
+ init as initNativeMetrics,
6
+ registerLocalValidator as registerNativeLocalValidator,
7
+ scrapeMetrics as scrapeNativeMetrics,
8
+ unregisterLocalValidator as unregisterNativeLocalValidator,
9
+ } from "@chainsafe/lodestar-z/metrics";
4
10
  import {type PubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
5
11
  import {hasher} from "@chainsafe/persistent-merkle-tree";
6
12
  import {BeaconApiMethods} from "@lodestar/api/beacon/server";
@@ -171,7 +177,13 @@ export class BeaconNode {
171
177
  // monitoring relies on metrics data
172
178
  opts.monitoring.endpoint
173
179
  ) {
174
- metrics = createMetrics(opts.metrics, anchorState.genesisTime, metricsRegistries);
180
+ if (opts.chain.nativeStateTransition) {
181
+ initNativeMetrics();
182
+ }
183
+
184
+ metrics = createMetrics(opts.metrics, anchorState.genesisTime, metricsRegistries, {
185
+ includeStateTransitionMetrics: !opts.chain.nativeStateTransition,
186
+ });
175
187
  initBeaconMetrics(metrics, anchorState);
176
188
  // Since the db is instantiated before this, metrics must be injected manually afterwards
177
189
  db.setMetrics(metrics.db, metrics.flatFileStore);
@@ -185,7 +197,13 @@ export class BeaconNode {
185
197
  config,
186
198
  anchorState.genesisTime,
187
199
  logger.child({module: LoggerModule.vmon}),
188
- opts.validatorMonitor
200
+ opts.validatorMonitor,
201
+ opts.chain.nativeStateTransition
202
+ ? {
203
+ registerLocalValidator: registerNativeLocalValidator,
204
+ unregisterLocalValidator: unregisterNativeLocalValidator,
205
+ }
206
+ : null
189
207
  )
190
208
  : null;
191
209
 
@@ -303,7 +321,17 @@ export class BeaconNode {
303
321
  const metricsServer = opts.metrics.enabled
304
322
  ? await getHttpMetricsServer(opts.metrics, {
305
323
  register: (metrics as Metrics).register,
306
- getOtherMetrics: async () => Promise.all([network.scrapeMetrics(), chain.archiveStore.scrapeMetrics()]),
324
+ getOtherMetrics: async () => {
325
+ const otherMetrics = await Promise.all([network.scrapeMetrics(), chain.archiveStore.scrapeMetrics()]);
326
+ if (opts.chain.nativeStateTransition) {
327
+ try {
328
+ otherMetrics.push(scrapeNativeMetrics());
329
+ } catch (e) {
330
+ logger.warn("Failed to scrape native state-transition metrics", {}, e as Error);
331
+ }
332
+ }
333
+ return otherMetrics;
334
+ },
307
335
  logger: logger.child({module: LoggerModule.metrics}),
308
336
  })
309
337
  : null;