@lodestar/beacon-node 1.30.0 → 1.31.0-dev.065cb80811

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 (92) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +4 -2
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/config/index.d.ts +1 -1
  5. package/lib/api/impl/config/index.js +5 -0
  6. package/lib/api/impl/config/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.js +11 -33
  8. package/lib/api/impl/validator/index.js.map +1 -1
  9. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -2
  10. package/lib/chain/archiveStore/utils/archiveBlocks.js +1 -2
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  12. package/lib/chain/blocks/blockInput/blockInput.d.ts +166 -0
  13. package/lib/chain/blocks/blockInput/blockInput.js +538 -0
  14. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -0
  15. package/lib/chain/blocks/blockInput/errors.d.ts +38 -0
  16. package/lib/chain/blocks/blockInput/errors.js +17 -0
  17. package/lib/chain/blocks/blockInput/errors.js.map +1 -0
  18. package/lib/chain/blocks/blockInput/index.d.ts +5 -0
  19. package/lib/chain/blocks/blockInput/index.js +5 -0
  20. package/lib/chain/blocks/blockInput/index.js.map +1 -0
  21. package/lib/chain/blocks/blockInput/types.d.ts +117 -0
  22. package/lib/chain/blocks/blockInput/types.js +19 -0
  23. package/lib/chain/blocks/blockInput/types.js.map +1 -0
  24. package/lib/chain/blocks/blockInput/utils.d.ts +9 -0
  25. package/lib/chain/blocks/blockInput/utils.js +35 -0
  26. package/lib/chain/blocks/blockInput/utils.js.map +1 -0
  27. package/lib/chain/blocks/importBlock.d.ts +5 -0
  28. package/lib/chain/blocks/importBlock.js +27 -2
  29. package/lib/chain/blocks/importBlock.js.map +1 -1
  30. package/lib/chain/chain.d.ts +2 -0
  31. package/lib/chain/chain.js +16 -10
  32. package/lib/chain/chain.js.map +1 -1
  33. package/lib/chain/initState.js +11 -0
  34. package/lib/chain/initState.js.map +1 -1
  35. package/lib/chain/interface.d.ts +2 -0
  36. package/lib/chain/interface.js.map +1 -1
  37. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +20 -14
  38. package/lib/chain/opPools/aggregatedAttestationPool.js +41 -49
  39. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  40. package/lib/chain/opPools/syncContributionAndProofPool.d.ts +11 -4
  41. package/lib/chain/opPools/syncContributionAndProofPool.js +50 -8
  42. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  43. package/lib/chain/opPools/types.d.ts +1 -1
  44. package/lib/chain/opPools/types.js +1 -1
  45. package/lib/chain/opPools/types.js.map +1 -1
  46. package/lib/chain/produceBlock/produceBlockBody.js +2 -2
  47. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  48. package/lib/chain/seenCache/seenAggregateAndProof.d.ts +3 -3
  49. package/lib/chain/seenCache/seenAggregateAndProof.js +22 -10
  50. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  51. package/lib/chain/seenCache/seenAttesters.js +20 -11
  52. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  53. package/lib/chain/seenCache/seenBlockInput.d.ts +84 -0
  54. package/lib/chain/seenCache/seenBlockInput.js +225 -0
  55. package/lib/chain/seenCache/seenBlockInput.js.map +1 -0
  56. package/lib/chain/validation/aggregateAndProof.js +10 -2
  57. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  58. package/lib/chain/validation/attestation.js +8 -0
  59. package/lib/chain/validation/attestation.js.map +1 -1
  60. package/lib/chain/validation/blobSidecar.js +2 -2
  61. package/lib/chain/validation/blobSidecar.js.map +1 -1
  62. package/lib/chain/validation/block.js +2 -2
  63. package/lib/chain/validation/block.js.map +1 -1
  64. package/lib/chain/validatorMonitor.d.ts +3 -3
  65. package/lib/chain/validatorMonitor.js +273 -56
  66. package/lib/chain/validatorMonitor.js.map +1 -1
  67. package/lib/metrics/metrics/lodestar.d.ts +39 -70
  68. package/lib/metrics/metrics/lodestar.js +72 -215
  69. package/lib/metrics/metrics/lodestar.js.map +1 -1
  70. package/lib/network/core/networkCore.d.ts +2 -1
  71. package/lib/network/core/networkCore.js.map +1 -1
  72. package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -1
  73. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  74. package/lib/network/core/types.d.ts +3 -2
  75. package/lib/network/network.js +3 -3
  76. package/lib/network/network.js.map +1 -1
  77. package/lib/network/peers/score/interface.d.ts +1 -1
  78. package/lib/network/peers/score/interface.js.map +1 -1
  79. package/lib/network/peers/score/store.d.ts +2 -1
  80. package/lib/network/peers/score/store.js +1 -1
  81. package/lib/network/peers/score/store.js.map +1 -1
  82. package/lib/network/processor/gossipHandlers.js +5 -2
  83. package/lib/network/processor/gossipHandlers.js.map +1 -1
  84. package/lib/network/processor/index.d.ts +1 -6
  85. package/lib/network/processor/index.js +0 -14
  86. package/lib/network/processor/index.js.map +1 -1
  87. package/lib/node/nodejs.js +1 -1
  88. package/lib/node/nodejs.js.map +1 -1
  89. package/lib/util/graffiti.d.ts +3 -2
  90. package/lib/util/graffiti.js +2 -2
  91. package/lib/util/graffiti.js.map +1 -1
  92. package/package.json +15 -15
@@ -1,7 +1,8 @@
1
+ import { BlockInputSource } from "../../chain/blocks/blockInput/index.js";
1
2
  import { BlobsSource, BlockSource } from "../../chain/blocks/types.js";
2
3
  import { JobQueueItemType } from "../../chain/bls/index.js";
3
4
  import { AttestationErrorCode, BlockErrorCode } from "../../chain/errors/index.js";
4
- import { ScannedSlotsTerminationReason } from "../../chain/opPools/aggregatedAttestationPool.js";
5
+ import { type InvalidAttestationData, ScannedSlotsTerminationReason } from "../../chain/opPools/aggregatedAttestationPool.js";
5
6
  import { InsertOutcome } from "../../chain/opPools/types.js";
6
7
  import { RegenCaller, RegenFnName } from "../../chain/regen/interface.js";
7
8
  import { ReprocessStatus } from "../../chain/reprocess.js";
@@ -236,7 +237,9 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
236
237
  attestationNonBatchCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
237
238
  };
238
239
  gossipBlock: {
239
- elapsedTimeTillReceived: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
240
+ elapsedTimeTillReceived: import("@lodestar/utils").Histogram<{
241
+ source: OpSource;
242
+ }>;
240
243
  elapsedTimeTillProcessed: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
241
244
  gossipValidation: {
242
245
  recvToValidation: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
@@ -342,7 +345,9 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
342
345
  poolSlots: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
343
346
  totalConsolidations: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
344
347
  emptyAttestationData: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
345
- invalidAttestationData: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
348
+ invalidAttestationData: import("@lodestar/utils").GaugeExtra<{
349
+ reason: InvalidAttestationData;
350
+ }>;
346
351
  seenCommittees: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
347
352
  };
348
353
  };
@@ -364,77 +369,30 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
364
369
  syncCommitteeMessagePoolInsertOutcome: import("@lodestar/utils").Counter<{
365
370
  insertOutcome: InsertOutcome;
366
371
  }>;
367
- syncContributionAndProofPoolSize: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
372
+ syncContributionAndProofPool: {
373
+ size: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
374
+ gossipInsertOutcome: import("@lodestar/utils").Counter<{
375
+ insertOutcome: InsertOutcome;
376
+ }>;
377
+ apiInsertOutcome: import("@lodestar/utils").Counter<{
378
+ insertOutcome: InsertOutcome;
379
+ }>;
380
+ blockRootsPerSlot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
381
+ subnetsByBlockRoot: import("@lodestar/utils").GaugeExtra<{
382
+ index: number;
383
+ }>;
384
+ participantsByBlockRoot: import("@lodestar/utils").GaugeExtra<{
385
+ index: number;
386
+ }>;
387
+ getAggregateRoots: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
388
+ getAggregateSubnets: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
389
+ getAggregateParticipants: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
390
+ getAggregateReturnsEmpty: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
391
+ };
368
392
  };
369
393
  chain: {
370
394
  blacklistedBlocks: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
371
395
  };
372
- validatorMonitor: {
373
- validatorsConnected: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
374
- validatorsInSyncCommittee: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
375
- prevEpochOnChainBalance: import("@lodestar/utils").GaugeExtra<{
376
- index: number;
377
- }>;
378
- prevEpochOnChainAttesterHit: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
379
- prevEpochOnChainAttesterMiss: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
380
- prevEpochOnChainSourceAttesterHit: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
381
- prevEpochOnChainSourceAttesterMiss: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
382
- prevEpochOnChainHeadAttesterHit: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
383
- prevEpochOnChainHeadAttesterMiss: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
384
- prevOnChainAttesterCorrectHead: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
385
- prevOnChainAttesterIncorrectHead: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
386
- prevEpochOnChainTargetAttesterHit: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
387
- prevEpochOnChainTargetAttesterMiss: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
388
- prevEpochOnChainInclusionDistance: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
389
- prevEpochAttestations: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
390
- prevEpochAttestationsMinDelaySeconds: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
391
- prevEpochAttestationAggregateInclusions: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
392
- prevEpochAttestationBlockInclusions: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
393
- prevEpochAttestationBlockMinInclusionDistance: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
394
- prevEpochBeaconBlocks: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
395
- prevEpochBeaconBlocksMinDelaySeconds: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
396
- prevEpochAggregatesTotal: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
397
- prevEpochAggregatesMinDelaySeconds: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
398
- prevEpochSyncCommitteeHits: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
399
- prevEpochSyncCommitteeMisses: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
400
- prevEpochSyncSignatureAggregateInclusions: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
401
- prevEpochAttestationSummary: import("@lodestar/utils").GaugeExtra<{
402
- summary: string;
403
- }>;
404
- prevEpochBlockProposalSummary: import("@lodestar/utils").GaugeExtra<{
405
- summary: string;
406
- }>;
407
- unaggregatedAttestationTotal: import("@lodestar/utils").GaugeExtra<{
408
- src: OpSource;
409
- }>;
410
- unaggregatedAttestationDelaySeconds: import("@lodestar/utils").Histogram<{
411
- src: OpSource;
412
- }>;
413
- unaggregatedAttestationSubmittedSentPeers: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
414
- aggregatedAttestationTotal: import("@lodestar/utils").GaugeExtra<{
415
- src: OpSource;
416
- }>;
417
- aggregatedAttestationDelaySeconds: import("@lodestar/utils").Histogram<{
418
- src: OpSource;
419
- }>;
420
- attestationInAggregateTotal: import("@lodestar/utils").GaugeExtra<{
421
- src: OpSource;
422
- }>;
423
- attestationInAggregateDelaySeconds: import("@lodestar/utils").Histogram<{
424
- src: OpSource;
425
- }>;
426
- attestationInBlockTotal: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
427
- attestationInBlockDelaySlots: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
428
- attestationInBlockParticipants: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
429
- syncSignatureInAggregateTotal: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
430
- beaconBlockTotal: import("@lodestar/utils").GaugeExtra<{
431
- src: OpSource;
432
- }>;
433
- beaconBlockDelaySeconds: import("@lodestar/utils").Histogram<{
434
- src: OpSource;
435
- }>;
436
- proposerBalanceDeltaKnown: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
437
- };
438
396
  proposerBalanceDeltaAny: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
439
397
  stateCache: {
440
398
  lookups: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
@@ -521,6 +479,17 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
521
479
  reason: RejectReason;
522
480
  }>;
523
481
  };
482
+ blockInput: {
483
+ blockInputCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
484
+ duplicateBlockCount: import("@lodestar/utils").GaugeExtra<{
485
+ source: BlockInputSource;
486
+ }>;
487
+ duplicateBlobCount: import("@lodestar/utils").GaugeExtra<{
488
+ source: BlockInputSource;
489
+ }>;
490
+ createdByBlock: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
491
+ createdByBlob: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
492
+ };
524
493
  };
525
494
  regenFnCallTotal: import("@lodestar/utils").GaugeExtra<{
526
495
  entrypoint: RegenFnName;
@@ -556,6 +556,7 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
556
556
  elapsedTimeTillReceived: register.histogram({
557
557
  name: "lodestar_gossip_block_elapsed_time_till_received",
558
558
  help: "Time elapsed between block slot time and the time block received via gossip",
559
+ labelNames: ["source"],
559
560
  buckets: [0.5, 1, 2, 4, 6, 12],
560
561
  }),
561
562
  elapsedTimeTillProcessed: register.histogram({
@@ -814,6 +815,7 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
814
815
  invalidAttestationData: register.gauge({
815
816
  name: "lodestar_oppool_aggregated_attestation_pool_packed_attestations_invalid_attestation_data_total",
816
817
  help: "Total number of invalid attestation data when producing packed attestation",
818
+ labelNames: ["reason"],
817
819
  }),
818
820
  seenCommittees: register.gauge({
819
821
  name: "lodestar_oppool_aggregated_attestation_pool_packed_attestations_seen_committees_total",
@@ -866,10 +868,52 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
866
868
  help: "Total number of InsertOutcome as a result of adding a SyncCommitteeMessage to pool",
867
869
  labelNames: ["insertOutcome"],
868
870
  }),
869
- syncContributionAndProofPoolSize: register.gauge({
870
- name: "lodestar_oppool_sync_contribution_and_proof_pool_pool_size",
871
- help: "Current size of the SyncContributionAndProofPool unique by slot subnet and block root",
872
- }),
871
+ syncContributionAndProofPool: {
872
+ size: register.gauge({
873
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_size",
874
+ help: "Current size of the SyncContributionAndProofPool unique by slot subnet and block root",
875
+ }),
876
+ gossipInsertOutcome: register.counter({
877
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_gossip_insert_outcome_total",
878
+ help: "Total number of InsertOutcome as a result of adding a ContributionAndProof from gossip into the pool",
879
+ labelNames: ["insertOutcome"],
880
+ }),
881
+ apiInsertOutcome: register.counter({
882
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_api_insert_outcome_total",
883
+ help: "Total number of InsertOutcome as a result of adding a ContributionAndProof from api into the pool",
884
+ labelNames: ["insertOutcome"],
885
+ }),
886
+ blockRootsPerSlot: register.gauge({
887
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_block_roots_per_slot_total",
888
+ help: "Total number of block roots per slot in SyncContributionAndProofPool",
889
+ }),
890
+ subnetsByBlockRoot: register.gauge({
891
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_subnets_by_block_root_total",
892
+ help: "Total number of subnets per block root in SyncContributionAndProofPool",
893
+ labelNames: ["index"],
894
+ }),
895
+ participantsByBlockRoot: register.gauge({
896
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_participants_by_block_root_total",
897
+ help: "Total number of participants per block root in SyncContributionAndProofPool",
898
+ labelNames: ["index"],
899
+ }),
900
+ getAggregateRoots: register.gauge({
901
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_roots_total",
902
+ help: "Total number of block roots in SyncContributionAndProofPool.getAggregate(slot)",
903
+ }),
904
+ getAggregateSubnets: register.gauge({
905
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_subnets_total",
906
+ help: "Total number of subnets in SyncContributionAndProofPool.getAggregate(slot, root)",
907
+ }),
908
+ getAggregateParticipants: register.gauge({
909
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_participants_total",
910
+ help: "Total number of participants in SyncContributionAndProofPool.getAggregate(slot, root)",
911
+ }),
912
+ getAggregateReturnsEmpty: register.gauge({
913
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_returns_empty_total",
914
+ help: "Total number of empty returns in SyncContributionAndProofPool.getAggregate(slot, root)",
915
+ }),
916
+ },
873
917
  },
874
918
  chain: {
875
919
  blacklistedBlocks: register.gauge({
@@ -877,217 +921,6 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
877
921
  help: "Total number of blacklisted blocks",
878
922
  }),
879
923
  },
880
- // Validator monitoring
881
- validatorMonitor: {
882
- validatorsConnected: register.gauge({
883
- name: "validator_monitor_validators",
884
- help: "Count of validators that are specifically monitored by this beacon node",
885
- }),
886
- validatorsInSyncCommittee: register.gauge({
887
- name: "validator_monitor_validators_in_sync_committee",
888
- help: "Count of validators monitored by this beacon node that are part of sync committee",
889
- }),
890
- // Validator Monitor Metrics (per-epoch summaries)
891
- // Only track prevEpochOnChainBalance per index
892
- prevEpochOnChainBalance: register.gauge({
893
- name: "validator_monitor_prev_epoch_on_chain_balance",
894
- help: "Balance of validator after an epoch",
895
- labelNames: ["index"],
896
- }),
897
- prevEpochOnChainAttesterHit: register.gauge({
898
- name: "validator_monitor_prev_epoch_on_chain_attester_hit_total",
899
- help: "Incremented if validator's submitted attestation is included in some blocks",
900
- }),
901
- prevEpochOnChainAttesterMiss: register.gauge({
902
- name: "validator_monitor_prev_epoch_on_chain_attester_miss_total",
903
- help: "Incremented if validator's submitted attestation is not included in any blocks",
904
- }),
905
- prevEpochOnChainSourceAttesterHit: register.gauge({
906
- name: "validator_monitor_prev_epoch_on_chain_source_attester_hit_total",
907
- help: "Incremented if the validator is flagged as a previous epoch source attester during per epoch processing",
908
- }),
909
- prevEpochOnChainSourceAttesterMiss: register.gauge({
910
- name: "validator_monitor_prev_epoch_on_chain_source_attester_miss_total",
911
- help: "Incremented if the validator is not flagged as a previous epoch source attester during per epoch processing",
912
- }),
913
- prevEpochOnChainHeadAttesterHit: register.gauge({
914
- name: "validator_monitor_prev_epoch_on_chain_head_attester_hit_total",
915
- help: "Incremented if the validator is flagged as a previous epoch head attester during per epoch processing",
916
- }),
917
- prevEpochOnChainHeadAttesterMiss: register.gauge({
918
- name: "validator_monitor_prev_epoch_on_chain_head_attester_miss_total",
919
- help: "Incremented if the validator is not flagged as a previous epoch head attester during per epoch processing",
920
- }),
921
- prevOnChainAttesterCorrectHead: register.gauge({
922
- name: "validator_monitor_prev_epoch_on_chain_attester_correct_head_total",
923
- help: "Total count of times a validator votes correct head",
924
- }),
925
- prevOnChainAttesterIncorrectHead: register.gauge({
926
- name: "validator_monitor_prev_epoch_on_chain_attester_incorrect_head_total",
927
- help: "Total count of times a validator votes incorrect head",
928
- }),
929
- prevEpochOnChainTargetAttesterHit: register.gauge({
930
- name: "validator_monitor_prev_epoch_on_chain_target_attester_hit_total",
931
- help: "Incremented if the validator is flagged as a previous epoch target attester during per epoch processing",
932
- }),
933
- prevEpochOnChainTargetAttesterMiss: register.gauge({
934
- name: "validator_monitor_prev_epoch_on_chain_target_attester_miss_total",
935
- help: "Incremented if the validator is not flagged as a previous epoch target attester during per epoch processing",
936
- }),
937
- prevEpochOnChainInclusionDistance: register.histogram({
938
- name: "validator_monitor_prev_epoch_on_chain_inclusion_distance",
939
- help: "The attestation inclusion distance calculated during per epoch processing",
940
- // min inclusion distance is 1, usual values are 1,2,3 max is 32 (1 epoch)
941
- buckets: [1, 2, 3, 5, 10, 32],
942
- }),
943
- prevEpochAttestations: register.histogram({
944
- name: "validator_monitor_prev_epoch_attestations",
945
- help: "The number of unagg. attestations seen in the previous epoch",
946
- buckets: [0, 1, 2, 3],
947
- }),
948
- prevEpochAttestationsMinDelaySeconds: register.histogram({
949
- name: "validator_monitor_prev_epoch_attestations_min_delay_seconds",
950
- help: "The min delay between when the validator should send the attestation and when it was received",
951
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
952
- }),
953
- prevEpochAttestationAggregateInclusions: register.histogram({
954
- name: "validator_monitor_prev_epoch_attestation_aggregate_inclusions",
955
- help: "The count of times an attestation was seen inside an aggregate",
956
- buckets: [0, 1, 2, 3, 5, 10],
957
- }),
958
- prevEpochAttestationBlockInclusions: register.histogram({
959
- name: "validator_monitor_prev_epoch_attestation_block_inclusions",
960
- help: "The count of times an attestation was seen inside a block",
961
- buckets: [0, 1, 2, 3, 5],
962
- }),
963
- prevEpochAttestationBlockMinInclusionDistance: register.histogram({
964
- name: "validator_monitor_prev_epoch_attestation_block_min_inclusion_distance",
965
- help: "The minimum inclusion distance observed for the inclusion of an attestation in a block",
966
- buckets: [1, 2, 3, 5, 10, 32],
967
- }),
968
- prevEpochBeaconBlocks: register.histogram({
969
- name: "validator_monitor_prev_epoch_beacon_blocks",
970
- help: "The number of beacon_blocks seen in the previous epoch",
971
- buckets: [0, 1, 2, 3, 5, 10],
972
- }),
973
- prevEpochBeaconBlocksMinDelaySeconds: register.histogram({
974
- name: "validator_monitor_prev_epoch_beacon_blocks_min_delay_seconds",
975
- help: "The min delay between when the validator should send the block and when it was received",
976
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
977
- }),
978
- prevEpochAggregatesTotal: register.histogram({
979
- name: "validator_monitor_prev_epoch_aggregates",
980
- help: "The number of aggregates seen in the previous epoch",
981
- buckets: [0, 1, 2, 3, 5, 10],
982
- }),
983
- prevEpochAggregatesMinDelaySeconds: register.histogram({
984
- name: "validator_monitor_prev_epoch_aggregates_min_delay_seconds",
985
- help: "The min delay between when the validator should send the aggregate and when it was received",
986
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
987
- }),
988
- prevEpochSyncCommitteeHits: register.gauge({
989
- name: "validator_monitor_prev_epoch_sync_committee_hits",
990
- help: "Count of times in prev epoch connected validators participated in imported block's syncAggregate",
991
- }),
992
- prevEpochSyncCommitteeMisses: register.gauge({
993
- name: "validator_monitor_prev_epoch_sync_committee_misses",
994
- help: "Count of times in prev epoch connected validators fail to participate in imported block's syncAggregate",
995
- }),
996
- prevEpochSyncSignatureAggregateInclusions: register.histogram({
997
- name: "validator_monitor_prev_epoch_sync_signature_aggregate_inclusions",
998
- help: "The count of times a sync signature was seen inside an aggregate",
999
- buckets: [0, 1, 2, 3, 5, 10],
1000
- }),
1001
- prevEpochAttestationSummary: register.gauge({
1002
- name: "validator_monitor_prev_epoch_attestation_summary",
1003
- help: "Best guess of the node of the result of previous epoch validators attestation actions and causality",
1004
- labelNames: ["summary"],
1005
- }),
1006
- prevEpochBlockProposalSummary: register.gauge({
1007
- name: "validator_monitor_prev_epoch_block_proposal_summary",
1008
- help: "Best guess of the node of the result of previous epoch validators block proposal actions and causality",
1009
- labelNames: ["summary"],
1010
- }),
1011
- // Validator Monitor Metrics (real-time)
1012
- unaggregatedAttestationTotal: register.gauge({
1013
- name: "validator_monitor_unaggregated_attestation_total",
1014
- help: "Number of unaggregated attestations seen",
1015
- labelNames: ["src"],
1016
- }),
1017
- unaggregatedAttestationDelaySeconds: register.histogram({
1018
- name: "validator_monitor_unaggregated_attestation_delay_seconds",
1019
- help: "The delay between when the validator should send the attestation and when it was received",
1020
- labelNames: ["src"],
1021
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1022
- }),
1023
- unaggregatedAttestationSubmittedSentPeers: register.histogram({
1024
- name: "validator_monitor_unaggregated_attestation_submitted_sent_peers_count",
1025
- help: "Number of peers that an unaggregated attestation sent to",
1026
- // as of Apr 2022, most of the time we sent to >30 peers per attestations
1027
- // these bucket values just base on that fact to get equal range
1028
- // refine if we want more reasonable values
1029
- buckets: [0, 10, 20, 30],
1030
- }),
1031
- aggregatedAttestationTotal: register.gauge({
1032
- name: "validator_monitor_aggregated_attestation_total",
1033
- help: "Number of aggregated attestations seen",
1034
- labelNames: ["src"],
1035
- }),
1036
- aggregatedAttestationDelaySeconds: register.histogram({
1037
- name: "validator_monitor_aggregated_attestation_delay_seconds",
1038
- help: "The delay between then the validator should send the aggregate and when it was received",
1039
- labelNames: ["src"],
1040
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1041
- }),
1042
- attestationInAggregateTotal: register.gauge({
1043
- name: "validator_monitor_attestation_in_aggregate_total",
1044
- help: "Number of times an attestation has been seen in an aggregate",
1045
- labelNames: ["src"],
1046
- }),
1047
- attestationInAggregateDelaySeconds: register.histogram({
1048
- name: "validator_monitor_attestation_in_aggregate_delay_seconds",
1049
- help: "The delay between when the validator should send the aggregate and when it was received",
1050
- labelNames: ["src"],
1051
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1052
- }),
1053
- attestationInBlockTotal: register.gauge({
1054
- name: "validator_monitor_attestation_in_block_total",
1055
- help: "Number of times an attestation has been seen in a block",
1056
- }),
1057
- attestationInBlockDelaySlots: register.histogram({
1058
- name: "validator_monitor_attestation_in_block_delay_slots",
1059
- help: "The excess slots (beyond the minimum delay) between the attestation slot and the block slot",
1060
- buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
1061
- }),
1062
- attestationInBlockParticipants: register.histogram({
1063
- name: "validator_monitor_attestation_in_block_participants",
1064
- help: "The total participants in attestations of monitored validators included in blocks",
1065
- buckets: [1, 5, 20, 50, 100, 200],
1066
- }),
1067
- syncSignatureInAggregateTotal: register.gauge({
1068
- name: "validator_monitor_sync_signature_in_aggregate_total",
1069
- help: "Number of times a sync signature has been seen in an aggregate",
1070
- }),
1071
- beaconBlockTotal: register.gauge({
1072
- name: "validator_monitor_beacon_block_total",
1073
- help: "Total number of beacon blocks seen",
1074
- labelNames: ["src"],
1075
- }),
1076
- beaconBlockDelaySeconds: register.histogram({
1077
- name: "validator_monitor_beacon_block_delay_seconds",
1078
- help: "The delay between when the validator should send the block and when it was received",
1079
- labelNames: ["src"],
1080
- // we also want other nodes to received our published before 4s so add bucket 3 and 3.5
1081
- buckets: [0.1, 0.25, 0.5, 1, 2, 3, 4, 6, 10],
1082
- }),
1083
- // Only for known
1084
- proposerBalanceDeltaKnown: register.histogram({
1085
- name: "validator_monitor_proposer_balance_delta_known_gwei",
1086
- help: "Balance delta of known block proposer after importing a valid block",
1087
- // Jul22 mainnet block reward is consistently between 29,000,000-28,000,000 GWei
1088
- buckets: [10_000, 100_000, 1e6, 10e6, 20e6, 50e6, 100e6, 1000e6],
1089
- }),
1090
- },
1091
924
  proposerBalanceDeltaAny: register.histogram({
1092
925
  name: "lodestar_proposer_balance_delta_any_gwei",
1093
926
  help: "Balance delta of every block proposer after importing a valid block",
@@ -1347,6 +1180,30 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
1347
1180
  labelNames: ["reason"],
1348
1181
  }),
1349
1182
  },
1183
+ blockInput: {
1184
+ blockInputCount: register.gauge({
1185
+ name: "lodestar_seen_block_input_cache_size",
1186
+ help: "Number of cached BlockInputs",
1187
+ }),
1188
+ duplicateBlockCount: register.gauge({
1189
+ name: "lodestar_seen_block_input_cache_duplicate_block_count",
1190
+ help: "Total number of duplicate blocks that pass validation and attempt to be cached but are known",
1191
+ labelNames: ["source"],
1192
+ }),
1193
+ duplicateBlobCount: register.gauge({
1194
+ name: "lodestar_seen_block_input_cache_duplicate_blob_count",
1195
+ help: "Total number of duplicate blobs that pass validation and attempt to be cached but are known",
1196
+ labelNames: ["source"],
1197
+ }),
1198
+ createdByBlock: register.gauge({
1199
+ name: "lodestar_seen_block_input_cache_items_created_by_block",
1200
+ help: "Number of BlockInputs created via a block being seen first",
1201
+ }),
1202
+ createdByBlob: register.gauge({
1203
+ name: "lodestar_seen_block_input_cache_items_created_by_blob",
1204
+ help: "Number of BlockInputs created via a blob being seen first",
1205
+ }),
1206
+ },
1350
1207
  },
1351
1208
  regenFnCallTotal: register.gauge({
1352
1209
  name: "lodestar_regen_fn_call_total",