1个不稳定版本
0.1.0 | 2022年9月13日 |
---|
#27 in #wire
135KB
3.5K SLoC
GraphSync
Rust实现的GraphSync v2线协议。
背景
GraphSync是IPFS数据传输协议,用于IPFS和Web3生态系统中的IPLD数据交换。Filecoin使用它进行区块链同步和以无需信任的方式传输DAG化内容。
使用
要将此crate添加到您的repo,请在您的Cargo.toml
中添加graphsync
,或运行cargo add graphsync
。您可能还需要ipld_traversal
crate中的选择器。
use graphsync::{GraphSync, resolve_raw_bytes};
use ipld_traversal::blockstore::MemoryBlockstore;
use libp2p::{Swarm, multiaddr::{Multiaddr, Protocol}, PeerId};
// See Libp2p examples for more info on transports.
let (peer_id, transport) = gen_transport();
let store = MemoryBlockstore::new();
let mut swarm = Swarm::new(transport, GraphSync::new(store), peer_id);
let client = swarm.behaviour_mut();
let mut maddr: Multiaddr = "/ip4/127.0.0.1/tcp/53870/p2p/12D3KooWC2E2mnp5x3CfJG4n9vFXabTwSrc2PfbNWzSZhCjCN3rr".parse().unwrap();
if let Some(Protocol::P2p(ma)) = maddr.pop() {
let peer_id = PeerId::try_from(ma).unwrap();
client.add_address(&peer_id, maddr);
client.request(
peer_id,
"bafybeihq3wo4u27amukm36i7vbpirym4y2lvy53uappzhl3oehcm4ukphu/dir/file.ext".parse().unwrap(),
);
// See `/src/resolver.rs` for examples on how to make a resolver for your custom DAG...
let file = resolve_raw_bytes(&mut swarm).await;
基准测试
要为不同树大小基准测试IPLD遍历,请运行
cargo bench traversal
要基准测试端到端传输,请运行
cargo bench graphsync
示例
依赖关系
~16–30MB
~500K SLoC