/remerkleable

Typed mutable SSZ views over cached and immutable binary merkle trees

Primary LanguagePythonMIT LicenseMIT

https://raw.githubusercontent.com/protolambda/remerkleable/master/docs/_static/logo.png

remerkleable

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

Also see

Contact

Author: @protolambda

License

MIT, see LICENSE file.