Exonum MerkleDB is a persistent storage implementation based on RocksDB which provides APIs to work with merkelized data structures.
Entry
is a specific index that stores only one value. Useful for global
values, such as configuration. Similar to a combination of Box
and
Option
.ListIndex
is a list of items stored in a sequential order. Similar to
Vec
.SparseListIndex
is a list of items stored in a sequential order. Similar
to ListIndex
, but may contain indices without elements.MapIndex
is a map of keys and values. Similar to BTreeMap
.ProofListIndex
is a Merkelized version of ListIndex
that supports
cryptographic proofs of existence and is implemented as a Merkle tree.ProofMapIndex
is a Merkelized version of MapIndex
that supports cryptographic
proofs of existence and is implemented as a binary Merkle Patricia tree.KeySetIndex
and ValueSetIndex
are sets of items, similar to BTreeSet
and
HashSet
accordingly.Include exonum-merkledb
as a dependency in your Cargo.toml
:
```toml [dependencies] exonum-merkledb = "0.12.0"
```
If you need only to read the data you can create Snapshot
. Objects
created from Snapshot
provide a read-only access to the storage data.
To modify data you need to create an object based on Fork
.
Fork
and Snapshot
can be obtained from the Database
object.
Currently only one database backend is supported - RockDB.
```rust use std::path::Path; use exonum_merkledb::{ProofListIndex, Database, ListProof, DbOptions, RocksDB};
let dboptions = DbOptions::default(); let db = RocksDB::open(&Path::new("db"), &dboptions).unwrap(); let list_name = "list";
// Read-only list let snapshot = db.snapshot(); let list: ProofListIndex<_, u8> = ProofListIndex::new(list_name, &snapshot);
// Mutable list let fork = db.fork(); let mut list: ProofListIndex<_, u8> = ProofListIndex::new(list_name, &fork);
```
After adding elements to the object you can obtain cryptographic proofs for their existence or absence.
```rust list.push(1);
asserteq!(ListProof::Leaf(1), list.getproof(0));
if let ListProof::Absent(proof) = list.getproof(1) { println!("Element with index 1 is absent") }
```
exonum-merkledb
is licensed under the Apache License (Version 2.0).
See LICENSE for details.