以太坊merkle树(Merkle树的来源)
以太坊merkle树
如果要将这棵树进行可持久化存储,需要首先计算得到左下角叶子节点的哈希0xaa(这同样也是它存储在持久化数据库中的索引),再计算粉色节点的哈希0xcc,然后由得到的这两个节点计算分支节点的哈希0xdd,最后计算根节点的哈希0xee。

需要注意到的是,对一个节点进行提交是一个递归的操作,它会首先计算这个节点所有变脏的孩子节点的哈希,并将这些孩子节点进行提交,之后再修改该节点的Value字段指向新的孩子节点的哈希,最后计算当前节点的哈希值。同时,对孩子节点的哈希值计算过程中,可能需要计算孩子节点的孩子(如果存在且被修改的话)相应的哈希,因此这个过程是一个递归的过程。下图是一个例子:
MPT可以用于构建分布式文件存储系统,类似于IPFS(InterPlanetaryFileSystem)。它允许存储大规模文件,并支持高效的文件检索。
作用:验证区块内交易的执行结果,包括合约调用、合约创建、交易状态变化等。它确保了在当前区块中的每笔交易都按照规则执行,并产生了正确的结果。如果某个区块中凭证树根哈希验证失败,整个区块将被视为无效,从而维护了区块链的一致性和可验证性。
Merkle树的来源
以太坊的交易树是一个默克尔树。以太坊的交易树是以每笔交易的哈希值为基础构建的一个默克尔树,以此来组织区块中的所有交易。每个区块头都包含一个字段指向交易树根的哈希值,以便其他节点可以验证该区块中的是否存在指定交易或验证交易的完整性。
分支节点是一个包含17(以太坊中半字节范围0~f,外加一个value)个条目的数组,分支节点既可以是搜索路径的终止也可以是路径的中间节点,当为路径终止时value存储其值。
从底向上,每两个相邻的叶子节点的哈希值会被组合成一个哈希对。这是通过将两个哈希值串联在一起,并再次应用哈希函数来计算哈希对的哈希值。
以太坊nibble(半字节,4bits)编码,每个nibble的数值范围时0x0~0xF),所以分支节点条目长度为16 1。
merkle树的应用
这些不同类型的节点在MPT中合作以存储和检索数据。叶子节点存储实际的键值对数据,扩展节点用于共享相同前缀的数据,而分支节点用于树的分支和路径。这种结构允许MPT高效地存储大量数据,支持数据的快速检索和验证,同时节省存储空间和带宽。
Merkle树,也称为哈希树,是一种高效验证数据完整性的数据结构,广泛应用于分布式系统和区块链领域中,它可以提供高度的安全性和可验证性。
Merkle树的最大特点是能够高效验证大量数据的完整性。通过将被验证交易的哈希值构建一个默克尔树,将其树根与区块头的根哈希(RootHash)进行比较,可以确定数据是否被篡改。基于这个特性以太坊中的一些轻节点只需要同步区块头就可以验证交易的有效性。
作用:验证账户状态的完整性。它确保了在当前区块中所有账户的余额、合约代码和存储数据等信息都是正确的。如果某个区块中状态树根哈希验证失败,那么整个区块将被视为无效,从而维护了区块链网络的一致性和安全性。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。






