ryanc414 / merkly

🌳 The simple and easy implementation of Merkle Tree

Home Page:https://pypi.org/project/merkly

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Merkly

The simple and easy implementation of Python Merkle Tree.



Table of Contents

Credits

GitHub Contributors Image

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 βœ… 🧐
Leafs of any size βœ… 🧐
Support OpenZeppelin ⏰ πŸ”₯
Compatible with MerkleTreeJs ⏰ πŸ”₯

Contributing

License

MIT

About

🌳 The simple and easy implementation of Merkle Tree

https://pypi.org/project/merkly

License:MIT License


Languages

Language:Python 96.0%Language:JavaScript 2.8%Language:Dockerfile 1.2%