@@ -3,10 +3,15 @@ package floodsubpeerdiscovery
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "strings"
6
7
"time"
7
8
8
9
pubsub "github.com/libp2p/go-libp2p-pubsub"
10
+ "github.com/libp2p/go-libp2p/core/crypto"
11
+ "github.com/libp2p/go-libp2p/core/crypto/pb"
12
+ "github.com/libp2p/go-libp2p/core/peer"
9
13
"github.com/libp2p/go-libp2p/core/peerstore"
14
+ "github.com/multiformats/go-multiaddr"
10
15
"github.com/rs/zerolog/log"
11
16
"google.golang.org/protobuf/proto"
12
17
@@ -141,6 +146,35 @@ func (pd *FloodsubPeerDiscovery) ReadLoop(ctx context.Context, subs *pubsub.Subs
141
146
continue
142
147
}
143
148
144
- log .Info ().Msgf ("found a floodsub discovery message | %v" , err )
149
+ var peerMsg Peer
150
+ if err := proto .Unmarshal (msg .GetData (), & peerMsg ); err != nil {
151
+ log .Warn ().Msgf ("failed to unmarshal the floodsub peer message | %v" , err )
152
+ continue
153
+ }
154
+
155
+ pubKey , err := crypto.PubKeyUnmarshallers [pb.KeyType_Ed25519 ](peerMsg .PublicKey )
156
+ if err != nil {
157
+ log .Warn ().Msgf ("failed to get pub key from floodsub message | %v" , err )
158
+ continue
159
+ }
160
+
161
+ pID , err := peer .IDFromPublicKey (pubKey )
162
+ if err != nil {
163
+ log .Warn ().Msgf ("failed to get peer id from floodsub message | %v" , err )
164
+ continue
165
+ }
166
+
167
+ multiAddresses := make ([]string , 0 )
168
+ for _ , addr := range peerMsg .Addrs {
169
+ mulAddr , err := multiaddr .NewMultiaddrBytes (addr )
170
+ if err != nil {
171
+ log .Warn ().Msgf ("failed to get multi address from floodsub message | %v" , err )
172
+ continue
173
+ }
174
+ multiAddresses = append (multiAddresses , mulAddr .String ())
175
+ }
176
+
177
+ log .Info ().Msgf ("found a floodsub discovery message | peer id: %s | multi addresses: [%s]" ,
178
+ pID .String (), strings .Join (multiAddresses , ", " ))
145
179
}
146
180
}
0 commit comments