The simple and easy implementation of Python Merkle Tree.
poetry add merkly
pip install merkly
- We use keccak-256 under-the-hood if you dont pass your hash function
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
from merkly.mtree import MerkleTree
from typing import Callable
# choose any hash function that is of type (str) -> str
my_hash_function: Callable[[str], str] = lambda data: str(ord(data) * 1000)
# create a Merkle Tree
mtree = MerkleTree(['a', 'b', 'c', 'd'], my_hash_function)
# show original input
assert mtree.raw_leafs == ['a', 'b', 'c', 'd']
# hashed leafs
assert mtree.leafs == ['97000', '98000', '99000', '100000']
# shorted hashed leafs
assert mtree.short_leafs == ['9700...', '9800...', '9900...', '1000...']
Create a Merkle Tree (Default: Keccak256)
from merkly.mtree import MerkleTree
# create a Merkle Tree with keccak256
mtree = MerkleTree(['a', 'b', 'c', 'd'])
# show original input
assert mtree.raw_leafs == ['a', 'b', 'c', 'd']
# hashed leafs
assert mtree.leafs == [
'3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb',
'b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510',
'0b42b6393c1f53060fe3ddbfcd7aadcca894465a5a438f69c87d790b2299b9b2',
'f1918e8562236eb17adc8502332f4c9c82bc14e19bfc0aa10ab674ff75b3d2f3'
]
# shorted hashed leafs
assert mtree.short_leafs == [
'3ac2...',
'b555...',
'0b42...',
'f191...'
]
Create a Root
from merkly.mtree import MerkleTree
# create a Merkle Tree
mtree = MerkleTree(['a', 'b', 'c', 'd'])
# get root of tree
assert mtree.root == '115cbb4775ed495f3d954dfa47164359a97762b40059d9502895def16eed609c'
Create Proof of a leaf
from merkly.mtree import MerkleTree
# create a Merkle Tree
mtree = MerkleTree(['a', 'b', 'c', 'd'])
# get proof of a `raw` leaf
assert mtree.proof('b') == [
Node(left: '3ac2...'),
Node(right: 'b555...'),
Node(right: '6467...')
]
Verify Proof of a leaf
from merkly.mtree import MerkleTree
# create a Merkle Tree
mtree = MerkleTree(['a', 'b', 'c', 'd'])
# get proof of a raw leaf
p = mtree.proof('b')
# verify your proof of raw leaf
assert mtree.verify(p, 'b') == True
Feature | Status | Priority |
---|---|---|
Create Root | ✅ | 🔥 |
Create Proof | ✅ | 🔥 |
Verify Proof | ✅ | 🔥 |
Use any Hash function | ✅ | 🧐 |
Leafs of any size | ✅ | 🧐 |
Support OpenZeppelin | ⏰ | 🔥 |
Compatible with MerkleTreeJs | ⏰ | 🔥 |
- Before read a code of conduct: CODE_OF_CONDUCT
- Follow the guide of development: CONTRIBUTING