smt
smt copied to clipboard
A Go library that implements a Sparse Merkle Trie for a key-value map.
smt
- Overview
- Documentation
- Tests
- Benchmarks
- Release Tags
- Tagging a new release
- Push and Release
NOTE: Requires Go 1.20.12+
Overview
This is a Go library that implements a Sparse Merkle Trie for a key-value map. The trie implements the same optimisations specified in the Libra whitepaper, to reduce the number of hash operations required per trie operation to $O(k)$ where $k$ is the number of non-empty elements in the trie. And is implemented in a similar way to the JMT whitepaper, with additional features and proof mechanics.
Documentation
Documentation for the different aspects of this library, the trie, proofs and all its different components can be found in the docs directory.
Tests
To run all tests (excluding benchmarks) run the following command:
make test_all
To test the badger submodule that provides a more fully featured key-value
store, run the following command:
make test_badger
Benchmarks
To run the full suite of benchmarks simply run the following command:
make benchmark_all
To view pre-ran results of the entire benchmarking suite see benchmarks
Release Tags
You can tag and publish a new release by following the instructions bellow.
Tagging a new release
For a bug fix:
make tag_bug_fix
For a minor release run:
make tag_minor_release
Push and Release
Then, push the tag to the repository:
git push origin v<release>
Create a release on GitHub with the tag and the release notes here.