如何从主机获取PeerInfo?

时间:2018-10-22 16:32:57

标签: go libp2p go-libp2p

我正在尝试从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

1 个答案:

答案 0 :(得分:2)

PeerInfo是一种封装对等ID及其多地址的结构。要从主机轻松构建PeerInfo,只需执行以下操作:

pi := PeerInfo{
        ID: host.ID(),
        Addrs: host.Addrs(),
}

pstore.InfoFromP2pAddr()需要一个具有p2pipfs组件的multiaddr才能填充PeerInfo.ID元素。

也就是说,我们绝对可以更容易地从PeerInfo获得Host。我会努力的;-)