0

我正在尝试PeerInfo从一个libp2p.Host实例中获取一个。我可以multiaddr.Multiaddr通过调用获取 s列表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从 a 中得到 a libp2p.Host

4

1 回答 1

3

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

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

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

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

于 2018-10-24T13:12:00.670 回答