@lodestar/beacon-node 1.33.0-peerDAS.e03bda542e → 1.33.0-peerDAS.ee2a43108d

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 (129) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +73 -29
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/chain/archiveStore/utils/archiveBlocks.js +3 -0
  4. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  5. package/lib/chain/blocks/importBlock.js +4 -8
  6. package/lib/chain/blocks/importBlock.js.map +1 -1
  7. package/lib/chain/blocks/types.d.ts +1 -1
  8. package/lib/chain/blocks/types.js +1 -1
  9. package/lib/chain/blocks/types.js.map +1 -1
  10. package/lib/chain/blocks/verifyBlocksDataAvailability.js +9 -9
  11. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  12. package/lib/chain/blocks/writeBlockInputToDb.js +11 -11
  13. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  14. package/lib/chain/chain.d.ts +4 -26
  15. package/lib/chain/chain.js +64 -27
  16. package/lib/chain/chain.js.map +1 -1
  17. package/lib/chain/emitter.d.ts +2 -2
  18. package/lib/chain/emitter.js +1 -1
  19. package/lib/chain/emitter.js.map +1 -1
  20. package/lib/chain/options.d.ts +3 -3
  21. package/lib/chain/options.js +2 -5
  22. package/lib/chain/options.js.map +1 -1
  23. package/lib/chain/prepareNextSlot.js +1 -1
  24. package/lib/chain/prepareNextSlot.js.map +1 -1
  25. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +1 -1
  26. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  27. package/lib/chain/seenCache/seenGossipBlockInput.js +1 -1
  28. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  29. package/lib/chain/validation/dataColumnSidecar.d.ts +5 -5
  30. package/lib/chain/validation/dataColumnSidecar.js +27 -27
  31. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  32. package/lib/constants/network.d.ts +1 -0
  33. package/lib/constants/network.js +2 -0
  34. package/lib/constants/network.js.map +1 -1
  35. package/lib/execution/engine/mock.js +1 -1
  36. package/lib/execution/engine/mock.js.map +1 -1
  37. package/lib/metrics/metrics/beacon.d.ts +2 -2
  38. package/lib/metrics/metrics/beacon.js +3 -3
  39. package/lib/metrics/metrics/beacon.js.map +1 -1
  40. package/lib/network/core/metrics.d.ts +2 -2
  41. package/lib/network/core/metrics.js +6 -6
  42. package/lib/network/core/metrics.js.map +1 -1
  43. package/lib/network/core/networkCore.d.ts +2 -1
  44. package/lib/network/core/networkCore.js +12 -6
  45. package/lib/network/core/networkCore.js.map +1 -1
  46. package/lib/network/core/networkCoreWorker.js +1 -0
  47. package/lib/network/core/networkCoreWorker.js.map +1 -1
  48. package/lib/network/core/networkCoreWorkerHandler.d.ts +1 -0
  49. package/lib/network/core/networkCoreWorkerHandler.js +2 -1
  50. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  51. package/lib/network/core/types.d.ts +1 -0
  52. package/lib/network/events.d.ts +2 -2
  53. package/lib/network/interface.d.ts +0 -4
  54. package/lib/network/metadata.js +4 -3
  55. package/lib/network/metadata.js.map +1 -1
  56. package/lib/network/network.js +17 -11
  57. package/lib/network/network.js.map +1 -1
  58. package/lib/network/networkConfig.d.ts +5 -15
  59. package/lib/network/networkConfig.js +1 -28
  60. package/lib/network/networkConfig.js.map +1 -1
  61. package/lib/network/options.d.ts +1 -0
  62. package/lib/network/options.js.map +1 -1
  63. package/lib/network/peers/discover.d.ts +6 -5
  64. package/lib/network/peers/discover.js +40 -40
  65. package/lib/network/peers/discover.js.map +1 -1
  66. package/lib/network/peers/peerManager.js +67 -45
  67. package/lib/network/peers/peerManager.js.map +1 -1
  68. package/lib/network/peers/score/constants.d.ts +3 -1
  69. package/lib/network/peers/score/constants.js +3 -1
  70. package/lib/network/peers/score/constants.js.map +1 -1
  71. package/lib/network/peers/score/interface.d.ts +5 -0
  72. package/lib/network/peers/score/interface.js.map +1 -1
  73. package/lib/network/peers/score/score.d.ts +5 -0
  74. package/lib/network/peers/score/score.js +35 -2
  75. package/lib/network/peers/score/score.js.map +1 -1
  76. package/lib/network/peers/score/store.d.ts +9 -0
  77. package/lib/network/peers/score/store.js +13 -0
  78. package/lib/network/peers/score/store.js.map +1 -1
  79. package/lib/network/peers/utils/assertPeerRelevance.d.ts +1 -1
  80. package/lib/network/peers/utils/assertPeerRelevance.js +1 -1
  81. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  82. package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
  83. package/lib/network/peers/utils/prioritizePeers.js +8 -8
  84. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  85. package/lib/network/processor/gossipHandlers.js +0 -7
  86. package/lib/network/processor/gossipHandlers.js.map +1 -1
  87. package/lib/network/reqresp/ReqRespBeaconNode.js +23 -24
  88. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  89. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +9 -3
  90. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +28 -7
  91. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  92. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +10 -24
  93. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  94. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +0 -7
  95. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  96. package/lib/network/reqresp/rateLimit.js +3 -3
  97. package/lib/network/reqresp/rateLimit.js.map +1 -1
  98. package/lib/network/reqresp/score.js +3 -0
  99. package/lib/network/reqresp/score.js.map +1 -1
  100. package/lib/network/reqresp/types.d.ts +5 -5
  101. package/lib/network/reqresp/types.js +2 -0
  102. package/lib/network/reqresp/types.js.map +1 -1
  103. package/lib/sync/constants.d.ts +17 -2
  104. package/lib/sync/constants.js +17 -2
  105. package/lib/sync/constants.js.map +1 -1
  106. package/lib/sync/range/batch.d.ts +2 -1
  107. package/lib/sync/range/batch.js +2 -1
  108. package/lib/sync/range/batch.js.map +1 -1
  109. package/lib/sync/range/chain.d.ts +0 -1
  110. package/lib/sync/range/chain.js +20 -9
  111. package/lib/sync/range/chain.js.map +1 -1
  112. package/lib/sync/range/utils/peerBalancer.d.ts +6 -1
  113. package/lib/sync/range/utils/peerBalancer.js +30 -14
  114. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  115. package/lib/sync/sync.js +1 -1
  116. package/lib/sync/sync.js.map +1 -1
  117. package/lib/util/blobs.d.ts +6 -1
  118. package/lib/util/blobs.js +56 -4
  119. package/lib/util/blobs.js.map +1 -1
  120. package/lib/util/dataColumns.d.ts +16 -13
  121. package/lib/util/dataColumns.js +22 -22
  122. package/lib/util/dataColumns.js.map +1 -1
  123. package/lib/util/metadata.d.ts +1 -0
  124. package/lib/util/metadata.js +4 -1
  125. package/lib/util/metadata.js.map +1 -1
  126. package/package.json +14 -14
  127. package/lib/network/reqresp/handlers/status.d.ts +0 -4
  128. package/lib/network/reqresp/handlers/status.js +0 -12
  129. package/lib/network/reqresp/handlers/status.js.map +0 -1
@@ -9,7 +9,7 @@ import { Libp2p } from "../interface.js";
9
9
  import { SubnetType } from "../metadata.js";
10
10
  import { NetworkConfig } from "../networkConfig.js";
11
11
  import { IPeerRpcScoreStore } from "./score/index.js";
12
- import { type GroupQueries } from "./utils/prioritizePeers.js";
12
+ import { type CustodyGroupQueries } from "./utils/prioritizePeers.js";
13
13
  export type PeerDiscoveryOpts = {
14
14
  discv5FirstQueryDelayMs: number;
15
15
  discv5: LodestarDiscv5Opts;
@@ -32,7 +32,8 @@ export declare enum DiscoveredPeerStatus {
32
32
  attempt_dial = "attempt_dial",
33
33
  cached = "cached",
34
34
  dropped = "dropped",
35
- no_multiaddrs = "no_multiaddrs"
35
+ no_multiaddrs = "no_multiaddrs",
36
+ peer_cooling_down = "peer_cooling_down"
36
37
  }
37
38
  export declare enum NotDialReason {
38
39
  not_contain_requested_sampling_groups = "not_contain_requested_sampling_groups",
@@ -62,7 +63,7 @@ export declare class PeerDiscovery {
62
63
  private randomNodeQuery;
63
64
  private peersToConnect;
64
65
  private subnetRequests;
65
- private groupRequests;
66
+ private custodyGroupQueries;
66
67
  private discv5StartMs;
67
68
  private discv5FirstQueryDelayMs;
68
69
  private connectToDiscv5BootnodesOnStart;
@@ -71,9 +72,9 @@ export declare class PeerDiscovery {
71
72
  stop(): Promise<void>;
72
73
  /**
73
74
  * Request to find peers, both on specific subnets and in general
74
- * pre-fulu groupRequests is empty
75
+ * pre-fulu custodyGroupRequests is empty
75
76
  */
76
- discoverPeers(peersToConnect: number, groupRequests: GroupQueries, subnetRequests?: SubnetDiscvQueryMs[]): void;
77
+ discoverPeers(peersToConnect: number, custodyGroupRequests: CustodyGroupQueries, subnetRequests?: SubnetDiscvQueryMs[]): void;
77
78
  /**
78
79
  * Request discv5 to find peers if there is no query in progress
79
80
  */
@@ -1,7 +1,6 @@
1
1
  import { ENR } from "@chainsafe/enr";
2
- import { toHexString } from "@chainsafe/ssz";
3
2
  import { ATTESTATION_SUBNET_COUNT, ForkSeq, SYNC_COMMITTEE_SUBNET_COUNT } from "@lodestar/params";
4
- import { pruneSetToMax, sleep } from "@lodestar/utils";
3
+ import { pruneSetToMax, sleep, toHex } from "@lodestar/utils";
5
4
  import { bytesToInt } from "@lodestar/utils";
6
5
  import { getCustodyGroups } from "../../util/dataColumns.js";
7
6
  import { Discv5Worker } from "../discv5/index.js";
@@ -30,6 +29,7 @@ export var DiscoveredPeerStatus;
30
29
  DiscoveredPeerStatus["cached"] = "cached";
31
30
  DiscoveredPeerStatus["dropped"] = "dropped";
32
31
  DiscoveredPeerStatus["no_multiaddrs"] = "no_multiaddrs";
32
+ DiscoveredPeerStatus["peer_cooling_down"] = "peer_cooling_down";
33
33
  })(DiscoveredPeerStatus || (DiscoveredPeerStatus = {}));
34
34
  export var NotDialReason;
35
35
  (function (NotDialReason) {
@@ -85,9 +85,12 @@ export class PeerDiscovery {
85
85
  // Are this fields mandatory?
86
86
  const attnetsBytes = enr.kvs.get(ENRKey.attnets); // 64 bits
87
87
  const syncnetsBytes = enr.kvs.get(ENRKey.syncnets); // 4 bits
88
- const custodyGroupCountBytes = enr.kvs.get(ENRKey.cgc); // 64 bits
88
+ const custodyGroupCountBytes = enr.kvs.get(ENRKey.cgc); // not preserialized value, is byte representation of number
89
89
  if (custodyGroupCountBytes === undefined) {
90
- this.logger.warn("peer discovered with no cgc assuming 4", exportENRToJSON(enr));
90
+ this.logger.debug("peer discovered with no cgc, using default/miniumn", {
91
+ custodyRequirement: this.config.CUSTODY_REQUIREMENT,
92
+ peer: prettyPrintPeerId(peerId),
93
+ });
91
94
  }
92
95
  // Use faster version than ssz's implementation that leverages pre-cached.
93
96
  // Some nodes don't serialize the bitfields properly, encoding the syncnets as attnets,
@@ -100,7 +103,7 @@ export class PeerDiscovery {
100
103
  this.logger.debug("Discovered peer via discv5", {
101
104
  peer: prettyPrintPeerId(peerId),
102
105
  status,
103
- custodySubnetCount: custodyGroupCount,
106
+ cgc: custodyGroupCount,
104
107
  });
105
108
  this.metrics?.discovery.discoveredStatus.inc({ status });
106
109
  };
@@ -110,9 +113,9 @@ export class PeerDiscovery {
110
113
  this.peerRpcScores = peerRpcScores;
111
114
  this.metrics = metrics;
112
115
  this.logger = logger;
113
- this.config = networkConfig.getConfig();
116
+ this.config = networkConfig.config;
114
117
  this.discv5 = discv5;
115
- this.groupRequests = new Map();
118
+ this.custodyGroupQueries = new Map();
116
119
  this.discv5StartMs = 0;
117
120
  this.discv5StartMs = Date.now();
118
121
  this.discv5FirstQueryDelayMs = opts.discv5FirstQueryDelayMs;
@@ -139,10 +142,10 @@ export class PeerDiscovery {
139
142
  metrics.discovery.cachedENRsSize.set(this.cachedENRs.size);
140
143
  metrics.discovery.peersToConnect.set(this.peersToConnect);
141
144
  // PeerDAS metrics
142
- const groupsToConnect = Array.from(this.groupRequests.values());
145
+ const groupsToConnect = Array.from(this.custodyGroupQueries.values());
143
146
  const groupPeersToConnect = groupsToConnect.reduce((acc, elem) => acc + elem, 0);
144
- metrics.discovery.groupPeersToConnect.set(groupPeersToConnect);
145
- metrics.discovery.groupsToConnect.set(groupsToConnect.filter((elem) => elem > 0).length);
147
+ metrics.discovery.custodyGroupPeersToConnect.set(groupPeersToConnect);
148
+ metrics.discovery.custodyGroupsToConnect.set(groupsToConnect.filter((elem) => elem > 0).length);
146
149
  for (const type of [SubnetType.attnets, SubnetType.syncnets]) {
147
150
  const subnetPeersToConnect = Array.from(this.subnetRequests[type].values()).reduce((acc, { peersToConnect }) => acc + peersToConnect, 0);
148
151
  metrics.discovery.subnetPeersToConnect.set({ type }, subnetPeersToConnect);
@@ -157,7 +160,7 @@ export class PeerDiscovery {
157
160
  privateKey: modules.privateKey,
158
161
  metrics: modules.metrics ?? undefined,
159
162
  logger: modules.logger,
160
- config: modules.networkConfig.getConfig(),
163
+ config: modules.networkConfig.config,
161
164
  genesisTime: modules.clock.genesisTime,
162
165
  });
163
166
  return new PeerDiscovery(modules, opts, discv5);
@@ -169,9 +172,9 @@ export class PeerDiscovery {
169
172
  }
170
173
  /**
171
174
  * Request to find peers, both on specific subnets and in general
172
- * pre-fulu groupRequests is empty
175
+ * pre-fulu custodyGroupRequests is empty
173
176
  */
174
- discoverPeers(peersToConnect, groupRequests, subnetRequests = []) {
177
+ discoverPeers(peersToConnect, custodyGroupRequests, subnetRequests = []) {
175
178
  const subnetsToDiscoverPeers = [];
176
179
  const cachedENRsToDial = new Map();
177
180
  // Iterate in reverse to consider first the most recent ENRs
@@ -187,7 +190,7 @@ export class PeerDiscovery {
187
190
  pendingDials.has(id)) {
188
191
  this.cachedENRs.delete(id);
189
192
  }
190
- else {
193
+ else if (!this.peerRpcScores.isCoolingDown(id)) {
191
194
  cachedENRsReverse.push(cachedENR);
192
195
  }
193
196
  }
@@ -198,17 +201,17 @@ export class PeerDiscovery {
198
201
  let groupPeersToDiscover = 0;
199
202
  const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
200
203
  if (forkSeq >= ForkSeq.fulu) {
201
- group: for (const [group, maxPeersToConnect] of groupRequests) {
204
+ group: for (const [group, maxPeersToConnect] of custodyGroupRequests) {
202
205
  let cachedENRsInGroup = 0;
203
206
  for (const cachedENR of cachedENRsReverse) {
204
- if (cachedENR.peerCustodyGroups?.includes(group)) {
207
+ if (cachedENR.custodyGroups?.includes(group)) {
205
208
  cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
206
209
  if (++cachedENRsInGroup >= maxPeersToConnect) {
207
210
  continue group;
208
211
  }
209
212
  }
210
213
  const groupPeersToConnect = Math.max(maxPeersToConnect - cachedENRsInGroup, 0);
211
- this.groupRequests.set(group, groupPeersToConnect);
214
+ this.custodyGroupQueries.set(group, groupPeersToConnect);
212
215
  groupsToDiscover.add(group);
213
216
  groupPeersToDiscover += groupPeersToConnect;
214
217
  }
@@ -306,14 +309,21 @@ export class PeerDiscovery {
306
309
  */
307
310
  handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodySubnetCount) {
308
311
  const nodeId = computeNodeId(peerId);
309
- this.logger.warn("handleDiscoveredPeer", { nodeId: toHexString(nodeId), peerId: peerId.toString() });
312
+ this.logger.debug("handleDiscoveredPeer", { nodeId: toHex(nodeId), peerId: peerId.toString() });
310
313
  try {
311
314
  // Check if peer is not banned or disconnected
312
315
  if (this.peerRpcScores.getScoreState(peerId) !== ScoreState.Healthy) {
313
316
  return DiscoveredPeerStatus.bad_score;
314
317
  }
318
+ const peerIdStr = peerId.toString();
319
+ // check if peer has a cool-down period applied for reconnection. Is possible that a peer has a
320
+ // "healthy" score but has disconnected us and we are letting the reconnection cool-down before
321
+ // they are eligible for reconnection
322
+ if (this.peerRpcScores.isCoolingDown(peerIdStr)) {
323
+ return DiscoveredPeerStatus.peer_cooling_down;
324
+ }
315
325
  // Ignore connected peers. TODO: Is this check necessary?
316
- if (this.isPeerConnected(peerId.toString())) {
326
+ if (this.isPeerConnected(peerIdStr)) {
317
327
  return DiscoveredPeerStatus.already_connected;
318
328
  }
319
329
  // Ignore dialing peers
@@ -329,8 +339,8 @@ export class PeerDiscovery {
329
339
  multiaddrTCP,
330
340
  subnets: { attnets, syncnets },
331
341
  addedUnixMs: Date.now(),
332
- // for pre-fulu, peerCustodyGroups is null
333
- peerCustodyGroups: forkSeq >= ForkSeq.fulu
342
+ // for pre-fulu, custodyGroups is null
343
+ custodyGroups: forkSeq >= ForkSeq.fulu
334
344
  ? getCustodyGroups(nodeId, custodySubnetCount ?? this.config.CUSTODY_REQUIREMENT)
335
345
  : null,
336
346
  };
@@ -352,27 +362,27 @@ export class PeerDiscovery {
352
362
  }
353
363
  shouldDialPeer(peer) {
354
364
  const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
355
- if (forkSeq >= ForkSeq.fulu && peer.peerCustodyGroups !== null) {
356
- // pre-fulu `this.groupRequests` is empty
365
+ if (forkSeq >= ForkSeq.fulu && peer.custodyGroups !== null) {
366
+ // pre-fulu `this.custodyGroupQueries` is empty
357
367
  // starting from fulu, we need to make sure we have stable subnet sampling peers first
358
368
  // given SAMPLES_PER_SLOT = 8 and 100 peers, we have 800 custody columns from peers
359
369
  // with NUMBER_OF_CUSTODY_GROUPS = 128, we have 800 / 128 = 6.25 peers per column in average
360
370
  // it would not be hard to find TARGET_SUBNET_PEERS(6) peers per sampling columns columns and TARGET_GROUP_PEERS_PER_SUBNET(4) peers per non-sampling columns
361
371
  // after some first heartbeats, we should have no more column requested, then go with conditions of prior forks
362
372
  let hasMatchingGroup = false;
363
- let groupRequestCount = 0;
364
- for (const [group, peersToConnect] of this.groupRequests.entries()) {
373
+ let custodyGroupRequestCount = 0;
374
+ for (const [group, peersToConnect] of this.custodyGroupQueries.entries()) {
365
375
  if (peersToConnect <= 0) {
366
- this.groupRequests.delete(group);
376
+ this.custodyGroupQueries.delete(group);
367
377
  }
368
- else if (peer.peerCustodyGroups.includes(group)) {
369
- this.groupRequests.set(group, Math.max(0, peersToConnect - 1));
378
+ else if (peer.custodyGroups.includes(group)) {
379
+ this.custodyGroupQueries.set(group, Math.max(0, peersToConnect - 1));
370
380
  hasMatchingGroup = true;
371
- groupRequestCount += peersToConnect;
381
+ custodyGroupRequestCount += peersToConnect;
372
382
  }
373
383
  }
374
384
  // if subnet sampling peers are not stable and this peer is not in the requested columns, ignore it
375
- if (groupRequestCount > 0 && !hasMatchingGroup) {
385
+ if (custodyGroupRequestCount > 0 && !hasMatchingGroup) {
376
386
  this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.not_contain_requested_sampling_groups });
377
387
  return false;
378
388
  }
@@ -488,14 +498,4 @@ function formatLibp2pDialError(e) {
488
498
  e.stack = undefined;
489
499
  }
490
500
  }
491
- function exportENRToJSON(enr) {
492
- if (enr === undefined) {
493
- return undefined;
494
- }
495
- return {
496
- ip4: enr.kvs.get("ip")?.toString(),
497
- cgc: enr.kvs.get("cgc")?.toString(),
498
- nodeId: enr.nodeId,
499
- };
500
- }
501
501
  //# sourceMappingURL=discover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/network/peers/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/network/peers/discover.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import { BitArray, toHexString } from "@chainsafe/ssz";
1
+ import { BitArray } from "@chainsafe/ssz";
2
2
  import { ForkSeq, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SUBNET_COUNT } from "@lodestar/params";
3
- import { withTimeout } from "@lodestar/utils";
3
+ import { prettyPrintIndices, toHex, withTimeout } from "@lodestar/utils";
4
4
  import { GOODBYE_KNOWN_CODES, GoodByeReasonCode, Libp2pEvent } from "../../constants/index.js";
5
5
  import { getCustodyGroups, getDataColumns } from "../../util/dataColumns.js";
6
6
  import { NetworkEvent } from "../events.js";
7
7
  import { SubnetType } from "../metadata.js";
8
8
  import { ReqRespMethod } from "../reqresp/ReqRespBeaconNode.js";
9
9
  import { computeNodeId } from "../subnets/index.js";
10
- import { getConnection, getConnectionsMap, prettyPrintPeerId } from "../util.js";
10
+ import { getConnection, getConnectionsMap, prettyPrintPeerId, prettyPrintPeerIdStr } from "../util.js";
11
11
  import { ClientKind, getKnownClientFromAgentVersion } from "./client.js";
12
12
  import { PeerDiscovery } from "./discover.js";
13
+ import { NO_COOL_DOWN_APPLIED } from "./score/constants.js";
13
14
  import { ScoreState, updateGossipsubScores } from "./score/index.js";
14
15
  import { assertPeerRelevance, getConnectedPeerIds, hasSomeConnectedPeer, prioritizePeers, renderIrrelevantPeerType, } from "./utils/index.js";
15
16
  /** heartbeat performs regular updates such as updating reputations and performing discovery requests */
@@ -149,14 +150,29 @@ export class PeerManager {
149
150
  */
150
151
  this.onLibp2pPeerDisconnect = (evt) => {
151
152
  const { direction, status, remotePeer } = evt.detail;
153
+ const peerIdStr = remotePeer.toString();
154
+ let logMessage = "onLibp2pPeerDisconnect";
155
+ const logContext = {
156
+ peerId: prettyPrintPeerIdStr(peerIdStr),
157
+ direction,
158
+ status,
159
+ };
160
+ // Some clients do not send good-bye requests (Nimbus) so check for inbound disconnects and apply reconnection
161
+ // cool-down period to prevent automatic reconnection by Discovery
162
+ if (direction === "inbound") {
163
+ // prevent automatic/immediate reconnects
164
+ const coolDownMin = this.peerRpcScores.applyReconnectionCoolDown(peerIdStr, GoodByeReasonCode.INBOUND_DISCONNECT);
165
+ logMessage += ". Enforcing a reconnection cool-down period";
166
+ logContext.coolDownMin = coolDownMin;
167
+ }
152
168
  // remove the ping and status timer for the peer
153
- this.connectedPeers.delete(remotePeer.toString());
154
- this.logger.verbose("peer disconnected", { peer: prettyPrintPeerId(remotePeer), direction, status });
155
- this.networkEventBus.emit(NetworkEvent.peerDisconnected, { peer: remotePeer.toString() });
169
+ this.connectedPeers.delete(peerIdStr);
170
+ this.logger.verbose(logMessage, logContext);
171
+ this.networkEventBus.emit(NetworkEvent.peerDisconnected, { peer: peerIdStr });
156
172
  this.metrics?.peerDisconnectedEvent.inc({ direction });
157
173
  this.libp2p.peerStore
158
174
  .merge(remotePeer, { tags: { [PEER_RELEVANT_TAG]: undefined } })
159
- .catch((e) => this.logger.verbose("cannot untag peer", { peerId: remotePeer.toString() }, e));
175
+ .catch((e) => this.logger.verbose("cannot untag peer", { peerId: peerIdStr }, e));
160
176
  };
161
177
  const { networkConfig } = modules;
162
178
  this.libp2p = modules.libp2p;
@@ -169,13 +185,13 @@ export class PeerManager {
169
185
  this.statusCache = modules.statusCache;
170
186
  this.clock = modules.clock;
171
187
  this.networkConfig = networkConfig;
172
- this.config = networkConfig.getConfig();
188
+ this.config = networkConfig.config;
173
189
  this.peerRpcScores = modules.peerRpcScores;
174
190
  this.networkEventBus = modules.events;
175
191
  this.connectedPeers = modules.peersData.connectedPeers;
176
192
  this.opts = opts;
177
193
  this.discovery = discovery;
178
- this.nodeId = networkConfig.getNodeId();
194
+ this.nodeId = networkConfig.nodeId;
179
195
  const { metrics } = modules;
180
196
  if (metrics) {
181
197
  metrics.peers.addCollect(() => this.runPeerCountMetrics(metrics));
@@ -262,11 +278,6 @@ export class PeerManager {
262
278
  onPing(peer, seqNumber) {
263
279
  // if the sequence number is unknown update the peer's metadata
264
280
  const metadata = this.connectedPeers.get(peer.toString())?.metadata;
265
- this.logger.warn("onPing", {
266
- seqNumber,
267
- metaSeqNumber: metadata?.seqNumber,
268
- cond: !metadata || metadata.seqNumber < seqNumber,
269
- });
270
281
  if (!metadata || metadata.seqNumber < seqNumber) {
271
282
  void this.requestMetadata(peer);
272
283
  }
@@ -278,17 +289,16 @@ export class PeerManager {
278
289
  // Store metadata always in case the peer updates attnets but not the sequence number
279
290
  // Trust that the peer always sends the latest metadata (From Lighthouse)
280
291
  const peerData = this.connectedPeers.get(peer.toString());
281
- this.logger.warn("onMetadata", {
292
+ this.logger.debug("onMetadata", {
282
293
  peer: peer.toString(),
283
294
  peerData: peerData !== undefined,
284
- custodyGroupCount: metadata.custodyGroupCount,
295
+ custodyGroupCount: metadata?.custodyGroupCount,
285
296
  });
286
297
  if (peerData) {
287
298
  const oldMetadata = peerData.metadata;
288
299
  const custodyGroupCount = metadata.custodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
289
300
  const samplingGroupCount = Math.max(this.config.SAMPLES_PER_SLOT, custodyGroupCount);
290
301
  const nodeId = peerData?.nodeId ?? computeNodeId(peer);
291
- // TODO(fulu): this should be columns not groups. need to change everywhere
292
302
  const custodyGroups = oldMetadata == null || oldMetadata.custodyGroups == null || custodyGroupCount !== oldMetadata.custodyGroupCount
293
303
  ? getCustodyGroups(nodeId, custodyGroupCount)
294
304
  : oldMetadata.custodyGroups;
@@ -322,7 +332,6 @@ export class PeerManager {
322
332
  if (conn && Date.now() - conn.timeline.open > LONG_PEER_CONNECTION_MS) {
323
333
  this.metrics?.peerLongConnectionDisconnect.inc({ reason });
324
334
  }
325
- // TODO: Consider register that we are banned, if discovery keeps attempting to connect to the same peers
326
335
  void this.disconnect(peer);
327
336
  }
328
337
  /**
@@ -338,7 +347,7 @@ export class PeerManager {
338
347
  const forkName = this.config.getForkName(this.clock.currentSlot);
339
348
  let isIrrelevant;
340
349
  try {
341
- const irrelevantReasonType = assertPeerRelevance(status, this.statusCache.get(), this.clock.currentSlot, forkName);
350
+ const irrelevantReasonType = assertPeerRelevance(forkName, status, this.statusCache.get(), this.clock.currentSlot);
342
351
  if (irrelevantReasonType === null) {
343
352
  isIrrelevant = false;
344
353
  }
@@ -374,64 +383,65 @@ export class PeerManager {
374
383
  }
375
384
  if (getConnection(this.libp2p, peer.toString())) {
376
385
  const nodeId = peerData?.nodeId ?? computeNodeId(peer);
377
- const custodyGroupCount = peerData?.metadata?.custodyGroupCount;
378
- const peerCustodyGroupCount = custodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
379
- const dataColumns = getDataColumns(nodeId, peerCustodyGroupCount);
380
- // on metadata, we should have custodyGroupss
381
- const peerCustodyGroups = peerData?.metadata?.custodyGroups ?? getCustodyGroups(nodeId, peerCustodyGroupCount);
382
- const sampleSubnets = this.networkConfig.getCustodyConfig().sampledSubnets;
386
+ // TODO(fulu): Are we sure we've run Metadata before this?
387
+ const custodyGroupCount = peerData?.metadata?.custodyGroupCount ?? this.config.CUSTODY_REQUIREMENT;
388
+ const custodyGroups = peerData?.metadata?.custodyGroups ?? getCustodyGroups(nodeId, custodyGroupCount);
389
+ const dataColumns = getDataColumns(nodeId, custodyGroupCount);
390
+ const sampleSubnets = this.networkConfig.custodyConfig.sampledSubnets;
383
391
  const matchingSubnetsNum = sampleSubnets.reduce((acc, elem) => acc + (dataColumns.includes(elem) ? 1 : 0), 0);
384
392
  const hasAllColumns = matchingSubnetsNum === sampleSubnets.length;
385
393
  const clientAgent = peerData?.agentClient ?? ClientKind.Unknown;
386
- this.logger.warn(`onStatus ${custodyGroupCount === undefined ? "undefined custody count assuming 4" : ""}`, {
387
- nodeId: toHexString(nodeId),
388
- myNodeId: toHexString(this.nodeId),
394
+ this.logger.debug("onStatus", {
395
+ nodeId: toHex(nodeId),
396
+ myNodeId: toHex(this.nodeId),
389
397
  peerId: peer.toString(),
390
398
  custodyGroupCount,
391
399
  hasAllColumns,
392
- dataColumns: dataColumns.join(" "),
400
+ dataColumns: prettyPrintIndices(dataColumns),
393
401
  matchingSubnetsNum,
394
- peerCustodyGroups: peerCustodyGroups.join(" "),
402
+ custodyGroups: prettyPrintIndices(custodyGroups),
395
403
  mySampleSubnets: sampleSubnets.join(" "),
396
404
  clientAgent,
397
405
  });
398
- // TODO @matthewkeil need to double check the dataColumns is received on the other end of this correctly
399
406
  this.networkEventBus.emit(NetworkEvent.peerConnected, {
400
407
  peer: peer.toString(),
401
408
  status,
402
- dataColumns,
403
- clientAgent: `${clientAgent}-cgc:${dataColumns.length}`,
409
+ clientAgent,
410
+ custodyGroups,
404
411
  });
405
412
  }
406
413
  }
407
414
  async requestMetadata(peer) {
415
+ const peerIdStr = peer.toString();
408
416
  try {
409
- this.logger.warn("requestMetadata", { peer: peer.toString() });
410
417
  this.onMetadata(peer, await this.reqResp.sendMetadata(peer));
411
418
  }
412
419
  catch (e) {
413
- this.logger.error("invalid requestMetadata response", undefined, e);
420
+ this.logger.verbose("invalid requestMetadata", { peer: prettyPrintPeerIdStr(peerIdStr) }, e);
414
421
  // TODO: Downvote peer here or in the reqResp layer
415
422
  }
416
423
  }
417
424
  async requestPing(peer) {
425
+ const peerIdStr = peer.toString();
418
426
  try {
419
- this.logger.warn("requestPing", { peer: peer.toString() });
420
427
  this.onPing(peer, await this.reqResp.sendPing(peer));
421
428
  // If peer replies a PING request also update lastReceivedMsg
422
429
  const peerData = this.connectedPeers.get(peer.toString());
423
430
  if (peerData)
424
431
  peerData.lastReceivedMsgUnixTsMs = Date.now();
425
432
  }
426
- catch (_e) {
433
+ catch (e) {
434
+ this.logger.verbose("invalid requestPing", { peer: prettyPrintPeerIdStr(peerIdStr) }, e);
427
435
  // TODO: Downvote peer here or in the reqResp layer
428
436
  }
429
437
  }
430
438
  async requestStatus(peer, localStatus) {
439
+ const peerIdStr = peer.toString();
431
440
  try {
432
441
  this.onStatus(peer, await this.reqResp.sendStatus(peer, localStatus));
433
442
  }
434
- catch (_e) {
443
+ catch (e) {
444
+ this.logger.verbose("invalid requestStatus", { peer: prettyPrintPeerIdStr(peerIdStr) }, e);
435
445
  // TODO: Failed to get peer latest status: downvote but don't disconnect
436
446
  }
437
447
  }
@@ -478,7 +488,7 @@ export class PeerManager {
478
488
  this.lastStatus = status;
479
489
  this.metrics?.peerManager.starved.set(starved ? 1 : 0);
480
490
  const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
481
- const { peersToDisconnect, peersToConnect, attnetQueries, syncnetQueries, groupQueries } = prioritizePeers(connectedHealthyPeers.map((peer) => {
491
+ const { peersToDisconnect, peersToConnect, attnetQueries, syncnetQueries, custodyGroupQueries } = prioritizePeers(connectedHealthyPeers.map((peer) => {
482
492
  const peerData = this.connectedPeers.get(peer.toString());
483
493
  return {
484
494
  id: peer,
@@ -494,7 +504,7 @@ export class PeerManager {
494
504
  // Collect subnets which we need peers for in the current slot
495
505
  this.attnetsService.getActiveSubnets(), this.syncnetsService.getActiveSubnets(),
496
506
  // ignore samplingGroups for pre-fulu forks
497
- forkSeq >= ForkSeq.fulu ? this.networkConfig.getCustodyConfig().sampleGroups : undefined, {
507
+ forkSeq >= ForkSeq.fulu ? this.networkConfig.custodyConfig.sampleGroups : undefined, {
498
508
  ...this.opts,
499
509
  status,
500
510
  starved,
@@ -521,7 +531,7 @@ export class PeerManager {
521
531
  this.metrics?.peersRequestedSubnetsPeerCount.inc({ type }, count);
522
532
  }
523
533
  }
524
- for (const maxPeersToDiscover of groupQueries.values()) {
534
+ for (const maxPeersToDiscover of custodyGroupQueries.values()) {
525
535
  this.metrics?.peersRequestedSubnetsToQuery.inc({ type: "column" }, 1);
526
536
  this.metrics?.peersRequestedSubnetsPeerCount.inc({ type: "column" }, maxPeersToDiscover);
527
537
  }
@@ -536,7 +546,7 @@ export class PeerManager {
536
546
  try {
537
547
  this.metrics?.peersRequestedToConnect.inc(peersToConnect);
538
548
  // for PeerDAS, lodestar implements subnet sampling strategy, hence we need to issue columnSubnetQueries to PeerDiscovery
539
- this.discovery.discoverPeers(peersToConnect, groupQueries, queriesMerged);
549
+ this.discovery.discoverPeers(peersToConnect, custodyGroupQueries, queriesMerged);
540
550
  }
541
551
  catch (e) {
542
552
  this.logger.error("Error on discoverPeers", {}, e);
@@ -601,11 +611,12 @@ export class PeerManager {
601
611
  }
602
612
  }
603
613
  async goodbyeAndDisconnect(peer, goodbye) {
614
+ const reason = GOODBYE_KNOWN_CODES[goodbye.toString()] || "";
615
+ const peerIdStr = peer.toString();
604
616
  try {
605
- const reason = GOODBYE_KNOWN_CODES[goodbye.toString()] || "";
606
617
  this.metrics?.peerGoodbyeSent.inc({ reason });
607
- this.logger.debug("disconnected peer", { reason, peerId: prettyPrintPeerId(peer) });
608
- const conn = getConnection(this.libp2p, peer.toString());
618
+ this.logger.debug("initiating goodbyeAndDisconnect peer", { reason, peerId: prettyPrintPeerId(peer) });
619
+ const conn = getConnection(this.libp2p, peerIdStr);
609
620
  if (conn && Date.now() - conn.timeline.open > LONG_PEER_CONNECTION_MS) {
610
621
  this.metrics?.peerLongConnectionDisconnect.inc({ reason });
611
622
  }
@@ -617,6 +628,17 @@ export class PeerManager {
617
628
  }
618
629
  finally {
619
630
  await this.disconnect(peer);
631
+ // prevent automatic/immediate reconnects
632
+ const coolDownMin = this.peerRpcScores.applyReconnectionCoolDown(peerIdStr, goodbye);
633
+ if (coolDownMin === NO_COOL_DOWN_APPLIED) {
634
+ this.logger.verbose("Disconnected a peer", { peerId: prettyPrintPeerIdStr(peerIdStr) });
635
+ }
636
+ else {
637
+ this.logger.verbose("Disconnected a peer. Enforcing a reconnection cool-down period", {
638
+ peerId: prettyPrintPeerIdStr(peerIdStr),
639
+ coolDownMin,
640
+ });
641
+ }
620
642
  }
621
643
  }
622
644
  /** Register peer count metrics */