3 个版本
0.0.3 | 2019 年 10 月 16 日 |
---|---|
0.0.2 | 2019 年 9 月 10 日 |
0.0.1 | 2019 年 9 月 10 日 |
#1563 in 文件系统
36KB
890 代码行
merkletree-rs
Rust 中稀疏 MerkleTree 实现。
MerkleTree 在设计和概念上进行了优化,以实现更快速、更轻量级的 MerkleTree,同时保持与非优化 MerkleTree 的兼容性。因此,优化 MerkleTree 的 MerkleRoot 将与非优化 MerkleTree 的 MerkleRoot 相同。
兼容 Go 版本:https://github.com/arnaucube/go-merkletree
使用方法
导入库
extern crate merkletree_rs;
use merkletree_rs::{db, MerkleTree, TestValue, Value};
创建新树
// to build the storage, the first parameter is the path and the second parameter specifies if wants to use a in_memory database or a directory of the filesystem
let mut sto = db::Db::new("test".to_string(), true);
let mut mt = MerkleTree::new(&mut sto, 140 as u32);
向叶子添加值
let val: TestValue = TestValue {
bytes: "this is a test leaf".as_bytes().to_vec(),
index_length: 15,
};
mt.add(&val).unwrap();
获取证明
let mp = mt.generate_proof(val.hi());
println!("{:?}", mp);
验证证明
// check if the value exist
let v =
merkletree_rs::verify_proof(mt.get_root(), &mp, val.hi(), val.ht(), mt.get_num_levels());
println!("{:?}", v);
// check if the don't value exist (in that case, the 'ht' will be an empty value)
let v = merkletree_rs::verify_proof(
mt.get_root(),
&mp,
val.hi(),
merkletree_rs::constants::EMPTYNODEVALUE,
mt.get_num_levels(),
);
println!("{:?}", v);
打印当前 MerkleRoot
println!("{:?}", mt.get_root());
依赖项
~2.2–3MB
~55K SLoC