Skip to content

Commit 1cdb209

Browse files
committed
fix: improve p2p connectivity
1 parent 97b4c21 commit 1cdb209

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

modules/p2p/libp2p.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"net"
87
"strconv"
98
"testing"
109
"time"
@@ -182,7 +181,16 @@ func (p2pServer *P2PServer) Init() error {
182181
if p2pServer.host != nil {
183182
for _, peer := range p2pServer.host.Network().Peers() {
184183
addrInfo := p2pServer.host.Peerstore().PeerInfo(peer)
185-
c <- addrInfo
184+
var goodPeer bool
185+
for _, a := range addrInfo.Addrs {
186+
if isPublicAddr(a) {
187+
goodPeer = true
188+
}
189+
}
190+
191+
if goodPeer {
192+
c <- addrInfo
193+
}
186194
}
187195
}
188196

@@ -192,6 +200,7 @@ func (p2pServer *P2PServer) Init() error {
192200
idht, err = kadDht.New(context.Background(), h, kadOptions...)
193201
return idht, err
194202
}),
203+
libp2p.AddrsFactory(p2pServer.addrFactory),
195204
}
196205

197206
p2p, err := libp2p.New(options...)
@@ -398,6 +407,16 @@ func (p2pServer *P2PServer) SetStreamHandlerMatch(pid protocol.ID, matcher func(
398407
p2pServer.host.SetStreamHandlerMatch(pid, matcher, handler)
399408
}
400409

410+
func (p2p *P2PServer) addrFactory(addrs []multiaddr.Multiaddr) []multiaddr.Multiaddr {
411+
filteredAddrs := make([]multiaddr.Multiaddr, 0)
412+
for _, addr := range addrs {
413+
if isPublicAddr(addr) || isCircuitAddr(addr) {
414+
filteredAddrs = append(filteredAddrs, addr)
415+
}
416+
}
417+
return filteredAddrs
418+
}
419+
401420
func (p2p *P2PServer) connectRegisteredPeers() {
402421
witnesses, _ := p2p.witnessDb.GetLastestWitnesses()
403422

@@ -420,17 +439,14 @@ func (p2p *P2PServer) connectRegisteredPeers() {
420439
//Select
421440
for _, peer := range witness.PeerAddrs {
422441
m, _ := multiaddr.NewMultiaddr(peer)
423-
_, err := m.ValueForProtocol(multiaddr.P_CIRCUIT)
424442

425443
// fmt.Println("circuitAddress", circuitAddress, err)
426-
if err == nil {
444+
if isCircuitAddr(m) {
427445
selectedAddr = append(selectedAddr, m.Encapsulate(mp))
428446
continue
429447
}
430-
ipv4Address, err := m.ValueForProtocol(multiaddr.P_IP4)
431448

432-
ip := net.ParseIP(ipv4Address)
433-
if !ip.IsPrivate() && err != nil {
449+
if isPublicAddr(m) {
434450
selectedAddr = append(selectedAddr, m.Encapsulate(mp))
435451
continue
436452
}

modules/p2p/utils.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package libp2p
22

33
import (
4+
"net"
45
"vsc-node/modules/common/common_types"
56

67
"github.com/multiformats/go-multiaddr"
@@ -24,3 +25,16 @@ func (pg *peerGetter) GetPeerAddrs() []multiaddr.Multiaddr {
2425
}
2526

2627
var _ common_types.PeerInfoGetter = &peerGetter{}
28+
29+
func isPublicAddr(addr multiaddr.Multiaddr) bool {
30+
ipv4Address, err := addr.ValueForProtocol(multiaddr.P_IP4)
31+
32+
ip := net.ParseIP(ipv4Address)
33+
return !ip.IsPrivate() && !ip.IsLoopback() && !ip.IsLinkLocalMulticast() && !ip.IsLinkLocalUnicast() && err == nil
34+
}
35+
36+
func isCircuitAddr(addr multiaddr.Multiaddr) bool {
37+
_, err := addr.ValueForProtocol(multiaddr.P_CIRCUIT)
38+
39+
return err == nil
40+
}

0 commit comments

Comments
 (0)