The simple and easy implementation of Rust Merkle Tree
# Cargo.toml
[dependencies]
merkletreers = "*"
- We use keccak-256 under-the-hood
This library provides a clean and easy to use implementation of the Merkle Tree with the following features:
- Create Leaf
- Create Root
- Create Proof
- Verify Proof
Create a Merkle Tree
use merkletreers::merkletree::tree::MerkleTree;
let tree = MerkleTree::new(vec!["a","b","c","d"]);
assert_eq!(tree.leafs(), [
"3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb",
"b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510",
"0b42b6393c1f53060fe3ddbfcd7aadcca894465a5a438f69c87d790b2299b9b2",
"f1918e8562236eb17adc8502332f4c9c82bc14e19bfc0aa10ab674ff75b3d2f3",
])
Create a Root
use merkletreers::merkletree::tree::MerkleTree;
let tree = MerkleTree::new(vec!["a","b","c","d"]);
assert_eq!(
tree.root(),
vec!["115cbb4775ed495f3d954dfa47164359a97762b40059d9502895def16eed609c"],
);
Create Proof of a leaf
use merkletreers::merkletree::{tree::MerkleTree, node::Node};
let mtree = MerkleTree::new(vec!["a", "b", "c", "d"]);
assert_eq!(
mtree.proof("a"),
vec![
Node::left("3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb"),
Node::right("b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510"),
Node::right("64673cf40035df6d3a0d0143cc8426de49b9a93b9ad2d330cb4f0bc390a86d20")
]
);
Verify Proof of a leaf
Feature | Status | Priority |
---|---|---|
Create Root | ✅ | 🔥 |
Create Proof | ✅ | 🔥 |
Verify Proof | ⏰ | 🔥 |
Support OpenZeppelin | ⏰ | 🔥 |
Compatible with MerkleTreeJs | ⏰ | 🔥 |
Use any Hash function | ⏰ | 🧐 |
Leafs of any size | ⏰ | 🧐 |
- Before read a code of conduct: CODE_OF_CONDUCT
- Follow the guide of development: CONTRIBUTING