DTeam 团队日志

Doer、Delivery、Dream

图解默克尔树

胡键 Posted at — Feb 4, 2020 阅读

iden3.io 的 blog 最近发表了一篇关于默克尔树的图解文章,相当不错,特摘取了文章的图解部分。

默克尔树规范

image.png

包含数据的区块组成了树的叶子。

image.png

首先,为每个数据区块创建父节点,其值为它们后代数据区块的哈希。

image.png

然后,两两分组父节点,将它们值的哈希保存于上一级的树节点中。

image.png

重复此过程直至一个节点,其为树的根。

防篡改

image.png

假设叶子节点数据被恶意篡改

image.png

将导致上一级节点的哈希值与之不匹配

image.png

因此不得不继续篡改该节点

image.png

同理,不得不依次篡改上一级节点

image.png

最终,来到了根节点,无法篡改,因为此节点在链上一直处于被跟踪的状态。

证明数据的有效性

image.png

现要证明 data0 是默克尔树的一员

image.png

首先需要找到从数据区块到根节点的一条路径

image.png

然后找到该路径上 data0 兄弟区块

image.png

忽略树的其余部分,因为这些区块已经有足够信息参与计算

image.png

递归重新计算根的值,若与链上的根的值相等,则 data0 属于默克尔树一部分

image.png

先计算 data0 哈希,放于标记为 0 的区块中

image.png

将 data0 的哈希结合标记为 1 的区块值计算,结果放入 4

image.png

最终结合 4 和 5 算出根的值

image.png

比较两者结果即可做出判断

关于默克尔树的其他内容,请阅读原文


相关文章