mirror of
https://github.com/libp2p/go-libp2p.git
synced 2025-10-06 16:47:02 +08:00
extract protocol and maddr-filter
This commit is contained in:
@@ -10,10 +10,10 @@ import (
|
|||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
ma "github.com/jbenet/go-multiaddr"
|
||||||
goprocess "github.com/jbenet/goprocess"
|
goprocess "github.com/jbenet/goprocess"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
||||||
mstream "github.com/libp2p/go-libp2p/p2p/metrics/stream"
|
mstream "github.com/libp2p/go-libp2p/p2p/metrics/stream"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
identify "github.com/libp2p/go-libp2p/p2p/protocol/identify"
|
identify "github.com/libp2p/go-libp2p/p2p/protocol/identify"
|
||||||
relay "github.com/libp2p/go-libp2p/p2p/protocol/relay"
|
relay "github.com/libp2p/go-libp2p/p2p/protocol/relay"
|
||||||
|
|
||||||
|
@@ -7,9 +7,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
host "github.com/libp2p/go-libp2p/p2p/host"
|
host "github.com/libp2p/go-libp2p/p2p/host"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -7,9 +7,9 @@ import (
|
|||||||
pstore "github.com/ipfs/go-libp2p-peerstore"
|
pstore "github.com/ipfs/go-libp2p-peerstore"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
ma "github.com/jbenet/go-multiaddr"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
msmux "github.com/whyrusleeping/go-multistream"
|
msmux "github.com/whyrusleeping/go-multistream"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package host
|
package host
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/libp2p/go-libp2p/p2p/protocol"
|
"github.com/libp2p/go-libp2p-protocol"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
semver "github.com/coreos/go-semver/semver"
|
semver "github.com/coreos/go-semver/semver"
|
||||||
|
@@ -10,10 +10,10 @@ import (
|
|||||||
pstore "github.com/ipfs/go-libp2p-peerstore"
|
pstore "github.com/ipfs/go-libp2p-peerstore"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
ma "github.com/jbenet/go-multiaddr"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
host "github.com/libp2p/go-libp2p/p2p/host"
|
host "github.com/libp2p/go-libp2p/p2p/host"
|
||||||
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
|
|
||||||
msmux "github.com/whyrusleeping/go-multistream"
|
msmux "github.com/whyrusleeping/go-multistream"
|
||||||
)
|
)
|
||||||
|
@@ -5,7 +5,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Stats struct {
|
type Stats struct {
|
||||||
|
@@ -2,7 +2,7 @@ package metrics
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StreamMeterCallback func(int64, protocol.ID, peer.ID)
|
type StreamMeterCallback func(int64, protocol.ID, peer.ID)
|
||||||
|
@@ -2,9 +2,9 @@ package meterstream
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type meteredStream struct {
|
type meteredStream struct {
|
||||||
|
@@ -7,8 +7,8 @@ import (
|
|||||||
|
|
||||||
randbo "github.com/dustin/randbo"
|
randbo "github.com/dustin/randbo"
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type FakeStream struct {
|
type FakeStream struct {
|
||||||
|
@@ -9,7 +9,7 @@ import (
|
|||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
ma "github.com/jbenet/go-multiaddr"
|
||||||
transport "github.com/libp2p/go-libp2p-transport"
|
transport "github.com/libp2p/go-libp2p-transport"
|
||||||
filter "github.com/libp2p/go-libp2p/p2p/net/filter"
|
filter "github.com/libp2p/go-maddr-filter"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PeerConn interface {
|
type PeerConn interface {
|
||||||
|
@@ -15,7 +15,7 @@ import (
|
|||||||
"github.com/jbenet/goprocess"
|
"github.com/jbenet/goprocess"
|
||||||
goprocessctx "github.com/jbenet/goprocess/context"
|
goprocessctx "github.com/jbenet/goprocess/context"
|
||||||
transport "github.com/libp2p/go-libp2p-transport"
|
transport "github.com/libp2p/go-libp2p-transport"
|
||||||
filter "github.com/libp2p/go-libp2p/p2p/net/filter"
|
filter "github.com/libp2p/go-maddr-filter"
|
||||||
msmux "github.com/whyrusleeping/go-multistream"
|
msmux "github.com/whyrusleeping/go-multistream"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -1,67 +0,0 @@
|
|||||||
package filter
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
|
||||||
manet "github.com/jbenet/go-multiaddr-net"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Filters struct {
|
|
||||||
mu sync.RWMutex
|
|
||||||
filters map[string]*net.IPNet
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewFilters() *Filters {
|
|
||||||
return &Filters{
|
|
||||||
filters: make(map[string]*net.IPNet),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fs *Filters) AddDialFilter(f *net.IPNet) {
|
|
||||||
fs.mu.Lock()
|
|
||||||
defer fs.mu.Unlock()
|
|
||||||
fs.filters[f.String()] = f
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Filters) AddrBlocked(a ma.Multiaddr) bool {
|
|
||||||
maddr := ma.Split(a)
|
|
||||||
if len(maddr) == 0 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
netaddr, err := manet.ToNetAddr(maddr[0])
|
|
||||||
if err != nil {
|
|
||||||
// if we cant parse it, its probably not blocked
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
netip := net.ParseIP(netaddr.String())
|
|
||||||
if netip == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
f.mu.RLock()
|
|
||||||
defer f.mu.RUnlock()
|
|
||||||
for _, ft := range f.filters {
|
|
||||||
if ft.Contains(netip) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Filters) Filters() []*net.IPNet {
|
|
||||||
var out []*net.IPNet
|
|
||||||
f.mu.RLock()
|
|
||||||
defer f.mu.RUnlock()
|
|
||||||
for _, ff := range f.filters {
|
|
||||||
out = append(out, ff)
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Filters) Remove(ff *net.IPNet) {
|
|
||||||
f.mu.Lock()
|
|
||||||
defer f.mu.Unlock()
|
|
||||||
delete(f.filters, ff.String())
|
|
||||||
}
|
|
@@ -1,51 +0,0 @@
|
|||||||
package filter
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestFilter(t *testing.T) {
|
|
||||||
f := NewFilters()
|
|
||||||
for _, cidr := range []string{
|
|
||||||
"1.2.3.0/24",
|
|
||||||
"4.3.2.1/32",
|
|
||||||
"fd00::/8",
|
|
||||||
"fc00::1/128",
|
|
||||||
} {
|
|
||||||
_, ipnet, _ := net.ParseCIDR(cidr)
|
|
||||||
f.AddDialFilter(ipnet)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, blocked := range []string{
|
|
||||||
"/ip4/1.2.3.4/tcp/123",
|
|
||||||
"/ip4/4.3.2.1/udp/123",
|
|
||||||
"/ip6/fd00::2/tcp/321",
|
|
||||||
"/ip6/fc00::1/udp/321",
|
|
||||||
} {
|
|
||||||
maddr, err := ma.NewMultiaddr(blocked)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if !f.AddrBlocked(maddr) {
|
|
||||||
t.Fatalf("expected %s to be blocked", blocked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, notBlocked := range []string{
|
|
||||||
"/ip4/1.2.4.1/tcp/123",
|
|
||||||
"/ip4/4.3.2.2/udp/123",
|
|
||||||
"/ip6/fe00::1/tcp/321",
|
|
||||||
"/ip6/fc00::2/udp/321",
|
|
||||||
} {
|
|
||||||
maddr, err := ma.NewMultiaddr(notBlocked)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if f.AddrBlocked(maddr) {
|
|
||||||
t.Fatalf("expected %s to not be blocked", notBlocked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -8,8 +8,8 @@ import (
|
|||||||
pstore "github.com/ipfs/go-libp2p-peerstore"
|
pstore "github.com/ipfs/go-libp2p-peerstore"
|
||||||
ma "github.com/jbenet/go-multiaddr"
|
ma "github.com/jbenet/go-multiaddr"
|
||||||
"github.com/jbenet/goprocess"
|
"github.com/jbenet/goprocess"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
conn "github.com/libp2p/go-libp2p/p2p/net/conn"
|
conn "github.com/libp2p/go-libp2p/p2p/net/conn"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// MessageSizeMax is a soft (recommended) maximum for network messages.
|
// MessageSizeMax is a soft (recommended) maximum for network messages.
|
||||||
|
@@ -6,8 +6,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
process "github.com/jbenet/goprocess"
|
process "github.com/jbenet/goprocess"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// stream implements inet.Stream
|
// stream implements inet.Stream
|
||||||
|
@@ -10,8 +10,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
testutil "github.com/libp2p/go-libp2p/testutil"
|
testutil "github.com/libp2p/go-libp2p/testutil"
|
||||||
|
|
||||||
"context"
|
"context"
|
||||||
|
@@ -15,7 +15,6 @@ import (
|
|||||||
mconn "github.com/libp2p/go-libp2p/p2p/metrics/conn"
|
mconn "github.com/libp2p/go-libp2p/p2p/metrics/conn"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
conn "github.com/libp2p/go-libp2p/p2p/net/conn"
|
conn "github.com/libp2p/go-libp2p/p2p/net/conn"
|
||||||
filter "github.com/libp2p/go-libp2p/p2p/net/filter"
|
|
||||||
addrutil "github.com/libp2p/go-libp2p/p2p/net/swarm/addr"
|
addrutil "github.com/libp2p/go-libp2p/p2p/net/swarm/addr"
|
||||||
|
|
||||||
ci "github.com/ipfs/go-libp2p-crypto"
|
ci "github.com/ipfs/go-libp2p-crypto"
|
||||||
@@ -28,6 +27,7 @@ import (
|
|||||||
"github.com/jbenet/goprocess"
|
"github.com/jbenet/goprocess"
|
||||||
goprocessctx "github.com/jbenet/goprocess/context"
|
goprocessctx "github.com/jbenet/goprocess/context"
|
||||||
transport "github.com/libp2p/go-libp2p-transport"
|
transport "github.com/libp2p/go-libp2p-transport"
|
||||||
|
filter "github.com/libp2p/go-maddr-filter"
|
||||||
tcpt "github.com/libp2p/go-tcp-transport"
|
tcpt "github.com/libp2p/go-tcp-transport"
|
||||||
psmss "github.com/whyrusleeping/go-smux-multistream"
|
psmss "github.com/whyrusleeping/go-smux-multistream"
|
||||||
spdy "github.com/whyrusleeping/go-smux-spdystream"
|
spdy "github.com/whyrusleeping/go-smux-spdystream"
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
package swarm
|
package swarm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
|
|
||||||
ps "github.com/jbenet/go-peerstream"
|
ps "github.com/jbenet/go-peerstream"
|
||||||
)
|
)
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
package protocol
|
|
||||||
|
|
||||||
// ID is an identifier used to write protocol headers in streams.
|
|
||||||
type ID string
|
|
||||||
|
|
||||||
// These are reserved protocol.IDs.
|
|
||||||
const (
|
|
||||||
TestingID ID = "/p2p/_testing"
|
|
||||||
)
|
|
@@ -9,9 +9,9 @@ import (
|
|||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
mh "github.com/jbenet/go-multihash"
|
mh "github.com/jbenet/go-multihash"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
host "github.com/libp2p/go-libp2p/p2p/host"
|
host "github.com/libp2p/go-libp2p/p2p/host"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var log = logging.Logger("github.com/libp2p/go-libp2p/p2p/protocol/relay")
|
var log = logging.Logger("github.com/libp2p/go-libp2p/p2p/protocol/relay")
|
||||||
|
@@ -6,8 +6,8 @@ import (
|
|||||||
|
|
||||||
"context"
|
"context"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
relay "github.com/libp2p/go-libp2p/p2p/protocol/relay"
|
relay "github.com/libp2p/go-libp2p/p2p/protocol/relay"
|
||||||
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
||||||
msmux "github.com/whyrusleeping/go-multistream"
|
msmux "github.com/whyrusleeping/go-multistream"
|
||||||
|
@@ -10,9 +10,9 @@ import (
|
|||||||
u "github.com/ipfs/go-ipfs-util"
|
u "github.com/ipfs/go-ipfs-util"
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
host "github.com/libp2p/go-libp2p/p2p/host"
|
host "github.com/libp2p/go-libp2p/p2p/host"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -11,10 +11,10 @@ import (
|
|||||||
u "github.com/ipfs/go-ipfs-util"
|
u "github.com/ipfs/go-ipfs-util"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
ps "github.com/jbenet/go-peerstream"
|
ps "github.com/jbenet/go-peerstream"
|
||||||
|
protocol "github.com/libp2p/go-libp2p-protocol"
|
||||||
host "github.com/libp2p/go-libp2p/p2p/host"
|
host "github.com/libp2p/go-libp2p/p2p/host"
|
||||||
inet "github.com/libp2p/go-libp2p/p2p/net"
|
inet "github.com/libp2p/go-libp2p/p2p/net"
|
||||||
swarm "github.com/libp2p/go-libp2p/p2p/net/swarm"
|
swarm "github.com/libp2p/go-libp2p/p2p/net/swarm"
|
||||||
protocol "github.com/libp2p/go-libp2p/p2p/protocol"
|
|
||||||
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
12
package.json
12
package.json
@@ -188,6 +188,18 @@
|
|||||||
"hash": "QmXFU6HbpMaxJ3wtw96aSSqBcdJJqtuE2ipMopmh1T3be8",
|
"hash": "QmXFU6HbpMaxJ3wtw96aSSqBcdJJqtuE2ipMopmh1T3be8",
|
||||||
"name": "go-tcp-transport",
|
"name": "go-tcp-transport",
|
||||||
"version": "1.0.2"
|
"version": "1.0.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "whyrusleeping",
|
||||||
|
"hash": "QmaRNdghe7SY53L9WfyVesio7yvVnyXtgSpbBd9CJYfvJg",
|
||||||
|
"name": "go-maddr-filter",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "whyrusleeping",
|
||||||
|
"hash": "QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN",
|
||||||
|
"name": "go-libp2p-protocol",
|
||||||
|
"version": "1.0.0"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"gxVersion": "0.4.0",
|
"gxVersion": "0.4.0",
|
||||||
|
Reference in New Issue
Block a user