在默克尔树中,节点通过哈希后的内容地址指向其他节点,可以将其视为一个链接,因此一个默克尔树是链接节点的集合。
可以把它想象成一组文件夹。如果用户在包含子文件夹的文件夹中运行哈希算法,那么获取的内容派生哈希对于其当前内容是唯一的。
如果删除子文件夹,那么与以前的文件夹所包含的内容不再相同,因此将获得新的哈希值。
最终根节点的内容地址对于树中根节点向下的所有节点是唯一的。
任何节点中的数据即便只改变一个字节,所对应的哈希也将改变,随之所有父节点的散列也将改变,而作为一名程序员需要始终向后构建这些数据结构。
IPFS 系统中的 【MekleDAG 】是有向无环图,它的边是 Merkle-links,这意味着每个到对象的链接都可以验证对象本身,并且每个对象都包含其子对象的安全表示(Secure Representation).
MerkeDAG 仅通过附加认证的数据结构简化了分布式协议,缔约方可以与对象进行通信和交换安全引用,其能在之后验证对象的正确性,因此对象本身可以来自不受信任的通道,另外还支持对数据结构进行分支和后续的合并,就像版本控制系统 git.
MerkleDAG 包含三个重要属性:
- 内容寻址:使用多重哈希来唯一标识一个数据块的内容
- 防篡改:可通过检查哈希值来确认数据是否被篡改
- 去重:因为基于内容寻址,内容相同的数据块哈希是相同的,所以可轻松去掉重复的数据
与默克尔树不同的是,MerkleDAG 的每个节点都可以存储数据,而默克尔树将文件数据存放在叶子节点中,因此 MerkleDAG 可以兼容更多的数据结构。
Leave a Reply