1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
//! # Merkle Tree Library for Ethereum
//!
//! This library provides a simple implementation of a Merkle Tree.
//!
//! ## Usage
//!
//! ```rust
//! use tiny_merkle::MerkleTree;
//! use tiny_keccak::{ Keccak, Hasher};
//!
//!
//! #[derive(Clone, Debug)]
//! pub struct KeccakHasher;
//! impl tiny_merkle::Hasher for KeccakHasher {
//! type Hash = [u8; 32];
//!
//! fn hash(&self, value: &[u8]) -> Self::Hash {
//! keccak256(value)
//! }
//! }
//!
//! fn keccak256(data: &[u8]) -> [u8; 32] {
//! let mut hasher = Keccak::v256();
//! let mut hash = [0_u8; 32];
//! hasher.update(data);
//! hasher.finalize(&mut hash);
//! hash
//! }
//!
//! let leaves = vec!["a", "b", "c", "d", "e", "f"].iter().map(|x| keccak256(x.as_bytes())).collect::<Vec<_>>();
//! let mtree = tiny_merkle::MerkleTree::<KeccakHasher>::new(KeccakHasher, leaves, None);
//! let root = mtree.root();
//!
//! // verify the proof of the first leaf
//! let leaf = keccak256("a".as_bytes());
//! let proof = mtree.proof(&leaf).unwrap();
//! assert!(mtree.verify(&leaf, &root, &proof));
//! ```
//!
pub mod hash;
pub mod merkle;
pub use hash::Hasher;
pub use merkle::*;