9
9
"github.com/ethereum/go-ethereum/p2p/enode"
10
10
"github.com/ethereum/go-ethereum/p2p/enr"
11
11
"github.com/libp2p/go-libp2p/core/event"
12
+ "github.com/multiformats/go-multiaddr"
12
13
ma "github.com/multiformats/go-multiaddr"
13
14
"github.com/waku-org/go-waku/waku/v2/protocol"
14
15
wenr "github.com/waku-org/go-waku/waku/v2/protocol/enr"
@@ -20,7 +21,6 @@ func (w *WakuNode) updateLocalNode(localnode *enode.LocalNode, multiaddrs []ma.M
20
21
var options []wenr.ENROption
21
22
options = append (options , wenr .WithUDPPort (udpPort ))
22
23
options = append (options , wenr .WithWakuBitfield (wakuFlags ))
23
- options = append (options , wenr .WithMultiaddress (multiaddrs ... ))
24
24
25
25
if advertiseAddr != nil {
26
26
// An advertised address disables libp2p address updates
@@ -36,32 +36,38 @@ func (w *WakuNode) updateLocalNode(localnode *enode.LocalNode, multiaddrs []ma.M
36
36
// Using a static ip will disable endpoint prediction.
37
37
options = append (options , wenr .WithIP (ipAddr ))
38
38
} else {
39
- // We received a libp2p address update, but we should still
40
- // allow discv5 to update the enr record. We set the localnode
41
- // keys manually. It's possible that the ENR record might get
42
- // updated automatically
43
- ip4 := ipAddr .IP .To4 ()
44
- ip6 := ipAddr .IP .To16 ()
45
- if ip4 != nil && ! ip4 .IsUnspecified () {
46
- localnode .SetFallbackIP (ip4 )
47
- localnode .Set (enr .IPv4 (ip4 ))
48
- localnode .Set (enr .TCP (uint16 (ipAddr .Port )))
49
- } else {
50
- localnode .Delete (enr.IPv4 {})
51
- localnode .Delete (enr .TCP (0 ))
52
- localnode .SetFallbackIP (net.IP {127 , 0 , 0 , 1 })
53
- }
39
+ if ipAddr .Port != 0 {
40
+ // We received a libp2p address update, but we should still
41
+ // allow discv5 to update the enr record. We set the localnode
42
+ // keys manually. It's possible that the ENR record might get
43
+ // updated automatically
44
+ ip4 := ipAddr .IP .To4 ()
45
+ ip6 := ipAddr .IP .To16 ()
46
+ if ip4 != nil && ! ip4 .IsUnspecified () {
47
+ localnode .SetFallbackIP (ip4 )
48
+ localnode .Set (enr .IPv4 (ip4 ))
49
+ localnode .Set (enr .TCP (uint16 (ipAddr .Port )))
50
+ } else {
51
+ localnode .Delete (enr.IPv4 {})
52
+ localnode .Delete (enr .TCP (0 ))
53
+ localnode .SetFallbackIP (net.IP {127 , 0 , 0 , 1 })
54
+ }
54
55
55
- if ip4 == nil && ip6 != nil && ! ip6 .IsUnspecified () {
56
- localnode .Set (enr .IPv6 (ip6 ))
57
- localnode .Set (enr .TCP6 (ipAddr .Port ))
58
- } else {
59
- localnode .Delete (enr.IPv6 {})
60
- localnode .Delete (enr .TCP6 (0 ))
56
+ if ip4 == nil && ip6 != nil && ! ip6 .IsUnspecified () {
57
+ localnode .Set (enr .IPv6 (ip6 ))
58
+ localnode .Set (enr .TCP6 (ipAddr .Port ))
59
+ } else {
60
+ localnode .Delete (enr.IPv6 {})
61
+ localnode .Delete (enr .TCP6 (0 ))
62
+ }
61
63
}
62
64
}
63
65
64
- return wenr .Update (localnode , options ... )
66
+ // Writing the IP + Port has priority over writting the multiaddress which might fail or not
67
+ // depending on the enr having space
68
+ options = append (options , wenr .WithMultiaddress (multiaddrs ... ))
69
+
70
+ return wenr .Update (w .log , localnode , options ... )
65
71
}
66
72
67
73
func isPrivate (addr * net.TCPAddr ) bool {
@@ -228,8 +234,28 @@ func selectCircuitRelayListenAddresses(addresses []ma.Multiaddr) ([]ma.Multiaddr
228
234
return result , nil
229
235
}
230
236
231
- func (w * WakuNode ) getENRAddresses (addrs []ma.Multiaddr ) (extAddr * net.TCPAddr , multiaddr []ma.Multiaddr , err error ) {
237
+ func filter0Port (addresses []ma.Multiaddr ) ([]ma.Multiaddr , error ) {
238
+ var result []ma.Multiaddr
239
+ for _ , addr := range addresses {
240
+ portStr , err := addr .ValueForProtocol (ma .P_TCP )
241
+ if err != nil && ! errors .Is (err , multiaddr .ErrProtocolNotFound ) {
242
+ return nil , err
243
+ }
232
244
245
+ port , err := strconv .Atoi (portStr )
246
+ if err != nil {
247
+ return nil , err
248
+ }
249
+
250
+ if port != 0 {
251
+ result = append (result , addr )
252
+ }
253
+ }
254
+
255
+ return result , nil
256
+ }
257
+
258
+ func (w * WakuNode ) getENRAddresses (addrs []ma.Multiaddr ) (extAddr * net.TCPAddr , multiaddr []ma.Multiaddr , err error ) {
233
259
extAddr , err = selectMostExternalAddress (addrs )
234
260
if err != nil {
235
261
return nil , nil , err
@@ -253,6 +279,11 @@ func (w *WakuNode) getENRAddresses(addrs []ma.Multiaddr) (extAddr *net.TCPAddr,
253
279
multiaddr = append (multiaddr , wssAddrs ... )
254
280
}
255
281
282
+ multiaddr , err = filter0Port (multiaddr )
283
+ if err != nil {
284
+ return nil , nil , err
285
+ }
286
+
256
287
return
257
288
}
258
289
@@ -323,7 +354,7 @@ func (w *WakuNode) watchTopicShards(ctx context.Context) error {
323
354
w .log .Warn ("A mix of named and static shards found. ENR shard will contain only the following shards" , zap .Any ("shards" , rs [0 ]))
324
355
}
325
356
326
- err = wenr .Update (w .localNode , wenr .WithWakuRelaySharding (rs [0 ]))
357
+ err = wenr .Update (w .log , w . localNode , wenr .WithWakuRelaySharding (rs [0 ]))
327
358
if err != nil {
328
359
w .log .Warn ("could not set ENR shard info" , zap .Error (err ))
329
360
continue
0 commit comments