Crates.io | sp4r53 |
lib.rs | sp4r53 |
version | 0.1.4 |
source | src |
created_at | 2020-08-09 14:02:58.500228 |
updated_at | 2020-09-24 12:15:56.057988 |
description | Sparse merkle tree with on demand flushing |
homepage | https://github.com/r3v2d0g/sp4r53 |
repository | https://github.com/r3v2d0g/sp4r53.git |
max_upload_size | |
id | 274635 |
size | 82,932 |
A sparse Merkle tree implementation that only recomputes its branches’ hashes when asked.
use sp4r53::{blake3, Proof, Tree};
let foo = blake3::hash(b"foo");
let bar = blake3::hash(b"bar");
let baz = blake3::hash(b"baz");
let mut tree = Tree::new();
tree.insert(foo);
tree.insert(bar);
tree.insert(baz);
assert_eq!(tree.is_valid(), false);
let root = tree.flush();
assert_eq!(tree.is_valid(), true);
assert_eq!(tree.root(), Some(root));
let proof = tree.proove(&[foo, baz]).unwrap();
assert_eq!(proof.verify(root), true);
let encoded = proof.as_bytes();
let decoded = Proof::from_bytes(&encoded).unwrap();
assert_eq!(decoded, proof);
tree.remove(bar);
let root = tree.flush();
assert_eq!(proof.verify(root), false);
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.