图解默克尔树
2020-02-04 本文已影响0人
胡键
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比较两者结果即可做出判断
关于默克尔树的其他内容,请阅读原文。
以太坊开发者俱乐部.png