@@ -9,10 +9,12 @@ import (
9
9
"libp2p_port/internal/reqresp"
10
10
"libp2p_port/internal/utils"
11
11
"net"
12
+ "time"
12
13
13
14
"github.com/ethereum/go-ethereum/p2p/discover"
14
15
"github.com/ethereum/go-ethereum/p2p/enode"
15
16
"github.com/ethereum/go-ethereum/p2p/enr"
17
+ "github.com/libp2p/go-libp2p/core/network"
16
18
"github.com/libp2p/go-libp2p/core/peer"
17
19
"github.com/libp2p/go-libp2p/core/peerstore"
18
20
ma "github.com/multiformats/go-multiaddr"
@@ -71,30 +73,18 @@ func lookForPeers(iter enode.Iterator, listener *reqresp.Listener, forkUpdates c
71
73
currentForkDigest := <- forkUpdates
72
74
for iter .Next () {
73
75
node := iter .Node ()
76
+ time .Sleep (1 * time .Millisecond )
74
77
updateForkDigest (currentForkDigest [:], forkUpdates )
75
- if ! filterPeer (node , currentForkDigest [:]) {
76
- continue
77
- }
78
- var addrArr []string
79
- if node .TCP () != 0 {
80
- str := fmt .Sprintf ("/ip4/%s/tcp/%d" , node .IP (), node .TCP ())
81
- addrArr = append (addrArr , str )
82
- } else if node .UDP () != 0 {
83
- str := fmt .Sprintf ("/ip4/%s/udp/%d/quic" , node .IP (), node .UDP ())
84
- addrArr = append (addrArr , str )
85
- } else {
86
- continue
87
- }
88
- key , err := utils .ConvertToInterfacePubkey (node .Pubkey ())
89
- if err != nil {
78
+
79
+ if ! filterPeer (node , currentForkDigest [:], listener ) {
90
80
continue
91
81
}
92
- nodeID , err := peer . IDFromPublicKey ( key )
82
+ addrInfo , err := convertToAddrInfo ( node )
93
83
if err != nil {
94
84
continue
95
85
}
96
86
go func () {
97
- listener .AddPeer ([] byte ( nodeID ), addrArr , peerstore .PermanentAddrTTL )
87
+ listener .AddPeerWithAddrInfo ( * addrInfo , peerstore .PermanentAddrTTL )
98
88
}()
99
89
}
100
90
}
@@ -117,11 +107,11 @@ func updateForkDigest(currentForkDigest []byte, forkUpdates chan [4]byte) {
117
107
// connect to.
118
108
// 2. Peer has a valid IP and TCP port set in their enr.
119
109
// 3. ~Peer hasn't been marked as 'bad'~
120
- // 4. ~ Peer is not currently active or connected.~
110
+ // 4. Peer is not currently active or connected.
121
111
// 5. ~Peer is ready to receive incoming connections.~
122
112
// 6. Peer's fork digest in their ENR matches that of
123
113
// our localnodes.
124
- func filterPeer (node * enode.Node , currentForkDigest []byte ) bool {
114
+ func filterPeer (node * enode.Node , currentForkDigest []byte , listener * reqresp. Listener ) bool {
125
115
// Ignore nil node entries passed in.
126
116
if node == nil {
127
117
return false
@@ -135,6 +125,10 @@ func filterPeer(node *enode.Node, currentForkDigest []byte) bool {
135
125
if err := nodeENR .Load (enr .WithEntry ("tcp" , new (enr.TCP ))); err != nil {
136
126
return false
137
127
}
128
+ peerData , err := convertToAddrInfo (node )
129
+ if err != nil || listener .Host ().Network ().Connectedness (peerData .ID ) == network .Connected {
130
+ return false
131
+ }
138
132
// Decide whether or not to connect to peer that does not
139
133
// match the proper fork ENR data with our local node.
140
134
sszEncodedForkEntry := make ([]byte , 16 )
@@ -195,16 +189,16 @@ func updateEnr(localNode *enode.LocalNode, e proto_helpers.Enr) {
195
189
localNode .Set (enr .WithEntry ("syncnets" , e .Syncnets ))
196
190
}
197
191
198
- func convertToAddrInfo (node * enode.Node ) (* peer.AddrInfo , ma. Multiaddr , error ) {
192
+ func convertToAddrInfo (node * enode.Node ) (* peer.AddrInfo , error ) {
199
193
multiAddr , err := convertToSingleMultiAddr (node )
200
194
if err != nil {
201
- return nil , nil , err
195
+ return nil , err
202
196
}
203
197
info , err := peer .AddrInfoFromP2pAddr (multiAddr )
204
198
if err != nil {
205
- return nil , nil , err
199
+ return nil , err
206
200
}
207
- return info , multiAddr , nil
201
+ return info , nil
208
202
}
209
203
210
204
func convertToSingleMultiAddr (node * enode.Node ) (ma.Multiaddr , error ) {
0 commit comments