#merkle-tree #merkle-proof #hash-tree #sparse

无需 std sparse-merkle-tree

Rust 中实现的稀疏默克尔树

9 个版本

0.6.1 2022年11月22日
0.5.4 2022年9月27日
0.5.3 2021年11月15日
0.5.2-rc12021年7月25日
0.1.0-alpha2 2019年9月2日

#726 in 数据结构

Download history 260/week @ 2024-04-20 224/week @ 2024-04-27 471/week @ 2024-05-04 438/week @ 2024-05-11 222/week @ 2024-05-18 155/week @ 2024-05-25 292/week @ 2024-06-01 289/week @ 2024-06-08 366/week @ 2024-06-15 437/week @ 2024-06-22 89/week @ 2024-06-29 73/week @ 2024-07-06 230/week @ 2024-07-13 195/week @ 2024-07-20 358/week @ 2024-07-27 163/week @ 2024-08-03

951 每月下载量
14 个crate中使用 (通过 ckb-sdk)

MIT 许可证

270KB
7K SLoC

C 4K SLoC // 0.1% comments Rust 3K SLoC // 0.0% comments

稀疏默克尔树

Crates.io 文档

优化的稀疏默克尔树。

大小 证明大小 更新 获取 默克尔证明 验证证明
2n + log(n) log(n) log(n) log(n) log(n) log(n)

特性

  • 多叶存在/非存在默克尔证明
  • 可自定义的哈希函数
  • 后端存储无关
  • Rust no_std 支持

本文描述了此数据结构的算法 一个优化的紧凑型稀疏默克尔树

构造

稀疏默克尔树是一个完全平衡的树,包含 2 ^ N 个叶子

# N = 256 sparse merkle tree
height:
                   0
                /     \
255            0        1

.............................

           /   \          /  \
1         0     1        0    1
         / \   / \      / \   / \
0       0   1 0  1 ... 0   1 0   1
       0x00..00 0x00..01   ...   0x11..11

上面的图演示了一个包含 2 ^ 256 个叶子的稀疏默克尔树,可以将每个可能的 H256 值映射到叶子。树的高度是 256,从上到下,我们用 0 表示每个左分支,用 1 表示每个右分支,因此我们可以得到一个256位的路径,这也代表一个 H256,我们使用路径作为叶子的键,最左边的叶子的键是 0x00..00,下一个键是 0x00..01,最右边的键是 0x11..11

许可证

MIT

依赖项

~245KB