我正在尝试从PeerInfo
实例中获取libp2p.Host
。我可以通过调用multiaddr.Multiaddr
来获得Host.Addrs()
的列表,但无法将它们转换为有效的peerstore.PeerInfo
。
这是我的尝试,但由于错误panic: invalid p2p multiaddr
而感到恐慌。
package main
import (
"log"
"github.com/SentimensRG/ctx"
"github.com/SentimensRG/ctx/sigctx"
libp2p "github.com/libp2p/go-libp2p"
ps "github.com/libp2p/go-libp2p-peerstore"
)
var c = ctx.AsContext(sigctx.New())
func main() {
h0, err := libp2p.New(c)
if err != nil {
panic(err)
}
addr0 := h0.Addrs()[1]
_, err := ps.InfoFromP2pAddr(addr0)
if err != nil {
panic(err)
}
}
peerstore.PeerInfo
中获得libp2p.Host
?答案 0 :(得分:2)
PeerInfo是一种封装对等ID及其多地址的结构。要从主机轻松构建PeerInfo,只需执行以下操作:
pi := PeerInfo{
ID: host.ID(),
Addrs: host.Addrs(),
}
pstore.InfoFromP2pAddr()
需要一个具有p2p
或ipfs
组件的multiaddr才能填充PeerInfo.ID
元素。
也就是说,我们绝对可以更容易地从PeerInfo
获得Host
。我会努力的;-)