From d65b8abf12b76a118f4aea1200d0bb6498b446dc Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 12 May 2023 15:15:14 +0200 Subject: [PATCH 01/14] feat: expose routing v1 server via optional setting --- cmd/ipfs/daemon.go | 4 + config/gateway.go | 5 + config/routing.go | 18 --- core/corehttp/gateway.go | 4 +- core/corehttp/routing.go | 124 ++++++++++++++++ core/node/libp2p/routingopt.go | 6 +- docs/changelogs/v0.23.md | 8 ++ docs/config.md | 10 ++ docs/examples/kubo-as-a-library/go.mod | 4 +- docs/examples/kubo-as-a-library/go.sum | 8 +- go.mod | 3 +- go.sum | 7 +- routing/delegated.go | 76 ++-------- routing/delegated_test.go | 42 +----- routing/wrapper.go | 15 +- test/cli/content_routing_http_test.go | 32 ++--- ... delegated_routing_v1_http_client_test.go} | 24 ++-- .../delegated_routing_v1_http_server_test.go | 134 ++++++++++++++++++ test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 +- 20 files changed, 335 insertions(+), 195 deletions(-) create mode 100644 core/corehttp/routing.go rename test/cli/{delegated_routing_http_test.go => delegated_routing_v1_http_client_test.go} (90%) create mode 100644 test/cli/delegated_routing_v1_http_server_test.go diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 7be97e23ba1..84cf3b365ab 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -848,6 +848,10 @@ func serveHTTPGateway(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, e opts = append(opts, corehttp.P2PProxyOption()) } + if cfg.Gateway.ExposeRoutingAPI.WithDefault(config.DefaultExposeRoutingAPI) { + opts = append(opts, corehttp.RoutingOption()) + } + if len(cfg.Gateway.RootRedirect) > 0 { opts = append(opts, corehttp.RedirectOption("", cfg.Gateway.RootRedirect)) } diff --git a/config/gateway.go b/config/gateway.go index a655828496e..e38396ec766 100644 --- a/config/gateway.go +++ b/config/gateway.go @@ -3,6 +3,7 @@ package config const ( DefaultInlineDNSLink = false DefaultDeserializedResponses = true + DefaultExposeRoutingAPI = false ) type GatewaySpec struct { @@ -72,4 +73,8 @@ type Gateway struct { // PublicGateways configures behavior of known public gateways. // Each key is a fully qualified domain name (FQDN). PublicGateways map[string]*GatewaySpec + + // ExposeRoutingAPI configures the gateway to expose a Routing v1 HTTP Server + // under /routing/v1: https://specs.ipfs.tech/routing/routing-v1/. + ExposeRoutingAPI Flag } diff --git a/config/routing.go b/config/routing.go index 60faa605cce..d138fbb2d33 100644 --- a/config/routing.go +++ b/config/routing.go @@ -3,7 +3,6 @@ package config import ( "encoding/json" "fmt" - "runtime" ) // Routing defines configuration options for libp2p routing. @@ -133,23 +132,6 @@ var MethodNameList = []MethodName{MethodNameProvide, MethodNameFindPeers, Method type HTTPRouterParams struct { // Endpoint is the URL where the routing implementation will point to get the information. Endpoint string - - // MaxProvideBatchSize determines the maximum amount of CIDs sent per batch. - // Servers might not accept more than 100 elements per batch. 100 elements by default. - MaxProvideBatchSize int - - // MaxProvideConcurrency determines the number of threads used when providing content. GOMAXPROCS by default. - MaxProvideConcurrency int -} - -func (hrp *HTTPRouterParams) FillDefaults() { - if hrp.MaxProvideBatchSize == 0 { - hrp.MaxProvideBatchSize = 100 - } - - if hrp.MaxProvideConcurrency == 0 { - hrp.MaxProvideConcurrency = runtime.GOMAXPROCS(0) - } } type DHTRouterParams struct { diff --git a/core/corehttp/gateway.go b/core/corehttp/gateway.go index 105fa89af75..a02d7846da9 100644 --- a/core/corehttp/gateway.go +++ b/core/corehttp/gateway.go @@ -164,8 +164,8 @@ func (o *offlineGatewayErrWrapper) IsCached(ctx context.Context, path path.Path) return o.gwimpl.IsCached(ctx, path) } -func (o *offlineGatewayErrWrapper) GetIPNSRecord(ctx context.Context, c cid.Cid) ([]byte, error) { - rec, err := o.gwimpl.GetIPNSRecord(ctx, c) +func (o *offlineGatewayErrWrapper) FindIPNS(ctx context.Context, c cid.Cid) ([]byte, error) { + rec, err := o.gwimpl.FindIPNS(ctx, c) err = offlineErrWrap(err) return rec, err } diff --git a/core/corehttp/routing.go b/core/corehttp/routing.go new file mode 100644 index 00000000000..6939c3ac557 --- /dev/null +++ b/core/corehttp/routing.go @@ -0,0 +1,124 @@ +package corehttp + +import ( + "context" + "net" + "net/http" + + "github.com/ipfs/boxo/ipns" + "github.com/ipfs/boxo/routing/http/server" + "github.com/ipfs/boxo/routing/http/types" + "github.com/ipfs/boxo/routing/http/types/iter" + cid "github.com/ipfs/go-cid" + core "github.com/ipfs/kubo/core" + "github.com/libp2p/go-libp2p/core/peer" +) + +func RoutingOption() ServeOption { + return func(n *core.IpfsNode, _ net.Listener, mux *http.ServeMux) (*http.ServeMux, error) { + handler := server.Handler(&contentRouter{n}) + mux.Handle("/routing/v1/", handler) + return mux, nil + } +} + +type contentRouter struct { + n *core.IpfsNode +} + +func (r *contentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { + ctx, cancel := context.WithCancel(ctx) + ch := r.n.Routing.FindProvidersAsync(ctx, key, limit) + return iter.ToResultIter[types.Record](&peerChanIter{ + ch: ch, + cancel: cancel, + }), nil +} + +func (r *contentRouter) FindPeers(ctx context.Context, pid peer.ID, limit int) (iter.ResultIter[types.Record], error) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + addr, err := r.n.Routing.FindPeer(ctx, pid) + if err != nil { + return nil, err + } + + rec := &types.PeerRecord{ + Schema: types.SchemaPeer, + ID: &addr.ID, + } + + for _, addr := range addr.Addrs { + rec.Addrs = append(rec.Addrs, types.Multiaddr{Multiaddr: addr}) + } + + return iter.ToResultIter[types.Record](iter.FromSlice[types.Record]([]types.Record{rec})), nil +} + +func (r *contentRouter) FindIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + raw, err := r.n.Routing.GetValue(ctx, string(name.RoutingKey())) + if err != nil { + return nil, err + } + + return ipns.UnmarshalRecord(raw) +} + +func (r *contentRouter) ProvideIPNS(ctx context.Context, name ipns.Name, record *ipns.Record) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + raw, err := ipns.MarshalRecord(record) + if err != nil { + return err + } + + // The caller guarantees that name matches the record. This is double checked + // by the internals of PutValue. + return r.n.Routing.PutValue(ctx, string(name.RoutingKey()), raw) +} + +type peerChanIter struct { + ch <-chan peer.AddrInfo + cancel context.CancelFunc + next *peer.AddrInfo +} + +func (it *peerChanIter) Next() bool { + addr, ok := <-it.ch + if ok { + it.next = &addr + return true + } else { + it.next = nil + return false + } +} + +func (it *peerChanIter) Val() types.Record { + if it.next == nil { + return nil + } + + // We don't know what type of protocol this peer provides. It is likely Bitswap + // but it might not be. Therefore, we set an unknown protocol with an unknown schema. + rec := &types.PeerRecord{ + Schema: types.SchemaPeer, + ID: &it.next.ID, + } + + for _, addr := range it.next.Addrs { + rec.Addrs = append(rec.Addrs, types.Multiaddr{Multiaddr: addr}) + } + + return rec +} + +func (it *peerChanIter) Close() error { + it.cancel() + return nil +} diff --git a/core/node/libp2p/routingopt.go b/core/node/libp2p/routingopt.go index 82b68361d64..f91bd1d0917 100644 --- a/core/node/libp2p/routingopt.go +++ b/core/node/libp2p/routingopt.go @@ -135,11 +135,7 @@ func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, p Datastore: args.Datastore, Context: args.Ctx, }, - &irouting.ExtraHTTPParams{ - PeerID: peerID, - Addrs: httpAddrsFromConfig(addrs), - PrivKeyB64: privKey, - }) + ) } } diff --git a/docs/changelogs/v0.23.md b/docs/changelogs/v0.23.md index c2267a8e198..f2fefb07f17 100644 --- a/docs/changelogs/v0.23.md +++ b/docs/changelogs/v0.23.md @@ -9,6 +9,7 @@ - [Mplex deprecation](#mplex-deprecation) - [Gateway: meaningful CAR responses on Not Found errors](#gateway-meaningful-car-responses-on-not-found-errors) - [Binary characters in file names: no longer works with old clients and new Kubo servers](#binary-characters-in-file-names-no-longer-works-with-old-clients-and-new-kubo-servers) + - [Local Gateway: optional support for `/routing/v1` endpoint](#local-gateway-optional-support-for-routingv1-endpoint) - [๐Ÿ“ Changelog](#-changelog) - [๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Contributors](#-contributors) @@ -59,6 +60,13 @@ the compatibility table: *Old clients can only send Unicode file paths to the server. +#### Self-hosting `/routing/v1` endpoint for delegated routing needs + +The `Routing` system configured in Kubo can be now exposed on the gateway port as a standard +HTTP [Routing V1](https://specs.ipfs.tech/routing/http-routing-v1/) API endpoint. This allows +self-hosting and experimentation with custom delegated routers. This is disabled by default, +but can be enabled by setting `Config.Gateway.ExposeRoutingAPI = true`. + ### ๐Ÿ“ Changelog ### ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Contributors diff --git a/docs/config.md b/docs/config.md index c24b2b23f83..dd3eed39060 100644 --- a/docs/config.md +++ b/docs/config.md @@ -658,6 +658,16 @@ Default: `true` Type: `flag` +#### `Gateway.ExposeRoutingAPI` + +An optional flag to expose Kubo `Routing` system on the gateway port as a [Routing +V1](https://specs.ipfs.tech/routing/routing-v1/) endpoint. This only affects your +local gateway, at `127.0.0.1`. + +Default: `false` + +Type: `flag` + ### `Gateway.HTTPHeaders` Headers to set on gateway responses. diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index 29aa6c5a79b..4bbf7f87082 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7 + github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 @@ -52,7 +52,6 @@ require ( github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect @@ -152,7 +151,6 @@ require ( github.com/quic-go/quic-go v0.38.0 // indirect github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect - github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 0a262a49785..5e345d901ad 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -270,7 +270,6 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -301,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230822135301-303595bcdba7 h1:f7n4M8UIf+4BY6Q0kcZ5FbpkxKaIqq/BW3evqI87DNo= -github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= @@ -654,8 +653,6 @@ github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjR github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= -github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= -github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= @@ -722,7 +719,6 @@ github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpP github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= diff --git a/go.mod b/go.mod index caebd660e4e..b8135a46f16 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7 + github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 @@ -196,7 +196,6 @@ require ( github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rs/cors v1.7.0 // indirect - github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e // indirect github.com/tidwall/match v1.1.1 // indirect diff --git a/go.sum b/go.sum index 2ffd7ff357a..68e1c7d52b0 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230822135301-303595bcdba7 h1:f7n4M8UIf+4BY6Q0kcZ5FbpkxKaIqq/BW3evqI87DNo= -github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= @@ -761,8 +761,6 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= -github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= -github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= @@ -835,7 +833,6 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45 github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e h1:T5PdfK/M1xyrHwynxMIVMWLS7f/qHwfslZphxtGnw7s= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= -github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= diff --git a/routing/delegated.go b/routing/delegated.go index 6d34970f556..d30049f24d4 100644 --- a/routing/delegated.go +++ b/routing/delegated.go @@ -2,7 +2,6 @@ package routing import ( "context" - "encoding/base64" "errors" "fmt" "net/http" @@ -18,17 +17,15 @@ import ( "github.com/libp2p/go-libp2p-kad-dht/fullrt" record "github.com/libp2p/go-libp2p-record" routinghelpers "github.com/libp2p/go-libp2p-routing-helpers" - ic "github.com/libp2p/go-libp2p/core/crypto" host "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/routing" - ma "github.com/multiformats/go-multiaddr" "go.opencensus.io/stats/view" ) var log = logging.Logger("routing/delegated") -func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTParams, extraHTTP *ExtraHTTPParams) (routing.Routing, error) { +func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTParams) (routing.Routing, error) { if err := methods.Check(); err != nil { return nil, err } @@ -38,7 +35,7 @@ func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTPar // Create all needed routers from method names for mn, m := range methods { - router, err := parse(make(map[string]bool), createdRouters, m.RouterName, routers, extraDHT, extraHTTP) + router, err := parse(make(map[string]bool), createdRouters, m.RouterName, routers, extraDHT) if err != nil { return nil, err } @@ -67,7 +64,6 @@ func parse(visited map[string]bool, routerName string, routersCfg config.Routers, extraDHT *ExtraDHTParams, - extraHTTP *ExtraHTTPParams, ) (routing.Routing, error) { // check if we already created it r, ok := createdRouters[routerName] @@ -92,14 +88,14 @@ func parse(visited map[string]bool, var err error switch cfg.Type { case config.RouterTypeHTTP: - router, err = httpRoutingFromConfig(cfg.Router, extraHTTP) + router, err = httpRoutingFromConfig(cfg.Router) case config.RouterTypeDHT: router, err = dhtRoutingFromConfig(cfg.Router, extraDHT) case config.RouterTypeParallel: crp := cfg.Parameters.(*config.ComposableRouterParams) var pr []*routinghelpers.ParallelRouter for _, cr := range crp.Routers { - ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT, extraHTTP) + ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT) if err != nil { return nil, err } @@ -119,7 +115,7 @@ func parse(visited map[string]bool, crp := cfg.Parameters.(*config.ComposableRouterParams) var sr []*routinghelpers.SequentialRouter for _, cr := range crp.Routers { - ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT, extraHTTP) + ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT) if err != nil { return nil, err } @@ -148,12 +144,6 @@ func parse(visited map[string]bool, return router, nil } -type ExtraHTTPParams struct { - PeerID string - Addrs []string - PrivKeyB64 string -} - func ConstructHTTPRouter(endpoint string, peerID string, addrs []string, privKey string) (routing.Routing, error) { return httpRoutingFromConfig( config.Router{ @@ -162,22 +152,15 @@ func ConstructHTTPRouter(endpoint string, peerID string, addrs []string, privKey Endpoint: endpoint, }, }, - &ExtraHTTPParams{ - PeerID: peerID, - Addrs: addrs, - PrivKeyB64: privKey, - }, ) } -func httpRoutingFromConfig(conf config.Router, extraHTTP *ExtraHTTPParams) (routing.Routing, error) { +func httpRoutingFromConfig(conf config.Router) (routing.Routing, error) { params := conf.Parameters.(*config.HTTPRouterParams) if params.Endpoint == "" { return nil, NewParamNeededErr("Endpoint", conf.Type) } - params.FillDefaults() - // Increase per-host connection pool since we are making lots of concurrent requests. transport := http.DefaultTransport.(*http.Transport).Clone() transport.MaxIdleConns = 500 @@ -190,21 +173,9 @@ func httpRoutingFromConfig(conf config.Router, extraHTTP *ExtraHTTPParams) (rout }, } - key, err := decodePrivKey(extraHTTP.PrivKeyB64) - if err != nil { - return nil, err - } - - addrInfo, err := createAddrInfo(extraHTTP.PeerID, extraHTTP.Addrs) - if err != nil { - return nil, err - } - cli, err := drclient.New( params.Endpoint, drclient.WithHTTPClient(delegateHTTPClient), - drclient.WithIdentity(key), - drclient.WithProviderInfo(addrInfo.ID, addrInfo.Addrs), drclient.WithUserAgent(version.GetUserAgentVersion()), ) if err != nil { @@ -213,8 +184,6 @@ func httpRoutingFromConfig(conf config.Router, extraHTTP *ExtraHTTPParams) (rout cr := contentrouter.NewContentRoutingClient( cli, - contentrouter.WithMaxProvideBatchSize(params.MaxProvideBatchSize), - contentrouter.WithMaxProvideConcurrency(params.MaxProvideConcurrency), ) err = view.Register(drclient.OpenCensusViews...) @@ -224,41 +193,12 @@ func httpRoutingFromConfig(conf config.Router, extraHTTP *ExtraHTTPParams) (rout return &httpRoutingWrapper{ ContentRouting: cr, + PeerRouting: cr, + ValueStore: cr, ProvideManyRouter: cr, }, nil } -func decodePrivKey(keyB64 string) (ic.PrivKey, error) { - pk, err := base64.StdEncoding.DecodeString(keyB64) - if err != nil { - return nil, err - } - - return ic.UnmarshalPrivateKey(pk) -} - -func createAddrInfo(peerID string, addrs []string) (peer.AddrInfo, error) { - pID, err := peer.Decode(peerID) - if err != nil { - return peer.AddrInfo{}, err - } - - var mas []ma.Multiaddr - for _, a := range addrs { - m, err := ma.NewMultiaddr(a) - if err != nil { - return peer.AddrInfo{}, err - } - - mas = append(mas, m) - } - - return peer.AddrInfo{ - ID: pID, - Addrs: mas, - }, nil -} - type ExtraDHTParams struct { BootstrapPeers []peer.AddrInfo Host host.Host diff --git a/routing/delegated_test.go b/routing/delegated_test.go index 028f3b465f6..d1b2c5b766c 100644 --- a/routing/delegated_test.go +++ b/routing/delegated_test.go @@ -1,22 +1,15 @@ package routing import ( - "crypto/rand" - "encoding/base64" "testing" "github.com/ipfs/kubo/config" - "github.com/libp2p/go-libp2p/core/crypto" - "github.com/libp2p/go-libp2p/core/peer" "github.com/stretchr/testify/require" ) func TestParser(t *testing.T) { require := require.New(t) - pid, sk, err := generatePeerID() - require.NoError(err) - router, err := Parse(config.Routers{ "r1": config.RouterParser{ Router: config.Router{ @@ -54,10 +47,7 @@ func TestParser(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "r2", }, - }, &ExtraDHTParams{}, &ExtraHTTPParams{ - PeerID: string(pid), - PrivKeyB64: sk, - }) + }, &ExtraDHTParams{}) require.NoError(err) @@ -71,9 +61,6 @@ func TestParser(t *testing.T) { func TestParserRecursive(t *testing.T) { require := require.New(t) - pid, sk, err := generatePeerID() - require.NoError(err) - router, err := Parse(config.Routers{ "http1": config.RouterParser{ Router: config.Router{ @@ -145,10 +132,7 @@ func TestParserRecursive(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "composable2", }, - }, &ExtraDHTParams{}, &ExtraHTTPParams{ - PeerID: string(pid), - PrivKeyB64: sk, - }) + }, &ExtraDHTParams{}) require.NoError(err) @@ -200,27 +184,7 @@ func TestParserRecursiveLoop(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "composable2", }, - }, &ExtraDHTParams{}, nil) + }, &ExtraDHTParams{}) require.ErrorContains(err, "dependency loop creating router with name \"composable2\"") } - -func generatePeerID() (string, string, error) { - sk, pk, err := crypto.GenerateEd25519Key(rand.Reader) - if err != nil { - return "", "", err - } - - bytes, err := crypto.MarshalPrivateKey(sk) - if err != nil { - return "", "", err - } - - enc := base64.StdEncoding.EncodeToString(bytes) - if err != nil { - return "", "", err - } - - pid, err := peer.IDFromPublicKey(pk) - return pid.String(), enc, err -} diff --git a/routing/wrapper.go b/routing/wrapper.go index 10df177e017..debc785963d 100644 --- a/routing/wrapper.go +++ b/routing/wrapper.go @@ -4,7 +4,6 @@ import ( "context" routinghelpers "github.com/libp2p/go-libp2p-routing-helpers" - "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/routing" ) @@ -22,6 +21,8 @@ var ( // http delegated routing. type httpRoutingWrapper struct { routing.ContentRouting + routing.PeerRouting + routing.ValueStore routinghelpers.ProvideManyRouter } @@ -29,18 +30,6 @@ func (c *httpRoutingWrapper) Bootstrap(ctx context.Context) error { return nil } -func (c *httpRoutingWrapper) FindPeer(ctx context.Context, id peer.ID) (peer.AddrInfo, error) { - return peer.AddrInfo{}, routing.ErrNotSupported -} - -func (c *httpRoutingWrapper) PutValue(context.Context, string, []byte, ...routing.Option) error { - return routing.ErrNotSupported -} - -func (c *httpRoutingWrapper) GetValue(context.Context, string, ...routing.Option) ([]byte, error) { - return nil, routing.ErrNotSupported -} - func (c *httpRoutingWrapper) SearchValue(context.Context, string, ...routing.Option) (<-chan []byte, error) { out := make(chan []byte) close(out) diff --git a/test/cli/content_routing_http_test.go b/test/cli/content_routing_http_test.go index 01b602bb7ed..5c5186a7e82 100644 --- a/test/cli/content_routing_http_test.go +++ b/test/cli/content_routing_http_test.go @@ -16,49 +16,43 @@ import ( "github.com/ipfs/go-cid" "github.com/ipfs/kubo/test/cli/harness" "github.com/ipfs/kubo/test/cli/testutils" + "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/routing" "github.com/stretchr/testify/assert" ) type fakeHTTPContentRouter struct { - m sync.Mutex - findProvidersCalls int - provideCalls int + m sync.Mutex + getProvidersCalls int + getPeersCalls int } -func (r *fakeHTTPContentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.ProviderResponse], error) { +func (r *fakeHTTPContentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { r.m.Lock() defer r.m.Unlock() - r.findProvidersCalls++ - return iter.FromSlice([]iter.Result[types.ProviderResponse]{}), nil + r.getProvidersCalls++ + return iter.FromSlice([]iter.Result[types.Record]{}), nil } -func (r *fakeHTTPContentRouter) ProvideBitswap(ctx context.Context, req *server.BitswapWriteProvideRequest) (time.Duration, error) { +func (r *fakeHTTPContentRouter) FindPeers(ctx context.Context, pid peer.ID, limit int) (iter.ResultIter[types.Record], error) { r.m.Lock() defer r.m.Unlock() - r.provideCalls++ - return 0, nil + r.getPeersCalls++ + return iter.FromSlice([]iter.Result[types.Record]{}), nil } -func (r *fakeHTTPContentRouter) Provide(ctx context.Context, req *server.WriteProvideRequest) (types.ProviderResponse, error) { - r.m.Lock() - defer r.m.Unlock() - r.provideCalls++ - return nil, nil -} - -func (r *fakeHTTPContentRouter) FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (r *fakeHTTPContentRouter) FindIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { return nil, routing.ErrNotSupported } -func (r *fakeHTTPContentRouter) ProvideIPNSRecord(ctx context.Context, name ipns.Name, rec *ipns.Record) error { +func (r *fakeHTTPContentRouter) ProvideIPNS(ctx context.Context, name ipns.Name, rec *ipns.Record) error { return routing.ErrNotSupported } func (r *fakeHTTPContentRouter) numFindProvidersCalls() int { r.m.Lock() defer r.m.Unlock() - return r.findProvidersCalls + return r.getProvidersCalls } // userAgentRecorder records the user agent of every HTTP request diff --git a/test/cli/delegated_routing_http_test.go b/test/cli/delegated_routing_v1_http_client_test.go similarity index 90% rename from test/cli/delegated_routing_http_test.go rename to test/cli/delegated_routing_v1_http_client_test.go index c02264f9482..c1b5cf6a8fe 100644 --- a/test/cli/delegated_routing_http_test.go +++ b/test/cli/delegated_routing_v1_http_client_test.go @@ -89,10 +89,10 @@ func TestHTTPDelegatedRouting(t *testing.T) { t.Run("adding HTTP delegated routing endpoint to Routing.Routers config works", func(t *testing.T) { server := fakeServer("application/json", ToJSONStr(JSONObj{ "Providers": []JSONObj{{ - "Protocol": "transport-bitswap", - "Schema": "bitswap", - "ID": provs[0], - "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + "Protocols": []string{"transport-bitswap"}, + "Schema": "peer", + "ID": provs[0], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, }}, })) t.Cleanup(server.Close) @@ -124,15 +124,15 @@ func TestHTTPDelegatedRouting(t *testing.T) { t.Run("adding HTTP delegated routing endpoint to Routing.Routers config works (streaming)", func(t *testing.T) { server := fakeServer("application/x-ndjson", ToJSONStr(JSONObj{ - "Protocol": "transport-bitswap", - "Schema": "bitswap", - "ID": provs[1], - "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + "Protocols": []string{"transport-bitswap"}, + "Schema": "peer", + "ID": provs[1], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, }), ToJSONStr(JSONObj{ - "Protocol": "transport-bitswap", - "Schema": "bitswap", - "ID": provs[0], - "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + "Protocols": []string{"transport-bitswap"}, + "Schema": "peer", + "ID": provs[0], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, })) t.Cleanup(server.Close) diff --git a/test/cli/delegated_routing_v1_http_server_test.go b/test/cli/delegated_routing_v1_http_server_test.go new file mode 100644 index 00000000000..d16f8c7c540 --- /dev/null +++ b/test/cli/delegated_routing_v1_http_server_test.go @@ -0,0 +1,134 @@ +package cli + +import ( + "context" + "testing" + + "github.com/ipfs/boxo/ipns" + "github.com/ipfs/boxo/routing/http/client" + "github.com/ipfs/boxo/routing/http/types" + "github.com/ipfs/boxo/routing/http/types/iter" + "github.com/ipfs/go-cid" + "github.com/ipfs/kubo/config" + "github.com/ipfs/kubo/test/cli/harness" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/stretchr/testify/assert" +) + +func TestRoutingV1Server(t *testing.T) { + t.Parallel() + + nodes := harness.NewT(t).NewNodes(5).Init() + nodes.ForEachPar(func(node *harness.Node) { + node.UpdateConfig(func(cfg *config.Config) { + cfg.Gateway.ExposeRoutingAPI = config.True + cfg.Routing.Type = config.NewOptionalString("dht") + }) + }) + nodes.StartDaemons().Connect() + + t.Run("Get Providers Responds With Correct Peers", func(t *testing.T) { + t.Parallel() + + cidStr := nodes[2].IPFSAddStr("hello world") + _ = nodes[3].IPFSAddStr("hello world") + + cid, err := cid.Decode(cidStr) + assert.NoError(t, err) + + c, err := client.New(nodes[1].GatewayURL()) + assert.NoError(t, err) + + resultsIter, err := c.FindProviders(context.Background(), cid) + assert.NoError(t, err) + + records, err := iter.ReadAllResults(resultsIter) + assert.NoError(t, err) + + var peers []peer.ID + for _, record := range records { + assert.Equal(t, types.SchemaPeer, record.GetSchema()) + + peer, ok := record.(*types.PeerRecord) + assert.True(t, ok) + peers = append(peers, *peer.ID) + } + + assert.Contains(t, peers, nodes[2].PeerID()) + assert.Contains(t, peers, nodes[3].PeerID()) + }) + + t.Run("Get Peers Responds With Correct Peers", func(t *testing.T) { + t.Parallel() + + c, err := client.New(nodes[1].GatewayURL()) + assert.NoError(t, err) + + resultsIter, err := c.FindPeers(context.Background(), nodes[2].PeerID()) + assert.NoError(t, err) + + records, err := iter.ReadAllResults(resultsIter) + assert.NoError(t, err) + assert.Len(t, records, 1) + assert.IsType(t, records[0].GetSchema(), records[0].GetSchema()) + assert.IsType(t, records[0], &types.PeerRecord{}) + + peer := records[0].(*types.PeerRecord) + assert.Equal(t, nodes[2].PeerID().String(), peer.ID.String()) + assert.NotEmpty(t, peer.Addrs) + }) + + t.Run("Get IPNS Record Responds With Correct Record", func(t *testing.T) { + t.Parallel() + + cidStr := nodes[0].IPFSAddStr("hello get ipns test") + nodes[0].IPFS("name", "publish", "--allow-offline", cidStr) + + // Ask for record from a different peer. + c, err := client.New(nodes[1].GatewayURL()) + assert.NoError(t, err) + + record, err := c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + assert.NoError(t, err) + + value, err := record.Value() + assert.NoError(t, err) + assert.Equal(t, "/ipfs/"+cidStr, value.String()) + }) + + t.Run("Put IPNS Record Succeeds", func(t *testing.T) { + t.Parallel() + + // Publish a record. + cidStr := nodes[0].IPFSAddStr("hello get ipns test 2") + nodes[0].IPFS("name", "publish", "--allow-offline", cidStr) + c, err := client.New(nodes[0].GatewayURL()) + assert.NoError(t, err) + record, err := c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + assert.NoError(t, err) + value, err := record.Value() + assert.NoError(t, err) + assert.Equal(t, "/ipfs/"+cidStr, value.String()) + + // Start lonely node that is not connected to other nodes. + node := harness.NewT(t).NewNode().Init() + node.UpdateConfig(func(cfg *config.Config) { + cfg.Gateway.ExposeRoutingAPI = config.True + cfg.Routing.Type = config.NewOptionalString("dht") + }) + node.StartDaemon() + + // Put IPNS record in lonely node. It should be accepted as it is a valid record. + c, err = client.New(node.GatewayURL()) + assert.NoError(t, err) + err = c.ProvideIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID()), record) + assert.NoError(t, err) + + // Get the record from lonely node and double check. + record, err = c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + assert.NoError(t, err) + value, err = record.Value() + assert.NoError(t, err) + assert.Equal(t, "/ipfs/"+cidStr, value.String()) + }) +} diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 0f4d6348213..8f4d799370b 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7 + github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index c662b3ea33a..00b6cc71152 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230822135301-303595bcdba7 h1:f7n4M8UIf+4BY6Q0kcZ5FbpkxKaIqq/BW3evqI87DNo= -github.com/ipfs/boxo v0.12.1-0.20230822135301-303595bcdba7/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= +github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From 19af511d9c76a9d6e1d4c7ae2a770989352a7001 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 24 Aug 2023 10:50:51 +0200 Subject: [PATCH 02/14] feat: re-add deprecated schema bitswap to ensure compatibility --- docs/examples/kubo-as-a-library/go.mod | 3 +- docs/examples/kubo-as-a-library/go.sum | 7 ++-- go.mod | 3 +- go.sum | 7 ++-- .../delegated_routing_v1_http_client_test.go | 34 ++++++++++++------- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 +-- 7 files changed, 38 insertions(+), 22 deletions(-) diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index 4bbf7f87082..bfcc2454a76 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 + github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 @@ -151,6 +151,7 @@ require ( github.com/quic-go/quic-go v0.38.0 // indirect github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect + github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 5e345d901ad..adcf998ac8f 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= -github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= @@ -653,6 +653,8 @@ github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjR github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= +github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= @@ -719,6 +721,7 @@ github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpP github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= diff --git a/go.mod b/go.mod index b8135a46f16..ffb5b547799 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 + github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 @@ -196,6 +196,7 @@ require ( github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rs/cors v1.7.0 // indirect + github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e // indirect github.com/tidwall/match v1.1.1 // indirect diff --git a/go.sum b/go.sum index 68e1c7d52b0..80e92d458d9 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= -github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= @@ -761,6 +761,8 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= +github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= @@ -833,6 +835,7 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45 github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e h1:T5PdfK/M1xyrHwynxMIVMWLS7f/qHwfslZphxtGnw7s= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= diff --git a/test/cli/delegated_routing_v1_http_client_test.go b/test/cli/delegated_routing_v1_http_client_test.go index c1b5cf6a8fe..44e62246bef 100644 --- a/test/cli/delegated_routing_v1_http_client_test.go +++ b/test/cli/delegated_routing_v1_http_client_test.go @@ -88,12 +88,20 @@ func TestHTTPDelegatedRouting(t *testing.T) { t.Run("adding HTTP delegated routing endpoint to Routing.Routers config works", func(t *testing.T) { server := fakeServer("application/json", ToJSONStr(JSONObj{ - "Providers": []JSONObj{{ - "Protocols": []string{"transport-bitswap"}, - "Schema": "peer", - "ID": provs[0], - "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, - }}, + "Providers": []JSONObj{ + { + "Schema": "bitswap", // Legacy bitswap schema. + "Protocol": "transport-bitswap", + "ID": provs[1], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + }, + { + "Schema": "peer", + "Protocols": []string{"transport-bitswap"}, + "ID": provs[0], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + }, + }, })) t.Cleanup(server.Close) @@ -117,22 +125,22 @@ func TestHTTPDelegatedRouting(t *testing.T) { node.StartDaemon() res = node.IPFS("routing", "findprovs", findProvsCID) - assert.Equal(t, provs[0], res.Stdout.Trimmed()) + assert.Equal(t, provs[1]+"\n"+provs[0], res.Stdout.Trimmed()) }) node.StopDaemon() t.Run("adding HTTP delegated routing endpoint to Routing.Routers config works (streaming)", func(t *testing.T) { server := fakeServer("application/x-ndjson", ToJSONStr(JSONObj{ - "Protocols": []string{"transport-bitswap"}, "Schema": "peer", - "ID": provs[1], - "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, - }), ToJSONStr(JSONObj{ "Protocols": []string{"transport-bitswap"}, - "Schema": "peer", "ID": provs[0], "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, + }), ToJSONStr(JSONObj{ + "Schema": "bitswap", // Legacy bitswap schema. + "Protocol": "transport-bitswap", + "ID": provs[1], + "Addrs": []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4002"}, })) t.Cleanup(server.Close) @@ -148,7 +156,7 @@ func TestHTTPDelegatedRouting(t *testing.T) { node.StartDaemon() res = node.IPFS("routing", "findprovs", findProvsCID) - assert.Equal(t, provs[1]+"\n"+provs[0], res.Stdout.Trimmed()) + assert.Equal(t, provs[0]+"\n"+provs[1], res.Stdout.Trimmed()) }) t.Run("HTTP client should emit OpenCensus metrics", func(t *testing.T) { diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 8f4d799370b..d5933a2d2b9 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69 + github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 00b6cc71152..44dfd14aa5f 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230824075937-506553e3de69 h1:AETwrgxL6MXtirnuqne1azG80MZWq6UTcOyVw+4keUc= -github.com/ipfs/boxo v0.12.1-0.20230824075937-506553e3de69/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= +github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From 5ab1ec79f46aec3fd150c9d04c53aaece711a462 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 24 Aug 2023 11:57:57 +0200 Subject: [PATCH 03/14] refactor: restore PUT code, but keep not supporting --- config/routing.go | 18 +++++++ core/corehttp/routing.go | 7 +++ core/node/libp2p/routingopt.go | 5 ++ docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 +- go.mod | 2 +- go.sum | 4 +- routing/delegated.go | 74 +++++++++++++++++++++++--- routing/delegated_test.go | 42 +++++++++++++-- test/cli/content_routing_http_test.go | 21 +++++--- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 +- 12 files changed, 161 insertions(+), 24 deletions(-) diff --git a/config/routing.go b/config/routing.go index d138fbb2d33..60faa605cce 100644 --- a/config/routing.go +++ b/config/routing.go @@ -3,6 +3,7 @@ package config import ( "encoding/json" "fmt" + "runtime" ) // Routing defines configuration options for libp2p routing. @@ -132,6 +133,23 @@ var MethodNameList = []MethodName{MethodNameProvide, MethodNameFindPeers, Method type HTTPRouterParams struct { // Endpoint is the URL where the routing implementation will point to get the information. Endpoint string + + // MaxProvideBatchSize determines the maximum amount of CIDs sent per batch. + // Servers might not accept more than 100 elements per batch. 100 elements by default. + MaxProvideBatchSize int + + // MaxProvideConcurrency determines the number of threads used when providing content. GOMAXPROCS by default. + MaxProvideConcurrency int +} + +func (hrp *HTTPRouterParams) FillDefaults() { + if hrp.MaxProvideBatchSize == 0 { + hrp.MaxProvideBatchSize = 100 + } + + if hrp.MaxProvideConcurrency == 0 { + hrp.MaxProvideConcurrency = runtime.GOMAXPROCS(0) + } } type DHTRouterParams struct { diff --git a/core/corehttp/routing.go b/core/corehttp/routing.go index 6939c3ac557..25267f8c648 100644 --- a/core/corehttp/routing.go +++ b/core/corehttp/routing.go @@ -4,6 +4,7 @@ import ( "context" "net" "net/http" + "time" "github.com/ipfs/boxo/ipns" "github.com/ipfs/boxo/routing/http/server" @@ -12,6 +13,7 @@ import ( cid "github.com/ipfs/go-cid" core "github.com/ipfs/kubo/core" "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/routing" ) func RoutingOption() ServeOption { @@ -35,6 +37,11 @@ func (r *contentRouter) FindProviders(ctx context.Context, key cid.Cid, limit in }), nil } +// nolint deprecated +func (r *contentRouter) ProvideBitswap(ctx context.Context, req *server.BitswapWriteProvideRequest) (time.Duration, error) { + return 0, routing.ErrNotSupported +} + func (r *contentRouter) FindPeers(ctx context.Context, pid peer.ID, limit int) (iter.ResultIter[types.Record], error) { ctx, cancel := context.WithCancel(ctx) defer cancel() diff --git a/core/node/libp2p/routingopt.go b/core/node/libp2p/routingopt.go index f91bd1d0917..a58a8c49885 100644 --- a/core/node/libp2p/routingopt.go +++ b/core/node/libp2p/routingopt.go @@ -135,6 +135,11 @@ func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, p Datastore: args.Datastore, Context: args.Ctx, }, + &irouting.ExtraHTTPParams{ + PeerID: peerID, + Addrs: httpAddrsFromConfig(addrs), + PrivKeyB64: privKey, + }, ) } } diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index bfcc2454a76..629509ddd69 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 + github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index adcf998ac8f..ebdc9c9eca9 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= -github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index ffb5b547799..440a19dd57c 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 + github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 80e92d458d9..9cdf2205cb5 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= -github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/routing/delegated.go b/routing/delegated.go index d30049f24d4..e830c1aa197 100644 --- a/routing/delegated.go +++ b/routing/delegated.go @@ -2,6 +2,7 @@ package routing import ( "context" + "encoding/base64" "errors" "fmt" "net/http" @@ -17,15 +18,17 @@ import ( "github.com/libp2p/go-libp2p-kad-dht/fullrt" record "github.com/libp2p/go-libp2p-record" routinghelpers "github.com/libp2p/go-libp2p-routing-helpers" + ic "github.com/libp2p/go-libp2p/core/crypto" host "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/routing" + ma "github.com/multiformats/go-multiaddr" "go.opencensus.io/stats/view" ) var log = logging.Logger("routing/delegated") -func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTParams) (routing.Routing, error) { +func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTParams, extraHTTP *ExtraHTTPParams) (routing.Routing, error) { if err := methods.Check(); err != nil { return nil, err } @@ -35,7 +38,7 @@ func Parse(routers config.Routers, methods config.Methods, extraDHT *ExtraDHTPar // Create all needed routers from method names for mn, m := range methods { - router, err := parse(make(map[string]bool), createdRouters, m.RouterName, routers, extraDHT) + router, err := parse(make(map[string]bool), createdRouters, m.RouterName, routers, extraDHT, extraHTTP) if err != nil { return nil, err } @@ -64,6 +67,7 @@ func parse(visited map[string]bool, routerName string, routersCfg config.Routers, extraDHT *ExtraDHTParams, + extraHTTP *ExtraHTTPParams, ) (routing.Routing, error) { // check if we already created it r, ok := createdRouters[routerName] @@ -88,14 +92,14 @@ func parse(visited map[string]bool, var err error switch cfg.Type { case config.RouterTypeHTTP: - router, err = httpRoutingFromConfig(cfg.Router) + router, err = httpRoutingFromConfig(cfg.Router, extraHTTP) case config.RouterTypeDHT: router, err = dhtRoutingFromConfig(cfg.Router, extraDHT) case config.RouterTypeParallel: crp := cfg.Parameters.(*config.ComposableRouterParams) var pr []*routinghelpers.ParallelRouter for _, cr := range crp.Routers { - ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT) + ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT, extraHTTP) if err != nil { return nil, err } @@ -115,7 +119,7 @@ func parse(visited map[string]bool, crp := cfg.Parameters.(*config.ComposableRouterParams) var sr []*routinghelpers.SequentialRouter for _, cr := range crp.Routers { - ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT) + ri, err := parse(visited, createdRouters, cr.RouterName, routersCfg, extraDHT, extraHTTP) if err != nil { return nil, err } @@ -144,6 +148,12 @@ func parse(visited map[string]bool, return router, nil } +type ExtraHTTPParams struct { + PeerID string + Addrs []string + PrivKeyB64 string +} + func ConstructHTTPRouter(endpoint string, peerID string, addrs []string, privKey string) (routing.Routing, error) { return httpRoutingFromConfig( config.Router{ @@ -152,15 +162,22 @@ func ConstructHTTPRouter(endpoint string, peerID string, addrs []string, privKey Endpoint: endpoint, }, }, + &ExtraHTTPParams{ + PeerID: peerID, + Addrs: addrs, + PrivKeyB64: privKey, + }, ) } -func httpRoutingFromConfig(conf config.Router) (routing.Routing, error) { +func httpRoutingFromConfig(conf config.Router, extraHTTP *ExtraHTTPParams) (routing.Routing, error) { params := conf.Parameters.(*config.HTTPRouterParams) if params.Endpoint == "" { return nil, NewParamNeededErr("Endpoint", conf.Type) } + params.FillDefaults() + // Increase per-host connection pool since we are making lots of concurrent requests. transport := http.DefaultTransport.(*http.Transport).Clone() transport.MaxIdleConns = 500 @@ -173,9 +190,21 @@ func httpRoutingFromConfig(conf config.Router) (routing.Routing, error) { }, } + key, err := decodePrivKey(extraHTTP.PrivKeyB64) + if err != nil { + return nil, err + } + + addrInfo, err := createAddrInfo(extraHTTP.PeerID, extraHTTP.Addrs) + if err != nil { + return nil, err + } + cli, err := drclient.New( params.Endpoint, drclient.WithHTTPClient(delegateHTTPClient), + drclient.WithIdentity(key), + drclient.WithProviderInfo(addrInfo.ID, addrInfo.Addrs), drclient.WithUserAgent(version.GetUserAgentVersion()), ) if err != nil { @@ -184,6 +213,8 @@ func httpRoutingFromConfig(conf config.Router) (routing.Routing, error) { cr := contentrouter.NewContentRoutingClient( cli, + contentrouter.WithMaxProvideBatchSize(params.MaxProvideBatchSize), + contentrouter.WithMaxProvideConcurrency(params.MaxProvideConcurrency), ) err = view.Register(drclient.OpenCensusViews...) @@ -199,6 +230,37 @@ func httpRoutingFromConfig(conf config.Router) (routing.Routing, error) { }, nil } +func decodePrivKey(keyB64 string) (ic.PrivKey, error) { + pk, err := base64.StdEncoding.DecodeString(keyB64) + if err != nil { + return nil, err + } + + return ic.UnmarshalPrivateKey(pk) +} + +func createAddrInfo(peerID string, addrs []string) (peer.AddrInfo, error) { + pID, err := peer.Decode(peerID) + if err != nil { + return peer.AddrInfo{}, err + } + + var mas []ma.Multiaddr + for _, a := range addrs { + m, err := ma.NewMultiaddr(a) + if err != nil { + return peer.AddrInfo{}, err + } + + mas = append(mas, m) + } + + return peer.AddrInfo{ + ID: pID, + Addrs: mas, + }, nil +} + type ExtraDHTParams struct { BootstrapPeers []peer.AddrInfo Host host.Host diff --git a/routing/delegated_test.go b/routing/delegated_test.go index d1b2c5b766c..028f3b465f6 100644 --- a/routing/delegated_test.go +++ b/routing/delegated_test.go @@ -1,15 +1,22 @@ package routing import ( + "crypto/rand" + "encoding/base64" "testing" "github.com/ipfs/kubo/config" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/peer" "github.com/stretchr/testify/require" ) func TestParser(t *testing.T) { require := require.New(t) + pid, sk, err := generatePeerID() + require.NoError(err) + router, err := Parse(config.Routers{ "r1": config.RouterParser{ Router: config.Router{ @@ -47,7 +54,10 @@ func TestParser(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "r2", }, - }, &ExtraDHTParams{}) + }, &ExtraDHTParams{}, &ExtraHTTPParams{ + PeerID: string(pid), + PrivKeyB64: sk, + }) require.NoError(err) @@ -61,6 +71,9 @@ func TestParser(t *testing.T) { func TestParserRecursive(t *testing.T) { require := require.New(t) + pid, sk, err := generatePeerID() + require.NoError(err) + router, err := Parse(config.Routers{ "http1": config.RouterParser{ Router: config.Router{ @@ -132,7 +145,10 @@ func TestParserRecursive(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "composable2", }, - }, &ExtraDHTParams{}) + }, &ExtraDHTParams{}, &ExtraHTTPParams{ + PeerID: string(pid), + PrivKeyB64: sk, + }) require.NoError(err) @@ -184,7 +200,27 @@ func TestParserRecursiveLoop(t *testing.T) { config.MethodNameProvide: config.Method{ RouterName: "composable2", }, - }, &ExtraDHTParams{}) + }, &ExtraDHTParams{}, nil) require.ErrorContains(err, "dependency loop creating router with name \"composable2\"") } + +func generatePeerID() (string, string, error) { + sk, pk, err := crypto.GenerateEd25519Key(rand.Reader) + if err != nil { + return "", "", err + } + + bytes, err := crypto.MarshalPrivateKey(sk) + if err != nil { + return "", "", err + } + + enc := base64.StdEncoding.EncodeToString(bytes) + if err != nil { + return "", "", err + } + + pid, err := peer.IDFromPublicKey(pk) + return pid.String(), enc, err +} diff --git a/test/cli/content_routing_http_test.go b/test/cli/content_routing_http_test.go index 5c5186a7e82..e89df43c935 100644 --- a/test/cli/content_routing_http_test.go +++ b/test/cli/content_routing_http_test.go @@ -22,22 +22,31 @@ import ( ) type fakeHTTPContentRouter struct { - m sync.Mutex - getProvidersCalls int - getPeersCalls int + m sync.Mutex + provideBitswapCalls int + findProvidersCalls int + findPeersCalls int } func (r *fakeHTTPContentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { r.m.Lock() defer r.m.Unlock() - r.getProvidersCalls++ + r.findProvidersCalls++ return iter.FromSlice([]iter.Result[types.Record]{}), nil } +// nolint deprecated +func (r *fakeHTTPContentRouter) ProvideBitswap(ctx context.Context, req *server.BitswapWriteProvideRequest) (time.Duration, error) { + r.m.Lock() + defer r.m.Unlock() + r.provideBitswapCalls++ + return 0, nil +} + func (r *fakeHTTPContentRouter) FindPeers(ctx context.Context, pid peer.ID, limit int) (iter.ResultIter[types.Record], error) { r.m.Lock() defer r.m.Unlock() - r.getPeersCalls++ + r.findPeersCalls++ return iter.FromSlice([]iter.Result[types.Record]{}), nil } @@ -52,7 +61,7 @@ func (r *fakeHTTPContentRouter) ProvideIPNS(ctx context.Context, name ipns.Name, func (r *fakeHTTPContentRouter) numFindProvidersCalls() int { r.m.Lock() defer r.m.Unlock() - return r.getProvidersCalls + return r.findProvidersCalls } // userAgentRecorder records the user agent of every HTTP request diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index d5933a2d2b9..e8db14c75b9 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438 + github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 44dfd14aa5f..0a118c295f8 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230824085426-c115112b8438 h1:T9i1OIX0fAfsCINFTckORMNoqKFO4jyOytVTY6rHb0o= -github.com/ipfs/boxo v0.12.1-0.20230824085426-c115112b8438/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= +github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From 82e6ae556c52afd113b53967bbca54667dce38a2 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 10:31:36 +0200 Subject: [PATCH 04/14] chore: apply feedback suggestions Co-authored-by: Marcin Rataj --- config/gateway.go | 4 ++-- docs/changelogs/v0.23.md | 4 ++-- test/cli/delegated_routing_v1_http_server_test.go | 14 +++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/config/gateway.go b/config/gateway.go index e38396ec766..dee0a93e22c 100644 --- a/config/gateway.go +++ b/config/gateway.go @@ -74,7 +74,7 @@ type Gateway struct { // Each key is a fully qualified domain name (FQDN). PublicGateways map[string]*GatewaySpec - // ExposeRoutingAPI configures the gateway to expose a Routing v1 HTTP Server - // under /routing/v1: https://specs.ipfs.tech/routing/routing-v1/. + // ExposeRoutingAPI configures the gateway port to expose + // routing system as HTTP API at /routing/v1 (https://specs.ipfs.tech/routing/http-routing-v1/). ExposeRoutingAPI Flag } diff --git a/docs/changelogs/v0.23.md b/docs/changelogs/v0.23.md index f2fefb07f17..df6a1c0316e 100644 --- a/docs/changelogs/v0.23.md +++ b/docs/changelogs/v0.23.md @@ -9,7 +9,7 @@ - [Mplex deprecation](#mplex-deprecation) - [Gateway: meaningful CAR responses on Not Found errors](#gateway-meaningful-car-responses-on-not-found-errors) - [Binary characters in file names: no longer works with old clients and new Kubo servers](#binary-characters-in-file-names-no-longer-works-with-old-clients-and-new-kubo-servers) - - [Local Gateway: optional support for `/routing/v1` endpoint](#local-gateway-optional-support-for-routingv1-endpoint) + - [Self-hosting `/routing/v1` endpoint for delegated routing needs](#self-hosting-routingv1-endpoint-for-delegated-routing-needs) - [๐Ÿ“ Changelog](#-changelog) - [๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Contributors](#-contributors) @@ -65,7 +65,7 @@ the compatibility table: The `Routing` system configured in Kubo can be now exposed on the gateway port as a standard HTTP [Routing V1](https://specs.ipfs.tech/routing/http-routing-v1/) API endpoint. This allows self-hosting and experimentation with custom delegated routers. This is disabled by default, -but can be enabled by setting `Config.Gateway.ExposeRoutingAPI = true`. +but can be enabled by setting [`Gateway.ExposeRoutingAPI`](https://github.com/ipfs/kubo/blob/master/docs/config.md#gatewayexposeroutingapi) to `true` . ### ๐Ÿ“ Changelog diff --git a/test/cli/delegated_routing_v1_http_server_test.go b/test/cli/delegated_routing_v1_http_server_test.go index d16f8c7c540..98d64829860 100644 --- a/test/cli/delegated_routing_v1_http_server_test.go +++ b/test/cli/delegated_routing_v1_http_server_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "github.com/google/uuid" "github.com/ipfs/boxo/ipns" "github.com/ipfs/boxo/routing/http/client" "github.com/ipfs/boxo/routing/http/types" @@ -30,8 +31,9 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Get Providers Responds With Correct Peers", func(t *testing.T) { t.Parallel() - cidStr := nodes[2].IPFSAddStr("hello world") - _ = nodes[3].IPFSAddStr("hello world") + text := "hello world " + uuid.New().String() + cidStr := nodes[2].IPFSAddStr(text) + _ = nodes[3].IPFSAddStr(text) cid, err := cid.Decode(cidStr) assert.NoError(t, err) @@ -81,7 +83,8 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Get IPNS Record Responds With Correct Record", func(t *testing.T) { t.Parallel() - cidStr := nodes[0].IPFSAddStr("hello get ipns test") + text := "hello ipns test " + uuid.New().String() + cidStr := nodes[0].IPFSAddStr(text) nodes[0].IPFS("name", "publish", "--allow-offline", cidStr) // Ask for record from a different peer. @@ -99,8 +102,9 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Put IPNS Record Succeeds", func(t *testing.T) { t.Parallel() - // Publish a record. - cidStr := nodes[0].IPFSAddStr("hello get ipns test 2") + // Publish a record and confirm the /routing/v1/ipns API exposes the IPNS record + text := "hello ipns test " + uuid.New().String() + cidStr := nodes[0].IPFSAddStr(text) nodes[0].IPFS("name", "publish", "--allow-offline", cidStr) c, err := client.New(nodes[0].GatewayURL()) assert.NoError(t, err) From 833823cac161a133ee316ccff5323aa8527522c7 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 12:18:45 +0200 Subject: [PATCH 05/14] feat: e2e tests, remove .SearchValue override --- core/corehttp/routing.go | 5 +- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 +- go.mod | 2 +- go.sum | 4 +- routing/wrapper.go | 6 - .../delegated_routing_v1_http_proxy_test.go | 144 ++++++++++++++++++ test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 +- 9 files changed, 156 insertions(+), 17 deletions(-) create mode 100644 test/cli/delegated_routing_v1_http_proxy_test.go diff --git a/core/corehttp/routing.go b/core/corehttp/routing.go index 25267f8c648..e5b1edeb0e7 100644 --- a/core/corehttp/routing.go +++ b/core/corehttp/routing.go @@ -111,11 +111,12 @@ func (it *peerChanIter) Val() types.Record { return nil } - // We don't know what type of protocol this peer provides. It is likely Bitswap - // but it might not be. Therefore, we set an unknown protocol with an unknown schema. rec := &types.PeerRecord{ Schema: types.SchemaPeer, ID: &it.next.ID, + // We need to add this here, otherwise contentrouter will ignore the peer + // as it does not have transport bitswap available. + Protocols: []string{"transport-bitswap"}, } for _, addr := range it.next.Addrs { diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index 629509ddd69..9c4fa7512bf 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 + github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index ebdc9c9eca9..79a83b6177b 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= -github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index 440a19dd57c..3614721f425 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 + github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 9cdf2205cb5..1563457d2eb 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= -github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/routing/wrapper.go b/routing/wrapper.go index debc785963d..680aef263d2 100644 --- a/routing/wrapper.go +++ b/routing/wrapper.go @@ -29,9 +29,3 @@ type httpRoutingWrapper struct { func (c *httpRoutingWrapper) Bootstrap(ctx context.Context) error { return nil } - -func (c *httpRoutingWrapper) SearchValue(context.Context, string, ...routing.Option) (<-chan []byte, error) { - out := make(chan []byte) - close(out) - return out, routing.ErrNotSupported -} diff --git a/test/cli/delegated_routing_v1_http_proxy_test.go b/test/cli/delegated_routing_v1_http_proxy_test.go new file mode 100644 index 00000000000..a87fc7781ba --- /dev/null +++ b/test/cli/delegated_routing_v1_http_proxy_test.go @@ -0,0 +1,144 @@ +package cli + +import ( + "testing" + + "github.com/ipfs/boxo/ipns" + "github.com/ipfs/kubo/config" + "github.com/ipfs/kubo/test/cli/harness" + "github.com/ipfs/kubo/test/cli/testutils" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestRoutingV1Proxy(t *testing.T) { + t.Parallel() + + setupNodes := func(t *testing.T) harness.Nodes { + nodes := harness.NewT(t).NewNodes(2).Init() + + // Node 0 uses DHT and exposes the Routing API. + nodes[0].UpdateConfig(func(cfg *config.Config) { + cfg.Gateway.ExposeRoutingAPI = config.True + cfg.Routing.Type = config.NewOptionalString("dht") + }) + nodes[0].StartDaemon() + + // Node 1 uses Node 0 as Routing V1 source, no DHT. + nodes[1].UpdateConfig(func(cfg *config.Config) { + cfg.Routing.Type = config.NewOptionalString("custom") + cfg.Routing.Methods = config.Methods{ + config.MethodNameFindPeers: {RouterName: "KuboA"}, + config.MethodNameFindProviders: {RouterName: "KuboA"}, + config.MethodNameGetIPNS: {RouterName: "KuboA"}, + config.MethodNamePutIPNS: {RouterName: "KuboA"}, + config.MethodNameProvide: {RouterName: "KuboA"}, + } + cfg.Routing.Routers = config.Routers{ + "KuboA": config.RouterParser{ + Router: config.Router{ + Type: config.RouterTypeHTTP, + Parameters: &config.HTTPRouterParams{ + Endpoint: nodes[0].GatewayURL(), + }, + }, + }, + } + }) + nodes[1].StartDaemon() + + // Connect them. + nodes.Connect() + + return nodes + } + + t.Run("Kubo can find provider for CID via Routing V1", func(t *testing.T) { + t.Parallel() + nodes := setupNodes(t) + + cidStr := nodes[0].IPFSAddStr(testutils.RandomStr(1000)) + + res := nodes[1].IPFS("routing", "findprovs", cidStr) + assert.Equal(t, nodes[0].PeerID().String(), res.Stdout.Trimmed()) + }) + + t.Run("Kubo can find peer via Routing V1", func(t *testing.T) { + t.Parallel() + nodes := setupNodes(t) + + // Start lonely node that is not connected to other nodes. + node := harness.NewT(t).NewNode().Init() + node.UpdateConfig(func(cfg *config.Config) { + cfg.Routing.Type = config.NewOptionalString("dht") + }) + node.StartDaemon() + + // Connect Node 0 to Lonely Node. + nodes[0].Connect(node) + + // Node 1 must find Lonely Node through Node 0 Routing V1. + res := nodes[1].IPFS("routing", "findpeer", node.PeerID().String()) + assert.Equal(t, node.SwarmAddrs()[0].String(), res.Stdout.Trimmed()) + }) + + t.Run("Kubo can retrieve IPNS record via Routing V1", func(t *testing.T) { + t.Parallel() + nodes := setupNodes(t) + + nodeName := "/ipns/" + ipns.NameFromPeer(nodes[0].PeerID()).String() + + // Can't resolve the name as isn't published yet. + res := nodes[1].RunIPFS("routing", "get", nodeName) + require.Error(t, res.ExitErr) + + // Publish record on Node 0. + path := "/ipfs/" + nodes[0].IPFSAddStr(testutils.RandomStr(1000)) + nodes[0].IPFS("name", "publish", "--allow-offline", path) + + // Get record on Node 1 (no DHT). + res = nodes[1].IPFS("routing", "get", nodeName) + record, err := ipns.UnmarshalRecord(res.Stdout.Bytes()) + require.NoError(t, err) + value, err := record.Value() + require.NoError(t, err) + require.Equal(t, path, value.String()) + }) + + t.Run("Kubo can resolve IPNS name via Routing V1", func(t *testing.T) { + t.Parallel() + nodes := setupNodes(t) + + nodeName := "/ipns/" + ipns.NameFromPeer(nodes[0].PeerID()).String() + + // Can't resolve the name as isn't published yet. + res := nodes[1].RunIPFS("routing", "get", nodeName) + require.Error(t, res.ExitErr) + + // Publish name. + path := "/ipfs/" + nodes[0].IPFSAddStr(testutils.RandomStr(1000)) + nodes[0].IPFS("name", "publish", "--allow-offline", path) + + // Resolve IPNS name + res = nodes[1].IPFS("name", "resolve", nodeName) + require.Equal(t, path, res.Stdout.Trimmed()) + }) + + t.Run("Kubo can provide IPNS record via Routing V1", func(t *testing.T) { + t.Parallel() + nodes := setupNodes(t) + + // Publish something on Node 1 (no DHT). + nodeName := "/ipns/" + ipns.NameFromPeer(nodes[1].PeerID()).String() + path := "/ipfs/" + nodes[1].IPFSAddStr(testutils.RandomStr(1000)) + nodes[1].IPFS("name", "publish", "--allow-offline", path) + + // Retrieve through Node 0. + res := nodes[0].IPFS("routing", "get", nodeName) + record, err := ipns.UnmarshalRecord(res.Stdout.Bytes()) + require.NoError(t, err) + value, err := record.Value() + require.NoError(t, err) + require.Equal(t, path, value.String()) + }) +} diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index e8db14c75b9..48be332f874 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544 + github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 0a118c295f8..c0f31d3d65e 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230824094523-a2001ba61544 h1:XVq+wUNFx1Ufakz35MAWk+Rr5bAC7lwx1NbJ6Mslp48= -github.com/ipfs/boxo v0.12.1-0.20230824094523-a2001ba61544/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= +github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From c658c6c1e88914e85696f510cadbde39d6b87e57 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 13:33:04 +0200 Subject: [PATCH 06/14] refactor: rename Find/ProvideIPNS to Get/PutIPNS --- core/corehttp/gateway.go | 4 ++-- core/corehttp/routing.go | 4 ++-- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- test/cli/content_routing_http_test.go | 4 ++-- test/cli/delegated_routing_v1_http_server_test.go | 8 ++++---- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 ++-- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/corehttp/gateway.go b/core/corehttp/gateway.go index a02d7846da9..6af18ece7ce 100644 --- a/core/corehttp/gateway.go +++ b/core/corehttp/gateway.go @@ -164,8 +164,8 @@ func (o *offlineGatewayErrWrapper) IsCached(ctx context.Context, path path.Path) return o.gwimpl.IsCached(ctx, path) } -func (o *offlineGatewayErrWrapper) FindIPNS(ctx context.Context, c cid.Cid) ([]byte, error) { - rec, err := o.gwimpl.FindIPNS(ctx, c) +func (o *offlineGatewayErrWrapper) GetIPNS(ctx context.Context, c cid.Cid) ([]byte, error) { + rec, err := o.gwimpl.GetIPNS(ctx, c) err = offlineErrWrap(err) return rec, err } diff --git a/core/corehttp/routing.go b/core/corehttp/routing.go index e5b1edeb0e7..885352db8d7 100644 --- a/core/corehttp/routing.go +++ b/core/corehttp/routing.go @@ -63,7 +63,7 @@ func (r *contentRouter) FindPeers(ctx context.Context, pid peer.ID, limit int) ( return iter.ToResultIter[types.Record](iter.FromSlice[types.Record]([]types.Record{rec})), nil } -func (r *contentRouter) FindIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (r *contentRouter) GetIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -75,7 +75,7 @@ func (r *contentRouter) FindIPNS(ctx context.Context, name ipns.Name) (*ipns.Rec return ipns.UnmarshalRecord(raw) } -func (r *contentRouter) ProvideIPNS(ctx context.Context, name ipns.Name, record *ipns.Record) error { +func (r *contentRouter) PutIPNS(ctx context.Context, name ipns.Name, record *ipns.Record) error { ctx, cancel := context.WithCancel(ctx) defer cancel() diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index 9c4fa7512bf..a666bcb1619 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff + github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 79a83b6177b..74df9409388 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= -github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index 3614721f425..0804aec764d 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff + github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 1563457d2eb..03b802f7ab0 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= -github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/test/cli/content_routing_http_test.go b/test/cli/content_routing_http_test.go index e89df43c935..652c8ac59eb 100644 --- a/test/cli/content_routing_http_test.go +++ b/test/cli/content_routing_http_test.go @@ -50,11 +50,11 @@ func (r *fakeHTTPContentRouter) FindPeers(ctx context.Context, pid peer.ID, limi return iter.FromSlice([]iter.Result[types.Record]{}), nil } -func (r *fakeHTTPContentRouter) FindIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (r *fakeHTTPContentRouter) GetIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { return nil, routing.ErrNotSupported } -func (r *fakeHTTPContentRouter) ProvideIPNS(ctx context.Context, name ipns.Name, rec *ipns.Record) error { +func (r *fakeHTTPContentRouter) PutIPNS(ctx context.Context, name ipns.Name, rec *ipns.Record) error { return routing.ErrNotSupported } diff --git a/test/cli/delegated_routing_v1_http_server_test.go b/test/cli/delegated_routing_v1_http_server_test.go index 98d64829860..58035da59c2 100644 --- a/test/cli/delegated_routing_v1_http_server_test.go +++ b/test/cli/delegated_routing_v1_http_server_test.go @@ -91,7 +91,7 @@ func TestRoutingV1Server(t *testing.T) { c, err := client.New(nodes[1].GatewayURL()) assert.NoError(t, err) - record, err := c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + record, err := c.GetIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) assert.NoError(t, err) value, err := record.Value() @@ -108,7 +108,7 @@ func TestRoutingV1Server(t *testing.T) { nodes[0].IPFS("name", "publish", "--allow-offline", cidStr) c, err := client.New(nodes[0].GatewayURL()) assert.NoError(t, err) - record, err := c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + record, err := c.GetIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) assert.NoError(t, err) value, err := record.Value() assert.NoError(t, err) @@ -125,11 +125,11 @@ func TestRoutingV1Server(t *testing.T) { // Put IPNS record in lonely node. It should be accepted as it is a valid record. c, err = client.New(node.GatewayURL()) assert.NoError(t, err) - err = c.ProvideIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID()), record) + err = c.PutIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID()), record) assert.NoError(t, err) // Get the record from lonely node and double check. - record, err = c.FindIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) + record, err = c.GetIPNS(context.Background(), ipns.NameFromPeer(nodes[0].PeerID())) assert.NoError(t, err) value, err = record.Value() assert.NoError(t, err) diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 48be332f874..1c6cb3588a1 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff + github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index c0f31d3d65e..8abf29f4f1f 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230825084715-e1cce6e07aff h1:IpyDgsSCTbMcEqKVsbE8S73lV2e9V2J/Tr82zpYb/mg= -github.com/ipfs/boxo v0.12.1-0.20230825084715-e1cce6e07aff/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= +github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From 6e575112f8ddbeea5827f9ee5e8d49eedbc40e21 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 13:40:05 +0200 Subject: [PATCH 07/14] fix: ensure tests don't "collide" with each other --- .../delegated_routing_v1_http_server_test.go | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/cli/delegated_routing_v1_http_server_test.go b/test/cli/delegated_routing_v1_http_server_test.go index 58035da59c2..440510c1f00 100644 --- a/test/cli/delegated_routing_v1_http_server_test.go +++ b/test/cli/delegated_routing_v1_http_server_test.go @@ -19,17 +19,21 @@ import ( func TestRoutingV1Server(t *testing.T) { t.Parallel() - nodes := harness.NewT(t).NewNodes(5).Init() - nodes.ForEachPar(func(node *harness.Node) { - node.UpdateConfig(func(cfg *config.Config) { - cfg.Gateway.ExposeRoutingAPI = config.True - cfg.Routing.Type = config.NewOptionalString("dht") + setupNodes := func(t *testing.T) harness.Nodes { + nodes := harness.NewT(t).NewNodes(5).Init() + nodes.ForEachPar(func(node *harness.Node) { + node.UpdateConfig(func(cfg *config.Config) { + cfg.Gateway.ExposeRoutingAPI = config.True + cfg.Routing.Type = config.NewOptionalString("dht") + }) }) - }) - nodes.StartDaemons().Connect() + nodes.StartDaemons().Connect() + return nodes + } t.Run("Get Providers Responds With Correct Peers", func(t *testing.T) { t.Parallel() + nodes := setupNodes(t) text := "hello world " + uuid.New().String() cidStr := nodes[2].IPFSAddStr(text) @@ -62,6 +66,7 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Get Peers Responds With Correct Peers", func(t *testing.T) { t.Parallel() + nodes := setupNodes(t) c, err := client.New(nodes[1].GatewayURL()) assert.NoError(t, err) @@ -82,6 +87,7 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Get IPNS Record Responds With Correct Record", func(t *testing.T) { t.Parallel() + nodes := setupNodes(t) text := "hello ipns test " + uuid.New().String() cidStr := nodes[0].IPFSAddStr(text) @@ -101,6 +107,7 @@ func TestRoutingV1Server(t *testing.T) { t.Run("Put IPNS Record Succeeds", func(t *testing.T) { t.Parallel() + nodes := setupNodes(t) // Publish a record and confirm the /routing/v1/ipns API exposes the IPNS record text := "hello ipns test " + uuid.New().String() From 9310e2678069061836f8e1eb21db49b0d8d9a989 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 13:52:46 +0200 Subject: [PATCH 08/14] chore: bump boxo, do not force bitswap --- core/corehttp/routing.go | 3 --- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 ++-- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/core/corehttp/routing.go b/core/corehttp/routing.go index 885352db8d7..357122a459a 100644 --- a/core/corehttp/routing.go +++ b/core/corehttp/routing.go @@ -114,9 +114,6 @@ func (it *peerChanIter) Val() types.Record { rec := &types.PeerRecord{ Schema: types.SchemaPeer, ID: &it.next.ID, - // We need to add this here, otherwise contentrouter will ignore the peer - // as it does not have transport bitswap available. - Protocols: []string{"transport-bitswap"}, } for _, addr := range it.next.Addrs { diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index a666bcb1619..ceaa693449d 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca + github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 74df9409388..ce2d8ade483 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= -github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index 0804aec764d..88d65522f91 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca + github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 03b802f7ab0..11d85353c94 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= -github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 1c6cb3588a1..07fb9540a2c 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca + github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 8abf29f4f1f..46fadb3af43 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230825113055-ff60307d90ca h1:hdD9urdszUptnqofUVCbPHf++cIQc4vQHCbxNitWkIA= -github.com/ipfs/boxo v0.12.1-0.20230825113055-ff60307d90ca/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= +github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From 07f30009635a3141ed0904d84ef35bc6a32e39e9 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 14:10:45 +0200 Subject: [PATCH 09/14] chore: revert gateway names --- core/corehttp/gateway.go | 4 ++-- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/corehttp/gateway.go b/core/corehttp/gateway.go index 6af18ece7ce..105fa89af75 100644 --- a/core/corehttp/gateway.go +++ b/core/corehttp/gateway.go @@ -164,8 +164,8 @@ func (o *offlineGatewayErrWrapper) IsCached(ctx context.Context, path path.Path) return o.gwimpl.IsCached(ctx, path) } -func (o *offlineGatewayErrWrapper) GetIPNS(ctx context.Context, c cid.Cid) ([]byte, error) { - rec, err := o.gwimpl.GetIPNS(ctx, c) +func (o *offlineGatewayErrWrapper) GetIPNSRecord(ctx context.Context, c cid.Cid) ([]byte, error) { + rec, err := o.gwimpl.GetIPNSRecord(ctx, c) err = offlineErrWrap(err) return rec, err } diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index ceaa693449d..a8ad26f46ba 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 + github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index ce2d8ade483..00a31d7fac2 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= -github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index 88d65522f91..eef4c29d863 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 + github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 11d85353c94..6f8f047bfbe 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= -github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 07fb9540a2c..d53ec42387a 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0 + github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 46fadb3af43..3cff895f2fc 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230825115123-66b383e5a1e0 h1:A6W74JVpfil7ApHZmbudly3AMdwOXYrCXIeTmITOYAY= -github.com/ipfs/boxo v0.12.1-0.20230825115123-66b383e5a1e0/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= +github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From abeeb593b63a09992e5c29fafb4236c40a666728 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 14:12:17 +0200 Subject: [PATCH 10/14] fix: disable mdns in routing v1 test --- test/cli/delegated_routing_v1_http_proxy_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/cli/delegated_routing_v1_http_proxy_test.go b/test/cli/delegated_routing_v1_http_proxy_test.go index a87fc7781ba..efce131d8d1 100644 --- a/test/cli/delegated_routing_v1_http_proxy_test.go +++ b/test/cli/delegated_routing_v1_http_proxy_test.go @@ -20,12 +20,14 @@ func TestRoutingV1Proxy(t *testing.T) { // Node 0 uses DHT and exposes the Routing API. nodes[0].UpdateConfig(func(cfg *config.Config) { cfg.Gateway.ExposeRoutingAPI = config.True + cfg.Discovery.MDNS.Enabled = false cfg.Routing.Type = config.NewOptionalString("dht") }) nodes[0].StartDaemon() // Node 1 uses Node 0 as Routing V1 source, no DHT. nodes[1].UpdateConfig(func(cfg *config.Config) { + cfg.Discovery.MDNS.Enabled = false cfg.Routing.Type = config.NewOptionalString("custom") cfg.Routing.Methods = config.Methods{ config.MethodNameFindPeers: {RouterName: "KuboA"}, From 030ee4bda2c2ca9f20ec080d89a6f7d3a4637e2d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 14:12:44 +0200 Subject: [PATCH 11/14] fix: disable mdns in routing v1 test --- test/cli/delegated_routing_v1_http_proxy_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cli/delegated_routing_v1_http_proxy_test.go b/test/cli/delegated_routing_v1_http_proxy_test.go index efce131d8d1..1d80ae50a5f 100644 --- a/test/cli/delegated_routing_v1_http_proxy_test.go +++ b/test/cli/delegated_routing_v1_http_proxy_test.go @@ -72,6 +72,7 @@ func TestRoutingV1Proxy(t *testing.T) { // Start lonely node that is not connected to other nodes. node := harness.NewT(t).NewNode().Init() node.UpdateConfig(func(cfg *config.Config) { + cfg.Discovery.MDNS.Enabled = false cfg.Routing.Type = config.NewOptionalString("dht") }) node.StartDaemon() From 997a3d35bfef152e5b86ee0127708090160aa9bd Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Fri, 25 Aug 2023 14:48:38 +0200 Subject: [PATCH 12/14] feat: print routing v1 url we do this for webui, would not hurt here --- cmd/ipfs/daemon.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 84cf3b365ab..55ecaf2c09e 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -832,6 +832,12 @@ func serveHTTPGateway(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, e fmt.Printf("Gateway server listening on %s\n", listener.Multiaddr()) } + if cfg.Gateway.ExposeRoutingAPI.WithDefault(config.DefaultExposeRoutingAPI) { + for _, listener := range listeners { + fmt.Printf("Routing V1 API exposed at http://%s/routing/v1\n", listener.Addr()) + } + } + cmdctx := *cctx cmdctx.Gateway = true From 5fb2d5eb722f6c4ed093bd3cc452f19a31557e4a Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 15:12:56 +0200 Subject: [PATCH 13/14] chore: bump boxo --- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index a8ad26f46ba..5ec7d9e2614 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 + github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 00a31d7fac2..6b81e2d1964 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= -github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index eef4c29d863..bd01b301c1d 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 + github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index 6f8f047bfbe..f5a2c7b8171 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= -github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index d53ec42387a..90ef60c9a55 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 + github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 3cff895f2fc..45d65e2d622 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3 h1:dy7UEz+/LmTe7D6MFN/Rh4TcvpvORrw3nisSW+SJqmE= -github.com/ipfs/boxo v0.12.1-0.20230825120917-8f75d5e2f8e3/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= +github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= From d2caa678ad30f70de32ce6b0a5e9bc8e45952dc0 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 25 Aug 2023 17:20:04 +0200 Subject: [PATCH 14/14] chore: bump boxo to main --- docs/examples/kubo-as-a-library/go.mod | 2 +- docs/examples/kubo-as-a-library/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- test/dependencies/go.mod | 2 +- test/dependencies/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod index 5ec7d9e2614..bb88ad99696 100644 --- a/docs/examples/kubo-as-a-library/go.mod +++ b/docs/examples/kubo-as-a-library/go.mod @@ -7,7 +7,7 @@ go 1.20 replace github.com/ipfs/kubo => ./../../.. require ( - github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 + github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd github.com/ipfs/kubo v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.30.0 github.com/multiformats/go-multiaddr v0.11.0 diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum index 6b81e2d1964..0ab47be1aef 100644 --- a/docs/examples/kubo-as-a-library/go.sum +++ b/docs/examples/kubo-as-a-library/go.sum @@ -300,8 +300,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= -github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd h1:uAp9W7FRQ7W16FENlURZqBh7/3PnakG0DjHpKPirKVY= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= diff --git a/go.mod b/go.mod index bd01b301c1d..d3ff353c676 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 + github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd github.com/ipfs/go-block-format v0.1.2 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 diff --git a/go.sum b/go.sum index f5a2c7b8171..e478ea73338 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= -github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd h1:uAp9W7FRQ7W16FENlURZqBh7/3PnakG0DjHpKPirKVY= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod index 90ef60c9a55..094cd9797b2 100644 --- a/test/dependencies/go.mod +++ b/test/dependencies/go.mod @@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../ require ( github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd github.com/golangci/golangci-lint v1.54.1 - github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238 + github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-cidutil v0.1.0 github.com/ipfs/go-datastore v0.6.0 diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum index 45d65e2d622..3c8cb6f87e3 100644 --- a/test/dependencies/go.sum +++ b/test/dependencies/go.sum @@ -396,8 +396,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/boxo v0.12.1-0.20230825131036-ab6523c34238 h1:tiMV+9hn6u2fVcelfLSiocyVL7UXeJVZigqxZ/Ze37c= -github.com/ipfs/boxo v0.12.1-0.20230825131036-ab6523c34238/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd h1:uAp9W7FRQ7W16FENlURZqBh7/3PnakG0DjHpKPirKVY= +github.com/ipfs/boxo v0.12.1-0.20230825151903-13569468babd/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=