Crates.io | rustreexo |
lib.rs | rustreexo |
version | 0.3.0 |
source | src |
created_at | 2023-08-14 17:19:39.222211 |
updated_at | 2024-07-30 16:35:19.563969 |
description | A Rust implementation of Utreexo |
homepage | https://github.com/mit-dci/rustreexo |
repository | https://github.com/mit-dci/rustreexo |
max_upload_size | |
id | 944379 |
size | 220,181 |
Utreexo is a dynamic hash-based accumulator designed to be used as a set membership proof system and it is used in the Bitcoin network to compress the UTXO set. This is a pure-rust implementation of the accumulator, allowing proving and verifying set membership proofs.
Rustreexo provides two basic data structures to represent the accumulator, Stump
and Pollard
. Stump
is a lightweight version of the accumulator that only keeps the roots, and therefore only uses O(log n)
space. Pollard
is a more complete version of the accumulator that keeps the full tree, and therefore uses O(n)
space. However, both data structures implements the same algorithms, so a proof generated by a Pollard
is meant to be verified by a Stump
. Here's how to use the Stump
:
use rustreexo::accumulator::stump::Stump;
let stump = Stump::new();
// Modify the accumulator, adding UTXOs and removing STXOs, that are proved by del_proof
let (stump, _) = stump.modify(utxos, stxos, del_proof).unwrap();
// Verify a proof for a UTXO
assert!(stump.verify(utxo_proof).unwrap());
for a complete example, see examples/
.
This library contains an exhaustive test suite that covers all the algorithms implemented. To run the tests, simply run cargo test
. We test for internal code sanity and cross-test with values generated by the utreexo lib.
rustreexo is released under the terms of the MIT license. See LICENSE for more information or see https://opensource.org/licenses/MIT.
Contributions are welcome! Please feel free to submit a Pull Request.