#wnfs #ipfs #去中心化 #unix-fs #webnative

wnfs-unixfs-file

IPLD UnixFS 文件实现,用于 Webnative 文件系统

2 个不稳定版本

0.2.0 2024年2月15日
0.1.1 2023年12月6日

#966文件系统

Download history 8/week @ 2024-04-15 120/week @ 2024-04-22 17/week @ 2024-04-29 37/week @ 2024-05-13 38/week @ 2024-05-20 32/week @ 2024-05-27 32/week @ 2024-06-03 43/week @ 2024-06-10 29/week @ 2024-06-17 31/week @ 2024-06-24 7/week @ 2024-07-08 27/week @ 2024-07-15 15/week @ 2024-07-22 31/week @ 2024-07-29

80 每月下载量
用于 6 个 Crates4 直接使用)

Apache-2.0

180KB
4K SLoC

WNFS Logo

wnfs-unixfs-file

Docs Code Coverage Build Status License Docs Discord

⚠️ 正在开发中 ⚠️

此 Rust crate 提供了 UnixFs 文件的实现。WNFS 仅为将大字节数组分割成多个块并为其生成单个 CID 以从 WNFS 结构中链接而使用 UnixFs 文件编码。

此 crate 是从 beetle(以前称为 "iroh")的 iroh-unixfs crate 分支出来的。

相对于该实现的主要更改包括

  • 移除了 prost 代码生成,而是使用一些带有 prost 注释的硬编码结构
  • 移除了对除文件之外任何 UnixFs 结构的支持(无目录、目录碎片或符号链接)
  • 移除了并行化哈希,以使 crate 适用于异步运行时(因此可以用于 wasm 与 wasm-bindgen-futures!)
  • 不再硬编码使用 SHA-256
  • 与 wnfs-common BlockStore trait 集成

用法

use wnfs_unixfs_file::builder::FileBuilder;
use wnfs_common::MemoryBlockStore;
use tokio::io::AsyncReadExt;

// Where data is stored
let store = &MemoryBlockStore::new();

// Encoding byte arrays, getting a CID
let data = vec![1u8; 1_000_000]; // 1MiB of ones
let root_cid = FileBuilder::new()
    .content_bytes(data)
    .build()?
    .store(store)
    .await?;

// Taking a CID, reading back a byte array:
let file = UnixFsFile::load(&root_cid, store).await?;
println!("filesize: {}", file.filesize());
let mut buffer = Vec::new();
let mut reader = file.into_content_reader(store, None)?;
reader.read_to_end(&mut buffer).await?;
// buffer now has 1 million ones

// You can also seek
use tokio::io::AsyncSeekExt;
use std::io::SeekFrom;
let mut reader = file.into_content_reader(store, None)?;
reader.seek(SeekFrom::Start(10_000)).await?;
let mut slice = [0u8; 10_000];
reader.read_exact(&mut slice).await?;
// slice now has 10_000 ones

依赖项

~6–14MB
~167K SLoC