Почему я получаю ошибку типа в этом коде libp2p?
Я пытаюсь инициализировать связь между двумя libp2p.Host
экземпляров. Для этого мне нужно получить peerstore.PeerInfo
, Очевидный способ сделать это состоит в том, чтобы взять multiaddr.Multiaddr
экземпляр возвращен Host.Addrs
и передать его peerstore.InfoFromP2pAddr
,
Просто, правда?
Вот код, который делает именно это:
package main
import (
"github.com/SentimensRG/ctx"
"github.com/SentimensRG/ctx/sigctx"
libp2p "github.com/libp2p/go-libp2p"
pstore "github.com/libp2p/go-libp2p-peerstore"
)
var c = ctx.AsContext(sigctx.New())
func main() {
h0, err := libp2p.New(c)
if err != nil {
panic(err)
}
h1, err := libp2p.New(c)
if err != nil {
panic(err)
}
addr0 := h0.Addrs()[0]
peerinfo, _ := pstore.InfoFromP2pAddr(addr0) # type error here
}
Приведенный выше код не будет компилироваться. Компилятор возвращает следующую ошибку:
# command-line-arguments
01-basic-conn/main.go:25:39: cannot use addr0 (type "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr) as type "github.com/multiformats/go-multiaddr".Multiaddr in argument to "github.com/libp2p/go-libp2p-peerstore".InfoFromP2pAddr:
"gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr does not implement "github.com/multiformats/go-multiaddr".Multiaddr (wrong type for Decapsulate method)
have Decapsulate("gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr) "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr
want Decapsulate("github.com/multiformats/go-multiaddr".Multiaddr) "github.com/multiformats/go-multiaddr".Multiaddr
Это связано с gx
путь управления, но я не совсем уверен, как. Мое единственное взаимодействие с gx
был при установке libp2p рекомендованным способом, а именно запуском make && make deps
из корня libp2p, который семантически эквивалентен:
gx --verbose install --global
gx-go rewrite
Что дает? Что мне нужно сделать, чтобы скомпилировать мою программу?