/merkletreers

🌳 The simple and easy implementation of Merkle Tree

Primary LanguageRust

🌳 Merkle Tree

The simple and easy implementation of Rust Merkle Tree


Build Test Crates.io

GitHub last commit GitHub commit activity

Crates.io

Table of Contents

Credits

GitHub Contributors Image

How to install

# Cargo.toml

[dependencies]
merkletreers = "*"

How to works

  • 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

How to Use

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

Roadmap

Feature Status Priority
Create Root 🔥
Create Proof 🔥
Verify Proof 🔥
Support OpenZeppelin 🔥
Compatible with MerkleTreeJs 🔥
Use any Hash function 🧐
Leafs of any size 🧐

Contributing

License

MIT