深入剖析IPFS:点对点共享(2)- Merkle有向无环图 (DAG)

煤油灯科技2022-06-24 10:23

Merkle DAG是一个DAG,其中每个节点都有一个标识符,这是使用SHA256这样的加密哈希函数对节点的内容(节点携带的任何不透明的有效载荷及其子节点的标识符列表)进行哈希处理的结果。这带来了一些重要的考虑:

  • Merkle DAGs只能从叶子开始构建,也就是说,即从没有子节点的节点开始构建。父节点是在子节点之后添加的,因为子节点的标识符必须事先计算好,才能够连接它们。
  • Merkle DAG中的每个节点都是一个(子)Merkle DAG本身的根,而这个子图包含在父DAG中。
  • Merkle DAG的节点是不可变的。一个节点的任何变化都会改变它的标识符,从而影响到DAG中的所有祖先,本质上是创建一个不同的DAG。看看在Consensys的朋友用香蕉制作的有用的图解。

Merkle DAGs与Merkle树类似,但没有平衡要求,每个节点都可以携带一个有效载荷。在DAG中,多个分支可以重新融合,或者换句话说,一个节点可以有几个父节点。

通过哈希值来识别数据对象(如Merkle DAG节点)称为内容寻址。因此,将节点标识符命名为内容标识符或CID。

例如,假设每个节点的有效载荷就是它的后代的CID,那么前面的链接列表将是:A=Hash(B)→B=Hash(C)→C=Hash(∅)。哈希函数的属性确保在创建Merkle DAG时不存在循环。 (注意:哈希函数是单向函数。因此,除非发现并利用一些弱点,否则创建一个循环应该是不可能的)。

Merkle DAG是自我验证的结构。一个节点的CID明确链接到它的有效载荷的内容和它所有后代的内容。因此,两个具有相同CID的节点明确表示完全相同的DAG。这将是有效同步Merkle-CRDT(无冲突复制数据类型)的一个关键属性,而不需要像IPFS等系统所利用的那样复制完整的DAG。Merkle DAGs的应用非常广泛。像git和其他的源码控制系统使用它们来有效地存储资源库历史记录,以实现对象的去重和检测分支之间的冲突。

想查看Merkle DAGs在现实世界中的例子吗?使用DAG Builder可视化工具可以轻松查看所选文件的Merkle DAG表示。


原文链接:https://docs.ipfs.io/concepts/merkle-dag/


---煤油灯科技victorlamp.com翻译整理---

你可能也喜欢这些文章

科技互联网,科技,资讯,动态,洞察,量子,计算,AI,人工智能,机器人,区块链,Web3,分布式,操作系统,OS,芯片,视频,深度,论文