A stream that generates a merkle tree based on the incoming data
changelog | ||
documentation | ||
merkle_tree_stream | ||
test | ||
.gitignore | ||
.readthedocs.yml | ||
.travis.yml | ||
CHANGELOG.rst | ||
CODE_OF_CONDUCT.rst | ||
CONTRIBUTING.rst | ||
FUNDING.yml | ||
LICENSE | ||
MANIFEST.in | ||
mypy.ini | ||
pyproject.toml | ||
README.rst | ||
setup.cfg | ||
setup.py | ||
tox.ini |
.. _header: ****************** merkle-tree-stream ****************** .. image:: https://img.shields.io/badge/license-MIT-brightgreen.svg :target: LICENSE :alt: Repository license .. image:: https://badge.fury.io/py/merkle-tree-stream.svg :target: https://badge.fury.io/py/merkle-tree-stream :alt: PyPI package .. image:: https://travis-ci.com/datpy/merkle-tree-stream.svg?branch=master :target: https://travis-ci.com/datpy/merkle-tree-stream :alt: Travis CI result .. image:: https://readthedocs.org/projects/merkle-tree-stream/badge/?version=latest :target: https://merkle-tree-stream.readthedocs.io/en/latest/ :alt: Documentation status .. image:: https://img.shields.io/badge/support-maintainers-brightgreen.svg :target: https://decentral1.se :alt: Support badge .. _introduction: A stream that generates a merkle tree based on the incoming data ---------------------------------------------------------------- From `The Dat Protocol`_: .. _The Dat Protocol: https://datprotocol.github.io/book/ch01-01-flat-tree.html A hash tree or merkle tree is a tree in which every leaf node is labelled with the hash of a data block and every non-leaf node is labelled with the cryptographic hash of the labels of its child nodes. Merkle trees in Dat are specialized `flat trees`_ that contain the content of the archives. .. _Flat Trees: https://flat-tree.readthedocs.io/en/latest/ See the following for more: * The Dat Protocol: `Merkle Tree`_ * The Dat Protocol: `Merkle Tree Stream`_ .. _Merkle Tree: https://datprotocol.github.io/book/ch01-02-merkle-tree.html .. _Merkle Tree Stream: https://datprotocol.github.io/book/ch02-02-merkle-tree-stream.html A note on naming ================ For the purposes of uniformity and easy of discovery alongside the reference implementation, we use the same module name as `merkle-tree-stream`_. This may cause confusion since it is not clear what exactly is referred to when using the term "stream" in the context of Python. To be clear, this module provides a `Python iterator`_ which appears to match the implementation and meaning of the reference implementation. .. _merkle-tree-stream: https://github.com/mafintosh/merkle-tree-stream .. _Python iterator: https://docs.python.org/3/c-api/iter.html .. _example: .. code-block:: python from hashlib import sha256 from merkle_tree_stream import MerkleTreeIterator def leaf(node, roots=None): return sha256(node.data).digest() def parent(first, second): sha256 = hashlib.sha256() sha256.update(first.data) sha256.update(second.data) return sha256.digest() merkle_iter = MerkleTreeIterator(leaf=leaf, parent=parent) merkle_iter.write('hello') merkle_iter.write('hashed') merkle_iter.write('world') .. _documentation: Documentation ************* * `merkle-tree-stream.readthedocs.io`_ .. _merkle-tree-stream.readthedocs.io: https://merkle-tree-stream.readthedocs.io/ Mirroring ********* * `hack.decentral1.se/datpy/merkle-tree-stream`_ * `github.com/datpy/merkle-tree-stream`_ .. _hack.decentral1.se/datpy/merkle-tree-stream: https://hack.decentral1.se/datpy/merkle-tree-stream .. _github.com/datpy/merkle-tree-stream: https://github.com/datpy/merkle-tree-stream