#merkle-tree #leave #tree-structure #marked #state #leaf #root

shardtree

具有标记叶子见证、检查点和状态恢复的内存高效 Merkle 树

6 个版本 (破坏性)

0.4.0 2024 年 8 月 12 日
0.3.1 2024 年 4 月 3 日
0.3.0 2024 年 3 月 25 日
0.2.0 2023 年 11 月 7 日
0.0.0 2022 年 12 月 15 日

#422 in 数据结构

Download history 2336/week @ 2024-05-02 2511/week @ 2024-05-09 2306/week @ 2024-05-16 1575/week @ 2024-05-23 1475/week @ 2024-05-30 1697/week @ 2024-06-06 2390/week @ 2024-06-13 1186/week @ 2024-06-20 713/week @ 2024-06-27 761/week @ 2024-07-04 1129/week @ 2024-07-11 1446/week @ 2024-07-18 867/week @ 2024-07-25 1235/week @ 2024-08-01 1384/week @ 2024-08-08 1826/week @ 2024-08-15

5,653 每月下载量
6 包中使用 6 (2 直接)

MIT/Apache

390KB
8K SLoC

shardtree

这是一个 Rust 包,提供了一种从左到右密集填充的固定深度 Merkle 树结构的实现。

  • 无序插入:叶子节点可以任意顺序插入到树中。结构将跟踪树的最右侧填充位置作为树的边界;在此位置左侧的未填充叶子被视为“缺失”,而在此位置右侧的未填充叶子被视为“空”。
  • 见证:Merkle 树的个别叶子可以被标记,以便在插入树时维护标记叶子的见证,但不需要保留以维护这些见证的特定叶子节点和节点数据,以提高空间效率。
  • 检查点:树可以重置到之前检查点的状态,最多为固定数量的检查点。

树被表示为有序的固定深度子树集合,或称为“碎片”。碎片的最顶层形成“帽”中的叶子。

Level
  3           root         \
              / \           |
            /     \         |
  2       /         \        } cap
        / \         / \     |
       /   \       /   \    |
  1   A     B     C     D  /  \
     / \   / \   / \   / \     } shards
  0 /\ /\ /\ /\ /\ /\ /\ /\   /

这种结构允许将标记叶子的见证推进到最近的检查点或树的最新状态,而无需单独插入每个中间叶子。相反,只需插入包含标记叶子的碎片和树边界的所有完整碎片的根,以及从标记叶子到其所在碎片根的路径所需必要的节点。

文档

许可

在以下任一许可下授权:

由您选择。

贡献

除非您明确声明,否则任何根据Apache-2.0许可证定义的、有意提交以包含在作品中的贡献,都将根据上述方式双重授权,不附加任何额外的条款或条件。

依赖项

~0.4–1.2MB
~20K SLoC