5 个不稳定版本
0.3.0 | 2024年2月2日 |
---|---|
0.2.0 | 2023年12月6日 |
0.1.2 | 2023年12月2日 |
0.1.1 | 2023年11月30日 |
0.1.0 | 2023年11月22日 |
#2967 在 神奇豆
每月下载量 103
28KB
556 行
以太坊 MerkleTree
目录
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
tiny-merkle = "0.2"
tiny-keccak = { version = "2.0.2", features = ["keccak"] }
构建树、生成证明和验证证明
use tiny_merkle::MerkleTree;
use tiny_keccak::{Hasher, Keccak};
#[derive(Clone, Debug)]
pub struct KeccakHasher;
impl tiny_merkle::Hasher for KeccakHasher {
type Hash = [u8; 32];
fn hash(value: &[u8]) -> Self::Hash {
keccak256(value)
}
}
fn keccak256(data: &[u8]) -> [u8; 32] {
let mut hasher = Keccak::v256();
let mut hash = [0_u8; 32];
hasher.update(data);
hasher.finalize(&mut hash);
hash
}
fn main() {
let data_raw = vec!["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
let leaves = data_raw.iter().map(|s| keccak256(&s.as_bytes())).collect::<Vec<_>>();
let tree = MerkleTree::<KeccakHasher>::from_leaves(leaves.clone(), Some(tiny_merkle::MerkleOptions::default().with_sort(true)));
println!("root: {}", hex::encode(tree.root()));
let proof = tree.proof(&leaves[0]).unwrap();
let ok = tree.verify(&leaves[0], &tree.root(), &proof);
println!("verify: {}", ok);
}
图表
▾ Merkle 树可视化
▾ Merkle 树证明可视化
▾ 无效 Merkle 树证明可视化
▾ 比特币 Merkle 树可视化
许可证
本项目受 MIT 许可证的许可 - 有关详细信息,请参阅 LICENSE.md 文件
依赖项
~0–265KB