@lodestar/beacon-node 1.33.0-dev.edc35e4b78 → 1.33.0-peerDAS.5a2cffc7e5

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 (224) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +66 -27
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/debug/index.d.ts +1 -1
  4. package/lib/api/impl/debug/index.js +24 -1
  5. package/lib/api/impl/debug/index.js.map +1 -1
  6. package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
  7. package/lib/chain/archiveStore/archiveStore.js +2 -2
  8. package/lib/chain/archiveStore/interface.d.ts +1 -1
  9. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  10. package/lib/chain/archiveStore/utils/archiveBlocks.js +88 -23
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  12. package/lib/chain/beaconProposerCache.d.ts +1 -0
  13. package/lib/chain/beaconProposerCache.js +3 -0
  14. package/lib/chain/beaconProposerCache.js.map +1 -1
  15. package/lib/chain/blocks/importBlock.js +8 -3
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +66 -24
  18. package/lib/chain/blocks/types.js +39 -6
  19. package/lib/chain/blocks/types.js.map +1 -1
  20. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  21. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  22. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  23. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  24. package/lib/chain/chain.d.ts +16 -5
  25. package/lib/chain/chain.js +32 -4
  26. package/lib/chain/chain.js.map +1 -1
  27. package/lib/chain/emitter.d.ts +18 -2
  28. package/lib/chain/emitter.js +13 -0
  29. package/lib/chain/emitter.js.map +1 -1
  30. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  31. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  32. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  33. package/lib/chain/errors/index.d.ts +1 -0
  34. package/lib/chain/errors/index.js +1 -0
  35. package/lib/chain/errors/index.js.map +1 -1
  36. package/lib/chain/interface.d.ts +10 -4
  37. package/lib/chain/interface.js.map +1 -1
  38. package/lib/chain/options.d.ts +4 -1
  39. package/lib/chain/options.js +4 -0
  40. package/lib/chain/options.js.map +1 -1
  41. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  42. package/lib/chain/produceBlock/produceBlockBody.js +8 -3
  43. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  44. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  45. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
  46. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  47. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  48. package/lib/chain/seenCache/seenGossipBlockInput.js +320 -53
  49. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  50. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  51. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  52. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  53. package/lib/db/beacon.d.ts +3 -1
  54. package/lib/db/beacon.js +3 -1
  55. package/lib/db/beacon.js.map +1 -1
  56. package/lib/db/buckets.d.ts +3 -1
  57. package/lib/db/buckets.js +2 -0
  58. package/lib/db/buckets.js.map +1 -1
  59. package/lib/db/interface.d.ts +3 -1
  60. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  61. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  62. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  63. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  64. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  65. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  66. package/lib/db/repositories/index.d.ts +2 -0
  67. package/lib/db/repositories/index.js +2 -0
  68. package/lib/db/repositories/index.js.map +1 -1
  69. package/lib/execution/engine/http.d.ts +5 -3
  70. package/lib/execution/engine/http.js +70 -31
  71. package/lib/execution/engine/http.js.map +1 -1
  72. package/lib/execution/engine/interface.d.ts +4 -2
  73. package/lib/execution/engine/interface.js +1 -1
  74. package/lib/execution/engine/interface.js.map +1 -1
  75. package/lib/execution/engine/mock.d.ts +1 -0
  76. package/lib/execution/engine/mock.js +5 -0
  77. package/lib/execution/engine/mock.js.map +1 -1
  78. package/lib/execution/engine/types.d.ts +10 -0
  79. package/lib/execution/engine/types.js +6 -0
  80. package/lib/execution/engine/types.js.map +1 -1
  81. package/lib/metrics/metrics/beacon.d.ts +12 -0
  82. package/lib/metrics/metrics/beacon.js +47 -0
  83. package/lib/metrics/metrics/beacon.js.map +1 -1
  84. package/lib/metrics/metrics/lodestar.d.ts +15 -0
  85. package/lib/metrics/metrics/lodestar.js +32 -0
  86. package/lib/metrics/metrics/lodestar.js.map +1 -1
  87. package/lib/network/core/metrics.d.ts +10 -3
  88. package/lib/network/core/metrics.js +22 -4
  89. package/lib/network/core/metrics.js.map +1 -1
  90. package/lib/network/core/networkCore.d.ts +8 -3
  91. package/lib/network/core/networkCore.js +24 -10
  92. package/lib/network/core/networkCore.js.map +1 -1
  93. package/lib/network/core/networkCoreWorker.js +1 -0
  94. package/lib/network/core/networkCoreWorker.js.map +1 -1
  95. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -3
  96. package/lib/network/core/networkCoreWorkerHandler.js +4 -0
  97. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  98. package/lib/network/core/types.d.ts +6 -4
  99. package/lib/network/events.d.ts +4 -2
  100. package/lib/network/events.js.map +1 -1
  101. package/lib/network/gossip/interface.d.ts +8 -1
  102. package/lib/network/gossip/interface.js +1 -0
  103. package/lib/network/gossip/interface.js.map +1 -1
  104. package/lib/network/gossip/topic.d.ts +1047 -1031
  105. package/lib/network/gossip/topic.js +20 -1
  106. package/lib/network/gossip/topic.js.map +1 -1
  107. package/lib/network/interface.d.ts +13 -1
  108. package/lib/network/metadata.d.ts +16 -7
  109. package/lib/network/metadata.js +40 -6
  110. package/lib/network/metadata.js.map +1 -1
  111. package/lib/network/network.d.ts +12 -2
  112. package/lib/network/network.js +59 -8
  113. package/lib/network/network.js.map +1 -1
  114. package/lib/network/networkConfig.d.ts +22 -0
  115. package/lib/network/networkConfig.js +29 -0
  116. package/lib/network/networkConfig.js.map +1 -0
  117. package/lib/network/options.js +5 -0
  118. package/lib/network/options.js.map +1 -1
  119. package/lib/network/peers/discover.d.ts +8 -3
  120. package/lib/network/peers/discover.js +106 -13
  121. package/lib/network/peers/discover.js.map +1 -1
  122. package/lib/network/peers/peerManager.d.ts +10 -4
  123. package/lib/network/peers/peerManager.js +93 -11
  124. package/lib/network/peers/peerManager.js.map +1 -1
  125. package/lib/network/peers/peersData.d.ts +17 -3
  126. package/lib/network/peers/peersData.js.map +1 -1
  127. package/lib/network/peers/score/interface.d.ts +1 -1
  128. package/lib/network/peers/score/score.d.ts +2 -2
  129. package/lib/network/peers/score/score.js +4 -1
  130. package/lib/network/peers/score/score.js.map +1 -1
  131. package/lib/network/peers/score/store.d.ts +3 -1
  132. package/lib/network/peers/score/store.js +6 -2
  133. package/lib/network/peers/score/store.js.map +1 -1
  134. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  135. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  136. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  137. package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
  138. package/lib/network/peers/utils/prioritizePeers.js +43 -7
  139. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  140. package/lib/network/processor/extractSlotRootFns.js +8 -1
  141. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  142. package/lib/network/processor/gossipHandlers.js +153 -8
  143. package/lib/network/processor/gossipHandlers.js.map +1 -1
  144. package/lib/network/processor/gossipQueues/index.js +5 -0
  145. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  146. package/lib/network/processor/index.js +1 -0
  147. package/lib/network/processor/index.js.map +1 -1
  148. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  149. package/lib/network/reqresp/ReqRespBeaconNode.js +33 -10
  150. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  151. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +15 -5
  152. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +203 -14
  153. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  154. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -6
  155. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +282 -28
  156. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  157. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  158. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  159. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  160. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  161. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  162. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  163. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
  164. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  165. package/lib/network/reqresp/handlers/index.js +10 -0
  166. package/lib/network/reqresp/handlers/index.js.map +1 -1
  167. package/lib/network/reqresp/handlers/status.js +3 -2
  168. package/lib/network/reqresp/handlers/status.js.map +1 -1
  169. package/lib/network/reqresp/protocols.d.ts +4 -0
  170. package/lib/network/reqresp/protocols.js +20 -0
  171. package/lib/network/reqresp/protocols.js.map +1 -1
  172. package/lib/network/reqresp/rateLimit.js +11 -1
  173. package/lib/network/reqresp/rateLimit.js.map +1 -1
  174. package/lib/network/reqresp/types.d.ts +15 -8
  175. package/lib/network/reqresp/types.js +10 -3
  176. package/lib/network/reqresp/types.js.map +1 -1
  177. package/lib/network/statusCache.d.ts +5 -5
  178. package/lib/network/statusCache.js.map +1 -1
  179. package/lib/network/subnets/interface.d.ts +3 -0
  180. package/lib/network/subnets/interface.js +14 -1
  181. package/lib/network/subnets/interface.js.map +1 -1
  182. package/lib/network/subnets/syncnetsService.js +4 -5
  183. package/lib/network/subnets/syncnetsService.js.map +1 -1
  184. package/lib/node/nodejs.js +1 -0
  185. package/lib/node/nodejs.js.map +1 -1
  186. package/lib/sync/constants.d.ts +1 -1
  187. package/lib/sync/constants.js +4 -1
  188. package/lib/sync/constants.js.map +1 -1
  189. package/lib/sync/interface.d.ts +2 -2
  190. package/lib/sync/interface.js +1 -1
  191. package/lib/sync/interface.js.map +1 -1
  192. package/lib/sync/range/batch.d.ts +16 -2
  193. package/lib/sync/range/batch.js +38 -7
  194. package/lib/sync/range/batch.js.map +1 -1
  195. package/lib/sync/range/chain.d.ts +16 -1
  196. package/lib/sync/range/chain.js +110 -30
  197. package/lib/sync/range/chain.js.map +1 -1
  198. package/lib/sync/range/range.d.ts +3 -2
  199. package/lib/sync/range/range.js +9 -3
  200. package/lib/sync/range/range.js.map +1 -1
  201. package/lib/sync/range/utils/chainTarget.d.ts +5 -1
  202. package/lib/sync/range/utils/chainTarget.js +26 -1
  203. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  204. package/lib/sync/range/utils/peerBalancer.d.ts +12 -5
  205. package/lib/sync/range/utils/peerBalancer.js +69 -10
  206. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  207. package/lib/sync/unknownBlock.d.ts +8 -1
  208. package/lib/sync/unknownBlock.js +226 -69
  209. package/lib/sync/unknownBlock.js.map +1 -1
  210. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  211. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  212. package/lib/util/blobs.d.ts +18 -1
  213. package/lib/util/blobs.js +104 -1
  214. package/lib/util/blobs.js.map +1 -1
  215. package/lib/util/dataColumns.d.ts +132 -0
  216. package/lib/util/dataColumns.js +349 -0
  217. package/lib/util/dataColumns.js.map +1 -0
  218. package/lib/util/metadata.d.ts +4 -0
  219. package/lib/util/metadata.js +7 -0
  220. package/lib/util/metadata.js.map +1 -1
  221. package/lib/util/sszBytes.d.ts +1 -0
  222. package/lib/util/sszBytes.js +17 -0
  223. package/lib/util/sszBytes.js.map +1 -1
  224. package/package.json +14 -14
@@ -0,0 +1,22 @@
1
+ import { PeerId } from "@libp2p/interface";
2
+ import { BeaconConfig } from "@lodestar/config";
3
+ import { CustodyConfig } from "../util/dataColumns.js";
4
+ import { NodeId } from "./subnets/interface.js";
5
+ /**
6
+ * Store shared data for different modules in the network stack.
7
+ * TODO: consider moving similar shared data, for example PeersData, under NetworkConfig.
8
+ */
9
+ export declare class NetworkConfig {
10
+ private readonly nodeId;
11
+ private readonly config;
12
+ private readonly custodyConfig;
13
+ constructor(peerId: PeerId, config: BeaconConfig);
14
+ getConfig(): BeaconConfig;
15
+ getNodeId(): NodeId;
16
+ /**
17
+ * Consumer should never mutate returned CustodyConfig
18
+ */
19
+ getCustodyConfig(): CustodyConfig;
20
+ setTargetGroupCount(count: number): void;
21
+ }
22
+ //# sourceMappingURL=networkConfig.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { CustodyConfig } from "../util/dataColumns.js";
2
+ import { computeNodeId } from "./subnets/interface.js";
3
+ /**
4
+ * Store shared data for different modules in the network stack.
5
+ * TODO: consider moving similar shared data, for example PeersData, under NetworkConfig.
6
+ */
7
+ export class NetworkConfig {
8
+ constructor(peerId, config) {
9
+ this.nodeId = computeNodeId(peerId);
10
+ this.config = config;
11
+ this.custodyConfig = new CustodyConfig(this.nodeId, config, null);
12
+ }
13
+ getConfig() {
14
+ return this.config;
15
+ }
16
+ getNodeId() {
17
+ return this.nodeId;
18
+ }
19
+ /**
20
+ * Consumer should never mutate returned CustodyConfig
21
+ */
22
+ getCustodyConfig() {
23
+ return this.custodyConfig;
24
+ }
25
+ setTargetGroupCount(count) {
26
+ this.custodyConfig.updateTargetCustodyGroupCount(count);
27
+ }
28
+ }
29
+ //# sourceMappingURL=networkConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkConfig.js","sourceRoot":"","sources":["../../src/network/networkConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAS,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAE7D;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKxB,YAAY,MAAc,EAAE,MAAoB;QAC9C,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -15,5 +15,10 @@ export const defaultNetworkOptions = {
15
15
  slotsToSubscribeBeforeAggregatorDuty: 2,
16
16
  // This will enable the light client server by default
17
17
  disableLightClientServer: false,
18
+ // specific option for fulu
19
+ // - this is the same to TARGET_SUBNET_PEERS
20
+ // - for fusaka-devnets, we have 25-30 peers per subnet
21
+ // - for public testnets or mainnet, average number of peers per group is SAMPLES_PER_SLOT * targetPeers / NUMBER_OF_CUSTODY_GROUPS = 6.25 so this should not be an issue
22
+ targetGroupPeers: 6,
18
23
  };
19
24
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/network/options.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,QAAQ,EAAE,GAAG,EAAE,0DAA0D;IACzE,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,CAAC,uBAAuB,CAAC;IAC1C,cAAc,EAAE,EAAE;IAClB,0BAA0B;IAC1B,MAAM,EAAE,IAAI;IACZ,mBAAmB,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI;IACf,yFAAyF;IACzF,mBAAmB,EAAE,IAAI;IACzB,gFAAgF;IAChF,wBAAwB,EAAE,GAAG;IAC7B,kGAAkG;IAClG,oCAAoC,EAAE,CAAC;IACvC,sDAAsD;IACtD,wBAAwB,EAAE,KAAK;CAChC,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/network/options.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,QAAQ,EAAE,GAAG,EAAE,0DAA0D;IACzE,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,CAAC,uBAAuB,CAAC;IAC1C,cAAc,EAAE,EAAE;IAClB,0BAA0B;IAC1B,MAAM,EAAE,IAAI;IACZ,mBAAmB,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI;IACf,yFAAyF;IACzF,mBAAmB,EAAE,IAAI;IACzB,gFAAgF;IAChF,wBAAwB,EAAE,GAAG;IAC7B,kGAAkG;IAClG,oCAAoC,EAAE,CAAC;IACvC,sDAAsD;IACtD,wBAAwB,EAAE,KAAK;IAC/B,2BAA2B;IAC3B,8CAA8C;IAC9C,yDAAyD;IACzD,2KAA2K;IAC3K,gBAAgB,EAAE,CAAC;CACpB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { PrivateKey } from "@libp2p/interface";
2
- import { BeaconConfig } from "@lodestar/config";
3
2
  import { LoggerNode } from "@lodestar/logger/node";
4
3
  import { SubnetID } from "@lodestar/types";
5
4
  import { IClock } from "../../util/clock.js";
@@ -8,7 +7,9 @@ import { Discv5Worker } from "../discv5/index.js";
8
7
  import { LodestarDiscv5Opts } from "../discv5/types.js";
9
8
  import { Libp2p } from "../interface.js";
10
9
  import { SubnetType } from "../metadata.js";
10
+ import { NetworkConfig } from "../networkConfig.js";
11
11
  import { IPeerRpcScoreStore } from "./score/index.js";
12
+ import { type GroupQueries } from "./utils/prioritizePeers.js";
12
13
  export type PeerDiscoveryOpts = {
13
14
  discv5FirstQueryDelayMs: number;
14
15
  discv5: LodestarDiscv5Opts;
@@ -16,12 +17,12 @@ export type PeerDiscoveryOpts = {
16
17
  };
17
18
  export type PeerDiscoveryModules = {
18
19
  privateKey: PrivateKey;
20
+ networkConfig: NetworkConfig;
19
21
  libp2p: Libp2p;
20
22
  clock: IClock;
21
23
  peerRpcScores: IPeerRpcScoreStore;
22
24
  metrics: NetworkCoreMetrics | null;
23
25
  logger: LoggerNode;
24
- config: BeaconConfig;
25
26
  };
26
27
  export declare enum DiscoveredPeerStatus {
27
28
  bad_score = "bad_score",
@@ -52,13 +53,16 @@ export type SubnetDiscvQueryMs = {
52
53
  export declare class PeerDiscovery {
53
54
  readonly discv5: Discv5Worker;
54
55
  private libp2p;
56
+ private readonly clock;
55
57
  private peerRpcScores;
56
58
  private metrics;
57
59
  private logger;
60
+ private config;
58
61
  private cachedENRs;
59
62
  private randomNodeQuery;
60
63
  private peersToConnect;
61
64
  private subnetRequests;
65
+ private groupRequests;
62
66
  private discv5StartMs;
63
67
  private discv5FirstQueryDelayMs;
64
68
  private connectToDiscv5BootnodesOnStart;
@@ -67,8 +71,9 @@ export declare class PeerDiscovery {
67
71
  stop(): Promise<void>;
68
72
  /**
69
73
  * Request to find peers, both on specific subnets and in general
74
+ * pre-fulu groupRequests is empty
70
75
  */
71
- discoverPeers(peersToConnect: number, subnetRequests?: SubnetDiscvQueryMs[]): void;
76
+ discoverPeers(peersToConnect: number, groupRequests: GroupQueries, subnetRequests?: SubnetDiscvQueryMs[]): void;
72
77
  /**
73
78
  * Request discv5 to find peers if there is no query in progress
74
79
  */
@@ -1,9 +1,13 @@
1
1
  import { ENR } from "@chainsafe/enr";
2
- import { ATTESTATION_SUBNET_COUNT, SYNC_COMMITTEE_SUBNET_COUNT } from "@lodestar/params";
2
+ import { toHexString } from "@chainsafe/ssz";
3
+ import { ATTESTATION_SUBNET_COUNT, ForkSeq, SYNC_COMMITTEE_SUBNET_COUNT } from "@lodestar/params";
3
4
  import { pruneSetToMax, sleep } from "@lodestar/utils";
5
+ import { bytesToInt } from "@lodestar/utils";
6
+ import { getCustodyGroups } from "../../util/dataColumns.js";
4
7
  import { Discv5Worker } from "../discv5/index.js";
5
8
  import { getLibp2pError } from "../libp2p/error.js";
6
9
  import { ENRKey, SubnetType } from "../metadata.js";
10
+ import { computeNodeId } from "../subnets/interface.js";
7
11
  import { getConnectionsMap, prettyPrintPeerId } from "../util.js";
8
12
  import { ScoreState } from "./score/index.js";
9
13
  import { deserializeEnrSubnets, zeroAttnets, zeroSyncnets } from "./utils/enrSubnetsDeserialize.js";
@@ -59,7 +63,7 @@ export class PeerDiscovery {
59
63
  }
60
64
  const attnets = zeroAttnets;
61
65
  const syncnets = zeroSyncnets;
62
- const status = this.handleDiscoveredPeer(id, multiaddrs[0], attnets, syncnets);
66
+ const status = this.handleDiscoveredPeer(id, multiaddrs[0], attnets, syncnets, undefined);
63
67
  this.logger.debug("Discovered peer via libp2p", { peer: prettyPrintPeerId(id), status });
64
68
  this.metrics?.discovery.discoveredStatus.inc({ status });
65
69
  };
@@ -81,22 +85,34 @@ export class PeerDiscovery {
81
85
  // Are this fields mandatory?
82
86
  const attnetsBytes = enr.kvs.get(ENRKey.attnets); // 64 bits
83
87
  const syncnetsBytes = enr.kvs.get(ENRKey.syncnets); // 4 bits
88
+ const custodyGroupCountBytes = enr.kvs.get(ENRKey.cgc); // 64 bits
89
+ if (custodyGroupCountBytes === undefined) {
90
+ this.logger.warn("peer discovered with no cgc assuming 4", exportENRToJSON(enr));
91
+ }
84
92
  // Use faster version than ssz's implementation that leverages pre-cached.
85
93
  // Some nodes don't serialize the bitfields properly, encoding the syncnets as attnets,
86
94
  // which cause the ssz implementation to throw on validation. deserializeEnrSubnets() will
87
95
  // never throw and treat too long or too short bitfields as zero-ed
88
96
  const attnets = attnetsBytes ? deserializeEnrSubnets(attnetsBytes, ATTESTATION_SUBNET_COUNT) : zeroAttnets;
89
97
  const syncnets = syncnetsBytes ? deserializeEnrSubnets(syncnetsBytes, SYNC_COMMITTEE_SUBNET_COUNT) : zeroSyncnets;
90
- const status = this.handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets);
91
- this.logger.debug("Discovered peer via discv5", { peer: prettyPrintPeerId(peerId), status });
98
+ const custodyGroupCount = custodyGroupCountBytes ? bytesToInt(custodyGroupCountBytes, "be") : undefined;
99
+ const status = this.handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodyGroupCount);
100
+ this.logger.debug("Discovered peer via discv5", {
101
+ peer: prettyPrintPeerId(peerId),
102
+ status,
103
+ custodySubnetCount: custodyGroupCount,
104
+ });
92
105
  this.metrics?.discovery.discoveredStatus.inc({ status });
93
106
  };
94
- const { libp2p, peerRpcScores, metrics, logger } = modules;
107
+ const { libp2p, clock, peerRpcScores, metrics, logger, networkConfig } = modules;
95
108
  this.libp2p = libp2p;
109
+ this.clock = clock;
96
110
  this.peerRpcScores = peerRpcScores;
97
111
  this.metrics = metrics;
98
112
  this.logger = logger;
113
+ this.config = networkConfig.getConfig();
99
114
  this.discv5 = discv5;
115
+ this.groupRequests = new Map();
100
116
  this.discv5StartMs = 0;
101
117
  this.discv5StartMs = Date.now();
102
118
  this.discv5FirstQueryDelayMs = opts.discv5FirstQueryDelayMs;
@@ -122,6 +138,11 @@ export class PeerDiscovery {
122
138
  metrics.discovery.cachedENRsSize.addCollect(() => {
123
139
  metrics.discovery.cachedENRsSize.set(this.cachedENRs.size);
124
140
  metrics.discovery.peersToConnect.set(this.peersToConnect);
141
+ // PeerDAS metrics
142
+ const groupsToConnect = Array.from(this.groupRequests.values());
143
+ 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);
125
146
  for (const type of [SubnetType.attnets, SubnetType.syncnets]) {
126
147
  const subnetPeersToConnect = Array.from(this.subnetRequests[type].values()).reduce((acc, { peersToConnect }) => acc + peersToConnect, 0);
127
148
  metrics.discovery.subnetPeersToConnect.set({ type }, subnetPeersToConnect);
@@ -136,7 +157,7 @@ export class PeerDiscovery {
136
157
  privateKey: modules.privateKey,
137
158
  metrics: modules.metrics ?? undefined,
138
159
  logger: modules.logger,
139
- config: modules.config,
160
+ config: modules.networkConfig.getConfig(),
140
161
  genesisTime: modules.clock.genesisTime,
141
162
  });
142
163
  return new PeerDiscovery(modules, opts, discv5);
@@ -148,8 +169,9 @@ export class PeerDiscovery {
148
169
  }
149
170
  /**
150
171
  * Request to find peers, both on specific subnets and in general
172
+ * pre-fulu groupRequests is empty
151
173
  */
152
- discoverPeers(peersToConnect, subnetRequests = []) {
174
+ discoverPeers(peersToConnect, groupRequests, subnetRequests = []) {
153
175
  const subnetsToDiscoverPeers = [];
154
176
  const cachedENRsToDial = new Map();
155
177
  // Iterate in reverse to consider first the most recent ENRs
@@ -171,14 +193,38 @@ export class PeerDiscovery {
171
193
  }
172
194
  cachedENRsReverse.reverse();
173
195
  this.peersToConnect += peersToConnect;
196
+ // starting from PeerDAS, we need to prioritize column subnet peers first in order to have stable subnet sampling
197
+ const groupsToDiscover = new Set();
198
+ let groupPeersToDiscover = 0;
199
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
200
+ if (forkSeq >= ForkSeq.fulu) {
201
+ group: for (const [group, maxPeersToConnect] of groupRequests) {
202
+ let cachedENRsInGroup = 0;
203
+ for (const cachedENR of cachedENRsReverse) {
204
+ if (cachedENR.peerCustodyGroups?.includes(group)) {
205
+ cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
206
+ if (++cachedENRsInGroup >= maxPeersToConnect) {
207
+ continue group;
208
+ }
209
+ }
210
+ const groupPeersToConnect = Math.max(maxPeersToConnect - cachedENRsInGroup, 0);
211
+ this.groupRequests.set(group, groupPeersToConnect);
212
+ groupsToDiscover.add(group);
213
+ groupPeersToDiscover += groupPeersToConnect;
214
+ }
215
+ }
216
+ }
174
217
  subnet: for (const subnetRequest of subnetRequests) {
175
218
  // Get cached ENRs from the discovery service that are in the requested `subnetId`, but not connected yet
176
219
  let cachedENRsInSubnet = 0;
177
- for (const cachedENR of cachedENRsReverse) {
178
- if (cachedENR.subnets[subnetRequest.type][subnetRequest.subnet]) {
179
- cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
180
- if (++cachedENRsInSubnet >= subnetRequest.maxPeersToDiscover) {
181
- continue subnet;
220
+ // only dial attnet/syncnet peers if subnet sampling peers are stable
221
+ if (groupPeersToDiscover === 0) {
222
+ for (const cachedENR of cachedENRsReverse) {
223
+ if (cachedENR.subnets[subnetRequest.type][subnetRequest.subnet]) {
224
+ cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
225
+ if (++cachedENRsInSubnet >= subnetRequest.maxPeersToDiscover) {
226
+ continue subnet;
227
+ }
182
228
  }
183
229
  }
184
230
  }
@@ -218,6 +264,8 @@ export class PeerDiscovery {
218
264
  peersToConnect,
219
265
  peersAvailableToDial: cachedENRsToDial.size,
220
266
  subnetsToDiscover: subnetsToDiscoverPeers.length,
267
+ groupsToDiscover: Array.from(groupsToDiscover).join(","),
268
+ groupPeersToDiscover,
221
269
  shouldRunFindRandomNodeQuery,
222
270
  });
223
271
  }
@@ -256,7 +304,9 @@ export class PeerDiscovery {
256
304
  /**
257
305
  * Progressively called by peer discovery as a result of any query.
258
306
  */
259
- handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets) {
307
+ handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodySubnetCount) {
308
+ const nodeId = computeNodeId(peerId);
309
+ this.logger.warn("handleDiscoveredPeer", { nodeId: toHexString(nodeId), peerId: peerId.toString() });
260
310
  try {
261
311
  // Check if peer is not banned or disconnected
262
312
  if (this.peerRpcScores.getScoreState(peerId) !== ScoreState.Healthy) {
@@ -272,12 +322,17 @@ export class PeerDiscovery {
272
322
  .find((pendingDial) => pendingDial.peerId?.equals(peerId))) {
273
323
  return DiscoveredPeerStatus.already_dialing;
274
324
  }
325
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
275
326
  // Should dial peer?
276
327
  const cachedPeer = {
277
328
  peerId,
278
329
  multiaddrTCP,
279
330
  subnets: { attnets, syncnets },
280
331
  addedUnixMs: Date.now(),
332
+ // for pre-fulu, peerCustodyGroups is null
333
+ peerCustodyGroups: forkSeq >= ForkSeq.fulu
334
+ ? getCustodyGroups(nodeId, custodySubnetCount ?? this.config.CUSTODY_REQUIREMENT)
335
+ : null,
281
336
  };
282
337
  // Only dial peer if necessary
283
338
  if (this.shouldDialPeer(cachedPeer)) {
@@ -296,6 +351,33 @@ export class PeerDiscovery {
296
351
  }
297
352
  }
298
353
  shouldDialPeer(peer) {
354
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
355
+ if (forkSeq >= ForkSeq.fulu && peer.peerCustodyGroups !== null) {
356
+ // pre-fulu `this.groupRequests` is empty
357
+ // starting from fulu, we need to make sure we have stable subnet sampling peers first
358
+ // given SAMPLES_PER_SLOT = 8 and 100 peers, we have 800 custody columns from peers
359
+ // with NUMBER_OF_CUSTODY_GROUPS = 128, we have 800 / 128 = 6.25 peers per column in average
360
+ // 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
+ // after some first heartbeats, we should have no more column requested, then go with conditions of prior forks
362
+ let hasMatchingGroup = false;
363
+ let groupRequestCount = 0;
364
+ for (const [group, peersToConnect] of this.groupRequests.entries()) {
365
+ if (peersToConnect <= 0) {
366
+ this.groupRequests.delete(group);
367
+ }
368
+ else if (peer.peerCustodyGroups.includes(group)) {
369
+ this.groupRequests.set(group, Math.max(0, peersToConnect - 1));
370
+ hasMatchingGroup = true;
371
+ groupRequestCount += peersToConnect;
372
+ }
373
+ }
374
+ // if subnet sampling peers are not stable and this peer is not in the requested columns, ignore it
375
+ if (groupRequestCount > 0 && !hasMatchingGroup) {
376
+ this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.not_contain_requested_sampling_groups });
377
+ return false;
378
+ }
379
+ }
380
+ // logics up to Deneb fork
299
381
  for (const type of [SubnetType.attnets, SubnetType.syncnets]) {
300
382
  for (const [subnet, { toUnixMs, peersToConnect }] of this.subnetRequests[type].entries()) {
301
383
  if (toUnixMs < Date.now() || peersToConnect === 0) {
@@ -320,6 +402,7 @@ export class PeerDiscovery {
320
402
  if (this.peersToConnect > 0) {
321
403
  return true;
322
404
  }
405
+ this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.not_contain_requested_attnet_syncnet_subnets });
323
406
  return false;
324
407
  }
325
408
  /**
@@ -405,4 +488,14 @@ function formatLibp2pDialError(e) {
405
488
  e.stack = undefined;
406
489
  }
407
490
  }
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
+ }
408
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,13 +1,14 @@
1
1
  import { PeerId, PrivateKey } from "@libp2p/interface";
2
- import { BeaconConfig } from "@lodestar/config";
3
2
  import { LoggerNode } from "@lodestar/logger/node";
4
- import { Metadata, phase0 } from "@lodestar/types";
3
+ import { Metadata, Status, phase0 } from "@lodestar/types";
5
4
  import { IClock } from "../../util/clock.js";
6
5
  import { NetworkCoreMetrics } from "../core/metrics.js";
7
6
  import { LodestarDiscv5Opts } from "../discv5/types.js";
8
7
  import { INetworkEventBus } from "../events.js";
9
8
  import { Eth2Gossipsub } from "../gossip/gossipsub.js";
10
9
  import { Libp2p } from "../interface.js";
10
+ import { SubnetType } from "../metadata.js";
11
+ import { NetworkConfig } from "../networkConfig.js";
11
12
  import { StatusCache } from "../statusCache.js";
12
13
  import { SubnetsService } from "../subnets/index.js";
13
14
  import { PeerDiscovery } from "./discover.js";
@@ -18,6 +19,8 @@ export type PeerManagerOpts = {
18
19
  targetPeers: number;
19
20
  /** The maximum number of peers we allow (exceptions for subnet peers) */
20
21
  maxPeers: number;
22
+ /** Target peer per PeerDAS group */
23
+ targetGroupPeers: number;
21
24
  /**
22
25
  * Delay the 1st query after starting discv5
23
26
  * See https://github.com/ChainSafe/lodestar/issues/3423
@@ -37,7 +40,7 @@ export type PeerManagerOpts = {
37
40
  */
38
41
  export interface IReqRespBeaconNodePeerManager {
39
42
  sendPing(peerId: PeerId): Promise<phase0.Ping>;
40
- sendStatus(peerId: PeerId, request: phase0.Status): Promise<phase0.Status>;
43
+ sendStatus(peerId: PeerId, request: Status): Promise<Status>;
41
44
  sendGoodbye(peerId: PeerId, request: phase0.Goodbye): Promise<void>;
42
45
  sendMetadata(peerId: PeerId): Promise<Metadata>;
43
46
  }
@@ -51,12 +54,13 @@ export type PeerManagerModules = {
51
54
  attnetsService: SubnetsService;
52
55
  syncnetsService: SubnetsService;
53
56
  clock: IClock;
54
- config: BeaconConfig;
55
57
  peerRpcScores: IPeerRpcScoreStore;
56
58
  events: INetworkEventBus;
59
+ networkConfig: NetworkConfig;
57
60
  peersData: PeersData;
58
61
  statusCache: StatusCache;
59
62
  };
63
+ export type PeerRequestedSubnetType = SubnetType | "column";
60
64
  type PeerIdStr = string;
61
65
  /**
62
66
  * Performs all peer management functionality in a single grouped class:
@@ -67,6 +71,7 @@ type PeerIdStr = string;
67
71
  * - Disconnect peers if over target peers
68
72
  */
69
73
  export declare class PeerManager {
74
+ private nodeId;
70
75
  private readonly libp2p;
71
76
  private readonly logger;
72
77
  private readonly metrics;
@@ -75,6 +80,7 @@ export declare class PeerManager {
75
80
  private readonly attnetsService;
76
81
  private readonly syncnetsService;
77
82
  private readonly clock;
83
+ private readonly networkConfig;
78
84
  private readonly config;
79
85
  private readonly peerRpcScores;
80
86
  /** If null, discovery is disabled */