🌳 The simple and easy implementation of Merkle Tree
Project description
The simple and easy implementation of Python Merkle Tree.
Table of Contents
Credits
How to install
poetry add merkly
pip install merkly
How to works
- 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
How to Use
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
Roadmap
Feature | Status | Priority |
---|---|---|
Create Root | ✅ | 🔥 |
Create Proof | ✅ | 🔥 |
Verify Proof | ✅ | 🔥 |
Use any Hash function | ✅ | 🧐 |
Support OpenZeppelin | ⏰ | 🔥 |
Compatible with MerkleTreeJs | ⏰ | 🔥 |
Leafs of any size | ⏰ | 🧐 |
Contributing
- Before read a code of conduct: CODE_OF_CONDUCT
- Follow the guide of development: CONTRIBUTING
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
merkly-0.7.1.tar.gz
(5.8 kB
view hashes)
Built Distribution
merkly-0.7.1-py3-none-any.whl
(6.7 kB
view hashes)