moloch_mmr/lib.rs
1//! Merkle Mountain Range (MMR) implementation.
2//!
3//! An MMR is an append-only data structure that provides:
4//! - O(1) amortized append
5//! - O(log n) inclusion proofs
6//! - O(log n) consistency proofs
7//!
8//! The structure consists of a series of perfect binary trees ("mountains")
9//! of decreasing height. When a new leaf is appended, it may trigger
10//! merging of equal-height trees.
11//!
12//! # Example
13//!
14//! ```rust
15//! use moloch_mmr::{Mmr, MemStore};
16//! use moloch_core::hash;
17//!
18//! let mut mmr = Mmr::new(MemStore::new());
19//!
20//! // Append some leaves
21//! let pos1 = mmr.append(hash(b"event1")).unwrap();
22//! let pos2 = mmr.append(hash(b"event2")).unwrap();
23//! let pos3 = mmr.append(hash(b"event3")).unwrap();
24//!
25//! // Get inclusion proof
26//! let proof = mmr.proof(pos1).unwrap();
27//! assert!(mmr.verify(&proof).unwrap());
28//!
29//! // Get the root
30//! let root = mmr.root();
31//! ```
32
33mod mmr;
34mod store;
35
36#[cfg(test)]
37mod proptest;
38
39pub use mmr::{Mmr, MmrProof};
40pub use store::{MemStore, MmrStore};