#cid #ipld #bitswap

blockstore

能够按CID索引任意数据的IPLD blockstore。

8个版本 (5个重大变更)

0.6.1 2024年8月13日
0.6.0 2024年6月27日
0.5.0 2024年4月15日
0.4.0 2024年4月3日
0.1.1 2024年1月15日

#147异步

Download history 572/week @ 2024-05-04 699/week @ 2024-05-11 719/week @ 2024-05-18 751/week @ 2024-05-25 798/week @ 2024-06-01 1641/week @ 2024-06-08 2971/week @ 2024-06-15 3494/week @ 2024-06-22 3467/week @ 2024-06-29 2761/week @ 2024-07-06 3317/week @ 2024-07-13 4730/week @ 2024-07-20 4637/week @ 2024-07-27 3782/week @ 2024-08-03 5655/week @ 2024-08-10 4297/week @ 2024-08-17

19,309 每月下载量
用于 6 个crate(4个直接使用)

Apache-2.0

48KB
980

Blockstore

能够按CID索引任意数据的IPLD blockstore。

use blockstore::{Blockstore, InMemoryBlockstore};
use blockstore::block::{Block, CidError};
use cid::Cid;
use multihash_codetable::{Code, MultihashDigest};

const RAW_CODEC: u64 = 0x55;

struct RawBlock(Vec<u8>);

impl Block<64> for RawBlock {
    fn cid(&self) -> Result<Cid, CidError> {
        let hash = Code::Sha2_256.digest(&self.0);
        Ok(Cid::new_v1(RAW_CODEC, hash))
    }

    fn data(&self) -> &[u8] {
        self.0.as_ref()
    }
}

async fn put_and_get() {
    let block = RawBlock(vec![0xde, 0xad]);
    let cid = block.cid().unwrap();

    let blockstore = InMemoryBlockstore::<64>::new();
    blockstore.put(block).await.unwrap();

    let block = blockstore.get(&cid).await.unwrap();

    assert_eq!(block, Some(vec![0xde, 0xad]));
}

tokio::runtime::Builder::new_current_thread()
    .enable_all()
    .build()
    .unwrap()
    .block_on(put_and_get());

贡献

我们欢迎贡献!请fork仓库并提交pull request。

许可协议

Blockstore采用Apache 2.0许可协议。有关更多详细信息,请参阅LICENSE文件。

关于Eiger

我们是工程师。我们通过构建底层实现和核心组件为各种生态系统做出贡献。

请联系我们[email protected],关注我们X/Twitter

依赖关系

~2–10MB
~98K SLoC