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