#merkle-tree #merkle #ethereum

无 std tiny-merkle

适用于以太坊的微小默克尔树库

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神奇豆

Download history 4/week @ 2024-03-11 4/week @ 2024-04-01 55/week @ 2024-04-08 1/week @ 2024-05-27 76/week @ 2024-06-17 27/week @ 2024-06-24

每月下载量 103

MIT 许可证

28KB
556


merkletree.js logo


以太坊 MerkleTree

Build status Crates.io Documentation

目录

使用方法

将以下内容添加到您的 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 Tree

▾ Merkle 树证明可视化

Merkle Tree Proof

▾ 无效 Merkle 树证明可视化

Merkle Tree Proof

▾ 比特币 Merkle 树可视化

Merkle Tree Proof

许可证

本项目受 MIT 许可证的许可 - 有关详细信息,请参阅 LICENSE.md 文件

依赖项

~0–265KB