Crate blockstore

Source
Expand description

§Blockstore

An IPLD blockstore capable of holding arbitrary data indexed by CID.

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());

§Contributing

We welcome contributions! Please fork the repository and submit a pull request.

§License

Blockstore is licensed under the Apache 2.0 License. See the LICENSE file for more details.

§About Eiger

We are engineers. We contribute to various ecosystems by building low level implementations and core components.

Contact us at hello@eiger.co Follow us on X/Twitter

Modules§

block
Utilities related to computing CID for the inserted data
cond_send
Utilities for conditionally adding Send and Sync constraints.

Structs§

InMemoryBlockstore
Simple in-memory blockstore implementation.
LruBlockstorelru
An LRU cached Blockstore.
RedbBlockstoreNon-WebAssembly and redb
A Blockstore implementation backed by a redb database.
SledBlockstoreNon-WebAssembly and sled
A Blockstore implementation backed by a sled database.

Enums§

EitherBlockstore
Struct that can be used to build combinations of different Blockstore types.
Error
Error returned when performing operations on Blockstore

Traits§

Blockstore
An IPLD blockstore capable of holding arbitrary data indexed by CID.

Type Aliases§

Result
Alias for a Result with the error type blockstore::Error.