区块链中merkle树是怎样验证的,它的具体运行机制是( 二 )



?具体证明如下:
区块链中merkle树是怎样验证的,它的具体运行机制是

【区块链中merkle树是怎样验证的,它的具体运行机制是】 然后SPV钱包把计算出来的Habcefgh哈希值和自己同步下载好的区块数据块头里面的梅克尔树哈希值比较相等就行了。如果没有找到相等的,说明交易不可信。可能数据还没有同步过来,也可能交易就根本没有发生,所以暂时还不能相信或者接受/确认这个交易。
最后笔者这里抛一个问题,这个梅克尔树的数据结构包括每个树节点里面的值是否需要物理存储下来作为区块链的一部分而存在,甚至在网络广播呢?答案是当然不需要了。第一是不需要,因为被询问的全节点可以根据自己全量的交易块里面快速计算出SPV钱包验证需要的相应数据,并且不需要存储梅克尔树的中间层的数据。第二是假如特意存储了这个梅克尔树的全部节点数据,那么存储的数据比只单纯纯粹交易数据或者交易哈希值数据多了不少,明显是有违初衷的,相比其节约的哈希值计算时间的收益是微乎其微的,可以说是得不偿失。

■网友
我晕,你就不能百度谷歌吗?你这样很伸手党。
区块链中不是验证梅克尔树,是用梅克尔树验证交易。
每一个区块中包含一个梅克尔树根,这个树根是很多交易的不断重复hash计算得到的。假设一个区块中包含4比交易,每个交易都可以生成一个hash值,这4个hash值两两结合生成2个hash,然后这两个hash在进行一次hash计算救得到一个hash值,这个hash值就是梅克尔树根。

区块链中merkle树是怎样验证的,它的具体运行机制是


如果你希望确定一笔交易的状态,只要要求对方提供一个梅克尔证明,也就是得到特定的交易,交易的所在的梅克尔树根就是就是区块头,上一次我已经在题主的问题说明了,客户端会不断同步最新的交易数据,spv只用同步区块头就可以了,区块头里面包含区块交易的梅克尔树根。
只要本地能验证交易所在的区块头根哈希和本地相应的区块的根哈希就可以确定。

■网友
简单来说就是没有任何信息的 spv 节点如何拿到与交易相关的若干hash,然后自己计算,是否与交易所在区块的 merkle root 相同的一个过程。
很多帖子都把 spv 节点如何计算并验证 merkle root 这个过程讲的很清楚了,但问题是:
SPV 节点知道交易地址,怎么知道这笔交易在哪个区块里拿到了交易所在区块的头信息,怎么拿到的 merkle path,以及 merkle path 上哪些不需要计算 hash 的中间值,比如下图里的区块链中merkle树是怎样验证的,它的具体运行机制是
区块链中merkle树是怎样验证的,它的具体运行机制是
都是哪来的区块链中merkle树是怎样验证的,它的具体运行机制是

答案就是都是从全节点那拿的,SPV 本身没有块信息的情况下,自己不可能凭空计算这些 hash 值,但全节点什么都有,因此这些信息全节点都能计算出来。
来看看不同类型的节点之间都有些什么交互:
区块链中merkle树是怎样验证的,它的具体运行机制是

其中的 getdata 请求中如果指定了 inventory type 为 MSG_MERKLEBLOCK,全节点就会在响应中回复一个 MerkleBlock 。
其中的 getdata 请求中如果指定了 inventory type 为 MSG_MERKLEBLOCK,全节点就会在响应中回复一个 MerkleBlock。


推荐阅读