区块链重要基础知识8-1——区块链节点分类以及SPV节点

1. 比特币中的节点分类[1]

保存自身的交易信息以及数据
保存自身的交易信息
比特币节点分类
全节点
维持包含全部交易信息的完整区块链的节点
轻节点
SPV节点
仍需下载全部数据进行解析,获取与自身相关的交易数据,但无须本地保存全部数据
不需要下载新区块的全部数据,只需要保存区块头部信息
区别

其中支付验证其实只是用于小额支付的一种方式,所以相对交易验证就没有那么复杂。

1.1 他们之间的区别

交易验证要检验这个交易是否合法,支付验证就是验证这笔交易是否已经存在

  1. 区块链交易验证的过程比较复杂,包括账户余额验证、双重支付判断等,通常由保存区块链完整信息的区块链验证节点来完成。
  2. 而支付验证的过程比较简单,只是判断该笔支付交易是否已经得到了区块链节点共识验证,并得到了多少的确认数即可。

1.2 区块头的数据结构

区块头的数据结构

1.3 能实现验证相应的保障:

前一区块的哈希值,可以确保区块链所记录的交易次序。默克尔树的根哈希值,则可以确保收录到区块中的所有交易的真实性。

1.4 步骤如下:

  1. 该笔支付交易是否已经得到了区块链节点共识验证(找到要验证的这笔交易在哪个区块)
    1. 计算待验证支付的交易哈希值
    2. 节点从区块链网络上获取并存储最长链的所有区块头至本地
    3. 节点从区块链获取待验证支付对应的默克尔树哈希认证路径;(这里找到了该交易对应的哈希值)
    4. 根据哈希认证路径,计算默克尔树的根哈希值,将计算结果与本地区块头中的默克尔树的根哈希值进行比较定位到包含待验证支付的区块;(找到这个哈希值属于哪个区块)
    5. 根据该区块头所处的位置,验证该区块的区块头是否已经包含在已知最长链中,
  2. 确定该支付已经得到的确认数量,如果包含则证明支付真实有效。(证明本交易得到了6次确认)

1.4.1 最关键的默克尔树

1. 如何从获取到的最长链中寻找对应的区块?

  1. 如果区块链节点想要知道其钱包中某个比特币地址即将到达的某笔支付,该节点会在节点间的通信链接上建立起布鲁姆过滤器,限制只接受含有目标比特币地址的交易
  2. 找到节点符合过滤器要求将以默克尔区块消息的形式发送该区块消息
  3. 发送的区块消息 = = 区块头+一条连接目标交易与默克尔树根的默克尔哈希认证路径
    • 该认证路径由默克尔树所有路径中节点的哈希值共同构成,自下而上进行哈希计算。

最终的结果:节点能够使用该路径找到与该交易相关的区块,进而验证对应区块中该交易的有无。

默克尔树的结构示意图

2. 寻找默克尔认证路径示例:

  • 假设待验证交易为E,则交易E的默克尔树哈希认证路径为图3-2虚线框所示的M(F)、M(GH)和M(ABCD)。通过该哈希认证路径,即可以通过哈希计算找到一条链接交易E与默克尔树根的完整路径。

3. 为何要通过相邻节点找到根hash以及根hash的作用?

  • 答:因为区块头部存的是根hash值,所以最终的目的是要找到根hash值就能映射到对应哪个区块了

默克尔树认证路径示意图

参考文章:

1.区块链知识讲解:SPV简单支付验证

2.解读区块链全套六册.第三章.第四节

猜你喜欢

转载自blog.csdn.net/weixin_42295969/article/details/106892927