【问题标题】:Put record into DHT将记录放入 DHT
【发布时间】:2021-12-04 13:06:24
【问题描述】:

我正在尝试使用 Rust 和 rust-libp2p 向 IFPS DHT 插入一个简单的 /pk 记录

这是我的代码(Rust 1.55,libp2p-rust 0.39.1):

let mut key = "/pk/".bytes().collect::<Vec<_>>();
key.append(&mut local_key.public().into_peer_id().to_bytes());
let key = Key::from(key);
let mut value = local_key.public().into_protobuf_encoding();

kademlia_swarm.behaviour_mut().put_record(Record{
    key,
    value,
    publisher: None,
    expires: None
}, Quorum::One).expect("call put_record");

此代码成功找到 20 多个对等点插入记录,但插入总是失败。当我使用RUST_LOG=debug 运行我的代码时,我看到每个对等方在插入期间都终止了与 EOF 的连接。致电kademlia::bootstrap() 没有帮助。

仅供参考,当我使用 Go 和 go-libp2p 运行非常相似的东西时,它按预期工作:

publicKeyBytes, _ := localKey.GetPublic().Bytes()
pid, _ := peer.IDFromPublicKey(localKey.GetPublic())
key := "/pk/" + string(pid)
err = kademlia.PutValue(ctx, key, publicKeyBytes)

编辑:奖励赏金,用于简单演示如何使用 Rust 和 rust-libp2p 将记录添加到 IPFS DHT

【问题讨论】:

    标签: rust ipfs libp2p


    【解决方案1】:

    有趣的故事-我在问题中提出的示例是正确的-但是 rust-libp2p 中有一个错误,它破坏了与 go-libp2p 的互操作性。详情见https://github.com/libp2p/rust-libp2p/pull/2309

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      相关资源
      最近更新 更多