Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/protolambda/remerkleable

Typed mutable SSZ views over cached and immutable binary merkle trees
https://github.com/protolambda/remerkleable

Last synced: about 6 hours ago
JSON representation

Typed mutable SSZ views over cached and immutable binary merkle trees

Awesome Lists containing this project

README

        

.. image:: https://raw.githubusercontent.com/protolambda/remerkleable/master/docs/_static/logo.png
:width: 100 px

``remerkleable``
-----------------

.. image:: https://img.shields.io/pypi/l/remerkleable.svg
:target: https://pypi.python.org/pypi/remerkleable

.. image:: https://img.shields.io/pypi/pyversions/remerkleable.svg
:target: https://pypi.python.org/pypi/remerkleable

.. image:: https://img.shields.io/pypi/status/remerkleable.svg
:target: https://pypi.python.org/pypi/remerkleable

.. image:: https://img.shields.io/pypi/implementation/remerkleable.svg
:target: https://pypi.python.org/pypi/remerkleable

.. image:: https://github.com/protolambda/remerkleable/workflows/Remerkleable%20Python%20CI/badge.svg
:target: https://github.com/protolambda/remerkleable/actions

**Re-merkle-able**: Typed mutable SSZ views over cached and immutable binary Merkle trees.

Features
---------

- Types:
- custom byte-vector and byte-list view for Python bytes-like behavior
- bitfields: bitlist, bitvector
- list, container, vector
- union
- basic types
- Functionality:
- **Serialize** all types. Into output stream (returning the written count) and as ``bytes``
- **Deserialize** all types. From input stream (and scope) and from ``bytes``
- **Hash-tree-root** all types
- Merkle-based **data-sharing**:
- every view can be initialized/backed by a binary Merkle tree
- complex views have backings, and can share data.
- complex views provide a nice mutable interface, and replace their backing.
And this also works for child-views through view-hooks.
- *SSZ-Partials*: if a *partial* proof is loaded as backing, a view can be overlaid,
and the partial backing works as long as no excluded branches are accessed.
- **Calculate byte lengths**:
- Type min/max byte length
- Byte length for fixed-length types
- Output byte length for a value, without serializing
- **Navigation**: construct paths from types, and convert to generalized indices.
- **History**: traverse a sequence of nodes, and get the changelog for a given subtree location.

Project Links
--------------

- Docs: https://remerkleable.readthedocs.io/
- Changelog: https://remerkleable.readthedocs.io/en/latest/changelog.html
- PyPI: https://pypi.python.org/pypi/remerkleable
- Issues: https://github.com/protolambda/remerkleable/issues

Also see
---------

- `SSZ: "SimpleSerialize", part of Ethereum Proof of Stake spec `_
- `SSZ draft spec `_
- `Ethereum Merkle trees information aggregate `_

Contact
--------

Author: `@protolambda `_

License
--------

MIT, see `LICENSE <./LICENSE>`_ file.