在上一期中我们学习了比特币网络的内部结构,其中我们提到了SPV简单支付验证通过区块头进行交易验证,这期我们将着重说明SPV简单支付验证这个概念。
一、节点的分类
比特币网络中的节点是不一样的,主要包括全节点、轻节点和SPV节点。
全节点是指维持包含全部交易信息的完整区块链的节点。更加准确地说,这样的节点应当被称为完整区块链节点。
在比特币发展的早期,所有节点都是全节点,当前的比特币核心客户端也是完整区块链节点。但随着区块链网络的数据的增多,出现了新型的节点。
许多比特币客户端被设计成运行在空间和功率受限的设备上,如智能电话、平板电脑、嵌入式系统等。对于这样的设备,通过简化的支付验证(SPV)的方式,可以使它们在不必存储完整区块链的情况下进行工作。这种类型的客端被称为轻节点和SPV节点。
二、SPV节点和轻节点的区别
轻节点指的是:节点本地只保存与其自身相关的交易数据(尤其是可支配交易数据),但并不保存完整区块链信息的技术。SPV的目标是验证某个支付是否真实存在,并得到了多少个确认。
比如:小明收到来自小红的一个通知,小红声称已经从其账户中汇款一定数额的钱给了小明。如何快速验证该支付的真实性,是SPV的工作目标。
轻节点的目标不仅是支付验证,而且是用于管理节点自身的资产收入、支付等信息。比如:小明使用轻节点管理自身在区块链的收入信息、支出信息,在本地只保存与小明自身相关的交易数据,尤其是可支配交易数据。
轻钱包与SPV的最大区别是:
-
轻节点仍需下载每个新区块的全部数据并进行解析,获取并在本地存储与自身相关的交易数据,只是无须在本地保存全部数据而已。
-
而SPV节点不需要下载新区块的全部数据,只需要保存区块头部信息即可。
虽然轻节点部分借鉴了SPV的理念,但和SPV是完全不同的。
三、支付验证和交易验证的区别
SPV节点进行的是区块链支付验证,而不是区块链交易验证。这两种验证方式存在很大的区别。
区块链交易验证的过程比较复杂,包括账户余额验证、双重支付判断等,通常由保存区块链完整信息的区块链验证节点来完成。
而支付验证的过程比较简单,只是判断该笔支付交易是否已经得到了区块链节点共识验证,并得到了多少的确认数即可。
原油期货最新分析(原油大跌7.15%的背后分析)
简单的说就是:交易验证要检验这个交易是否合法,支付验证就是验证这笔交易是否已经存在。
四、SPV支付验证的实现步骤
我们现在知道SPV节点是通过区块头进行支付验证的,区块头中一般包括如下信息:前一区块(也称父区块)的哈希值、区块中交易默克尔树的根哈希值、时间戳等,通过区块的哈希值,可以识别出区块链中的对应区块。
区块前后有序链接,每一个区块都可以通过其区块头的“前一区块的哈希值”字段引用前一区块。这样把每个区块均链接到各自前一区块的哈希值序列,就创建了一条一直可以追溯到第一个区块(创世区块)的链条。
前一区块的哈希值,可以确保区块链所记录的交易次序。默克尔树的根哈希值,则可以确保收录到区块中的所有交易的真实性。
当比特币网络需要利用SPV进行简单支付验证时步骤如下:
-
计算待验证支付的交易哈希值;
-
节点从区块链网络上获取并存储最长链的所有区块头至本地;
-
节点从区块链获取待验证支付对应的默克尔树哈希认证路径;(这里找到了该交易对应的哈希值)
-
根据哈希认证路径,计算默克尔树的根哈希值,将计算结果与本地区块头中的默克尔树的根哈希值进行比较,定位到包含待验证支付的区块;(找到这个哈希值属于哪个区块)
-
根据该区块头所处的位置,验证该区块的区块头是否已经包含在已知最长链中,确定该支付已经得到的确认数量,如果包含则证明支付真实有效。(证明本交易得到了6次确认)
简单的讲,其实SPV就做了两件事:
-
找到要验证的这笔交易在哪个区块;
-
确定这个交易是否被6次确认过了。
如果验证的这笔交易已经被6次确认过了,代表这笔交易已经被最长链承认了,则这笔交易是真实存在的。
五、总结
SPV对普通用户一个很友好的支付验证方式,可以帮助节省更多的硬件控件。但是凡事都有两面性,这种方式有利也有弊。
SPV因为没有保存全部区块的节点信息,需要和其他节点配合才能进行验证,所以SPV节点存在被诱导连入了一个虚假的网络中的情况,存在被恶意攻击的可能。
在绝大多数的实际情况中,具有良好连接的SPV节点是足够安全的,它在资源需求、实用性和安全性之间维持恰当的平衡。当然,如果要保证万无一失的安全性,最可靠的方法还是运行完整区块链的节点。
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 请联系我们将立刻清除。
美元对人民币走势分析(升破6.37!人民币对美元汇率继续上涨详解)
原创文章,作者:菜鸡,如若转载,请注明出处:https://www.20on.com/135231.html