将记录放入DHT
Put record into DHT
我正在尝试使用 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-libp2p 中存在一个错误,它破坏了与 go-libp2p 的互操作性。详情见https://github.com/libp2p/rust-libp2p/pull/2309
我正在尝试使用 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-libp2p 中存在一个错误,它破坏了与 go-libp2p 的互操作性。详情见https://github.com/libp2p/rust-libp2p/pull/2309