1个不稳定版本

0.1.0 2022年9月13日

#27 in #wire

MIT许可协议

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

示例

  • 数据传输 展示如何将GraphSync集成到更大的应用程序中或使用Filecoin数据传输协议作为包装协议。有关如何运行的详细信息,请参阅main.rs文件。

  • WASM 展示如何将GraphSync集成到WASM模块中。

依赖关系

~16–30MB
~500K SLoC