From 8bffc840bd045a93e63202907d79afb943eb4403 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Tue, 9 Mar 2021 19:33:17 -0800 Subject: [PATCH 1/8] feat(timing): add more granular timing --- testbed/testbed/test/common.go | 11 ++++++----- testbed/testbed/test/tcpTransfer.go | 3 ++- testbed/testbed/test/transfer.go | 20 ++++++++++++-------- testbed/testbed/utils/ipfs.go | 5 +++++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/testbed/testbed/test/common.go b/testbed/testbed/test/common.go index e21b01c..728436c 100644 --- a/testbed/testbed/test/common.go +++ b/testbed/testbed/test/common.go @@ -296,7 +296,7 @@ func (t *TestData) runTCPServer(ctx context.Context, fIndex int, runNum int, f u return nil } -func (t *TestData) runTCPFetch(ctx context.Context, fIndex int, runNum int, runenv *runtime.RunEnv, testvars *TestVars) (int64, error) { +func (t *TestData) runTCPFetch(ctx context.Context, fIndex int, runNum int, runenv *runtime.RunEnv, testvars *TestVars) (time.Duration, error) { // TCP variables tcpAddrTopic := getTCPAddrTopic(fIndex, runNum) tcpAddrCh := make(chan *string, 1) @@ -320,7 +320,7 @@ func (t *TestData) runTCPFetch(ctx context.Context, fIndex int, runNum int, rune start := time.Now() utils.FetchFileTCP(connection, runenv) - tcpFetch := time.Since(start).Nanoseconds() + tcpFetch := time.Since(start) runenv.RecordMessage("Fetched TCP file after %d (ns)", tcpFetch) // Wait for all nodes to be done with TCP Fetch @@ -407,14 +407,15 @@ func (t *NodeTestData) close() error { } func (t *NodeTestData) emitMetrics(runenv *runtime.RunEnv, runNum int, transport string, - permutation TestPermutation, timeToFetch time.Duration, tcpFetch int64, leechFails int64, + permutation TestPermutation, timings map[string]time.Duration, leechFails int64, maxConnectionRate int) error { recorder := newMetricsRecorder(runenv, runNum, t.seq, t.grpseq, transport, permutation.Latency, permutation.Bandwidth, int(permutation.File.Size()), t.nodetp, t.tpindex, maxConnectionRate) if t.nodetp == utils.Leech { - recorder.Record("time_to_fetch", float64(timeToFetch)) recorder.Record("leech_fails", float64(leechFails)) - recorder.Record("tcp_fetch", float64(tcpFetch)) + } + for name, timing := range timings { + recorder.Record(name, float64(timing)) } return t.node.EmitMetrics(recorder) diff --git a/testbed/testbed/test/tcpTransfer.go b/testbed/testbed/test/tcpTransfer.go index 1e5790b..99c89af 100644 --- a/testbed/testbed/test/tcpTransfer.go +++ b/testbed/testbed/test/tcpTransfer.go @@ -3,6 +3,7 @@ package test import ( "context" "fmt" + "time" "github.com/testground/sdk-go/run" "github.com/testground/sdk-go/runtime" @@ -35,7 +36,7 @@ func TCPTransfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { return err } - var tcpFetch int64 + var tcpFetch time.Duration // For each file found in the test for pIndex, testParams := range testvars.Permutations { diff --git a/testbed/testbed/test/transfer.go b/testbed/testbed/test/transfer.go index 633eda2..1cb16c9 100644 --- a/testbed/testbed/test/transfer.go +++ b/testbed/testbed/test/transfer.go @@ -46,10 +46,10 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { // Start still alive process if enabled t.stillAlive(runenv, testvars) - var tcpFetch int64 - // For each test permutation found in the test for pIndex, testParams := range testvars.Permutations { + timings := map[string]time.Duration{} + // Set up network (with traffic shaping) if err := utils.SetupNetwork(ctx, runenv, t.nwClient, t.nodetp, t.tpindex, testParams.Latency, testParams.Bandwidth, testParams.JitterPct); err != nil { @@ -68,7 +68,11 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { switch t.nodetp { case utils.Seed: + // TODO: isolate just the adding of the file from the time to publish in testground + // probably miniscule but we should still do it + start := time.Now() rootCid, err = t.addPublishFile(ctx, pIndex, testParams.File, runenv, testvars) + timings["time_to_add"] = time.Since(start) case utils.Leech: rootCid, err = t.readFile(ctx, pIndex, runenv, testvars) } @@ -89,7 +93,7 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { case utils.Seed: err = t.runTCPServer(ctx, pIndex, 0, testParams.File, runenv, testvars) case utils.Leech: - tcpFetch, err = t.runTCPFetch(ctx, pIndex, 0, runenv, testvars) + timings["tcp_fetch"], err = t.runTCPFetch(ctx, pIndex, 0, runenv, testvars) } if err != nil { return err @@ -126,8 +130,6 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { } /// --- Start test - - var timeToFetch time.Duration if t.nodetp == utils.Leech { // For each wave for waveNum := 0; waveNum < testvars.NumWaves; waveNum++ { @@ -152,14 +154,16 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { leechFails++ } else { runenv.RecordMessage("Fetch complete, proceeding") + timings["time_to_fetch"] = time.Since(start) + start := time.Now() err = files.WriteTo(rcvFile, "/tmp/"+strconv.Itoa(t.tpindex)+time.Now().String()) if err != nil { cancel() return err } - timeToFetch = time.Since(start) + timings["time_to_output"] = time.Since(start) s, _ := rcvFile.Size() - runenv.RecordMessage("Leech fetch of %d complete (%d ns) for wave %d", s, timeToFetch, waveNum) + runenv.RecordMessage("Leech fetch of %d complete (%d ns) for wave %d", s, timings["time_to_fetch"], waveNum) } cancel() } @@ -178,7 +182,7 @@ func Transfer(runenv *runtime.RunEnv, initCtx *run.InitContext) error { } /// --- Report stats - err = t.emitMetrics(runenv, runNum, nodeType, testParams, timeToFetch, tcpFetch, leechFails, testvars.MaxConnectionRate) + err = t.emitMetrics(runenv, runNum, nodeType, testParams, timings, leechFails, testvars.MaxConnectionRate) if err != nil { return err } diff --git a/testbed/testbed/utils/ipfs.go b/testbed/testbed/utils/ipfs.go index 289ce7d..027670d 100644 --- a/testbed/testbed/utils/ipfs.go +++ b/testbed/testbed/utils/ipfs.go @@ -408,6 +408,11 @@ func (n *IPFSNode) Add(ctx context.Context, tmpFile files.Node) (cid.Cid, error) } func (n *IPFSNode) Fetch(ctx context.Context, c cid.Cid, _ []PeerInfo) (files.Node, error) { + err := merkledag.FetchGraph(ctx, c, n.Node.DAG) + if err != nil { + return nil, err + } + fPath := path.IpfsPath(c) return n.API.Unixfs().Get(ctx, fPath) } From 9d5d363bf0e737e7583bc933a63567839b43a4f0 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Wed, 10 Mar 2021 17:24:02 -0800 Subject: [PATCH 2/8] feat(testbed): setup initial run with ipld-in-ipfs --- RFC/ipld-prime-in-ipfs/baseline.toml | 40 ++++ .../ipld-prime-in-ipfs.toml | 41 ++++ testbed/testbed/go.mod | 35 ++-- testbed/testbed/go.sum | 175 +++++++++++++++++- 4 files changed, 264 insertions(+), 27 deletions(-) create mode 100644 RFC/ipld-prime-in-ipfs/baseline.toml create mode 100644 RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml diff --git a/RFC/ipld-prime-in-ipfs/baseline.toml b/RFC/ipld-prime-in-ipfs/baseline.toml new file mode 100644 index 0000000..06db189 --- /dev/null +++ b/RFC/ipld-prime-in-ipfs/baseline.toml @@ -0,0 +1,40 @@ +[metadata] +name = "transfer" + + +[global] +plan = "testbed" +case = "transfer" +builder = "docker:go" +runner = "local:docker" + +total_instances = 2 + +[[groups]] +id = "nodes" +instances = { count = 2 } + +[groups.build] + + + + +[groups.run] +[groups.run.test_params] +input_data = "files" +data_dir = "../extra/test-datasets" +run_timeout_secs = "3000" +timeout_secs = "12000" +run_count = "4" +leech_count= "1" +passive_count = "0" +max_connection_rate = "100" +# input_data = "random" +# file_size = "10000000,30000000,50000000" +latency_ms= "100,10" +bandwidth_mb= "100,50" +enable_tcp= "false" +enable_dht= "false" +node_type = "ipfs" +long_lasting = "true" +bstore_delay_ms = "0" \ No newline at end of file diff --git a/RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml b/RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml new file mode 100644 index 0000000..70240a6 --- /dev/null +++ b/RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml @@ -0,0 +1,41 @@ +[metadata] +name = "transfer" + + +[global] +plan = "testbed" +case = "transfer" +builder = "docker:go" +runner = "local:docker" + +total_instances = 2 + +[[groups]] +id = "nodes" +instances = { count = 2 } + +[groups.build] +skip_runtime_image = "true" +dependencies = [ + { module = "github.com/ipfs/go-ipfs", target="github.com/ipfs/go-ipfs", version = "02cbfda8a07d7cc48bae2dfa904cfbd1e47a068e"} +] + +[groups.run] +[groups.run.test_params] +input_data = "files" +data_dir = "../extra/test-datasets" +run_timeout_secs = "3000" +timeout_secs = "12000" +run_count = "4" +leech_count= "1" +passive_count = "0" +max_connection_rate = "100" +# input_data = "random" +# file_size = "10000000,30000000,50000000" +latency_ms= "100,10" +bandwidth_mb= "100,50" +enable_tcp= "false" +enable_dht= "false" +node_type = "ipfs" +long_lasting = "true" +bstore_delay_ms = "0" \ No newline at end of file diff --git a/testbed/testbed/go.mod b/testbed/testbed/go.mod index 97e6bd7..4de910f 100644 --- a/testbed/testbed/go.mod +++ b/testbed/testbed/go.mod @@ -6,17 +6,17 @@ require ( github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/dgraph-io/badger/v2 v2.2007.2 github.com/hannahhoward/all-selector v0.2.0 - github.com/ipfs/go-bitswap v0.2.20 - github.com/ipfs/go-blockservice v0.1.3 + github.com/ipfs/go-bitswap v0.3.4-0.20210310225840-d31da32a4d98 + github.com/ipfs/go-blockservice v0.1.4 github.com/ipfs/go-cid v0.0.7 github.com/ipfs/go-datastore v0.4.5 github.com/ipfs/go-ds-badger2 v0.1.0 - github.com/ipfs/go-filestore v1.0.0 // indirect - github.com/ipfs/go-graphsync v0.4.3 - github.com/ipfs/go-ipfs v0.7.0 - github.com/ipfs/go-ipfs-blockstore v1.0.1 + github.com/ipfs/go-filestore v0.0.3 // indirect + github.com/ipfs/go-graphsync v0.7.0 + github.com/ipfs/go-ipfs v0.8.0 + github.com/ipfs/go-ipfs-blockstore v0.1.4 github.com/ipfs/go-ipfs-chunker v0.0.5 - github.com/ipfs/go-ipfs-config v0.9.0 + github.com/ipfs/go-ipfs-config v0.12.0 github.com/ipfs/go-ipfs-delay v0.0.1 github.com/ipfs/go-ipfs-exchange-interface v0.0.1 github.com/ipfs/go-ipfs-exchange-offline v0.0.1 @@ -30,27 +30,18 @@ require ( github.com/ipfs/go-mfs v0.1.2 github.com/ipfs/go-unixfs v0.2.4 github.com/ipfs/interface-go-ipfs-core v0.4.0 - github.com/ipld/go-ipld-prime v0.5.1-0.20201021195245-109253e8a018 + github.com/ipld/go-ipld-prime v0.7.0 github.com/jbenet/goprocess v0.1.4 - github.com/libp2p/go-libp2p v0.11.0 - github.com/libp2p/go-libp2p-core v0.6.1 - github.com/libp2p/go-libp2p-gostream v0.2.1 - github.com/libp2p/go-libp2p-http v0.1.6-0.20210310045043-5508c68db693 - // github.com/libp2p/go-libp2p-gzip v0.0.0-00010101000000-000000000000 - github.com/libp2p/go-mplex v0.1.3 // indirect + github.com/libp2p/go-libp2p v0.13.0 + github.com/libp2p/go-libp2p-core v0.8.5 + github.com/libp2p/go-libp2p-gostream v0.3.0 + github.com/libp2p/go-libp2p-http v0.2.0 github.com/libp2p/go-sockaddr v0.1.0 // indirect - github.com/libp2p/go-yamux v1.3.8 // indirect github.com/multiformats/go-multiaddr v0.3.1 github.com/multiformats/go-multihash v0.0.14 github.com/pkg/errors v0.9.1 github.com/testground/sdk-go v0.2.6-0.20201016180515-1e40e1b0ec3a - github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b // indirect go.uber.org/fx v1.13.1 - golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect - golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect - golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 - golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a golang.org/x/text v0.3.3 // indirect ) - -replace github.com/ipfs/go-bitswap => github.com/adlrocha/go-bitswap v0.2.20-0.20201006081544-fad1a007cf9b diff --git a/testbed/testbed/go.sum b/testbed/testbed/go.sum index 94d0d92..cbf331d 100644 --- a/testbed/testbed/go.sum +++ b/testbed/testbed/go.sum @@ -18,6 +18,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +contrib.go.opencensus.io/exporter/prometheus v0.2.0/go.mod h1:TYmVAyE8Tn1lyPcltF5IYYfWp2KHu7lQGIZnj8iZMys= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= @@ -65,6 +66,7 @@ github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d h1:QgeLLoPD3kRVm github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d/go.mod h1:Jbj8eKecMNwf0KFI75skSUZqMB4UCRcndUScVBTWyUI= github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= @@ -82,10 +84,12 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -94,6 +98,7 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -148,6 +153,7 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gabriel-vasile/mimetype v1.1.1/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To= +github.com/gabriel-vasile/mimetype v1.1.2/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-bindata/go-bindata/v3 v3.1.3/go.mod h1:1/zrpXsLD8YDIbhZRqXzm1Ghc7NhEvIN9+Z6R5/xH4I= @@ -168,6 +174,8 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -219,6 +227,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -227,6 +237,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -260,9 +271,21 @@ github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3/go.mod github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= +github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis= +github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= +github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= +github.com/ipfs/go-bitswap v0.1.3/go.mod h1:YEQlFy0kkxops5Vy+OxWdRSEZIoS7I7KDIwoa5Chkps= +github.com/ipfs/go-bitswap v0.1.8/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= +github.com/ipfs/go-bitswap v0.2.20/go.mod h1:C7TwBgHnu89Q8sHsTJP7IhUqF9XYLe71P4tT5adgmYo= +github.com/ipfs/go-bitswap v0.3.3 h1:CrTO3OiOYFBcdliw074/C7T2QYHEOsPClgvR6RIYcO4= +github.com/ipfs/go-bitswap v0.3.3/go.mod h1:AyWWfN3moBzQX0banEtfKOfbXb3ZeoOeXnZGNPV9S6w= +github.com/ipfs/go-bitswap v0.3.4-0.20210310225840-d31da32a4d98 h1:rRfR50AZYCywgeVhfvcR/SrmWZhscTZrt1iccCILHmE= +github.com/ipfs/go-bitswap v0.3.4-0.20210310225840-d31da32a4d98/go.mod h1:AyWWfN3moBzQX0banEtfKOfbXb3ZeoOeXnZGNPV9S6w= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= +github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= github.com/ipfs/go-blockservice v0.0.3/go.mod h1:/NNihwTi6V2Yr6g8wBI+BSwPuURpBRMtYNGrlxZ8KuI= github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So= github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= @@ -270,6 +293,8 @@ github.com/ipfs/go-blockservice v0.1.1/go.mod h1:t+411r7psEUhLueM8C7aPA7cxCclv4O github.com/ipfs/go-blockservice v0.1.2/go.mod h1:t+411r7psEUhLueM8C7aPA7cxCclv4O3VsUVxt9kz2I= github.com/ipfs/go-blockservice v0.1.3 h1:9XgsPMwwWJSC9uVr2pMDsW2qFTBSkxpGMhmna8mIjPM= github.com/ipfs/go-blockservice v0.1.3/go.mod h1:OTZhFpkgY48kNzbgyvcexW9cHrpjBYIjSR0KoDOFOLU= +github.com/ipfs/go-blockservice v0.1.4 h1:Vq+MlsH8000KbbUciRyYMEw/NNP8UAGmcqKi4uWmFGA= +github.com/ipfs/go-blockservice v0.1.4/go.mod h1:OTZhFpkgY48kNzbgyvcexW9cHrpjBYIjSR0KoDOFOLU= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= @@ -312,6 +337,7 @@ github.com/ipfs/go-ds-leveldb v0.4.2 h1:QmQoAJ9WkPMUfBLnu1sBVy0xWWlJPg0m4kRAiJL9 github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= github.com/ipfs/go-ds-measure v0.1.0 h1:vE4TyY4aeLeVgnnPBC5QzKIjKrqzha0NCujTfgvVbVQ= github.com/ipfs/go-ds-measure v0.1.0/go.mod h1:1nDiFrhLlwArTME1Ees2XaBOl49OoCgd2A3f8EchMSY= +github.com/ipfs/go-filestore v0.0.3 h1:MhZ1jT5K3NewZwim6rS/akcJLm1xM+r6nz6foeB9EwE= github.com/ipfs/go-filestore v0.0.3/go.mod h1:dvXRykFzyyXN2CdNlRGzDAkXMDPyI+D7JE066SiKLSE= github.com/ipfs/go-filestore v1.0.0 h1:QR7ekKH+q2AGiWDc7W2Q0qHuYSRZGUJqUn0GsegEPb0= github.com/ipfs/go-filestore v1.0.0/go.mod h1:/XOCuNtIe2f1YPbiXdYvD0BKLA0JR1MgPiFOdcuu9SM= @@ -320,10 +346,16 @@ github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28 github.com/ipfs/go-graphsync v0.1.1/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= github.com/ipfs/go-graphsync v0.4.3 h1:2t+oCpufufs1oqChoWiIK7V5uC1XCtf06PK9nqMV6pM= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= +github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= +github.com/ipfs/go-graphsync v0.7.0 h1:ZdyU2otZYPjcvduAPwVjCdijmkPtHI1mm1VyZbRQ5KI= +github.com/ipfs/go-graphsync v0.7.0/go.mod h1:YRQg0TyvD2HzFansAZdMcUFBJ8zIJ4K+32kNdnHfHZc= github.com/ipfs/go-ipfs v0.7.0 h1:8qJkP8PounMHhbWJ+sOij5FV3mlJhP+mhCg2JeDV1mg= github.com/ipfs/go-ipfs v0.7.0/go.mod h1:4UNBZMgbAZ6/+xUZDlMkGxMFPiu1RB67+TaNVvKV7ZQ= +github.com/ipfs/go-ipfs v0.8.0 h1:hQmPWBpnFpKeGUovpDV/XPFAzQ3fGj51OTP+fd7B/yw= +github.com/ipfs/go-ipfs v0.8.0/go.mod h1:iU9jeKJrinNYdWSNZyTjpfcmGHH4oflEySOUboEQsoQ= github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= +github.com/ipfs/go-ipfs-blockstore v0.1.4 h1:2SGI6U1B44aODevza8Rde3+dY30Pb+lbcObe1LETxOQ= github.com/ipfs/go-ipfs-blockstore v0.1.4/go.mod h1:Jxm3XMVjh6R17WvxFEiyKBLUGr86HgIYJW/D/MwqeYQ= github.com/ipfs/go-ipfs-blockstore v1.0.0/go.mod h1:knLVdhVU9L7CC4T+T4nvGdeUIPAXlnd9zmXfp+9MIjU= github.com/ipfs/go-ipfs-blockstore v1.0.1 h1:fnuVj4XdZp4yExhd0CnUwAiMNJHiPnfInhiuwz4lW1w= @@ -335,12 +367,16 @@ github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7Na github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= github.com/ipfs/go-ipfs-cmds v0.4.0 h1:xUavIxA9Ts8U6PAHmQBvDGMlGfUrQ13Rymd+5t8LIF4= github.com/ipfs/go-ipfs-cmds v0.4.0/go.mod h1:ZgYiWVnCk43ChwoH8hAmI1IRbuVtq3GSTHwtRB/Kqhk= +github.com/ipfs/go-ipfs-cmds v0.6.0/go.mod h1:ZgYiWVnCk43ChwoH8hAmI1IRbuVtq3GSTHwtRB/Kqhk= github.com/ipfs/go-ipfs-config v0.9.0 h1:qTXJ9CyOyQv1LFJUMysxz8fi6RxxnP9QqcmiobuANvw= github.com/ipfs/go-ipfs-config v0.9.0/go.mod h1:GQUxqb0NfkZmEU92PxqqqLVVFTLpoGGUlBaTyDaAqrE= +github.com/ipfs/go-ipfs-config v0.12.0 h1:wxqN3ohBlis1EkhkzIKuF+XLx4YNn9rNpiSOYw3DFZc= +github.com/ipfs/go-ipfs-config v0.12.0/go.mod h1:Ei/FLgHGTdPyqCPK0oPCwGTe8VSnsjJjx7HZqUb6Ry0= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo= +github.com/ipfs/go-ipfs-ds-help v0.1.1 h1:IW/bXGeaAZV2VH0Kuok+Ohva/zHkHmeLFBxC1k7mNPc= github.com/ipfs/go-ipfs-ds-help v0.1.1/go.mod h1:SbBafGJuGsPI/QL3j9Fc5YPLeAu+SzOkI0gFwAg+mOs= github.com/ipfs/go-ipfs-ds-help v1.0.0 h1:bEQ8hMGs80h0sR8O4tfDgV6B01aaF9qeTrujrTLYV3g= github.com/ipfs/go-ipfs-ds-help v1.0.0/go.mod h1:ujAbkeIgkKAWtxxNkoZHWLCyk5JpPoKnGyCcsoF6ueE= @@ -354,8 +390,11 @@ github.com/ipfs/go-ipfs-files v0.0.8 h1:8o0oFJkJ8UkO/ABl8T6ac6tKF3+NIpj67aAB6Zpu github.com/ipfs/go-ipfs-files v0.0.8/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs= github.com/ipfs/go-ipfs-pinner v0.0.4 h1:EmxhS3vDsCK/rZrsgxX0Le9m2drBcGlUd7ah/VyFYVE= github.com/ipfs/go-ipfs-pinner v0.0.4/go.mod h1:s4kFZWLWGDudN8Jyd/GTpt222A12C2snA2+OTdy/7p8= +github.com/ipfs/go-ipfs-pinner v0.1.1 h1:iJd1gwILGQJSZhhI0jn6yFOLg34Ua7fdKcB6mXp6k/M= +github.com/ipfs/go-ipfs-pinner v0.1.1/go.mod h1:EzyyaWCWeZJ/he9cDBH6QrEkSuRqTRWMmCoyNkylTTg= github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs= github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A= +github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY= github.com/ipfs/go-ipfs-pq v0.0.2/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= github.com/ipfs/go-ipfs-provider v0.4.3 h1:k54OHXZcFBkhL6l3GnPS9PfpaLeLqZjVASG1bgfBdfQ= @@ -371,6 +410,8 @@ github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-cbor v0.0.4 h1:Aw3KPOKXjvrm6VjwJvFf1F1ekR/BH3jdof3Bk7OTiSA= github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8= +github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= github.com/ipfs/go-ipld-format v0.2.0 h1:xGlJKkArkmBvowr+GMCX0FEZtkro71K1AwiKnL37mwA= @@ -408,8 +449,14 @@ github.com/ipfs/go-path v0.0.3/go.mod h1:zIRQUez3LuQIU25zFjC2hpBTHimWx7VK5bjZgRL github.com/ipfs/go-path v0.0.7/go.mod h1:6KTKmeRnBXgqrTvzFrPV3CamxcgvXX/4z79tfAd2Sno= github.com/ipfs/go-path v0.0.8 h1:R0k6t9x/pa+g8qzl5apQIPurJFozXhopks3iw3MX+jU= github.com/ipfs/go-path v0.0.8/go.mod h1:VpDkSBKQ9EFQOUgi54Tq/O/tGi8n1RfYNks13M3DEs8= +github.com/ipfs/go-path v0.0.9 h1:BIi831cNED8YnIlIKo9y1SI3u+E+FwQQD+rIIw8PwFA= +github.com/ipfs/go-path v0.0.9/go.mod h1:VpDkSBKQ9EFQOUgi54Tq/O/tGi8n1RfYNks13M3DEs8= +github.com/ipfs/go-peertaskqueue v0.0.4/go.mod h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ= +github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= +github.com/ipfs/go-peertaskqueue v0.1.1/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= github.com/ipfs/go-peertaskqueue v0.2.0 h1:2cSr7exUGKYyDeUyQ7P/nHPs9P7Ht/B+ROrpN1EJOjc= github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUnr+P7jivavs9lY= +github.com/ipfs/go-pinning-service-http-client v0.1.0/go.mod h1:tcCKmlkWWH9JUUkKs8CrOZBanacNc1dmKLfjlyXAMu4= github.com/ipfs/go-unixfs v0.0.4/go.mod h1:eIo/p9ADu/MFOuyxzwU+Th8D6xoxU//r590vUpWyfz8= github.com/ipfs/go-unixfs v0.1.0/go.mod h1:lysk5ELhOso8+Fed9U1QTGey2ocsfaZ18h0NCO2Fj9s= github.com/ipfs/go-unixfs v0.2.4 h1:6NwppOXefWIyysZ4LR/qUBPvXd5//8J3jiMdvpbw6Lo= @@ -420,13 +467,20 @@ github.com/ipfs/interface-go-ipfs-core v0.3.0/go.mod h1:Tihp8zxGpUeE3Tokr94L6zWZ github.com/ipfs/interface-go-ipfs-core v0.4.0 h1:+mUiamyHIwedqP8ZgbCIwpy40oX7QcXUbo4CZOeJVJg= github.com/ipfs/interface-go-ipfs-core v0.4.0/go.mod h1:UJBcU6iNennuI05amq3FQ7g0JHUkibHFAfhfUIy927o= github.com/ipld/go-car v0.1.1-0.20200429200904-c222d793c339/go.mod h1:eajxljm6I8o3LitnFeVEmucwZmz7+yLSiKce9yYMefg= +github.com/ipld/go-car v0.1.1-0.20201015032735-ff6ccdc46acc/go.mod h1:WdIgzcEjFqydQ7jH+BXzGYxVCmLeAs5nP8Vu3Rege2Y= github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= github.com/ipld/go-ipld-prime v0.5.0/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= +github.com/ipld/go-ipld-prime v0.5.1-0.20200828233916-988837377a7f/go.mod h1:0xEgdD6MKbZ1vF0GC+YcR/C4SQCAlRuOjIJ2i0HxqzM= github.com/ipld/go-ipld-prime v0.5.1-0.20201021195245-109253e8a018 h1:RbRHv8epkmvBYA5cGfz68GUSbOgx5j/7ObLIl4Rsif0= github.com/ipld/go-ipld-prime v0.5.1-0.20201021195245-109253e8a018/go.mod h1:0xEgdD6MKbZ1vF0GC+YcR/C4SQCAlRuOjIJ2i0HxqzM= +github.com/ipld/go-ipld-prime v0.7.0 h1:eigF1ZpaL1prbsKYVMqPLoPJqD/pzkQOe2j1uzvVg7w= +github.com/ipld/go-ipld-prime v0.7.0/go.mod h1:0xEgdD6MKbZ1vF0GC+YcR/C4SQCAlRuOjIJ2i0HxqzM= github.com/ipld/go-ipld-prime-proto v0.0.0-20200428191222-c1ffdadc01e1/go.mod h1:OAV6xBmuTLsPZ+epzKkPB1e25FHk/vCtyatkdHcArLs= +github.com/ipld/go-ipld-prime-proto v0.0.0-20200922192210-9a2bfd4440a6/go.mod h1:3pHYooM9Ea65jewRwrb2u5uHZCNkNTe9ABsVB+SrkH0= github.com/ipld/go-ipld-prime-proto v0.1.0 h1:j7gjqrfwbT4+gXpHwEx5iMssma3mnctC7YaCimsFP70= github.com/ipld/go-ipld-prime-proto v0.1.0/go.mod h1:11zp8f3sHVgIqtb/c9Kr5ZGqpnCLF1IVTNOez9TopzE= +github.com/ipld/go-ipld-prime-proto v0.1.1 h1:EX4yWYaIqSLwtVE30nxEcZDcvsWDtx1vImSG+XCJebY= +github.com/ipld/go-ipld-prime-proto v0.1.1/go.mod h1:cI9NwYAUKCLUwqufoUjChISxuTEkaY2yvNYCRCuhRck= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= @@ -450,6 +504,7 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -460,9 +515,11 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -481,6 +538,8 @@ github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOS github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= +github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk= +github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE= github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= github.com/libp2p/go-conn-security-multistream v0.2.0 h1:uNiDjS58vrvJTg9jO6bySd1rMKejieG7v45ekqHbZ1M= github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= @@ -491,6 +550,9 @@ github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZ github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-libp2p v0.0.30/go.mod h1:XWT8FGHlhptAv1+3V/+J5mEpzyui/5bvFsNuWYs611A= +github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= +github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= github.com/libp2p/go-libp2p v0.6.0/go.mod h1:mfKWI7Soz3ABX+XEBR61lGbg+ewyMtJHVt043oWeqwg= github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54= github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k= @@ -504,6 +566,8 @@ github.com/libp2p/go-libp2p v0.13.0 h1:tDdrXARSghmusdm0nf1U/4M8aj8Rr0V2IzQOXmbzQ github.com/libp2p/go-libp2p v0.13.0/go.mod h1:pM0beYdACRfHO1WcJlp65WXyG2A6NqYM+t2DTVAJxMo= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 h1:BM7aaOF7RpmNn9+9g6uTjGJ0cTzWr5j9i9IKeun2M8U= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= +github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= +github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI= @@ -512,11 +576,14 @@ github.com/libp2p/go-libp2p-autonat v0.3.2 h1:OhDSwVVaq7liTaRIsFFYvsaPp0pn2yi0Wa github.com/libp2p/go-libp2p-autonat v0.3.2/go.mod h1:0OzOi1/cVc7UcxfOddemYD5vzEqi4fwRbnZcJGLi68U= github.com/libp2p/go-libp2p-autonat v0.4.0 h1:3y8XQbpr+ssX8QfZUHekjHCYK64sj6/4hnf/awD4+Ug= github.com/libp2p/go-libp2p-autonat v0.4.0/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= +github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= github.com/libp2p/go-libp2p-blankhost v0.1.6/go.mod h1:jONCAJqEP+Z8T6EQviGL4JsQcLx1LgTGtVqFNY8EMfQ= github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= +github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= +github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= github.com/libp2p/go-libp2p-circuit v0.2.2/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= @@ -528,6 +595,7 @@ github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco= +github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE= github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= @@ -548,11 +616,15 @@ github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX github.com/libp2p/go-libp2p-core v0.6.1 h1:XS+Goh+QegCDojUZp00CaPMfiEADCrLjNZskWE7pvqs= github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.0 h1:5K3mT+64qDTKbV3yTdbMCzJ7O6wbNsavAEb8iqBvBcI= github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.5 h1:aEgbIcPGsKy6zYcC+5AJivYFedhYa4sW7mIpWpUaLKw= +github.com/libp2p/go-libp2p-core v0.8.5/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= +github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= +github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I= +github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g= github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg= github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw= github.com/libp2p/go-libp2p-discovery v0.4.0/go.mod h1:bZ0aJSrFc/eX2llP0ryhb1kpgkPyTo23SJ5b7UQCMh4= @@ -563,17 +635,26 @@ github.com/libp2p/go-libp2p-gostream v0.2.1/go.mod h1:1Mjp3LDmkqICe5tH9yLVNCqFaR github.com/libp2p/go-libp2p-gostream v0.3.0 h1:rnas//vRdHYCr7bjraZJISPwZV8OGMjeX5k5fN5Ax44= github.com/libp2p/go-libp2p-gostream v0.3.0/go.mod h1:pLBQu8db7vBMNINGsAwLL/ZCE8wng5V1FThoaE5rNjc= github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go= +github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8= github.com/libp2p/go-libp2p-http v0.1.5 h1:FfLnzjlEzV4/6UCXCpPXRYZNoGCfogqCFjd7eF0Jbm8= github.com/libp2p/go-libp2p-http v0.1.5/go.mod h1:2YfPjsQxUlBGFQl2u461unkQ7ukwiSs7NX2eSslOJiU= -github.com/libp2p/go-libp2p-http v0.1.6-0.20210310045043-5508c68db693 h1:lWOwf2tAmBhqdQyuQOKUjwW1JzUPl5tqsYPdX6R779s= -github.com/libp2p/go-libp2p-http v0.1.6-0.20210310045043-5508c68db693/go.mod h1:2YfPjsQxUlBGFQl2u461unkQ7ukwiSs7NX2eSslOJiU= +github.com/libp2p/go-libp2p-http v0.2.0 h1:GYeVd+RZzkRa8XFLITqOpcrIQG6KbFLPJqII6HHBHzY= +github.com/libp2p/go-libp2p-http v0.2.0/go.mod h1:GlNKFqDZHe25LVy2CvnZKx75/jLtMaD3VxZV6N39X7E= github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k= github.com/libp2p/go-libp2p-kad-dht v0.9.0 h1:AKeFYZvfAa/32Sgm0LrPDxGXB62AUtU8MRqqMobBfUM= github.com/libp2p/go-libp2p-kad-dht v0.9.0/go.mod h1:LEKcCFHxnvypOPaqZ0m6h0fLQ9Y8t1iZMOg7a0aQDD4= +github.com/libp2p/go-libp2p-kad-dht v0.11.1 h1:FsriVQhOUZpCotWIjyFSjEDNJmUzuMma/RyyTDZanwc= +github.com/libp2p/go-libp2p-kad-dht v0.11.1/go.mod h1:5ojtR2acDPqh/jXf5orWy8YGb8bHQDS+qeDcoscL/PI= github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= +github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= +github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= +github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I= github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= @@ -584,18 +665,25 @@ github.com/libp2p/go-libp2p-mplex v0.3.0/go.mod h1:l9QWxRbbb5/hQMECEb908GbS9Sm2U github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= +github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= github.com/libp2p/go-libp2p-nat v0.0.6 h1:wMWis3kYynCbHoyKLPBEMu4YRLltbm8Mk08HGSfvTkU= github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= +github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= +github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q= github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ= github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= github.com/libp2p/go-libp2p-noise v0.1.1 h1:vqYQWvnIcHpIoWJKC7Al4D6Hgj0H012TuXRhPwSMGpQ= github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= +github.com/libp2p/go-libp2p-noise v0.1.2 h1:IH9GRihQJTx56obm+GnpdPX4KeVIlvpXrP6xnJ0wxWk= +github.com/libp2p/go-libp2p-noise v0.1.2/go.mod h1:9B10b7ueo7TIxZHHcjcDCo5Hd6kfKT2m77by82SFRfE= github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= +github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es= github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY= github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= +github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= @@ -609,13 +697,21 @@ github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuD github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= +github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= github.com/libp2p/go-libp2p-pubsub v0.3.2/go.mod h1:Uss7/Cfz872KggNb+doCVPHeCDmXB7z500m/R8DaAUk= github.com/libp2p/go-libp2p-pubsub v0.3.5 h1:iF75GWpcxKEUQU8tTkgLy69qIQvfhL+t6U6ndQrB6ho= github.com/libp2p/go-libp2p-pubsub v0.3.5/go.mod h1:DTMSVmZZfXodB/pvdTGrY2eHPZ9W2ev7hzTH83OKHrI= +github.com/libp2p/go-libp2p-pubsub v0.4.0/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= +github.com/libp2p/go-libp2p-pubsub v0.4.1 h1:j4umIg5nyus+sqNfU+FWvb9aeYFQH/A+nDFhWj+8yy8= +github.com/libp2p/go-libp2p-pubsub v0.4.1/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= github.com/libp2p/go-libp2p-pubsub-router v0.3.2 h1:BGC4irCUXlwmlCSxnA2DVDNY8JqhfAUUaiq3CZvcddw= github.com/libp2p/go-libp2p-pubsub-router v0.3.2/go.mod h1:G4MAvYzPxhoR0LEBluS9Ow+Nnr/8iDalUN+RNwVgNkY= +github.com/libp2p/go-libp2p-pubsub-router v0.4.0 h1:KjzTLIOBCt0+/4wH6epTxD/Qu4Up/IyeKHlj9MhWRJI= +github.com/libp2p/go-libp2p-pubsub-router v0.4.0/go.mod h1:hs0j0ugcBjMOMgJ6diOlZM2rZEId/w5Gg86E+ac4SmQ= github.com/libp2p/go-libp2p-quic-transport v0.8.0 h1:mHA94K2+TD0e9XtjWx/P5jGGZn0GdQ4OFYwNllagv4E= github.com/libp2p/go-libp2p-quic-transport v0.8.0/go.mod h1:F2FG/6Bzz0U6essUVxDzE0s9CrY4XGLbl7QEmDNvU7A= +github.com/libp2p/go-libp2p-quic-transport v0.10.0 h1:koDCbWD9CCHwcHZL3/WEvP2A+e/o5/W5L3QS/2SPMA0= +github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= @@ -625,11 +721,13 @@ github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= +github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0= github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= github.com/libp2p/go-libp2p-secio v0.2.2 h1:rLLPvShPQAcY6eNurKNZq3eZjPWfU9kXF2eI9jIYdrg= github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= +github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= @@ -640,6 +738,7 @@ github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJeg github.com/libp2p/go-libp2p-swarm v0.3.1/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= github.com/libp2p/go-libp2p-swarm v0.4.0 h1:hahq/ijRoeH6dgROOM8x7SeaKK5VgjjIr96vdrT+NUA= github.com/libp2p/go-libp2p-swarm v0.4.0/go.mod h1:XVFcO52VoLoo0eitSxNQWYq4D6sydGOweTOAjJNraCw= +github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -649,17 +748,22 @@ github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod github.com/libp2p/go-libp2p-testing v0.2.0 h1:DdC8Dthjf97Hz3t3siZCRD1U3nuNxQgEyTWvLh6ayvw= github.com/libp2p/go-libp2p-testing v0.2.0/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= -github.com/libp2p/go-libp2p-testing v0.4.0 h1:PrwHRi0IGqOwVQWR3xzgigSlhlLfxgfXgkHxr77EghQ= github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-tls v0.1.3 h1:twKMhMu44jQO+HgQK9X8NHO5HkeJu2QbhLzLJpa8oNM= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= +github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= +github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= +github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc= github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= github.com/libp2p/go-libp2p-transport-upgrader v0.3.0 h1:q3ULhsknEQ34eVDhv4YwKS8iet69ffs9+Fir6a7weN4= github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= github.com/libp2p/go-libp2p-transport-upgrader v0.4.0 h1:xwj4h3hJdBrxqMOyMUjwscjoVst0AASTsKtZiTChoHI= github.com/libp2p/go-libp2p-transport-upgrader v0.4.0/go.mod h1:J4ko0ObtZSmgn5BX5AmegP+dK3CSnU2lMCKsSq/EY0s= +github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= +github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= +github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI= github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw= github.com/libp2p/go-libp2p-yamux v0.2.5/go.mod h1:Zpgj6arbyQrmZ3wxSZxfBmbdnWtbZ48OpsfmQVTErwA= github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhLEn0XhIoZ5viCwU= @@ -669,10 +773,12 @@ github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelN github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= github.com/libp2p/go-libp2p-yamux v0.5.1 h1:sX4WQPHMhRxJE5UZTfjEuBvlQWXB5Bo3A2JK9ZJ9EM0= github.com/libp2p/go-libp2p-yamux v0.5.1/go.mod h1:dowuvDu8CRWmr0iqySMiSxK+W0iL5cMVO9S94Y6gkv4= +github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= +github.com/libp2p/go-mplex v0.0.4/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= @@ -682,9 +788,11 @@ github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= github.com/libp2p/go-nat v0.0.5 h1:qxnwkco8RLKqVh1NmjQ+tJ8p8khNLFxuElYG/TwqW4Q= github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= @@ -709,22 +817,30 @@ github.com/libp2p/go-sockaddr v0.1.0 h1:Y4s3/jNoryVRKEBrkJ576F17CPOaMIzUeCsg7dlT github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-socket-activation v0.0.2/go.mod h1:KP44C+yZ7gA8sTxavgaD0b8vXVFJwam2CEW0s7+f094= github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= +github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= +github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= +github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= github.com/libp2p/go-tcp-transport v0.2.1 h1:ExZiVQV+h+qL16fzCWtd1HSzPsqWottJ8KXwWaVi8Ns= github.com/libp2p/go-tcp-transport v0.2.1/go.mod h1:zskiJ70MEfWz2MKxvFB/Pv+tPIB1PpPUrHIWQ8aFw7M= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= +github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= +github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= +github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo= github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= github.com/libp2p/go-ws-transport v0.3.1 h1:ZX5rWB8nhRRJVaPO6tmkGI/Xx8XNboYX20PW5hXIscw= github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= github.com/libp2p/go-ws-transport v0.4.0 h1:9tvtQ9xbws6cA5LvqdE6Ne3vcmGB4f1z9SByggk4s0k= github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= +github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= @@ -738,22 +854,29 @@ github.com/libp2p/go-yamux/v2 v2.0.0 h1:vSGhAy5u6iHBq11ZDcyHH4Blcf9xlBhT4WQDoOE9 github.com/libp2p/go-yamux/v2 v2.0.0/go.mod h1:NVWira5+sVUIU6tu1JWvaRn1dRnG+cawOJiflsAM+7U= github.com/lucas-clemente/quic-go v0.18.0 h1:JhQDdqxdwdmGdKsKgXi1+coHRoGhvU6z0rNzOJqZ/4o= github.com/lucas-clemente/quic-go v0.18.0/go.mod h1:yXttHsSNxQi8AWijC/vLP+OJczXqzHSOcJrM5ITUlCg= +github.com/lucas-clemente/quic-go v0.19.3 h1:eCDQqvGBB+kCTkA0XrAFtNe81FMa0/fn4QSoeAbmiF4= +github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/marten-seemann/qpack v0.2.0/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= +github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= github.com/marten-seemann/qtls v0.10.0 h1:ECsuYUKalRL240rRD4Ri33ISb7kAQ3qGDlrrl55b2pc= github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= github.com/marten-seemann/qtls-go1-15 v0.1.0 h1:i/YPXVxz8q9umso/5y474CNcHmTpA+5DH+mFPjx6PZg= github.com/marten-seemann/qtls-go1-15 v0.1.0/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-15 v0.1.1 h1:LIH6K34bPVttyXnUWixk0bzH6/N07VxbSabxn5A5gZQ= +github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -829,6 +952,7 @@ github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUj github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-multistream v0.0.4/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= github.com/multiformats/go-multistream v0.1.2 h1:knyamLYMPFPngQjGQ0lhnlys3jtVR/3xV6TREUJr+fE= @@ -877,10 +1001,13 @@ github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXx github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a h1:hjZfReYVLbqFkAtr2us7vdy04YWz3LVAirzP7reh8+M= github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e h1:ZOcivgkkFRnjfoTcGsDq3UQYiBmekwLA+qg0OjyB/ls= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -891,14 +1018,18 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.6/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/statsd_exporter v0.15.0/go.mod h1:Dv8HnkoLQkeEjkIE4/2ndAA7WL1zHKK7WMqFQqu72rw= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -965,6 +1096,7 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -988,25 +1120,31 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20200402171437-3d27c146c105/go.mod h1:X github.com/whyrusleeping/cbor-gen v0.0.0-20200710004633-5379fc63235d/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b h1:Tju61pLCTYt5KZ9Y4wJKNR+IXB1k29M+0w3eW48Xqy0= github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 h1:bsUlNhdmbtlfdLVXAVfuvKQ01RnWAM09TVrJkI7NZs4= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= +github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8= github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1/go.mod h1:tKH72zYNt/exx6/5IQO6L9LoQ0rEjd5SbbWaDTs9Zso= github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= +github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 h1:Y1/FEOpaCpD21WxrmfeIYCFPuVPRCY2XZTWzTNHGw30= github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c/go.mod h1:xxcJeBb7SIUl/Wzkz1eVKJE/CB34YNrqX2TQI6jY9zs= +github.com/whyrusleeping/tar-utils v0.0.0-20201201191210-20a61371de5b/go.mod h1:xT1Y5p2JR2PfSZihE0s4mjdJaRGp1waCTf5JzhQLBck= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1015,6 +1153,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= @@ -1036,6 +1176,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= @@ -1046,11 +1188,13 @@ golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1064,6 +1208,9 @@ golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1094,6 +1241,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1110,7 +1258,9 @@ golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1124,6 +1274,8 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1142,6 +1294,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1160,9 +1314,11 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190524152521-dbbf3f1254d4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1171,6 +1327,7 @@ golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1187,6 +1344,10 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1233,12 +1394,17 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200827010519-17fd2f27a9e3 h1:r3P/5xOq/dK1991B65Oy6E1fRF/2d/fSYZJ/fXGVfJc= golang.org/x/tools v0.0.0-20200827010519-17fd2f27a9e3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1-0.20210225150353-54dc8c5edb56/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= @@ -1289,7 +1455,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.1 h1:C1QC6KzgSiLyBabDi87BbjaGreoRgGUF5nOyvfrAZ1k= google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From 1c05a1690863f6ee0eef09dfe508e0978e7a1036 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Wed, 10 Mar 2021 17:35:27 -0800 Subject: [PATCH 3/8] fix(testbed): cleanup go.mod, remove default files --- testbed/test-datasets/README.md | 5 -- testbed/test-datasets/xkcd.png | Bin 150846 -> 0 bytes testbed/testbed/go.mod | 2 - testbed/testbed/go.sum | 108 +++----------------------------- 4 files changed, 9 insertions(+), 106 deletions(-) delete mode 100644 testbed/test-datasets/README.md delete mode 100644 testbed/test-datasets/xkcd.png diff --git a/testbed/test-datasets/README.md b/testbed/test-datasets/README.md deleted file mode 100644 index 9c88f0b..0000000 --- a/testbed/test-datasets/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Test datasets - -This folder gets used by the testbed as the location to pull the data to run the benchmarks against. Remove this README.md and add any dataset you want to use in your tests. - -You can find multiple free datasets at https://awesome.ipfs.io/datasets for your own testing. \ No newline at end of file diff --git a/testbed/test-datasets/xkcd.png b/testbed/test-datasets/xkcd.png deleted file mode 100644 index c5aa9b0861a82ce45fab338f42739b33cf1a3510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150846 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 Date: Thu, 11 Mar 2021 08:08:05 -0800 Subject: [PATCH 4/8] feat(ipfs): simplify IPFS setup --- testbed/testbed/test/transfer.go | 11 +- testbed/testbed/utils/exchange.go | 44 ------- testbed/testbed/utils/ipfs.go | 193 ++++-------------------------- 3 files changed, 28 insertions(+), 220 deletions(-) delete mode 100644 testbed/testbed/utils/exchange.go diff --git a/testbed/testbed/test/transfer.go b/testbed/testbed/test/transfer.go index 1cb16c9..3198ed0 100644 --- a/testbed/testbed/test/transfer.go +++ b/testbed/testbed/test/transfer.go @@ -221,14 +221,15 @@ var supportedNodes = map[string]nodeInitializer{ func initializeIPFSTest(ctx context.Context, runenv *runtime.RunEnv, testvars *TestVars, baseT *TestData) (*NodeTestData, error) { - // Create IPFS node - runenv.RecordMessage("Preparing exchange for node: %v", testvars.ExchangeInterface) - // Set exchange Interface - exch, err := utils.SetExchange(ctx, testvars.ExchangeInterface) + // Use the same blockstore on all runs for the seed node + bstoreDelay := time.Duration(runenv.IntParam("bstore_delay_ms")) * time.Millisecond + + dStore, err := utils.CreateDatastore(testvars.DiskStore, bstoreDelay) if err != nil { return nil, err } - ipfsNode, err := utils.CreateIPFSNodeWithConfig(ctx, baseT.nConfig, exch, testvars.DHTEnabled, testvars.ProvidingEnabled) + + ipfsNode, err := utils.CreateIPFSNodeWithConfig(ctx, baseT.nConfig, testvars.DHTEnabled, testvars.ProvidingEnabled, dStore) if err != nil { runenv.RecordFailure(err) return nil, err diff --git a/testbed/testbed/utils/exchange.go b/testbed/testbed/utils/exchange.go deleted file mode 100644 index 0a8ff3f..0000000 --- a/testbed/testbed/utils/exchange.go +++ /dev/null @@ -1,44 +0,0 @@ -package utils - -import ( - "context" - "errors" - - "github.com/ipfs/go-bitswap" - "github.com/ipfs/go-bitswap/network" - blockstore "github.com/ipfs/go-ipfs-blockstore" - exchange "github.com/ipfs/go-ipfs-exchange-interface" - "github.com/ipfs/go-ipfs/core/node/helpers" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/routing" - "go.uber.org/fx" -) - -// ExchangeOpt injects exchange interface -type ExchangeOpt func(helpers.MetricsCtx, fx.Lifecycle, host.Host, - routing.Routing, blockstore.GCBlockstore) exchange.Interface - -// SetExchange sets the exchange interface to be used -func SetExchange(ctx context.Context, name string) (ExchangeOpt, error) { - switch name { - case "bitswap": - // Initializing bitswap exchange - return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, - host host.Host, rt routing.Routing, bs blockstore.GCBlockstore) exchange.Interface { - bitswapNetwork := network.NewFromIpfsHost(host, rt) - exch := bitswap.New(helpers.LifecycleCtx(mctx, lc), bitswapNetwork, bs) - - lc.Append(fx.Hook{ - OnStop: func(ctx context.Context) error { - return exch.Close() - }, - }) - return exch - }, nil - - // TODO: Add aditional exchanges here - default: - return nil, errors.New("This exchange interface is not implemented") - } - -} diff --git a/testbed/testbed/utils/ipfs.go b/testbed/testbed/utils/ipfs.go index 027670d..14c1c38 100644 --- a/testbed/testbed/utils/ipfs.go +++ b/testbed/testbed/utils/ipfs.go @@ -19,7 +19,6 @@ import ( "github.com/ipfs/go-merkledag" "github.com/ipfs/interface-go-ipfs-core/path" - blockstore "github.com/ipfs/go-ipfs-blockstore" config "github.com/ipfs/go-ipfs-config" "github.com/ipfs/go-metrics-interface" icore "github.com/ipfs/interface-go-ipfs-core" @@ -28,17 +27,13 @@ import ( "go.uber.org/fx" "github.com/ipfs/go-ipfs/core" - "github.com/ipfs/go-ipfs/core/bootstrap" "github.com/ipfs/go-ipfs/core/coreapi" "github.com/ipfs/go-ipfs/core/node" - "github.com/ipfs/go-ipfs/core/node/helpers" - "github.com/ipfs/go-ipfs/core/node/libp2p" - "github.com/ipfs/go-ipfs/p2p" // This package is needed so that all the preloaded plugins are loaded automatically + "github.com/ipfs/go-ipfs/core/node/libp2p" // This package is needed so that all the preloaded plugins are loaded automatically "github.com/ipfs/go-ipfs/repo" "github.com/libp2p/go-libp2p-core/host" "github.com/libp2p/go-libp2p-core/peer" - dsync "github.com/ipfs/go-datastore/sync" ci "github.com/libp2p/go-libp2p-core/crypto" ) @@ -120,148 +115,40 @@ func baseProcess(lc fx.Lifecycle) goprocess.Process { } // setConfig manually injects dependencies for the IPFS nodes. -func setConfig(ctx context.Context, nConfig *NodeConfig, exch ExchangeOpt, DHTenabled bool, providingEnabled bool) fx.Option { - - // Create new Datastore - // TODO: This is in memory we should have some other external DataStore for big files. - d := datastore.NewMapDatastore() +func setConfig(ctx context.Context, nConfig *NodeConfig, DHTenabled bool, providingEnabled bool, d datastore.Batching) *node.BuildCfg { + buildCfg := &node.BuildCfg{} // Initialize config. - cfg := &config.Config{} - - // Use defaultBootstrap - cfg.Bootstrap = config.DefaultBootstrapAddresses + cfg, _ := config.InitWithIdentity(config.Identity{PeerID: nConfig.AddrInfo.ID.Pretty(), PrivKey: base64.StdEncoding.EncodeToString(nConfig.PrivKey)}) //Allow the node to start in any available port. We do not use default ones. cfg.Addresses.Swarm = nConfig.Addrs - cfg.Identity.PeerID = nConfig.AddrInfo.ID.Pretty() - cfg.Identity.PrivKey = base64.StdEncoding.EncodeToString(nConfig.PrivKey) + if !providingEnabled { + cfg.Experimental.StrategicProviding = true + } + cfg.Discovery.MDNS.Enabled = false + // enable strateging providing to essentially disable all // Repo structure that encapsulate the config and datastore for dependency injection. - buildRepo := &repo.Mock{ - D: dsync.MutexWrap(d), + buildCfg.Repo = &repo.Mock{ + D: d, C: *cfg, } - repoOption := fx.Provide(func(lc fx.Lifecycle) repo.Repo { - lc.Append(fx.Hook{ - OnStop: func(ctx context.Context) error { - return buildRepo.Close() - }, - }) - return buildRepo - }) - - // Enable metrics in the node. - metricsCtx := fx.Provide(func() helpers.MetricsCtx { - return helpers.MetricsCtx(ctx) - }) - // Use DefaultHostOptions - hostOption := fx.Provide(func() libp2p.HostOption { - return libp2p.DefaultHostOption - }) - - dhtOption := libp2p.NilRouterOption + buildCfg.Routing = libp2p.NilRouterOption if DHTenabled { - dhtOption = libp2p.DHTOption // This option sets the node to be a full DHT node (both fetching and storing DHT Records) + buildCfg.Routing = libp2p.DHTOption // This option sets the node to be a full DHT node (both fetching and storing DHT Records) //dhtOption = libp2p.DHTClientOption, // This option sets the node to be a client DHT node (only fetching records) } - // Use libp2p.DHTOption. Could also use DHTClientOption. - routingOption := fx.Provide(func() libp2p.RoutingOption { - // return libp2p.DHTClientOption - //TODO: Reminder. DHTRouter disabled. - return dhtOption - }) - - // Return repo datastore - repoDS := func(repo repo.Repo) datastore.Datastore { - return d - } - - // Assign some defualt values. - var repubPeriod, recordLifetime time.Duration - ipnsCacheSize := cfg.Ipns.ResolveCacheSize - enableRelay := cfg.Swarm.Transports.Network.Relay.WithDefault(!cfg.Swarm.DisableRelay) //nolint - - providingOptions := node.OfflineProviders(cfg.Experimental.StrategicProviding, cfg.Reprovider.Strategy, cfg.Reprovider.Interval) - if providingEnabled { - providingOptions = node.OnlineProviders(cfg.Experimental.StrategicProviding, cfg.Reprovider.Strategy, cfg.Reprovider.Interval) - } - - // Inject all dependencies for the node. - // Many of the default dependencies being used. If you want to manually set any of them - // follow: https://github.com/ipfs/go-ipfs/blob/master/core/node/groups.go - return fx.Options( - // RepoConfigurations - repoOption, - hostOption, - routingOption, - metricsCtx, - - // Setting baseProcess - fx.Provide(baseProcess), - - // Storage configuration - fx.Provide(repoDS), - fx.Provide(node.BaseBlockstoreCtor(blockstore.DefaultCacheOpts(), - false, cfg.Datastore.HashOnRead)), - fx.Provide(node.GcBlockstoreCtor), - - // Identity dependencies - node.Identity(cfg), - - //IPNS dependencies - node.IPNS, - - // Network dependencies - // Set exchange option. - fx.Provide(exch), - // Provide graphsync - fx.Provide(node.Namesys(ipnsCacheSize)), - fx.Provide(node.Peering), - node.PeerWith(cfg.Peering.Peers...), - - fx.Invoke(node.IpnsRepublisher(repubPeriod, recordLifetime)), - - fx.Provide(p2p.New), - - // Libp2p dependencies - node.BaseLibP2P, - fx.Provide(libp2p.AddrFilters(cfg.Swarm.AddrFilters)), - fx.Provide(libp2p.AddrsFactory(cfg.Addresses.Announce, cfg.Addresses.NoAnnounce)), - fx.Provide(libp2p.SmuxTransport(cfg.Swarm.Transports)), - fx.Provide(libp2p.Relay(enableRelay, cfg.Swarm.EnableRelayHop)), - fx.Provide(libp2p.Transports(cfg.Swarm.Transports)), - fx.Invoke(libp2p.StartListening(cfg.Addresses.Swarm)), - // TODO: Reminder. MDN discovery disabled. - fx.Invoke(libp2p.SetupDiscovery(false, cfg.Discovery.MDNS.Interval)), - fx.Provide(libp2p.Routing), - fx.Provide(libp2p.BaseRouting), - // Enable IPFS bandwidth metrics. - fx.Provide(libp2p.BandwidthCounter), - - // TODO: Here you can see some more of the libp2p dependencies you could set. - // fx.Provide(libp2p.Security(!bcfg.DisableEncryptedConnections, cfg.Swarm.Transports)), - // maybeProvide(libp2p.PubsubRouter, bcfg.getOpt("ipnsps")), - // maybeProvide(libp2p.BandwidthCounter, !cfg.Swarm.DisableBandwidthMetrics), - // maybeProvide(libp2p.NatPortMap, !cfg.Swarm.DisableNatPortMap), - // maybeProvide(libp2p.AutoRelay, cfg.Swarm.EnableAutoRelay), - // autonat, // Sets autonat - // connmgr, // Set connection manager - // ps, // Sets pubsub router - // disc, // Sets discovery service - providingOptions, - - // Core configuration - node.Core, - ) + buildCfg.Host = libp2p.DefaultHostOption + buildCfg.Online = true + return buildCfg } // CreateIPFSNodeWithConfig constructs and returns an IpfsNode using the given cfg. -func CreateIPFSNodeWithConfig(ctx context.Context, nConfig *NodeConfig, exch ExchangeOpt, DHTEnabled bool, providingEnabled bool) (*IPFSNode, error) { +func CreateIPFSNodeWithConfig(ctx context.Context, nConfig *NodeConfig, DHTEnabled bool, providingEnabled bool, d datastore.Batching) (*IPFSNode, error) { // save this context as the "lifetime" ctx. - lctx := ctx // derive a new context that ignores cancellations from the lifetime ctx. ctx, cancel := context.WithCancel(ctx) @@ -269,61 +156,25 @@ func CreateIPFSNodeWithConfig(ctx context.Context, nConfig *NodeConfig, exch Exc // add a metrics scope. ctx = metrics.CtxScope(ctx, "ipfs") - n := &core.IpfsNode{} - - app := fx.New( - // Inject dependencies in the node. - setConfig(ctx, nConfig, exch, DHTEnabled, providingEnabled), - - fx.NopLogger, - fx.Extract(n), - ) + buildCfg := setConfig(ctx, nConfig, DHTEnabled, providingEnabled, d) + n, err := core.NewNode(ctx, buildCfg) + if err != nil { + return nil, fmt.Errorf("Failed constructing node: %s", err) + } var once sync.Once var stopErr error stopNode := func() error { once.Do(func() { - stopErr = app.Stop(context.Background()) - if stopErr != nil { - fmt.Errorf("failure on stop: %w", stopErr) - } // Cancel the context _after_ the app has stopped. cancel() }) return stopErr } - // Set node to Online mode. - n.IsOnline = true - - go func() { - // Shut down the application if the lifetime context is canceled. - // NOTE: we _should_ stop the application by calling `Close()` - // on the process. But we currently manage everything with contexts. - select { - case <-lctx.Done(): - err := stopNode() - if err != nil { - fmt.Errorf("failure on stop: %v", err) - } - case <-ctx.Done(): - } - }() - - if app.Err() != nil { - return nil, app.Err() - } - if err := app.Start(ctx); err != nil { - return nil, err - } - - if err := n.Bootstrap(bootstrap.DefaultBootstrapConfig); err != nil { - return nil, fmt.Errorf("Failed starting the node: %s", err) - } api, err := coreapi.NewCoreAPI(n) if err != nil { return nil, fmt.Errorf("Failed starting API: %s", err) - } // Attach the Core API to the constructed node From f3027475573bca4696d6636863e611d644a42295 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Thu, 11 Mar 2021 08:20:25 -0800 Subject: [PATCH 5/8] feat(ipfs): move ipld in ipfs compositions --- .../compositions}/ipld-prime-in-ipfs/baseline.toml | 4 ++-- .../compositions}/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename {RFC => testbed/compositions}/ipld-prime-in-ipfs/baseline.toml (93%) rename {RFC => testbed/compositions}/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml (94%) diff --git a/RFC/ipld-prime-in-ipfs/baseline.toml b/testbed/compositions/ipld-prime-in-ipfs/baseline.toml similarity index 93% rename from RFC/ipld-prime-in-ipfs/baseline.toml rename to testbed/compositions/ipld-prime-in-ipfs/baseline.toml index 06db189..eb991d1 100644 --- a/RFC/ipld-prime-in-ipfs/baseline.toml +++ b/testbed/compositions/ipld-prime-in-ipfs/baseline.toml @@ -31,8 +31,8 @@ passive_count = "0" max_connection_rate = "100" # input_data = "random" # file_size = "10000000,30000000,50000000" -latency_ms= "100,10" -bandwidth_mb= "100,50" +latency_ms= "10" +bandwidth_mb= "100" enable_tcp= "false" enable_dht= "false" node_type = "ipfs" diff --git a/RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml similarity index 94% rename from RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml rename to testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml index 70240a6..18ba327 100644 --- a/RFC/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml +++ b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml @@ -32,8 +32,8 @@ passive_count = "0" max_connection_rate = "100" # input_data = "random" # file_size = "10000000,30000000,50000000" -latency_ms= "100,10" -bandwidth_mb= "100,50" +latency_ms= "10" +bandwidth_mb= "100" enable_tcp= "false" enable_dht= "false" node_type = "ipfs" From dd14671333dffb013d7b0bdd9f2072e6ca3c3dbf Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Thu, 11 Mar 2021 09:23:51 -0800 Subject: [PATCH 6/8] feat(ipldinipfs): convert bandwidths --- testbed/compositions/ipld-prime-in-ipfs/baseline.toml | 4 ++-- .../compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/testbed/compositions/ipld-prime-in-ipfs/baseline.toml b/testbed/compositions/ipld-prime-in-ipfs/baseline.toml index eb991d1..e0ad80f 100644 --- a/testbed/compositions/ipld-prime-in-ipfs/baseline.toml +++ b/testbed/compositions/ipld-prime-in-ipfs/baseline.toml @@ -31,8 +31,8 @@ passive_count = "0" max_connection_rate = "100" # input_data = "random" # file_size = "10000000,30000000,50000000" -latency_ms= "10" -bandwidth_mb= "100" +latency_ms= "0" +bandwidth_mb= "0" enable_tcp= "false" enable_dht= "false" node_type = "ipfs" diff --git a/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml index 18ba327..a9c9882 100644 --- a/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml +++ b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml @@ -32,8 +32,8 @@ passive_count = "0" max_connection_rate = "100" # input_data = "random" # file_size = "10000000,30000000,50000000" -latency_ms= "10" -bandwidth_mb= "100" +latency_ms= "0" +bandwidth_mb= "0" enable_tcp= "false" enable_dht= "false" node_type = "ipfs" From c3d780f851623b6a83c6302755ea027cc7f61a7a Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Thu, 11 Mar 2021 11:53:55 -0800 Subject: [PATCH 7/8] fix(test-datasets): put back .gitkeep to retain folder --- testbed/test-datasets/.gitkeep | 0 testbed/testbed/utils/files.go | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 testbed/test-datasets/.gitkeep diff --git a/testbed/test-datasets/.gitkeep b/testbed/test-datasets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/testbed/testbed/utils/files.go b/testbed/testbed/utils/files.go index 732bb88..65363dc 100644 --- a/testbed/testbed/utils/files.go +++ b/testbed/testbed/utils/files.go @@ -129,6 +129,9 @@ func GetFileList(runenv *runtime.RunEnv) ([]TestFile, error) { } for _, file := range files { + if file.Name() == ".gitkeep" { + continue + } var size int64 // Assign the right size. From 77f5ecb6b8af740d0848b7ebfe8c9b8a2db88022 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Fri, 12 Mar 2021 08:49:04 -0800 Subject: [PATCH 8/8] feat(testbed): support linksystem branches with go-graphsync --- .../ipld-prime-in-ipfs.toml | 3 ++- testbed/testbed/utils/graphsync.go | 8 ++------ .../utils/gsbuilder/gsbuilder_linksystem.go | 19 ++++++++++++++++++ .../gsbuilder/gsbuilder_prelinksystem.go | 20 +++++++++++++++++++ 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 testbed/testbed/utils/gsbuilder/gsbuilder_linksystem.go create mode 100644 testbed/testbed/utils/gsbuilder/gsbuilder_prelinksystem.go diff --git a/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml index a9c9882..7d540dd 100644 --- a/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml +++ b/testbed/compositions/ipld-prime-in-ipfs/ipld-prime-in-ipfs.toml @@ -16,8 +16,9 @@ instances = { count = 2 } [groups.build] skip_runtime_image = "true" +selectors = [ "linksystem" ] dependencies = [ - { module = "github.com/ipfs/go-ipfs", target="github.com/ipfs/go-ipfs", version = "02cbfda8a07d7cc48bae2dfa904cfbd1e47a068e"} + { module = "github.com/ipfs/go-ipfs", target="github.com/ipfs/go-ipfs", version = "619b55ce69d830d0d53fb59e57731abeacb3b295"} ] [groups.run] diff --git a/testbed/testbed/utils/graphsync.go b/testbed/testbed/utils/graphsync.go index eeb450c..65667ae 100644 --- a/testbed/testbed/utils/graphsync.go +++ b/testbed/testbed/utils/graphsync.go @@ -8,9 +8,7 @@ import ( "github.com/ipfs/go-blockservice" "github.com/ipfs/go-cid" "github.com/ipfs/go-graphsync" - gsimpl "github.com/ipfs/go-graphsync/impl" "github.com/ipfs/go-graphsync/network" - "github.com/ipfs/go-graphsync/storeutil" blockstore "github.com/ipfs/go-ipfs-blockstore" offline "github.com/ipfs/go-ipfs-exchange-offline" files "github.com/ipfs/go-ipfs-files" @@ -19,6 +17,7 @@ import ( unixfile "github.com/ipfs/go-unixfs/file" "github.com/ipfs/go-unixfs/importer/helpers" "github.com/pkg/errors" + "github.com/protocol/beyond-bitswap/testbed/testbed/utils/gsbuilder" allselector "github.com/hannahhoward/all-selector" "github.com/ipld/go-ipld-prime" @@ -41,10 +40,7 @@ func CreateGraphsyncNode(ctx context.Context, h host.Host, bstore blockstore.Blo net := network.NewFromLibp2pHost(h) bserv := blockservice.New(bstore, offline.Exchange(bstore)) dserv := merkledag.NewDAGService(bserv) - gs := gsimpl.New(ctx, net, - storeutil.LoaderForBlockstore(bstore), - storeutil.StorerForBlockstore(bstore), - ) + gs := gsbuilder.BuildGraphsync(ctx, net, bstore) n := &GraphsyncNode{gs, bstore, dserv, h, 0, 0, numSeeds} gs.RegisterBlockSentListener(n.onDataSent) gs.RegisterIncomingBlockHook(n.onDataReceived) diff --git a/testbed/testbed/utils/gsbuilder/gsbuilder_linksystem.go b/testbed/testbed/utils/gsbuilder/gsbuilder_linksystem.go new file mode 100644 index 0000000..b187d56 --- /dev/null +++ b/testbed/testbed/utils/gsbuilder/gsbuilder_linksystem.go @@ -0,0 +1,19 @@ +// +build linksystem + +package gsbuilder + +import ( + "context" + + "github.com/ipfs/go-graphsync" + gsimpl "github.com/ipfs/go-graphsync/impl" + gsnet "github.com/ipfs/go-graphsync/network" + "github.com/ipfs/go-graphsync/storeutil" + blockstore "github.com/ipfs/go-ipfs-blockstore" +) + +func BuildGraphsync(ctx context.Context, net gsnet.GraphSyncNetwork, bstore blockstore.Blockstore) graphsync.GraphExchange { + return gsimpl.New(ctx, net, + storeutil.LinkSystemForBlockstore(bstore), + ) +} diff --git a/testbed/testbed/utils/gsbuilder/gsbuilder_prelinksystem.go b/testbed/testbed/utils/gsbuilder/gsbuilder_prelinksystem.go new file mode 100644 index 0000000..c90b188 --- /dev/null +++ b/testbed/testbed/utils/gsbuilder/gsbuilder_prelinksystem.go @@ -0,0 +1,20 @@ +// +build !linksystem + +package gsbuilder + +import ( + "context" + + "github.com/ipfs/go-graphsync" + gsimpl "github.com/ipfs/go-graphsync/impl" + gsnet "github.com/ipfs/go-graphsync/network" + "github.com/ipfs/go-graphsync/storeutil" + blockstore "github.com/ipfs/go-ipfs-blockstore" +) + +func BuildGraphsync(ctx context.Context, net gsnet.GraphSyncNetwork, bstore blockstore.Blockstore) graphsync.GraphExchange { + return gsimpl.New(ctx, net, + storeutil.LoaderForBlockstore(bstore), + storeutil.StorerForBlockstore(bstore), + ) +}