@lodestar/beacon-node 1.33.0-dev.f3e21c7679 → 1.33.0-peerDAS.00a7126d44

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 (238) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +144 -40
  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 +61 -6
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +69 -24
  18. package/lib/chain/blocks/types.js +40 -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 +42 -9
  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 +5 -1
  40. package/lib/chain/options.js.map +1 -1
  41. package/lib/chain/prepareNextSlot.js +1 -1
  42. package/lib/chain/prepareNextSlot.js.map +1 -1
  43. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  44. package/lib/chain/produceBlock/produceBlockBody.js +7 -2
  45. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  46. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  47. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
  48. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  49. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  50. package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
  51. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  52. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  53. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  54. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  55. package/lib/constants/network.d.ts +1 -0
  56. package/lib/constants/network.js +2 -0
  57. package/lib/constants/network.js.map +1 -1
  58. package/lib/db/beacon.d.ts +3 -1
  59. package/lib/db/beacon.js +3 -1
  60. package/lib/db/beacon.js.map +1 -1
  61. package/lib/db/buckets.d.ts +3 -1
  62. package/lib/db/buckets.js +2 -0
  63. package/lib/db/buckets.js.map +1 -1
  64. package/lib/db/interface.d.ts +3 -1
  65. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  66. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  67. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  68. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  69. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  70. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  71. package/lib/db/repositories/index.d.ts +2 -0
  72. package/lib/db/repositories/index.js +2 -0
  73. package/lib/db/repositories/index.js.map +1 -1
  74. package/lib/execution/builder/http.d.ts +1 -0
  75. package/lib/execution/builder/http.js +3 -0
  76. package/lib/execution/builder/http.js.map +1 -1
  77. package/lib/execution/builder/interface.d.ts +1 -0
  78. package/lib/execution/engine/http.d.ts +5 -3
  79. package/lib/execution/engine/http.js +70 -31
  80. package/lib/execution/engine/http.js.map +1 -1
  81. package/lib/execution/engine/interface.d.ts +4 -2
  82. package/lib/execution/engine/interface.js +1 -1
  83. package/lib/execution/engine/interface.js.map +1 -1
  84. package/lib/execution/engine/mock.d.ts +1 -0
  85. package/lib/execution/engine/mock.js +5 -0
  86. package/lib/execution/engine/mock.js.map +1 -1
  87. package/lib/execution/engine/types.d.ts +10 -0
  88. package/lib/execution/engine/types.js +6 -0
  89. package/lib/execution/engine/types.js.map +1 -1
  90. package/lib/metrics/metrics/beacon.d.ts +15 -1
  91. package/lib/metrics/metrics/beacon.js +58 -1
  92. package/lib/metrics/metrics/beacon.js.map +1 -1
  93. package/lib/metrics/metrics/lodestar.d.ts +27 -1
  94. package/lib/metrics/metrics/lodestar.js +44 -0
  95. package/lib/metrics/metrics/lodestar.js.map +1 -1
  96. package/lib/network/core/metrics.d.ts +10 -3
  97. package/lib/network/core/metrics.js +22 -4
  98. package/lib/network/core/metrics.js.map +1 -1
  99. package/lib/network/core/networkCore.d.ts +8 -3
  100. package/lib/network/core/networkCore.js +24 -10
  101. package/lib/network/core/networkCore.js.map +1 -1
  102. package/lib/network/core/networkCoreWorker.js +1 -0
  103. package/lib/network/core/networkCoreWorker.js.map +1 -1
  104. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -3
  105. package/lib/network/core/networkCoreWorkerHandler.js +4 -0
  106. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  107. package/lib/network/core/types.d.ts +6 -4
  108. package/lib/network/events.d.ts +4 -2
  109. package/lib/network/events.js.map +1 -1
  110. package/lib/network/gossip/interface.d.ts +8 -1
  111. package/lib/network/gossip/interface.js +1 -0
  112. package/lib/network/gossip/interface.js.map +1 -1
  113. package/lib/network/gossip/topic.d.ts +1047 -1031
  114. package/lib/network/gossip/topic.js +20 -1
  115. package/lib/network/gossip/topic.js.map +1 -1
  116. package/lib/network/interface.d.ts +13 -1
  117. package/lib/network/metadata.d.ts +9 -5
  118. package/lib/network/metadata.js +25 -5
  119. package/lib/network/metadata.js.map +1 -1
  120. package/lib/network/network.d.ts +12 -2
  121. package/lib/network/network.js +59 -8
  122. package/lib/network/network.js.map +1 -1
  123. package/lib/network/networkConfig.d.ts +25 -0
  124. package/lib/network/networkConfig.js +29 -0
  125. package/lib/network/networkConfig.js.map +1 -0
  126. package/lib/network/options.d.ts +1 -0
  127. package/lib/network/options.js +5 -0
  128. package/lib/network/options.js.map +1 -1
  129. package/lib/network/peers/discover.d.ts +10 -4
  130. package/lib/network/peers/discover.js +116 -15
  131. package/lib/network/peers/discover.js.map +1 -1
  132. package/lib/network/peers/peerManager.d.ts +10 -4
  133. package/lib/network/peers/peerManager.js +135 -21
  134. package/lib/network/peers/peerManager.js.map +1 -1
  135. package/lib/network/peers/peersData.d.ts +17 -3
  136. package/lib/network/peers/peersData.js.map +1 -1
  137. package/lib/network/peers/score/constants.d.ts +3 -1
  138. package/lib/network/peers/score/constants.js +3 -1
  139. package/lib/network/peers/score/constants.js.map +1 -1
  140. package/lib/network/peers/score/interface.d.ts +6 -1
  141. package/lib/network/peers/score/interface.js.map +1 -1
  142. package/lib/network/peers/score/score.d.ts +7 -2
  143. package/lib/network/peers/score/score.js +39 -3
  144. package/lib/network/peers/score/score.js.map +1 -1
  145. package/lib/network/peers/score/store.d.ts +12 -1
  146. package/lib/network/peers/score/store.js +19 -2
  147. package/lib/network/peers/score/store.js.map +1 -1
  148. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  149. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  150. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  151. package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
  152. package/lib/network/peers/utils/prioritizePeers.js +43 -7
  153. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  154. package/lib/network/processor/extractSlotRootFns.js +8 -1
  155. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  156. package/lib/network/processor/gossipHandlers.js +157 -9
  157. package/lib/network/processor/gossipHandlers.js.map +1 -1
  158. package/lib/network/processor/gossipQueues/index.js +5 -0
  159. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  160. package/lib/network/processor/index.js +1 -0
  161. package/lib/network/processor/index.js.map +1 -1
  162. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  163. package/lib/network/reqresp/ReqRespBeaconNode.js +32 -9
  164. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  165. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +16 -5
  166. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +204 -14
  167. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  168. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -6
  169. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
  170. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  171. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  172. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  173. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  174. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  177. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
  178. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  179. package/lib/network/reqresp/handlers/index.js +10 -0
  180. package/lib/network/reqresp/handlers/index.js.map +1 -1
  181. package/lib/network/reqresp/handlers/status.js +3 -2
  182. package/lib/network/reqresp/handlers/status.js.map +1 -1
  183. package/lib/network/reqresp/protocols.d.ts +4 -0
  184. package/lib/network/reqresp/protocols.js +20 -0
  185. package/lib/network/reqresp/protocols.js.map +1 -1
  186. package/lib/network/reqresp/rateLimit.js +11 -1
  187. package/lib/network/reqresp/rateLimit.js.map +1 -1
  188. package/lib/network/reqresp/types.d.ts +15 -8
  189. package/lib/network/reqresp/types.js +10 -3
  190. package/lib/network/reqresp/types.js.map +1 -1
  191. package/lib/network/statusCache.d.ts +5 -5
  192. package/lib/network/statusCache.js.map +1 -1
  193. package/lib/network/subnets/interface.d.ts +3 -0
  194. package/lib/network/subnets/interface.js +14 -1
  195. package/lib/network/subnets/interface.js.map +1 -1
  196. package/lib/network/subnets/syncnetsService.js +4 -5
  197. package/lib/network/subnets/syncnetsService.js.map +1 -1
  198. package/lib/node/nodejs.js +1 -0
  199. package/lib/node/nodejs.js.map +1 -1
  200. package/lib/sync/constants.d.ts +1 -1
  201. package/lib/sync/constants.js +4 -1
  202. package/lib/sync/constants.js.map +1 -1
  203. package/lib/sync/interface.d.ts +2 -2
  204. package/lib/sync/interface.js +1 -1
  205. package/lib/sync/interface.js.map +1 -1
  206. package/lib/sync/range/batch.d.ts +16 -2
  207. package/lib/sync/range/batch.js +38 -7
  208. package/lib/sync/range/batch.js.map +1 -1
  209. package/lib/sync/range/chain.d.ts +16 -1
  210. package/lib/sync/range/chain.js +110 -30
  211. package/lib/sync/range/chain.js.map +1 -1
  212. package/lib/sync/range/range.d.ts +3 -2
  213. package/lib/sync/range/range.js +9 -3
  214. package/lib/sync/range/range.js.map +1 -1
  215. package/lib/sync/range/utils/chainTarget.d.ts +5 -1
  216. package/lib/sync/range/utils/chainTarget.js +26 -1
  217. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  218. package/lib/sync/range/utils/peerBalancer.d.ts +12 -5
  219. package/lib/sync/range/utils/peerBalancer.js +69 -10
  220. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  221. package/lib/sync/unknownBlock.d.ts +8 -1
  222. package/lib/sync/unknownBlock.js +226 -69
  223. package/lib/sync/unknownBlock.js.map +1 -1
  224. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  225. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  226. package/lib/util/blobs.d.ts +23 -1
  227. package/lib/util/blobs.js +156 -1
  228. package/lib/util/blobs.js.map +1 -1
  229. package/lib/util/dataColumns.d.ts +135 -0
  230. package/lib/util/dataColumns.js +352 -0
  231. package/lib/util/dataColumns.js.map +1 -0
  232. package/lib/util/metadata.d.ts +4 -0
  233. package/lib/util/metadata.js +7 -0
  234. package/lib/util/metadata.js.map +1 -1
  235. package/lib/util/sszBytes.d.ts +1 -0
  236. package/lib/util/sszBytes.js +17 -0
  237. package/lib/util/sszBytes.js.map +1 -1
  238. package/package.json +15 -15
@@ -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, opts = {}) {
9
+ this.nodeId = computeNodeId(peerId);
10
+ this.config = config;
11
+ this.custodyConfig = new CustodyConfig(this.nodeId, config, null, opts);
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;AAM7D;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKxB,YAAY,MAAc,EAAE,MAAoB,EAAE,OAA0B,EAAE;QAC5E,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,EAAE,IAAI,CAAC,CAAC;IAC1E,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"}
@@ -14,6 +14,7 @@ export interface NetworkOptions extends PeerManagerOpts, Omit<ReqRespBeaconNodeO
14
14
  useWorker?: boolean;
15
15
  maxYoungGenerationSizeMb?: number;
16
16
  disableLightClientServer?: boolean;
17
+ supernode?: boolean;
17
18
  /**
18
19
  * During E2E tests observe a lot of following `missing stream`:
19
20
  *
@@ -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":"AA+CA,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",
@@ -31,7 +32,8 @@ export declare enum DiscoveredPeerStatus {
31
32
  attempt_dial = "attempt_dial",
32
33
  cached = "cached",
33
34
  dropped = "dropped",
34
- no_multiaddrs = "no_multiaddrs"
35
+ no_multiaddrs = "no_multiaddrs",
36
+ peer_cooling_down = "peer_cooling_down"
35
37
  }
36
38
  export declare enum NotDialReason {
37
39
  not_contain_requested_sampling_groups = "not_contain_requested_sampling_groups",
@@ -52,13 +54,16 @@ export type SubnetDiscvQueryMs = {
52
54
  export declare class PeerDiscovery {
53
55
  readonly discv5: Discv5Worker;
54
56
  private libp2p;
57
+ private readonly clock;
55
58
  private peerRpcScores;
56
59
  private metrics;
57
60
  private logger;
61
+ private config;
58
62
  private cachedENRs;
59
63
  private randomNodeQuery;
60
64
  private peersToConnect;
61
65
  private subnetRequests;
66
+ private groupRequests;
62
67
  private discv5StartMs;
63
68
  private discv5FirstQueryDelayMs;
64
69
  private connectToDiscv5BootnodesOnStart;
@@ -67,8 +72,9 @@ export declare class PeerDiscovery {
67
72
  stop(): Promise<void>;
68
73
  /**
69
74
  * Request to find peers, both on specific subnets and in general
75
+ * pre-fulu groupRequests is empty
70
76
  */
71
- discoverPeers(peersToConnect: number, subnetRequests?: SubnetDiscvQueryMs[]): void;
77
+ discoverPeers(peersToConnect: number, groupRequests: GroupQueries, subnetRequests?: SubnetDiscvQueryMs[]): void;
72
78
  /**
73
79
  * Request discv5 to find peers if there is no query in progress
74
80
  */
@@ -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";
@@ -26,6 +30,7 @@ export var DiscoveredPeerStatus;
26
30
  DiscoveredPeerStatus["cached"] = "cached";
27
31
  DiscoveredPeerStatus["dropped"] = "dropped";
28
32
  DiscoveredPeerStatus["no_multiaddrs"] = "no_multiaddrs";
33
+ DiscoveredPeerStatus["peer_cooling_down"] = "peer_cooling_down";
29
34
  })(DiscoveredPeerStatus || (DiscoveredPeerStatus = {}));
30
35
  export var NotDialReason;
31
36
  (function (NotDialReason) {
@@ -59,7 +64,7 @@ export class PeerDiscovery {
59
64
  }
60
65
  const attnets = zeroAttnets;
61
66
  const syncnets = zeroSyncnets;
62
- const status = this.handleDiscoveredPeer(id, multiaddrs[0], attnets, syncnets);
67
+ const status = this.handleDiscoveredPeer(id, multiaddrs[0], attnets, syncnets, undefined);
63
68
  this.logger.debug("Discovered peer via libp2p", { peer: prettyPrintPeerId(id), status });
64
69
  this.metrics?.discovery.discoveredStatus.inc({ status });
65
70
  };
@@ -81,22 +86,34 @@ export class PeerDiscovery {
81
86
  // Are this fields mandatory?
82
87
  const attnetsBytes = enr.kvs.get(ENRKey.attnets); // 64 bits
83
88
  const syncnetsBytes = enr.kvs.get(ENRKey.syncnets); // 4 bits
89
+ const custodyGroupCountBytes = enr.kvs.get(ENRKey.cgc); // 64 bits
90
+ if (custodyGroupCountBytes === undefined) {
91
+ this.logger.warn("peer discovered with no cgc assuming 4", exportENRToJSON(enr));
92
+ }
84
93
  // Use faster version than ssz's implementation that leverages pre-cached.
85
94
  // Some nodes don't serialize the bitfields properly, encoding the syncnets as attnets,
86
95
  // which cause the ssz implementation to throw on validation. deserializeEnrSubnets() will
87
96
  // never throw and treat too long or too short bitfields as zero-ed
88
97
  const attnets = attnetsBytes ? deserializeEnrSubnets(attnetsBytes, ATTESTATION_SUBNET_COUNT) : zeroAttnets;
89
98
  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 });
99
+ const custodyGroupCount = custodyGroupCountBytes ? bytesToInt(custodyGroupCountBytes, "be") : undefined;
100
+ const status = this.handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodyGroupCount);
101
+ this.logger.debug("Discovered peer via discv5", {
102
+ peer: prettyPrintPeerId(peerId),
103
+ status,
104
+ custodySubnetCount: custodyGroupCount,
105
+ });
92
106
  this.metrics?.discovery.discoveredStatus.inc({ status });
93
107
  };
94
- const { libp2p, peerRpcScores, metrics, logger } = modules;
108
+ const { libp2p, clock, peerRpcScores, metrics, logger, networkConfig } = modules;
95
109
  this.libp2p = libp2p;
110
+ this.clock = clock;
96
111
  this.peerRpcScores = peerRpcScores;
97
112
  this.metrics = metrics;
98
113
  this.logger = logger;
114
+ this.config = networkConfig.getConfig();
99
115
  this.discv5 = discv5;
116
+ this.groupRequests = new Map();
100
117
  this.discv5StartMs = 0;
101
118
  this.discv5StartMs = Date.now();
102
119
  this.discv5FirstQueryDelayMs = opts.discv5FirstQueryDelayMs;
@@ -122,6 +139,11 @@ export class PeerDiscovery {
122
139
  metrics.discovery.cachedENRsSize.addCollect(() => {
123
140
  metrics.discovery.cachedENRsSize.set(this.cachedENRs.size);
124
141
  metrics.discovery.peersToConnect.set(this.peersToConnect);
142
+ // PeerDAS metrics
143
+ const groupsToConnect = Array.from(this.groupRequests.values());
144
+ const groupPeersToConnect = groupsToConnect.reduce((acc, elem) => acc + elem, 0);
145
+ metrics.discovery.groupPeersToConnect.set(groupPeersToConnect);
146
+ metrics.discovery.groupsToConnect.set(groupsToConnect.filter((elem) => elem > 0).length);
125
147
  for (const type of [SubnetType.attnets, SubnetType.syncnets]) {
126
148
  const subnetPeersToConnect = Array.from(this.subnetRequests[type].values()).reduce((acc, { peersToConnect }) => acc + peersToConnect, 0);
127
149
  metrics.discovery.subnetPeersToConnect.set({ type }, subnetPeersToConnect);
@@ -136,7 +158,7 @@ export class PeerDiscovery {
136
158
  privateKey: modules.privateKey,
137
159
  metrics: modules.metrics ?? undefined,
138
160
  logger: modules.logger,
139
- config: modules.config,
161
+ config: modules.networkConfig.getConfig(),
140
162
  genesisTime: modules.clock.genesisTime,
141
163
  });
142
164
  return new PeerDiscovery(modules, opts, discv5);
@@ -148,8 +170,9 @@ export class PeerDiscovery {
148
170
  }
149
171
  /**
150
172
  * Request to find peers, both on specific subnets and in general
173
+ * pre-fulu groupRequests is empty
151
174
  */
152
- discoverPeers(peersToConnect, subnetRequests = []) {
175
+ discoverPeers(peersToConnect, groupRequests, subnetRequests = []) {
153
176
  const subnetsToDiscoverPeers = [];
154
177
  const cachedENRsToDial = new Map();
155
178
  // Iterate in reverse to consider first the most recent ENRs
@@ -165,20 +188,44 @@ export class PeerDiscovery {
165
188
  pendingDials.has(id)) {
166
189
  this.cachedENRs.delete(id);
167
190
  }
168
- else {
191
+ else if (!this.peerRpcScores.isCoolingDown(id)) {
169
192
  cachedENRsReverse.push(cachedENR);
170
193
  }
171
194
  }
172
195
  cachedENRsReverse.reverse();
173
196
  this.peersToConnect += peersToConnect;
197
+ // starting from PeerDAS, we need to prioritize column subnet peers first in order to have stable subnet sampling
198
+ const groupsToDiscover = new Set();
199
+ let groupPeersToDiscover = 0;
200
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
201
+ if (forkSeq >= ForkSeq.fulu) {
202
+ group: for (const [group, maxPeersToConnect] of groupRequests) {
203
+ let cachedENRsInGroup = 0;
204
+ for (const cachedENR of cachedENRsReverse) {
205
+ if (cachedENR.peerCustodyGroups?.includes(group)) {
206
+ cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
207
+ if (++cachedENRsInGroup >= maxPeersToConnect) {
208
+ continue group;
209
+ }
210
+ }
211
+ const groupPeersToConnect = Math.max(maxPeersToConnect - cachedENRsInGroup, 0);
212
+ this.groupRequests.set(group, groupPeersToConnect);
213
+ groupsToDiscover.add(group);
214
+ groupPeersToDiscover += groupPeersToConnect;
215
+ }
216
+ }
217
+ }
174
218
  subnet: for (const subnetRequest of subnetRequests) {
175
219
  // Get cached ENRs from the discovery service that are in the requested `subnetId`, but not connected yet
176
220
  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;
221
+ // only dial attnet/syncnet peers if subnet sampling peers are stable
222
+ if (groupPeersToDiscover === 0) {
223
+ for (const cachedENR of cachedENRsReverse) {
224
+ if (cachedENR.subnets[subnetRequest.type][subnetRequest.subnet]) {
225
+ cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR);
226
+ if (++cachedENRsInSubnet >= subnetRequest.maxPeersToDiscover) {
227
+ continue subnet;
228
+ }
182
229
  }
183
230
  }
184
231
  }
@@ -218,6 +265,8 @@ export class PeerDiscovery {
218
265
  peersToConnect,
219
266
  peersAvailableToDial: cachedENRsToDial.size,
220
267
  subnetsToDiscover: subnetsToDiscoverPeers.length,
268
+ groupsToDiscover: Array.from(groupsToDiscover).join(","),
269
+ groupPeersToDiscover,
221
270
  shouldRunFindRandomNodeQuery,
222
271
  });
223
272
  }
@@ -256,14 +305,23 @@ export class PeerDiscovery {
256
305
  /**
257
306
  * Progressively called by peer discovery as a result of any query.
258
307
  */
259
- handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets) {
308
+ handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodySubnetCount) {
309
+ const nodeId = computeNodeId(peerId);
310
+ this.logger.warn("handleDiscoveredPeer", { nodeId: toHexString(nodeId), peerId: peerId.toString() });
260
311
  try {
261
312
  // Check if peer is not banned or disconnected
262
313
  if (this.peerRpcScores.getScoreState(peerId) !== ScoreState.Healthy) {
263
314
  return DiscoveredPeerStatus.bad_score;
264
315
  }
316
+ const peerIdStr = peerId.toString();
317
+ // check if peer has a cool-down period applied for reconnection. Is possible that a peer has a
318
+ // "healthy" score but has disconnected us and we are letting the reconnection cool-down before
319
+ // they are eligible for reconnection
320
+ if (this.peerRpcScores.isCoolingDown(peerIdStr)) {
321
+ return DiscoveredPeerStatus.peer_cooling_down;
322
+ }
265
323
  // Ignore connected peers. TODO: Is this check necessary?
266
- if (this.isPeerConnected(peerId.toString())) {
324
+ if (this.isPeerConnected(peerIdStr)) {
267
325
  return DiscoveredPeerStatus.already_connected;
268
326
  }
269
327
  // Ignore dialing peers
@@ -272,12 +330,17 @@ export class PeerDiscovery {
272
330
  .find((pendingDial) => pendingDial.peerId?.equals(peerId))) {
273
331
  return DiscoveredPeerStatus.already_dialing;
274
332
  }
333
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
275
334
  // Should dial peer?
276
335
  const cachedPeer = {
277
336
  peerId,
278
337
  multiaddrTCP,
279
338
  subnets: { attnets, syncnets },
280
339
  addedUnixMs: Date.now(),
340
+ // for pre-fulu, peerCustodyGroups is null
341
+ peerCustodyGroups: forkSeq >= ForkSeq.fulu
342
+ ? getCustodyGroups(nodeId, custodySubnetCount ?? this.config.CUSTODY_REQUIREMENT)
343
+ : null,
281
344
  };
282
345
  // Only dial peer if necessary
283
346
  if (this.shouldDialPeer(cachedPeer)) {
@@ -296,6 +359,33 @@ export class PeerDiscovery {
296
359
  }
297
360
  }
298
361
  shouldDialPeer(peer) {
362
+ const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
363
+ if (forkSeq >= ForkSeq.fulu && peer.peerCustodyGroups !== null) {
364
+ // pre-fulu `this.groupRequests` is empty
365
+ // starting from fulu, we need to make sure we have stable subnet sampling peers first
366
+ // given SAMPLES_PER_SLOT = 8 and 100 peers, we have 800 custody columns from peers
367
+ // with NUMBER_OF_CUSTODY_GROUPS = 128, we have 800 / 128 = 6.25 peers per column in average
368
+ // 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
369
+ // after some first heartbeats, we should have no more column requested, then go with conditions of prior forks
370
+ let hasMatchingGroup = false;
371
+ let groupRequestCount = 0;
372
+ for (const [group, peersToConnect] of this.groupRequests.entries()) {
373
+ if (peersToConnect <= 0) {
374
+ this.groupRequests.delete(group);
375
+ }
376
+ else if (peer.peerCustodyGroups.includes(group)) {
377
+ this.groupRequests.set(group, Math.max(0, peersToConnect - 1));
378
+ hasMatchingGroup = true;
379
+ groupRequestCount += peersToConnect;
380
+ }
381
+ }
382
+ // if subnet sampling peers are not stable and this peer is not in the requested columns, ignore it
383
+ if (groupRequestCount > 0 && !hasMatchingGroup) {
384
+ this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.not_contain_requested_sampling_groups });
385
+ return false;
386
+ }
387
+ }
388
+ // logics up to Deneb fork
299
389
  for (const type of [SubnetType.attnets, SubnetType.syncnets]) {
300
390
  for (const [subnet, { toUnixMs, peersToConnect }] of this.subnetRequests[type].entries()) {
301
391
  if (toUnixMs < Date.now() || peersToConnect === 0) {
@@ -320,6 +410,7 @@ export class PeerDiscovery {
320
410
  if (this.peersToConnect > 0) {
321
411
  return true;
322
412
  }
413
+ this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.not_contain_requested_attnet_syncnet_subnets });
323
414
  return false;
324
415
  }
325
416
  /**
@@ -405,4 +496,14 @@ function formatLibp2pDialError(e) {
405
496
  e.stack = undefined;
406
497
  }
407
498
  }
499
+ function exportENRToJSON(enr) {
500
+ if (enr === undefined) {
501
+ return undefined;
502
+ }
503
+ return {
504
+ ip4: enr.kvs.get("ip")?.toString(),
505
+ cgc: enr.kvs.get("cgc")?.toString(),
506
+ nodeId: enr.nodeId,
507
+ };
508
+ }
408
509
  //# 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 */