@@ -1836,7 +1836,7 @@ proc new(T: type Eth2Node,
18361836 enrForkId: ENRForkID , discoveryForkId: ENRForkID ,
18371837 forkDigests: ref ForkDigests , getBeaconTime: GetBeaconTimeFn ,
18381838 switch: Switch , pubsub: GossipSub ,
1839- ip: Opt [IpAddress ], tcpPort, udpPort: Opt [Port ],
1839+ ip: Opt [IpAddress ], tcpPort, quicPort, udpPort: Opt [Port ],
18401840 privKey: keys.PrivateKey , discovery: bool ,
18411841 directPeers: DirectPeers , announcedAddresses: openArray [MultiAddress ],
18421842 rng: ref HmacDrbgContext ): T =
@@ -1871,7 +1871,7 @@ proc new(T: type Eth2Node,
18711871 forkDigests: forkDigests,
18721872 getBeaconTime: getBeaconTime,
18731873 discovery: Eth2DiscoveryProtocol .new (
1874- config, ip, tcpPort, udpPort, privKey,
1874+ config, ip, tcpPort, quicPort, udpPort, privKey,
18751875 {
18761876 enrForkIdField: SSZ .encode (enrForkId),
18771877 enrAttestationSubnetsField: SSZ .encode (metadata.attnets)
@@ -2231,6 +2231,9 @@ func asEthKey*(key: PrivateKey): keys.PrivateKey =
22312231template tcpEndPoint (address, port): auto =
22322232 MultiAddress .init (address, tcpProtocol, port)
22332233
2234+ template quicEndPoint (address, port): auto =
2235+ MultiAddress .init (address, udpProtocol, port) & MultiAddress .init (" /quic-v1" )
2236+
22342237func initNetKeys (privKey: PrivateKey ): NetKeyPair =
22352238 let pubKey = privKey.getPublicKey ().expect (" working public key from random" )
22362239 NetKeyPair (seckey: privKey, pubkey: pubKey)
@@ -2327,7 +2330,7 @@ func gossipId(
23272330proc newBeaconSwitch (
23282331 config: BeaconNodeConf | LightClientConf ,
23292332 seckey: PrivateKey ,
2330- address: MultiAddress ,
2333+ addresses: seq [ MultiAddress ] ,
23312334 rng: ref HmacDrbgContext ,
23322335): Result [Switch , string ] =
23332336 let service: Service = WildcardAddressResolverService .new ()
@@ -2337,12 +2340,13 @@ proc newBeaconSwitch(
23372340 try :
23382341 ok sb
23392342 .withPrivateKey (seckey)
2340- .withAddress (address )
2343+ .withAddresses (addresses )
23412344 .withRng (rng)
23422345 .withNoise ()
2343- .withMplex (chronos. minutes ( 5 ), chronos. minutes ( 5 ) )
2346+ .withQuicTransport ( )
23442347 .withMaxConnections (config.maxPeers)
23452348 .withAgentVersion (config.agentString)
2349+ .withMplex (chronos.minutes (5 ), chronos.minutes (5 ))
23462350 .withTcpTransport ({ServerFlags .ReuseAddr })
23472351 .withServices (@ [service])
23482352 .build ()
@@ -2369,9 +2373,11 @@ proc createEth2Node*(
23692373 else :
23702374 getAutoAddress (Port (0 )).toIpAddress ()
23712375
2376+ # TODO : setupAddress only receives a single tcpPort and udpPort,
2377+ # We need a way to pass the quic port
23722378 (extIp, extTcpPort, extUdpPort) =
23732379 setupAddress (config.nat, listenAddress, config.tcpPort,
2374- config.udpPort, clientId)
2380+ config.quicPort, config. udpPort, clientId)
23752381
23762382 directPeers = block :
23772383 var res: DirectPeers
@@ -2396,10 +2402,16 @@ proc createEth2Node*(
23962402 info " Adding privileged direct peer" , peerId, address
23972403 res
23982404
2399- hostAddress = tcpEndPoint (listenAddress, config.tcpPort)
2400- announcedAddresses =
2401- if extIp.isNone () or extTcpPort.isNone (): @ []
2402- else : @ [tcpEndPoint (extIp.get (), extTcpPort.get ())]
2405+ hostAddress = @ [
2406+ quicEndpoint (listenAddress, config.quicUdpPort),
2407+ tcpEndPoint (listenAddress, config.tcpPort)
2408+ ]
2409+
2410+ var announcedAddresses = newSeq [Multiaddr ]()
2411+ if not (extIp.isNone () or extTcpPort.isNone ()):
2412+ announcedAddresses.add tcpEndPoint (extIp.get (), extTcpPort.get ())
2413+ if not (extIp.isNone () or extQuicUdpPort.isNone ()):
2414+ announcedAddresses.add quicEndpoint (extIp.get (), extQuicUdpPort.get ())
24032415
24042416 debug " Initializing networking" , hostAddress,
24052417 network_public_key = netKeys.pubkey,
0 commit comments