@lodestar/beacon-node 1.41.0-dev.8cdde189fa → 1.41.0-dev.92c37f2525

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 (34) hide show
  1. package/lib/chain/validation/attestation.d.ts.map +1 -1
  2. package/lib/chain/validation/attestation.js +7 -3
  3. package/lib/chain/validation/attestation.js.map +1 -1
  4. package/lib/network/discv5/utils.d.ts +1 -1
  5. package/lib/network/discv5/utils.d.ts.map +1 -1
  6. package/lib/network/discv5/utils.js +5 -4
  7. package/lib/network/discv5/utils.js.map +1 -1
  8. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  9. package/lib/network/gossip/gossipsub.js +9 -6
  10. package/lib/network/gossip/gossipsub.js.map +1 -1
  11. package/lib/network/libp2p/index.d.ts +1 -1
  12. package/lib/network/libp2p/index.d.ts.map +1 -1
  13. package/lib/network/libp2p/index.js +35 -17
  14. package/lib/network/libp2p/index.js.map +1 -1
  15. package/lib/network/metadata.d.ts +1 -0
  16. package/lib/network/metadata.d.ts.map +1 -1
  17. package/lib/network/metadata.js +1 -0
  18. package/lib/network/metadata.js.map +1 -1
  19. package/lib/network/options.d.ts +2 -0
  20. package/lib/network/options.d.ts.map +1 -1
  21. package/lib/network/options.js +3 -0
  22. package/lib/network/options.js.map +1 -1
  23. package/lib/network/peers/discover.d.ts +2 -0
  24. package/lib/network/peers/discover.d.ts.map +1 -1
  25. package/lib/network/peers/discover.js +41 -10
  26. package/lib/network/peers/discover.js.map +1 -1
  27. package/package.json +16 -15
  28. package/src/chain/validation/attestation.ts +7 -3
  29. package/src/network/discv5/utils.ts +5 -4
  30. package/src/network/gossip/gossipsub.ts +12 -7
  31. package/src/network/libp2p/index.ts +40 -18
  32. package/src/network/metadata.ts +1 -0
  33. package/src/network/options.ts +5 -1
  34. package/src/network/peers/discover.ts +46 -11
@@ -29,6 +29,7 @@ var DiscoveredPeerStatus;
29
29
  DiscoveredPeerStatus["cached"] = "cached";
30
30
  DiscoveredPeerStatus["dropped"] = "dropped";
31
31
  DiscoveredPeerStatus["no_multiaddrs"] = "no_multiaddrs";
32
+ DiscoveredPeerStatus["transport_incompatible"] = "transport_incompatible";
32
33
  DiscoveredPeerStatus["peer_cooling_down"] = "peer_cooling_down";
33
34
  })(DiscoveredPeerStatus || (DiscoveredPeerStatus = {}));
34
35
  export { NotDialReason };
@@ -57,6 +58,7 @@ export class PeerDiscovery {
57
58
  attnets: new Map(),
58
59
  syncnets: new Map(),
59
60
  };
61
+ transports;
60
62
  custodyGroupQueries;
61
63
  discv5StartMs;
62
64
  discv5FirstQueryDelayMs;
@@ -108,6 +110,18 @@ export class PeerDiscovery {
108
110
  }
109
111
  });
110
112
  }
113
+ // Transport tags vary by library: @libp2p/tcp uses '@libp2p/tcp', @chainsafe/libp2p-quic uses 'quic'
114
+ // Normalize to simple 'tcp' / 'quic' strings for matching
115
+ this.transports = libp2p.services.components.transportManager
116
+ .getTransports()
117
+ .map((t) => t[Symbol.toStringTag])
118
+ .map((tag) => {
119
+ if (tag?.includes("tcp"))
120
+ return "tcp";
121
+ if (tag?.includes("quic"))
122
+ return "quic";
123
+ return tag;
124
+ });
111
125
  }
112
126
  static async init(modules, opts) {
113
127
  const discv5 = await Discv5Worker.init({
@@ -269,9 +283,13 @@ export class PeerDiscovery {
269
283
  this.metrics?.discovery.discoveredStatus.inc({ status: DiscoveredPeerStatus.no_multiaddrs });
270
284
  return;
271
285
  }
286
+ // Select multiaddrs by protocol rather than index — libp2p discovery events
287
+ // don't guarantee ordering or number of addresses
288
+ const multiaddrTCP = multiaddrs.find((ma) => ma.toString().includes("/tcp/"));
289
+ const multiaddrQUIC = multiaddrs.find((ma) => ma.toString().includes("/quic-v1"));
272
290
  const attnets = zeroAttnets;
273
291
  const syncnets = zeroSyncnets;
274
- const status = this.handleDiscoveredPeer(id, multiaddrs[0], attnets, syncnets, undefined);
292
+ const status = this.handleDiscoveredPeer(id, multiaddrTCP, multiaddrQUIC, attnets, syncnets, undefined);
275
293
  this.logger.debug("Discovered peer via libp2p", { peer: prettyPrintPeerId(id), status });
276
294
  this.metrics?.discovery.discoveredStatus.inc({ status });
277
295
  };
@@ -283,10 +301,11 @@ export class PeerDiscovery {
283
301
  this.randomNodeQuery.count++;
284
302
  }
285
303
  const peerId = enr.peerId;
286
- // tcp multiaddr is known to be be present, checked inside the worker
304
+ // At least one transport is known to be present, checked inside the worker
287
305
  const multiaddrTCP = enr.getLocationMultiaddr(ENRKey.tcp);
288
- if (!multiaddrTCP) {
289
- this.logger.warn("Discv5 worker sent enr without tcp multiaddr", { enr: enr.encodeTxt() });
306
+ const multiaddrQUIC = enr.getLocationMultiaddr(ENRKey.quic);
307
+ if (!multiaddrTCP && !multiaddrQUIC) {
308
+ this.logger.warn("Discv5 worker sent enr without any transport multiaddr", { enr: enr.encodeTxt() });
290
309
  this.metrics?.discovery.discoveredStatus.inc({ status: DiscoveredPeerStatus.no_multiaddrs });
291
310
  return;
292
311
  }
@@ -307,7 +326,7 @@ export class PeerDiscovery {
307
326
  const attnets = attnetsBytes ? deserializeEnrSubnets(attnetsBytes, ATTESTATION_SUBNET_COUNT) : zeroAttnets;
308
327
  const syncnets = syncnetsBytes ? deserializeEnrSubnets(syncnetsBytes, SYNC_COMMITTEE_SUBNET_COUNT) : zeroSyncnets;
309
328
  const custodyGroupCount = custodyGroupCountBytes ? bytesToInt(custodyGroupCountBytes, "be") : undefined;
310
- const status = this.handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodyGroupCount);
329
+ const status = this.handleDiscoveredPeer(peerId, multiaddrTCP, multiaddrQUIC, attnets, syncnets, custodyGroupCount);
311
330
  this.logger.debug("Discovered peer via discv5", {
312
331
  peer: prettyPrintPeerId(peerId),
313
332
  status,
@@ -318,7 +337,7 @@ export class PeerDiscovery {
318
337
  /**
319
338
  * Progressively called by peer discovery as a result of any query.
320
339
  */
321
- handleDiscoveredPeer(peerId, multiaddrTCP, attnets, syncnets, custodySubnetCount) {
340
+ handleDiscoveredPeer(peerId, multiaddrTCP, multiaddrQUIC, attnets, syncnets, custodySubnetCount) {
322
341
  const nodeId = computeNodeId(peerId);
323
342
  this.logger.debug("handleDiscoveredPeer", { nodeId: toHex(nodeId), peerId: peerId.toString() });
324
343
  try {
@@ -337,6 +356,12 @@ export class PeerDiscovery {
337
356
  if (this.isPeerConnected(peerIdStr)) {
338
357
  return DiscoveredPeerStatus.already_connected;
339
358
  }
359
+ // ignore peers if they don't share any transport with us
360
+ const hasTcpMatch = this.transports.includes("tcp") && multiaddrTCP;
361
+ const hasQuicMatch = this.transports.includes("quic") && multiaddrQUIC;
362
+ if (!hasTcpMatch && !hasQuicMatch) {
363
+ return DiscoveredPeerStatus.transport_incompatible;
364
+ }
340
365
  // Ignore dialing peers
341
366
  if (this.libp2p.services.components.connectionManager
342
367
  .getDialQueue()
@@ -348,6 +373,7 @@ export class PeerDiscovery {
348
373
  const cachedPeer = {
349
374
  peerId,
350
375
  multiaddrTCP,
376
+ multiaddrQUIC,
351
377
  subnets: { attnets, syncnets },
352
378
  addedUnixMs: Date.now(),
353
379
  // for pre-fulu, custodyGroups is null
@@ -438,17 +464,22 @@ export class PeerDiscovery {
438
464
  // to be 0 instead of a negative value. The next heartbeat may increase this.peersToConnect again if some dials
439
465
  // are not successful.
440
466
  this.peersToConnect = Math.max(this.peersToConnect - 1, 0);
441
- const { peerId, multiaddrTCP } = cachedPeer;
467
+ const { peerId, multiaddrTCP, multiaddrQUIC } = cachedPeer;
442
468
  // Must add the multiaddrs array to the address book before dialing
443
469
  // https://github.com/libp2p/js-libp2p/blob/aec8e3d3bb1b245051b60c2a890550d262d5b062/src/index.js#L638
444
- const peer = await this.libp2p.peerStore.merge(peerId, { multiaddrs: [multiaddrTCP] });
470
+ const peer = await this.libp2p.peerStore.merge(peerId, {
471
+ multiaddrs: [multiaddrQUIC, multiaddrTCP].filter(Boolean),
472
+ });
445
473
  if (peer.addresses.length === 0) {
446
474
  this.metrics?.discovery.notDialReason.inc({ reason: NotDialReason.no_multiaddrs });
447
475
  return;
448
476
  }
449
- // Note: PeerDiscovery adds the multiaddrTCP beforehand
477
+ // Note: PeerDiscovery adds the multiaddrs beforehand
450
478
  const peerIdShort = prettyPrintPeerId(peerId);
451
- this.logger.debug("Dialing discovered peer", { peer: peerIdShort });
479
+ this.logger.debug("Dialing discovered peer", {
480
+ peer: peerIdShort,
481
+ addresses: peer.addresses.map((a) => a.multiaddr.toString()).join(", "),
482
+ });
452
483
  this.metrics?.discovery.dialAttempts.inc();
453
484
  const timer = this.metrics?.discovery.dialTime.startTimer();
454
485
  // Note: `libp2p.dial()` is what libp2p.connectionManager autoDial calls
@@ -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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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.41.0-dev.8cdde189fa",
14
+ "version": "1.41.0-dev.92c37f2525",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -113,6 +113,7 @@
113
113
  "@chainsafe/discv5": "^12.0.0",
114
114
  "@chainsafe/enr": "^6.0.0",
115
115
  "@chainsafe/libp2p-noise": "^17.0.0",
116
+ "@chainsafe/libp2p-quic": "^2.0.0",
116
117
  "@chainsafe/persistent-merkle-tree": "^1.2.1",
117
118
  "@chainsafe/prometheus-gc-stats": "^1.0.0",
118
119
  "@chainsafe/pubkey-index-map": "^3.0.0",
@@ -134,18 +135,18 @@
134
135
  "@libp2p/peer-id": "^6.0.4",
135
136
  "@libp2p/prometheus-metrics": "^5.0.13",
136
137
  "@libp2p/tcp": "^11.0.12",
137
- "@lodestar/api": "^1.41.0-dev.8cdde189fa",
138
- "@lodestar/config": "^1.41.0-dev.8cdde189fa",
139
- "@lodestar/db": "^1.41.0-dev.8cdde189fa",
140
- "@lodestar/fork-choice": "^1.41.0-dev.8cdde189fa",
141
- "@lodestar/light-client": "^1.41.0-dev.8cdde189fa",
142
- "@lodestar/logger": "^1.41.0-dev.8cdde189fa",
143
- "@lodestar/params": "^1.41.0-dev.8cdde189fa",
144
- "@lodestar/reqresp": "^1.41.0-dev.8cdde189fa",
145
- "@lodestar/state-transition": "^1.41.0-dev.8cdde189fa",
146
- "@lodestar/types": "^1.41.0-dev.8cdde189fa",
147
- "@lodestar/utils": "^1.41.0-dev.8cdde189fa",
148
- "@lodestar/validator": "^1.41.0-dev.8cdde189fa",
138
+ "@lodestar/api": "^1.41.0-dev.92c37f2525",
139
+ "@lodestar/config": "^1.41.0-dev.92c37f2525",
140
+ "@lodestar/db": "^1.41.0-dev.92c37f2525",
141
+ "@lodestar/fork-choice": "^1.41.0-dev.92c37f2525",
142
+ "@lodestar/light-client": "^1.41.0-dev.92c37f2525",
143
+ "@lodestar/logger": "^1.41.0-dev.92c37f2525",
144
+ "@lodestar/params": "^1.41.0-dev.92c37f2525",
145
+ "@lodestar/reqresp": "^1.41.0-dev.92c37f2525",
146
+ "@lodestar/state-transition": "^1.41.0-dev.92c37f2525",
147
+ "@lodestar/types": "^1.41.0-dev.92c37f2525",
148
+ "@lodestar/utils": "^1.41.0-dev.92c37f2525",
149
+ "@lodestar/validator": "^1.41.0-dev.92c37f2525",
149
150
  "@multiformats/multiaddr": "^13.0.1",
150
151
  "datastore-core": "^11.0.2",
151
152
  "datastore-fs": "^11.0.2",
@@ -168,7 +169,7 @@
168
169
  "@libp2p/interface-internal": "^3.0.12",
169
170
  "@libp2p/logger": "^6.2.2",
170
171
  "@libp2p/utils": "^7.0.12",
171
- "@lodestar/spec-test-util": "^1.41.0-dev.8cdde189fa",
172
+ "@lodestar/spec-test-util": "^1.41.0-dev.92c37f2525",
172
173
  "@types/js-yaml": "^4.0.5",
173
174
  "@types/qs": "^6.9.7",
174
175
  "@types/tmp": "^0.2.3",
@@ -185,5 +186,5 @@
185
186
  "beacon",
186
187
  "blockchain"
187
188
  ],
188
- "gitHead": "4aba7738e00c936cf8c55778c15debaafe702a16"
189
+ "gitHead": "c5143366f0680a6e57072a02762eb8ee6d31a70b"
189
190
  }
@@ -604,10 +604,14 @@ export function verifyPropagationSlotRange(fork: ForkName, chain: IBeaconChain,
604
604
  //
605
605
  // see: https://github.com/ethereum/consensus-specs/pull/3360
606
606
  if (ForkSeq[fork] < ForkSeq.deneb) {
607
+ const currentSlot = chain.clock.currentSlot;
608
+ const withinPastDisparity = currentSlot > 0 && chain.clock.isCurrentSlotGivenGossipDisparity(currentSlot - 1);
607
609
  const earliestPermissibleSlot = Math.max(
608
- // slot with past tolerance of MAXIMUM_GOSSIP_CLOCK_DISPARITY
609
- chain.clock.slotWithPastTolerance(chain.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY / 1000) -
610
- chain.config.ATTESTATION_PROPAGATION_SLOT_RANGE,
610
+ // Pre-Deneb propagation is time-bounded: an attestation remains valid at the exact old
611
+ // boundary `compute_time_at_slot(slot + range + 1) + MAXIMUM_GOSSIP_CLOCK_DISPARITY`.
612
+ // Model that boundary by extending the lower slot bound by one additional slot only while
613
+ // the clock still considers the previous slot current given gossip disparity.
614
+ currentSlot - chain.config.ATTESTATION_PROPAGATION_SLOT_RANGE - (withinPastDisparity ? 1 : 0),
611
615
  0
612
616
  );
613
617
 
@@ -4,7 +4,7 @@ import {IClock} from "../../util/clock.js";
4
4
  import {ENRKey} from "../metadata.js";
5
5
 
6
6
  export enum ENRRelevance {
7
- no_tcp = "no_tcp",
7
+ no_transport = "no_transport",
8
8
  no_eth2 = "no_eth2",
9
9
  // biome-ignore lint/style/useNamingConvention: Need to use the this name for network convention
10
10
  unknown_forkDigest = "unknown_forkDigest",
@@ -13,10 +13,11 @@ export enum ENRRelevance {
13
13
  }
14
14
 
15
15
  export function enrRelevance(enr: ENR, config: BeaconConfig, clock: IClock): ENRRelevance {
16
- // We are not interested in peers that don't advertise their tcp addr
16
+ // We are not interested in peers that don't advertise at least one transport (tcp or quic)
17
17
  const multiaddrTCP = enr.getLocationMultiaddr(ENRKey.tcp);
18
- if (!multiaddrTCP) {
19
- return ENRRelevance.no_tcp;
18
+ const multiaddrQUIC = enr.getLocationMultiaddr(ENRKey.quic);
19
+ if (!multiaddrTCP && !multiaddrQUIC) {
20
+ return ENRRelevance.no_transport;
20
21
  }
21
22
 
22
23
  // Check if the ENR.eth2 field matches and is of interest
@@ -11,7 +11,7 @@ import type {PeerScoreParams, PeerScoreStatsDump} from "@libp2p/gossipsub/score"
11
11
  import type {AddrInfo, PublishOpts, TopicStr} from "@libp2p/gossipsub/types";
12
12
  import type {PeerId} from "@libp2p/interface";
13
13
  import {peerIdFromString} from "@libp2p/peer-id";
14
- import {multiaddr} from "@multiformats/multiaddr";
14
+ import {type Multiaddr, multiaddr} from "@multiformats/multiaddr";
15
15
  import {ENR} from "@chainsafe/enr";
16
16
  import {routes} from "@lodestar/api";
17
17
  import {BeaconConfig, ForkBoundary} from "@lodestar/config";
@@ -537,19 +537,24 @@ export function parseDirectPeers(directPeerStrs: routes.lodestar.DirectPeer[], l
537
537
  const enr = ENR.decodeTxt(peerStr);
538
538
  const peerId = enr.peerId;
539
539
 
540
- // Get TCP multiaddr from ENR
541
- const multiaddrTCP = enr.getLocationMultiaddr("tcp");
542
- if (!multiaddrTCP) {
543
- logger.warn("ENR does not contain TCP multiaddr", {enr: peerStr});
540
+ // Get all available transport multiaddrs from ENR
541
+ const addrs = [enr.getLocationMultiaddr("quic"), enr.getLocationMultiaddr("tcp")].filter(
542
+ (a): a is Multiaddr => a != null
543
+ );
544
+ if (addrs.length === 0) {
545
+ logger.warn("ENR does not contain any transport multiaddr", {enr: peerStr});
544
546
  continue;
545
547
  }
546
548
 
547
549
  directPeers.push({
548
550
  id: peerId,
549
- addrs: [multiaddrTCP],
551
+ addrs,
550
552
  });
551
553
 
552
- logger.info("Added direct peer from ENR", {peerId: peerId.toString(), addr: multiaddrTCP.toString()});
554
+ logger.info("Added direct peer from ENR", {
555
+ peerId: peerId.toString(),
556
+ addrs: addrs.map((a) => a.toString()).join(", "),
557
+ });
553
558
  } catch (e) {
554
559
  logger.warn("Failed to parse direct peer ENR", {enr: peerStr}, e as Error);
555
560
  }
@@ -5,11 +5,12 @@ import {mdns} from "@libp2p/mdns";
5
5
  import {mplex} from "@libp2p/mplex";
6
6
  import {prometheusMetrics} from "@libp2p/prometheus-metrics";
7
7
  import {tcp} from "@libp2p/tcp";
8
- import {createLibp2p} from "libp2p";
8
+ import {Libp2pInit, createLibp2p} from "libp2p";
9
9
  import {Registry} from "prom-client";
10
10
  import {ENR} from "@chainsafe/enr";
11
11
  import {noise} from "@chainsafe/libp2p-noise";
12
12
  import {asCrypto, defaultCrypto} from "@chainsafe/libp2p-noise/crypto";
13
+ import {quic} from "@chainsafe/libp2p-quic";
13
14
  import {Libp2p, LodestarComponents} from "../interface.js";
14
15
  import {NetworkOptions, defaultNetworkOptions} from "../options.js";
15
16
  import {Eth2PeerDataStore} from "../peers/datastore.js";
@@ -21,11 +22,14 @@ export type NodeJsLibp2pOpts = {
21
22
  metricsRegistry?: Registry;
22
23
  };
23
24
 
24
- export async function getDiscv5Multiaddrs(bootEnrs: string[]): Promise<string[]> {
25
+ export async function getDiscv5Multiaddrs(bootEnrs: string[], quicEnabled?: boolean): Promise<string[]> {
25
26
  const bootMultiaddrs = [];
26
27
  for (const enrStr of bootEnrs) {
27
28
  const enr = ENR.decodeTxt(enrStr);
28
- const multiaddrWithPeerId = (await enr.getFullMultiaddr("tcp"))?.toString();
29
+ // Prefer QUIC over TCP when available
30
+ const quicMultiaddr = quicEnabled ? (await enr.getFullMultiaddr("quic"))?.toString() : undefined;
31
+ const tcpMultiaddr = (await enr.getFullMultiaddr("tcp"))?.toString();
32
+ const multiaddrWithPeerId = quicMultiaddr ?? tcpMultiaddr;
29
33
  if (multiaddrWithPeerId) {
30
34
  bootMultiaddrs.push(multiaddrWithPeerId);
31
35
  }
@@ -53,7 +57,9 @@ export async function createNodeJsLibp2p(
53
57
  const bootMultiaddrs = [
54
58
  ...(networkOpts.bootMultiaddrs ?? defaultNetworkOptions.bootMultiaddrs ?? []),
55
59
  // Append discv5.bootEnrs to bootMultiaddrs if requested
56
- ...(networkOpts.connectToDiscv5Bootnodes ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? []) : []),
60
+ ...(networkOpts.connectToDiscv5Bootnodes
61
+ ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? [], networkOpts.quic)
62
+ : []),
57
63
  ];
58
64
 
59
65
  if ((bootMultiaddrs.length ?? 0) > 0) {
@@ -64,6 +70,35 @@ export async function createNodeJsLibp2p(
64
70
  peerDiscovery.push(mdns());
65
71
  }
66
72
  }
73
+ const transports: Libp2pInit["transports"] = [];
74
+ if (networkOpts.tcp ?? true) {
75
+ transports.unshift(
76
+ tcp({
77
+ // Reject connections when the server's connection count gets high
78
+ maxConnections: networkOpts.maxPeers,
79
+ // socket option: the maximum length of the queue of pending connections
80
+ // https://nodejs.org/dist/latest-v18.x/docs/api/net.html#serverlisten
81
+ // it's not safe if we increase this number
82
+ backlog: 5,
83
+ closeServerOnMaxConnections: {
84
+ closeAbove: networkOpts.maxPeers ?? Infinity,
85
+ listenBelow: networkOpts.maxPeers ?? Infinity,
86
+ },
87
+ })
88
+ );
89
+ }
90
+ if (networkOpts.quic) {
91
+ transports.unshift(
92
+ quic({
93
+ handshakeTimeout: 5_000,
94
+ maxIdleTimeout: 10_000,
95
+ keepAliveInterval: 5_000,
96
+ maxConcurrentStreamLimit: 256,
97
+ maxStreamData: 10_000_000,
98
+ maxConnectionData: 15_000_000,
99
+ })
100
+ );
101
+ }
67
102
 
68
103
  const noiseCrypto = {
69
104
  ...defaultCrypto,
@@ -85,20 +120,7 @@ export async function createNodeJsLibp2p(
85
120
  announce: [],
86
121
  },
87
122
  connectionEncrypters: [noise({crypto: noiseCrypto})],
88
- // Reject connections when the server's connection count gets high
89
- transports: [
90
- tcp({
91
- maxConnections: networkOpts.maxPeers,
92
- // socket option: the maximum length of the queue of pending connections
93
- // https://nodejs.org/dist/latest-v18.x/docs/api/net.html#serverlisten
94
- // it's not safe if we increase this number
95
- backlog: 5,
96
- closeServerOnMaxConnections: {
97
- closeAbove: networkOpts.maxPeers ?? Infinity,
98
- listenBelow: networkOpts.maxPeers ?? Infinity,
99
- },
100
- }),
101
- ],
123
+ transports,
102
124
  streamMuxers: [mplex({disconnectThreshold})],
103
125
  peerDiscovery,
104
126
  metrics: nodeJsLibp2pOpts.metrics
@@ -11,6 +11,7 @@ import {NetworkConfig} from "./networkConfig.js";
11
11
 
12
12
  export enum ENRKey {
13
13
  tcp = "tcp",
14
+ quic = "quic",
14
15
  eth2 = "eth2",
15
16
  attnets = "attnets",
16
17
  syncnets = "syncnets",
@@ -29,7 +29,6 @@ export interface NetworkOptions
29
29
  useWorker?: boolean;
30
30
  maxYoungGenerationSizeMb?: number;
31
31
  disableLightClientServer?: boolean;
32
-
33
32
  /**
34
33
  * During E2E tests observe a lot of following `missing stream`:
35
34
  *
@@ -48,11 +47,14 @@ export interface NetworkOptions
48
47
  * We need to increase this only for the testing purpose
49
48
  */
50
49
  disconnectThreshold?: number;
50
+ quic?: boolean;
51
+ tcp?: boolean;
51
52
  }
52
53
 
53
54
  export const defaultNetworkOptions: NetworkOptions = {
54
55
  maxPeers: 210, // Allow some room above targetPeers for new inbound peers
55
56
  targetPeers: 200,
57
+ // In CLI usage this is typically overridden; when unset it serves as a fallback default (e.g. programmatic usage/tests)
56
58
  localMultiaddrs: ["/ip4/0.0.0.0/tcp/9000", "/ip6/::/tcp/9000"],
57
59
  bootMultiaddrs: [],
58
60
  /** disabled by default */
@@ -67,6 +69,8 @@ export const defaultNetworkOptions: NetworkOptions = {
67
69
  slotsToSubscribeBeforeAggregatorDuty: 2,
68
70
  // This will enable the light client server by default
69
71
  disableLightClientServer: false,
72
+ quic: false,
73
+ tcp: true,
70
74
  // specific option for fulu
71
75
  // - this is the same to TARGET_SUBNET_PEERS
72
76
  // - for fusaka-devnets, we have 25-30 peers per subnet