@cryptotaxi247 / kubo / commits / 5d468e23e

chore: deprecate go-ipfs-addr

Steven Allen committed May 31, 2019 at 17:06 UTC 5d468e23ea315811018c3af46e0b29f4355f7d37
10 files changed +176 -260
core/bootstrap/bootstrap.go
-24
@@ -9,7 +9,6 @@ import (
9 "sync"
10 "time"
11
12 - config "github.com/ipfs/go-ipfs-config"
12 logging "github.com/ipfs/go-log"
13 "github.com/jbenet/goprocess"
14 "github.com/jbenet/goprocess/context"
@@ -216,26 +215,3 @@ func randomSubsetOfPeers(in []peer.AddrInfo, max int) []peer.AddrInfo {
215 }
216 return out
217 }
219 -
220 -type Peers []config.BootstrapPeer
221 -
222 -func (bpeers Peers) ToPeerInfos() []peer.AddrInfo {
223 - pinfos := make(map[peer.ID]*peer.AddrInfo)
224 - for _, bootstrap := range bpeers {
225 - pinfo, ok := pinfos[bootstrap.ID()]
226 - if !ok {
227 - pinfo = new(peer.AddrInfo)
228 - pinfos[bootstrap.ID()] = pinfo
229 - pinfo.ID = bootstrap.ID()
230 - }
231 -
232 - pinfo.Addrs = append(pinfo.Addrs, bootstrap.Transport())
233 - }
234 -
235 - var peers []peer.AddrInfo
236 - for _, pinfo := range pinfos {
237 - peers = append(peers, *pinfo)
238 - }
239 -
240 - return peers
241 -}
core/bootstrap/bootstrap_test.go
-31
@@ -1,10 +1,8 @@
1 package bootstrap
2
3 import (
4 - "fmt"
4 "testing"
5
7 - config "github.com/ipfs/go-ipfs-config"
6 "github.com/libp2p/go-libp2p-core/peer"
7 "github.com/libp2p/go-libp2p-core/test"
8 )
@@ -25,32 +23,3 @@ func TestSubsetWhenMaxIsGreaterThanLengthOfSlice(t *testing.T) {
23 t.Fail()
24 }
25 }
28 -
29 -func TestMultipleAddrsPerPeer(t *testing.T) {
30 - var bsps []config.BootstrapPeer
31 - for i := 0; i < 10; i++ {
32 - pid, err := test.RandPeerID()
33 - if err != nil {
34 - t.Fatal(err)
35 - }
36 -
37 - addr := fmt.Sprintf("/ip4/127.0.0.1/tcp/5001/ipfs/%s", pid.Pretty())
38 - bsp1, err := config.ParseBootstrapPeer(addr)
39 - if err != nil {
40 - t.Fatal(err)
41 - }
42 -
43 - addr = fmt.Sprintf("/ip4/127.0.0.1/udp/5002/utp/ipfs/%s", pid.Pretty())
44 - bsp2, err := config.ParseBootstrapPeer(addr)
45 - if err != nil {
46 - t.Fatal(err)
47 - }
48 -
49 - bsps = append(bsps, bsp1, bsp2)
50 - }
51 -
52 - pinfos := Peers.ToPeerInfos(bsps)
53 - if len(pinfos) != len(bsps)/2 {
54 - t.Fatal("expected fewer peers")
55 - }
56 -}
core/commands/bootstrap.go
+75 -55
@@ -2,6 +2,7 @@ package commands
2
3 import (
4 "errors"
5 + "fmt"
6 "io"
7 "sort"
8
@@ -11,6 +12,8 @@ import (
12
13 cmds "github.com/ipfs/go-ipfs-cmds"
14 config "github.com/ipfs/go-ipfs-config"
15 + peer "github.com/libp2p/go-libp2p-core/peer"
16 + ma "github.com/multiformats/go-multiaddr"
17 )
18
19 type BootstrapOutput struct {
@@ -64,26 +67,13 @@ in the bootstrap list).
67 Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
68 deflt, _ := req.Options[defaultOptionName].(bool)
69
67 - var inputPeers []config.BootstrapPeer
68 - if deflt {
69 - // parse separately for meaningful, correct error.
70 - defltPeers, err := config.DefaultBootstrapPeers()
71 - if err != nil {
72 - return err
73 - }
74 -
75 - inputPeers = defltPeers
76 - } else {
70 + inputPeers := config.DefaultBootstrapAddresses
71 + if !deflt {
72 if err := req.ParseBodyArgs(); err != nil {
73 return err
74 }
75
81 - parsedPeers, err := config.ParseBootstrapPeers(req.Arguments)
82 - if err != nil {
83 - return err
84 - }
85 -
86 - inputPeers = parsedPeers
76 + inputPeers = req.Arguments
77 }
78
79 if len(inputPeers) == 0 {
@@ -110,7 +100,7 @@ in the bootstrap list).
100 return err
101 }
102
113 - return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(added)})
103 + return cmds.EmitOnce(res, &BootstrapOutput{added})
104 },
105 Type: BootstrapOutput{},
106 Encoders: cmds.EncoderMap{
@@ -127,11 +117,6 @@ var bootstrapAddDefaultCmd = &cmds.Command{
117 in the bootstrap list).`,
118 },
119 Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
130 - defltPeers, err := config.DefaultBootstrapPeers()
131 - if err != nil {
132 - return err
133 - }
134 -
120 cfgRoot, err := cmdenv.GetConfigRoot(env)
121 if err != nil {
122 return err
@@ -148,12 +133,12 @@ in the bootstrap list).`,
133 return err
134 }
135
151 - added, err := bootstrapAdd(r, cfg, defltPeers)
136 + added, err := bootstrapAdd(r, cfg, config.DefaultBootstrapAddresses)
137 if err != nil {
138 return err
139 }
140
156 - return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(added)})
141 + return cmds.EmitOnce(res, &BootstrapOutput{added})
142 },
143 Type: BootstrapOutput{},
144 Encoders: cmds.EncoderMap{
@@ -201,26 +186,20 @@ var bootstrapRemoveCmd = &cmds.Command{
186 return err
187 }
188
204 - var removed []config.BootstrapPeer
189 + var removed []string
190 if all {
191 removed, err = bootstrapRemoveAll(r, cfg)
192 } else {
193 if err := req.ParseBodyArgs(); err != nil {
194 return err
195 }
211 -
212 - input, perr := config.ParseBootstrapPeers(req.Arguments)
213 - if perr != nil {
214 - return perr
215 - }
216 -
217 - removed, err = bootstrapRemove(r, cfg, input)
196 + removed, err = bootstrapRemove(r, cfg, req.Arguments)
197 }
198 if err != nil {
199 return err
200 }
201
223 - return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(removed)})
202 + return cmds.EmitOnce(res, &BootstrapOutput{removed})
203 },
204 Type: BootstrapOutput{},
205 Encoders: cmds.EncoderMap{
@@ -257,7 +236,7 @@ var bootstrapRemoveAllCmd = &cmds.Command{
236 return err
237 }
238
260 - return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(removed)})
239 + return cmds.EmitOnce(res, &BootstrapOutput{removed})
240 },
241 Type: BootstrapOutput{},
242 Encoders: cmds.EncoderMap{
@@ -315,23 +294,36 @@ func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error {
294 return nil
295 }
296
318 -func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []config.BootstrapPeer) ([]config.BootstrapPeer, error) {
297 +func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []string) ([]string, error) {
298 + for _, p := range peers {
299 + m, err := ma.NewMultiaddr(p)
300 + if err != nil {
301 + return nil, err
302 + }
303 + tpt, p2ppart := ma.SplitLast(m)
304 + if p2ppart == nil || p2ppart.Protocol().Code != ma.P_P2P {
305 + return nil, fmt.Errorf("invalid bootstrap address: %s", p)
306 + }
307 + if tpt == nil {
308 + return nil, fmt.Errorf("bootstrap address without a transport: %s", p)
309 + }
310 + }
311 +
312 addedMap := map[string]struct{}{}
320 - addedList := make([]config.BootstrapPeer, 0, len(peers))
313 + addedList := make([]string, 0, len(peers))
314
315 // re-add cfg bootstrap peers to rm dupes
316 bpeers := cfg.Bootstrap
317 cfg.Bootstrap = nil
318
319 // add new peers
327 - for _, peer := range peers {
328 - s := peer.String()
320 + for _, s := range peers {
321 if _, found := addedMap[s]; found {
322 continue
323 }
324
325 cfg.Bootstrap = append(cfg.Bootstrap, s)
334 - addedList = append(addedList, peer)
326 + addedList = append(addedList, s)
327 addedMap[s] = struct{}{}
328 }
329
@@ -352,27 +344,56 @@ func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []config.BootstrapPeer)
344 return addedList, nil
345 }
346
355 -func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []config.BootstrapPeer) ([]config.BootstrapPeer, error) {
356 - removed := make([]config.BootstrapPeer, 0, len(toRemove))
357 - keep := make([]config.BootstrapPeer, 0, len(cfg.Bootstrap))
347 +func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []string) ([]string, error) {
348 + removed := make([]peer.AddrInfo, 0, len(toRemove))
349 + keep := make([]peer.AddrInfo, 0, len(cfg.Bootstrap))
350 +
351 + toRemoveAddr, err := config.ParseBootstrapPeers(toRemove)
352 + if err != nil {
353 + return nil, err
354 + }
355 + toRemoveMap := make(map[peer.ID][]ma.Multiaddr, len(toRemoveAddr))
356 + for _, addr := range toRemoveAddr {
357 + toRemoveMap[addr.ID] = addr.Addrs
358 + }
359
360 peers, err := cfg.BootstrapPeers()
361 if err != nil {
362 return nil, err
363 }
364
364 - for _, peer := range peers {
365 - found := false
366 - for _, peer2 := range toRemove {
367 - if peer.Equal(peer2) {
368 - found = true
369 - removed = append(removed, peer)
370 - break
365 + for _, p := range peers {
366 + addrs, ok := toRemoveMap[p.ID]
367 + // not in the remove set?
368 + if !ok {
369 + keep = append(keep, p)
370 + continue
371 + }
372 + // remove the entire peer?
373 + if len(addrs) == 0 {
374 + removed = append(removed, p)
375 + continue
376 + }
377 + var (
378 + keptAddrs, removedAddrs []ma.Multiaddr
379 + )
380 + // remove specific addresses
381 + filter:
382 + for _, addr := range p.Addrs {
383 + for _, addr2 := range addrs {
384 + if addr.Equal(addr2) {
385 + removedAddrs = append(removedAddrs, addr)
386 + continue filter
387 + }
388 }
389 + keptAddrs = append(keptAddrs, addr)
390 + }
391 + if len(removedAddrs) > 0 {
392 + removed = append(removed, peer.AddrInfo{ID: p.ID, Addrs: removedAddrs})
393 }
394
374 - if !found {
375 - keep = append(keep, peer)
395 + if len(keptAddrs) > 0 {
396 + keep = append(keep, peer.AddrInfo{ID: p.ID, Addrs: keptAddrs})
397 }
398 }
399 cfg.SetBootstrapPeers(keep)
@@ -381,10 +402,10 @@ func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []config.Bootstra
402 return nil, err
403 }
404
384 - return removed, nil
405 + return config.BootstrapPeerStrings(removed), nil
406 }
407
387 -func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]config.BootstrapPeer, error) {
408 +func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]string, error) {
409 removed, err := cfg.BootstrapPeers()
410 if err != nil {
411 return nil, err
@@ -394,8 +415,7 @@ func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]config.BootstrapPeer
415 if err := r.SetConfig(cfg); err != nil {
416 return nil, err
417 }
397 -
398 - return removed, nil
418 + return config.BootstrapPeerStrings(removed), nil
419 }
420
421 const bootstrapSecurityWarning = `
core/commands/p2p.go
+34 -26
@@ -14,8 +14,8 @@ import (
14 cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
15 p2p "github.com/ipfs/go-ipfs/p2p"
16
17 - ipfsaddr "github.com/ipfs/go-ipfs-addr"
17 cmds "github.com/ipfs/go-ipfs-cmds"
18 + peer "github.com/libp2p/go-libp2p-core/peer"
19 pstore "github.com/libp2p/go-libp2p-core/peerstore"
20 protocol "github.com/libp2p/go-libp2p-core/protocol"
21 ma "github.com/multiformats/go-multiaddr"
@@ -133,37 +133,49 @@ Example:
133 }
134
135 // parseIpfsAddr is a function that takes in addr string and return ipfsAddrs
136 -func parseIpfsAddr(addr string) ([]ipfsaddr.IPFSAddr, error) {
137 - mutiladdr, err := ma.NewMultiaddr(addr)
136 +func parseIpfsAddr(addr string) (*peer.AddrInfo, error) {
137 + multiaddr, err := ma.NewMultiaddr(addr)
138 if err != nil {
139 return nil, err
140 }
141 - if _, err := mutiladdr.ValueForProtocol(ma.P_IPFS); err == nil {
142 - iaddrs := make([]ipfsaddr.IPFSAddr, 1)
143 - iaddrs[0], err = ipfsaddr.ParseMultiaddr(mutiladdr)
144 - if err != nil {
145 - return nil, err
146 - }
147 - return iaddrs, nil
141 +
142 + pi, err := peer.AddrInfoFromP2pAddr(multiaddr)
143 + if err == nil {
144 + return pi, nil
145 }
149 - // resolve mutiladdr whose protocol is not ma.P_IPFS
146 +
147 + // resolve multiaddr whose protocol is not ma.P_IPFS
148 ctx, cancel := context.WithTimeout(context.Background(), resolveTimeout)
149 defer cancel()
152 - addrs, err := madns.Resolve(ctx, mutiladdr)
150 + addrs, err := madns.Resolve(ctx, multiaddr)
151 if err != nil {
152 return nil, err
153 }
154 if len(addrs) == 0 {
157 - return nil, errors.New("fail to resolve the multiaddr:" + mutiladdr.String())
155 + return nil, errors.New("fail to resolve the multiaddr:" + multiaddr.String())
156 }
159 - iaddrs := make([]ipfsaddr.IPFSAddr, len(addrs))
160 - for i, addr := range addrs {
161 - iaddrs[i], err = ipfsaddr.ParseMultiaddr(addr)
162 - if err != nil {
163 - return nil, err
157 + var info peer.AddrInfo
158 + for _, addr := range addrs {
159 + taddr, id := peer.SplitAddr(addr)
160 + if id == "" {
161 + // not an ipfs addr, skipping.
162 + continue
163 + }
164 + switch info.ID {
165 + case "":
166 + info.ID = id
167 + case id:
168 + default:
169 + return nil, fmt.Errorf(
170 + "ambiguous multiaddr %s could refer to %s or %s",
171 + multiaddr,
172 + info.ID,
173 + id,
174 + )
175 }
176 + info.Addrs = append(info.Addrs, taddr)
177 }
166 - return iaddrs, nil
178 + return &info, nil
179 }
180
181 var p2pListenCmd = &cmds.Command{
@@ -256,14 +268,10 @@ func checkPort(target ma.Multiaddr) error {
268 }
269
270 // forwardLocal forwards local connections to a libp2p service
259 -func forwardLocal(ctx context.Context, p *p2p.P2P, ps pstore.Peerstore, proto protocol.ID, bindAddr ma.Multiaddr, addrs []ipfsaddr.IPFSAddr) error {
260 - for _, addr := range addrs {
261 - ps.AddAddr(addr.ID(), addr.Multiaddr(), pstore.TempAddrTTL)
262 - }
271 +func forwardLocal(ctx context.Context, p *p2p.P2P, ps pstore.Peerstore, proto protocol.ID, bindAddr ma.Multiaddr, addr *peer.AddrInfo) error {
272 + ps.AddAddrs(addr.ID, addr.Addrs, pstore.TempAddrTTL)
273 // TODO: return some info
264 - // the length of the addrs must large than 0
265 - // peerIDs in addr must be the same and choose addr[0] to connect
266 - _, err := p.ForwardLocal(ctx, addrs[0].ID(), proto, bindAddr)
274 + _, err := p.ForwardLocal(ctx, addr.ID, proto, bindAddr)
275 return err
276 }
277
core/commands/ping.go
+6 -3
@@ -10,7 +10,6 @@ import (
10
11 "github.com/ipfs/go-ipfs/core/commands/cmdenv"
12
13 - iaddr "github.com/ipfs/go-ipfs-addr"
13 cmds "github.com/ipfs/go-ipfs-cmds"
14 peer "github.com/libp2p/go-libp2p-core/peer"
15 pstore "github.com/libp2p/go-libp2p-core/peerstore"
@@ -207,11 +206,15 @@ trip latency information.
206 func ParsePeerParam(text string) (ma.Multiaddr, peer.ID, error) {
207 // Multiaddr
208 if strings.HasPrefix(text, "/") {
210 - a, err := iaddr.ParseString(text)
209 + maddr, err := ma.NewMultiaddr(text)
210 if err != nil {
211 return nil, "", err
212 }
214 - return a.Transport(), a.ID(), nil
213 + transport, id := peer.SplitAddr(maddr)
214 + if id == "" {
215 + return nil, "", peer.ErrInvalidAddr
216 + }
217 + return transport, id, nil
218 }
219 // Raw peer ID
220 p, err := peer.IDB58Decode(text)
core/commands/swarm.go
+28 -62
@@ -15,7 +15,6 @@ import (
15 repo "github.com/ipfs/go-ipfs/repo"
16 fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
17
18 - iaddr "github.com/ipfs/go-ipfs-addr"
18 cmds "github.com/ipfs/go-ipfs-cmds"
19 config "github.com/ipfs/go-ipfs-config"
20 inet "github.com/libp2p/go-libp2p-core/network"
@@ -369,7 +368,7 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3
368
369 addrs := req.Arguments
370
372 - pis, err := peersWithAddresses(req.Context, addrs)
371 + pis, err := parseAddresses(req.Context, addrs)
372 if err != nil {
373 return err
374 }
@@ -415,19 +414,34 @@ it will reconnect.
414 return err
415 }
416
418 - iaddrs, err := parseAddresses(req.Arguments)
417 + addrs, err := parseAddresses(req.Context, req.Arguments)
418 if err != nil {
419 return err
420 }
421
423 - output := make([]string, len(iaddrs))
424 - for i, addr := range iaddrs {
425 - output[i] = "disconnect " + addr.ID().Pretty()
426 -
427 - if err := api.Swarm().Disconnect(req.Context, addr.Multiaddr()); err != nil {
428 - output[i] += " failure: " + err.Error()
429 - } else {
430 - output[i] += " success"
422 + output := make([]string, 0, len(addrs))
423 + for _, ainfo := range addrs {
424 + maddrs, err := peer.AddrInfoToP2pAddrs(&ainfo)
425 + if err != nil {
426 + return err
427 + }
428 + // FIXME: This will print:
429 + //
430 + // disconnect QmFoo success
431 + // disconnect QmFoo success
432 + // ...
433 + //
434 + // Once per address specified. However, I'm not sure of
435 + // a good backwards compat solution. Right now, I'm just
436 + // preserving the current behavior.
437 + for _, addr := range maddrs {
438 + msg := "disconnect " + ainfo.ID.Pretty()
439 + if err := api.Swarm().Disconnect(req.Context, addr); err != nil {
440 + msg += " failure: " + err.Error()
441 + } else {
442 + msg += " success"
443 + }
444 + output = append(output, msg)
445 }
446 }
447 return cmds.EmitOnce(res, &stringList{output})
@@ -439,63 +453,15 @@ it will reconnect.
453 }
454
455 // parseAddresses is a function that takes in a slice of string peer addresses
442 -// (multiaddr + peerid) and returns slices of multiaddrs and peerids.
443 -func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) {
444 - iaddrs = make([]iaddr.IPFSAddr, len(addrs))
445 - for i, saddr := range addrs {
446 - iaddrs[i], err = iaddr.ParseString(saddr)
447 - if err != nil {
448 - return nil, cmds.ClientError("invalid peer address: " + err.Error())
449 - }
450 - }
451 - return
452 -}
453 -
454 -// parseMultiaddrs is a function that takes in a slice of peer multiaddr
455 -// and returns slices of multiaddrs and peerids
456 -func parseMultiaddrs(maddrs []ma.Multiaddr) (iaddrs []iaddr.IPFSAddr, err error) {
457 - iaddrs = make([]iaddr.IPFSAddr, len(maddrs))
458 - for i, maddr := range maddrs {
459 - iaddrs[i], err = iaddr.ParseMultiaddr(maddr)
460 - if err != nil {
461 - return nil, cmds.ClientError("invalid peer address: " + err.Error())
462 - }
463 - }
464 - return
465 -}
466 -
467 -// peersWithAddresses is a function that takes in a slice of string peer addresses
456 // (multiaddr + peerid) and returns a slice of properly constructed peers
469 -func peersWithAddresses(ctx context.Context, addrs []string) ([]peer.AddrInfo, error) {
457 +func parseAddresses(ctx context.Context, addrs []string) ([]peer.AddrInfo, error) {
458 // resolve addresses
459 maddrs, err := resolveAddresses(ctx, addrs)
460 if err != nil {
461 return nil, err
462 }
463
476 - iaddrs, err := parseMultiaddrs(maddrs)
477 - if err != nil {
478 - return nil, err
479 - }
480 -
481 - peers := make(map[peer.ID][]ma.Multiaddr, len(iaddrs))
482 - for _, iaddr := range iaddrs {
483 - id := iaddr.ID()
484 - current, ok := peers[id]
485 - if tpt := iaddr.Transport(); tpt != nil {
486 - peers[id] = append(current, tpt)
487 - } else if !ok {
488 - peers[id] = nil
489 - }
490 - }
491 - pis := make([]peer.AddrInfo, 0, len(peers))
492 - for id, maddrs := range peers {
493 - pis = append(pis, peer.AddrInfo{
494 - ID: id,
495 - Addrs: maddrs,
496 - })
497 - }
498 - return pis, nil
464 + return peer.AddrInfosFromP2pAddrs(maddrs...)
465 }
466
467 // resolveAddresses resolves addresses parallelly
@@ -531,7 +497,7 @@ func resolveAddresses(ctx context.Context, addrs []string) ([]ma.Multiaddr, erro
497 // filter out addresses that still doesn't end in `ipfs/Qm...`
498 found := 0
499 for _, raddr := range raddrs {
534 - if _, last := ma.SplitLast(raddr); last.Protocol().Code == ma.P_IPFS {
500 + if _, last := ma.SplitLast(raddr); last != nil && last.Protocol().Code == ma.P_IPFS {
501 maddrC <- raddr
502 found++
503 }
core/core.go
+1 -5
@@ -166,11 +166,7 @@ func (n *IpfsNode) loadBootstrapPeers() ([]peer.AddrInfo, error) {
166 return nil, err
167 }
168
169 - parsed, err := cfg.BootstrapPeers()
170 - if err != nil {
171 - return nil, err
172 - }
173 - return bootstrap.Peers.ToPeerInfos(parsed), nil
169 + return cfg.BootstrapPeers()
170 }
171
172 type ConstructPeerHostOpts struct {
core/coreapi/swarm.go
+12 -18
@@ -5,7 +5,6 @@ import (
5 "sort"
6 "time"
7
8 - iaddr "github.com/ipfs/go-ipfs-addr"
8 coreiface "github.com/ipfs/interface-go-ipfs-core"
9 inet "github.com/libp2p/go-libp2p-core/network"
10 peer "github.com/libp2p/go-libp2p-core/peer"
@@ -52,34 +51,29 @@ func (api *SwarmAPI) Disconnect(ctx context.Context, addr ma.Multiaddr) error {
51 return coreiface.ErrOffline
52 }
53
55 - ia, err := iaddr.ParseMultiaddr(ma.Multiaddr(addr))
56 - if err != nil {
57 - return err
54 + taddr, id := peer.SplitAddr(addr)
55 + if id == "" {
56 + return peer.ErrInvalidAddr
57 }
58
60 - taddr := ia.Transport()
61 - id := ia.ID()
59 net := api.peerHost.Network()
63 -
60 if taddr == nil {
61 if net.Connectedness(id) != inet.Connected {
62 return coreiface.ErrNotConnected
67 - } else if err := net.ClosePeer(id); err != nil {
63 + }
64 + if err := net.ClosePeer(id); err != nil {
65 return err
66 }
70 - } else {
71 - for _, conn := range net.ConnsToPeer(id) {
72 - if !conn.RemoteMultiaddr().Equal(taddr) {
73 - continue
74 - }
75 -
76 - return conn.Close()
67 + return nil
68 + }
69 + for _, conn := range net.ConnsToPeer(id) {
70 + if !conn.RemoteMultiaddr().Equal(taddr) {
71 + continue
72 }
73
79 - return coreiface.ErrConnNotFound
74 + return conn.Close()
75 }
81 -
82 - return nil
76 + return coreiface.ErrConnNotFound
77 }
78
79 func (api *SwarmAPI) KnownAddrs(context.Context) (map[peer.ID][]ma.Multiaddr, error) {
go.mod
+3 -4
@@ -30,12 +30,11 @@ require (
30 github.com/ipfs/go-ds-leveldb v0.0.2
31 github.com/ipfs/go-ds-measure v0.0.1
32 github.com/ipfs/go-fs-lock v0.0.1
33 - github.com/ipfs/go-ipfs-addr v0.0.1
33 github.com/ipfs/go-ipfs-blockstore v0.0.1
34 github.com/ipfs/go-ipfs-blocksutil v0.0.1
35 github.com/ipfs/go-ipfs-chunker v0.0.1
36 github.com/ipfs/go-ipfs-cmds v0.0.8
38 - github.com/ipfs/go-ipfs-config v0.0.4
37 + github.com/ipfs/go-ipfs-config v0.0.5
38 github.com/ipfs/go-ipfs-ds-help v0.0.1
39 github.com/ipfs/go-ipfs-exchange-interface v0.0.1
40 github.com/ipfs/go-ipfs-exchange-offline v0.0.1
@@ -58,7 +57,7 @@ require (
57 github.com/ipfs/hang-fds v0.0.1
58 github.com/ipfs/interface-go-ipfs-core v0.1.0
59 github.com/ipfs/iptb v1.4.0
61 - github.com/ipfs/iptb-plugins v0.0.2
60 + github.com/ipfs/iptb-plugins v0.1.0
61 github.com/jbenet/go-is-domain v1.0.2
62 github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c
63 github.com/jbenet/go-random-files v0.0.0-20190219210431-31b3f20ebded
@@ -68,7 +67,7 @@ require (
67 github.com/libp2p/go-libp2p-autonat-svc v0.1.0
68 github.com/libp2p/go-libp2p-circuit v0.1.0
69 github.com/libp2p/go-libp2p-connmgr v0.1.0
71 - github.com/libp2p/go-libp2p-core v0.0.2
70 + github.com/libp2p/go-libp2p-core v0.0.3
71 github.com/libp2p/go-libp2p-kad-dht v0.1.0
72 github.com/libp2p/go-libp2p-kbucket v0.2.0
73 github.com/libp2p/go-libp2p-loggables v0.1.0
go.sum
+17 -32
@@ -23,7 +23,6 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
23 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
24 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
25 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
26 -github.com/bifurcation/mint v0.0.0-20181105073638-824af6541065/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU=
26 github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
27 github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
28 github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d h1:QgeLLoPD3kRVmeu/1al9iIpIANMi9O1zXFm8BnYGCJg=
@@ -193,7 +192,6 @@ github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0r
192 github.com/ipfs/dir-index-html v1.0.3 h1:cKdOjJBKJgewgcv97zOlqsNOle52N91d3nAkbQadnuY=
193 github.com/ipfs/dir-index-html v1.0.3/go.mod h1:TG9zbaH/+4MnkGel0xF4SLNhk+YZvBNo6jjBkO/LaWc=
194 github.com/ipfs/go-bitswap v0.0.3/go.mod h1:jadAZYsP/tcRMl47ZhFxhaNuDQoXawT8iHMg+iFoQbg=
196 -github.com/ipfs/go-bitswap v0.0.9 h1:Dy0qvYlaOd2E2FOL2gApJ21qVjepJsGNNfstLrGf+0I=
195 github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis=
196 github.com/ipfs/go-bitswap v0.1.0 h1:28YsHYw9ut6wootnImPXH0WpnU5Dbo3qm6cvQ6e6wYY=
197 github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0=
@@ -230,8 +228,6 @@ github.com/ipfs/go-ds-measure v0.0.1 h1:PrCueug+yZLkDCOthZTXKinuoCal/GvlAT7cNxzr
228 github.com/ipfs/go-ds-measure v0.0.1/go.mod h1:wiH6bepKsgyNKpz3nyb4erwhhIVpIxnZbsjN1QpVbbE=
229 github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0=
230 github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y=
233 -github.com/ipfs/go-ipfs-addr v0.0.1 h1:DpDFybnho9v3/a1dzJ5KnWdThWD1HrFLpQ+tWIyBaFI=
234 -github.com/ipfs/go-ipfs-addr v0.0.1/go.mod h1:uKTDljHT3Q3SUWzDLp3aYUi8MrY32fgNgogsIa0npjg=
231 github.com/ipfs/go-ipfs-blockstore v0.0.1 h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc=
232 github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08=
233 github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
@@ -240,9 +236,8 @@ github.com/ipfs/go-ipfs-chunker v0.0.1 h1:cHUUxKFQ99pozdahi+uSC/3Y6HeRpi9oTeUHbE
236 github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw=
237 github.com/ipfs/go-ipfs-cmds v0.0.8 h1:ZMo0ZeQOr10ZKY4yxYA3lRHUbnF/ZYcV9cpU0IrlGFI=
238 github.com/ipfs/go-ipfs-cmds v0.0.8/go.mod h1:TiK4e7/V31tuEb8YWDF8lN3qrnDH+BS7ZqWIeYJlAs8=
243 -github.com/ipfs/go-ipfs-config v0.0.1/go.mod h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
244 -github.com/ipfs/go-ipfs-config v0.0.4 h1:zOWk1gGvIOptjHvvu0qSC8psB2IBKO/FbQArFnmm0LM=
245 -github.com/ipfs/go-ipfs-config v0.0.4/go.mod h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
239 +github.com/ipfs/go-ipfs-config v0.0.5 h1:D9ek19anOzm8iYPvezeeamSg5mzwqKPb2jyAyJZT/4A=
240 +github.com/ipfs/go-ipfs-config v0.0.5/go.mod h1:IGkVTacurWv9WFKc7IBPjHGM/7hi6+PEClqUb/l2BIM=
241 github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
242 github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ=
243 github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
@@ -307,8 +302,8 @@ github.com/ipfs/interface-go-ipfs-core v0.1.0 h1:4LD2TJThswXVMJgAji9k9PyPsOGNtmd
302 github.com/ipfs/interface-go-ipfs-core v0.1.0/go.mod h1:h1zJvvfh9dcNU0bK+Jag516LputHLKQkHsDP+z0dz4A=
303 github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo=
304 github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg=
310 -github.com/ipfs/iptb-plugins v0.0.2 h1:JZp4h/+7f00dY4Epr8gzF+VqKITXmVGsZabvmZp7E9I=
311 -github.com/ipfs/iptb-plugins v0.0.2/go.mod h1:Vud+X6lHv5QlgVbqCPBHt91I0gPIRgmkD6/tMUsI07U=
305 +github.com/ipfs/iptb-plugins v0.1.0 h1:9/PTKJX+rB2qqXkaX/3IDxLSHTBwMMvFrYEf7g2mFo8=
306 +github.com/ipfs/iptb-plugins v0.1.0/go.mod h1:gE+R5nCAM9+Cajd1UhIBk8k7CZus7IG8FFXE0lHvJx0=
307 github.com/jackpal/gateway v1.0.4/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
308 github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc=
309 github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
@@ -317,7 +312,6 @@ github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+
312 github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs=
313 github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc=
314 github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
320 -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
315 github.com/jbenet/go-is-domain v1.0.2 h1:11r5MSptcNFZyBoqubBQnVMUKRWLuRjL1banaIk+iYo=
316 github.com/jbenet/go-is-domain v1.0.2/go.mod h1:xbRLRb0S7FgzDBTJlguhDVwLYM/5yNtvktxj2Ttfy7Q=
317 github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4=
@@ -371,7 +365,6 @@ github.com/libp2p/go-libp2p-autonat v0.0.2/go.mod h1:fs71q5Xk+pdnKU014o2iq1RhMs9
365 github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE=
366 github.com/libp2p/go-libp2p-autonat v0.1.0 h1:aCWAu43Ri4nU0ZPO7NyLzUvvfqd0nE3dX0R/ZGYVgOU=
367 github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8=
374 -github.com/libp2p/go-libp2p-autonat-svc v0.0.2/go.mod h1:j4iMiw0d3diRm5iB0noXumtb0mPvWrM1qAyh640cp8w=
368 github.com/libp2p/go-libp2p-autonat-svc v0.1.0 h1:28IM7iWMDclZeVkpiFQaWVANwXwE7zLlpbnS7yXxrfs=
369 github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A=
370 github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc=
@@ -381,33 +374,30 @@ github.com/libp2p/go-libp2p-circuit v0.0.1/go.mod h1:Dqm0s/BiV63j8EEAs8hr1H5Hudq
374 github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU=
375 github.com/libp2p/go-libp2p-circuit v0.1.0 h1:eniLL3Y9aq/sryfyV1IAHj5rlvuyj3b7iz8tSiZpdhY=
376 github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8=
384 -github.com/libp2p/go-libp2p-connmgr v0.0.1/go.mod h1:eUBBlbuwBBTd/eim7KV5x0fOD2UHDjSwhzmBL6miIx8=
377 github.com/libp2p/go-libp2p-connmgr v0.1.0 h1:vp0t0F0EuT3rrlTtnMnIyyzCnly7nIlRoEbhJpgp0qU=
378 github.com/libp2p/go-libp2p-connmgr v0.1.0/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk=
379 github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco=
380 github.com/libp2p/go-libp2p-core v0.0.2 h1:86uOwW+O6Uc7NbaK4diuLZo2/Ikvqw2rgyV03VcSbLE=
381 github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco=
382 +github.com/libp2p/go-libp2p-core v0.0.3 h1:+IonUYY0nJZLb5Fdv6a6DOjtGP1L8Bb3faamiI2q5FY=
383 +github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE=
384 github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
385 github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
386 github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ=
387 github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI=
394 -github.com/libp2p/go-libp2p-daemon v0.0.6/go.mod h1:nkhjsjSzkF+tg6iScsTTgq9m+VfyMtXNpycYG4CFvC8=
388 +github.com/libp2p/go-libp2p-daemon v0.2.0/go.mod h1:1hlzu8xFRi+fkC1N+zvhSgznGZGo9HxpJtSrj3X5HQw=
389 github.com/libp2p/go-libp2p-discovery v0.0.1/go.mod h1:ZkkF9xIFRLA1xCc7bstYFkd80gBGK8Fc1JqGoU2i+zI=
390 github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I=
391 github.com/libp2p/go-libp2p-discovery v0.1.0 h1:j+R6cokKcGbnZLf4kcNwpx6mDEUPF3N6SrqMymQhmvs=
392 github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g=
393 github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
400 -github.com/libp2p/go-libp2p-host v0.0.3 h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4=
394 github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
395 github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
396 github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
404 -github.com/libp2p/go-libp2p-interface-connmgr v0.0.5 h1:KG/KNYL2tYzXAfMvQN5K1aAGTYSYUMJ1prgYa2/JI1E=
397 github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
398 github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
407 -github.com/libp2p/go-libp2p-kad-dht v0.0.4/go.mod h1:oaBflOQcuC8H+SVV0YN26H6AS+wcUEJyjUGV66vXuSY=
399 github.com/libp2p/go-libp2p-kad-dht v0.1.0 h1:cupGornmncdQCnjArAv9Txkqy43wgQCxoe/5pfIDF/4=
400 github.com/libp2p/go-libp2p-kad-dht v0.1.0/go.mod h1:EiH74cOsCxcu2Yh1XxQMpf1uHcLNm/hYEJBOIRlzHNE=
410 -github.com/libp2p/go-libp2p-kbucket v0.0.1/go.mod h1:Y0iQDHRTk/ZgM8PC4jExoF+E4j+yXWwRkdldkMa5Xm4=
401 github.com/libp2p/go-libp2p-kbucket v0.2.0 h1:FB2a0VkOTNGTP5gu/I444u4WabNM9V1zCkQcWb7zajI=
402 github.com/libp2p/go-libp2p-kbucket v0.2.0/go.mod h1:JNymBToym3QXKBMKGy3m29+xprg0EVr/GJFHxFEdgh8=
403 github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg=
@@ -421,9 +411,7 @@ github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiY
411 github.com/libp2p/go-libp2p-nat v0.0.2/go.mod h1:QrjXQSD5Dj4IJOdEcjHRkWTSomyxRo6HnUkf/TfQpLQ=
412 github.com/libp2p/go-libp2p-nat v0.0.4 h1:+KXK324yaY701On8a0aGjTnw8467kW3ExKcqW2wwmyw=
413 github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY=
424 -github.com/libp2p/go-libp2p-net v0.0.0-20190226201932-e71fff5ba6e9/go.mod h1:8W6Wx3AZbTRTe8zSMLoAmT3mGyau+w6kGIRk+Z+MZ7Q=
414 github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
426 -github.com/libp2p/go-libp2p-net v0.0.2 h1:qP06u4TYXfl7uW/hzqPhlVVTSA2nw1B/bHBJaUnbh6M=
415 github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
416 github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q=
417 github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ=
@@ -432,23 +420,22 @@ github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J
420 github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es=
421 github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY=
422 github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY=
435 -github.com/libp2p/go-libp2p-peerstore v0.0.0-20190226201924-e2df3e49eabf/go.mod h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
423 github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
424 github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
425 github.com/libp2p/go-libp2p-peerstore v0.1.0 h1:MKh7pRNPHSh1fLPj8u/M/s/napdmeNpoi9BRy9lPN0E=
426 github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY=
427 github.com/libp2p/go-libp2p-pnet v0.1.0 h1:kRUES28dktfnHNIRW4Ro78F7rKBHBiw5MJpl0ikrLIA=
428 github.com/libp2p/go-libp2p-pnet v0.1.0/go.mod h1:ZkyZw3d0ZFOex71halXRihWf9WH/j3OevcJdTmD0lyE=
442 -github.com/libp2p/go-libp2p-protocol v0.0.0-20171212212132-b29f3d97e3a2/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
429 github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
444 -github.com/libp2p/go-libp2p-protocol v0.1.0 h1:HdqhEyhg0ToCaxgMhnOmUO8snQtt/kQlcjVk3UoJU3c=
430 github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk=
446 -github.com/libp2p/go-libp2p-pubsub v0.0.1/go.mod h1:fYKlZBOF2yrJzYlgeEVFSbYWfbS+E8Zix6gMZ0A6WgE=
431 github.com/libp2p/go-libp2p-pubsub v0.1.0 h1:SmQeMa7IUv5vadh0fYgYsafWCBA1sCy5d/68kIYqGcU=
432 github.com/libp2p/go-libp2p-pubsub v0.1.0/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q=
433 github.com/libp2p/go-libp2p-pubsub-router v0.1.0 h1:xA5B8Sdx64tNlSRIcay2QUngtlu8LpUJClaUk/dYYrg=
434 github.com/libp2p/go-libp2p-pubsub-router v0.1.0/go.mod h1:PnHOshBr/2I2ZxVfEsqfgCQPsVg09zo+DhSlWkOhPFM=
451 -github.com/libp2p/go-libp2p-quic-transport v0.0.0-20190301030811-862195d91de1/go.mod h1:bw/6H57fSVn44ldP1Js6hnzpoiUm9YgBDKSv+ch+hWc=
435 +github.com/libp2p/go-libp2p-quic-transport v0.1.0 h1:YXKs6LA4aCl0OfhUq50xvdXDHaUlAsjmDFDcBcJPDGI=
436 +github.com/libp2p/go-libp2p-quic-transport v0.1.0 h1:YXKs6LA4aCl0OfhUq50xvdXDHaUlAsjmDFDcBcJPDGI=
437 +github.com/libp2p/go-libp2p-quic-transport v0.1.0/go.mod h1:1oh6y4f8/lDX42jIGlhXO95ox3Y1XMLdffb7zde29Y8=
438 +github.com/libp2p/go-libp2p-quic-transport v0.1.0/go.mod h1:1oh6y4f8/lDX42jIGlhXO95ox3Y1XMLdffb7zde29Y8=
439 github.com/libp2p/go-libp2p-quic-transport v0.1.1 h1:MFMJzvsxIEDEVKzO89BnB/FgvMj9WI4GDGUW2ArDPUA=
440 github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU=
441 github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q=
@@ -473,7 +460,6 @@ github.com/libp2p/go-libp2p-testing v0.0.3 h1:bdij4bKaaND7tCsaXVjRfYkMpvoOeKj9AV
460 github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
461 github.com/libp2p/go-libp2p-tls v0.1.0 h1:o4bjjAdnUjNgJoPoDd0wUaZH7K+EenlNWJpgyXB3ulA=
462 github.com/libp2p/go-libp2p-tls v0.1.0/go.mod h1:VZdoSWQDeNpIIAFJFv+6uqTqpnIIDHcqZQSTC/A1TT0=
476 -github.com/libp2p/go-libp2p-transport v0.0.0-20190226201958-e8580c8a519d/go.mod h1:lcwgOszllbhvQXul37Kv5YbSYXPoUhRB2Z+Nr3jaBmo=
463 github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk=
464 github.com/libp2p/go-libp2p-transport v0.0.4/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
465 github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
@@ -503,9 +489,7 @@ github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQza
489 github.com/libp2p/go-reuseport-transport v0.0.1/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
490 github.com/libp2p/go-reuseport-transport v0.0.2 h1:WglMwyXyBu61CMkjCCtnmqNqnjib0GIEjMiHTwR/KN4=
491 github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
506 -github.com/libp2p/go-stream-muxer v0.0.0-20190218175335-a3f82916c8ad/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
492 github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
508 -github.com/libp2p/go-stream-muxer v0.1.0 h1:3ToDXUzx8pDC6RfuOzGsUYP5roMDthbUKRdMRRhqAqY=
493 github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ=
494 github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw=
495 github.com/libp2p/go-stream-muxer-multistream v0.2.0 h1:714bRJ4Zy9mdhyTLJ+ZKiROmAFwUHpeRidG+q7LTQOg=
@@ -514,7 +498,6 @@ github.com/libp2p/go-tcp-transport v0.0.1/go.mod h1:mnjg0o0O5TmXUaUIanYPUqkW4+u6
498 github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o=
499 github.com/libp2p/go-tcp-transport v0.1.0 h1:IGhowvEqyMFknOar4FWCKSWE0zL36UFKQtiRQD60/8o=
500 github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc=
517 -github.com/libp2p/go-testutil v0.0.1 h1:Xg+O0G2HIMfHqBOBDcMS1iSZJ3GEcId4qOxCQvsGZHk=
501 github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I=
502 github.com/libp2p/go-testutil v0.1.0 h1:4QhjaWGO89udplblLVpgGDOQjzFlRavZOjuEnz2rLMc=
503 github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc=
@@ -527,11 +510,12 @@ github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ
510 github.com/libp2p/go-yamux v1.2.3 h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI=
511 github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
512 github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
530 -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
531 -github.com/lucas-clemente/quic-go v0.10.0/go.mod h1:wuD+2XqEx8G9jtwx5ou2BEYBsE+whgQmlj0Vz/77PrY=
513 +github.com/lucas-clemente/quic-go v0.11.1 h1:zasajC848Dqq/+WqfqBCkmPw+YHNe1MBts/z7y7nXf4=
514 +github.com/lucas-clemente/quic-go v0.11.1 h1:zasajC848Dqq/+WqfqBCkmPw+YHNe1MBts/z7y7nXf4=
515 +github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
516 +github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
517 github.com/lucas-clemente/quic-go v0.11.2 h1:Mop0ac3zALaBR3wGs6j8OYe/tcFvFsxTUFMkE/7yUOI=
518 github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
534 -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58=
519 github.com/magiconair/properties v1.7.6 h1:U+1DqNen04MdEPgFiIwdOUiqZ8qPa37xgogX/sd3+54=
520 github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
521 github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA=
@@ -743,6 +727,8 @@ golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACk
727 golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
728 golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
729 golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
730 +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc=
731 +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
732 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
733 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
734 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -801,7 +787,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
787 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
788 golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0 h1:pa1CyBALPFjblgkNQp7T7gEcFcG/GOG5Ck8IcnSVWGs=
789 golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
804 -golang.org/x/xerrors v0.0.0-20190212162355-a5947ffaace3/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
790 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4=
791 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
792 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=