9 个重大版本

0.10.0 2024 年 3 月 23 日
0.9.0 2023 年 10 月 16 日
0.8.0 2023 年 10 月 3 日
0.6.0 2023 年 5 月 24 日
0.0.0 2022 年 1 月 10 日

#2#authenticated

Download history 663/week @ 2024-04-20 703/week @ 2024-04-27 747/week @ 2024-05-04 627/week @ 2024-05-11 509/week @ 2024-05-18 663/week @ 2024-05-25 740/week @ 2024-06-01 610/week @ 2024-06-08 529/week @ 2024-06-15 565/week @ 2024-06-22 545/week @ 2024-06-29 310/week @ 2024-07-06 834/week @ 2024-07-13 978/week @ 2024-07-20 879/week @ 2024-07-27 371/week @ 2024-08-03

3,112 每月下载量
用于 14 个 crate (5 直接)

Apache-2.0

470KB
8K SLoC

Penumbra 的水母 Merkle 树

此存储库是 Diem 水母 Merkle 树 crate 的分支,经过修改以内联依赖项并删除 Penumbra 使用中不需要的部分。


lib.rs:

此模块实现了由存储模块支持的 JellyfishMerkleTree。树本身不持久化任何内容,但实现了 R/W 逻辑。写入路径将批量生成所有中间结果,以供存储层提交;读取路径将直接返回结果。公开的 API 只有 newput_value_setsput_value_setget_with_proof。每次根据已知版本使用 value_set 进行 put 之后,树将返回一个包含所有新节点和陈旧节点索引的新根哈希值和一个 TreeUpdateBatch

水母 Merkle 树本身逻辑上是一个 256 位稀疏 Merkle 树,具有优化,即任何包含 0 个或 1 个叶子的子树将替换为该叶节点或具有默认哈希值占位符节点。通过此优化,我们可以通过避免在树的许多稀疏级别上进行哈希运算来节省 CPU。物理上,树的结构与修改后的以太坊 Patricia Merkle 树类似,但有一些修改。标准水母 Merkle 树将类似于以下图示

                                    .──────────────────────.
                            _.─────'                        `──────.
                       _.──'                                        `───.
                   _.─'                                                  `──.
               _.─'                                                          `──.
             ,'                                                                  `.
          ,─'                                                                      '─.
        ,'                                                                            `.
      ,'                                                                                `.
     ╱                                                                                    ╲
    ╱                                                                                      ╲
   ╱                                                                                        ╲
  ╱                                                                                          ╲
 ;                                                                                            :
 ;                                                                                            :
;                                                                                              :
│                                                                                              │
+──────────────────────────────────────────────────────────────────────────────────────────────+
 .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.  .''.
/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \
+----++----++----++----++----++----++----++----++----++----++----++----++----++----++----++----+
 (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (
  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )
 (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (
  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )
 (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (
  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )
 (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (
  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )
 (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (  (
 ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■  ■

 ■: the [`Value`] type this tree stores.

水母默克尔树由InternalNodeLeafNode组成。InternalNode类似于以太坊Patricia Merkle中的分支节点,有16个子节点表示4级二叉树,而LeafNode在Patricia Merkle中也有类似结构。在上图中,水母中的每个bell是一个InternalNode,而每个触须是一个LeafNode。需要注意的是,水母默克尔没有以太坊Patricia Merkle中extension节点的对应物。

依赖项

~4–11MB
~112K SLoC