上一期我们学习了区块链系统里的51%攻击,今天我们来聊聊在
区块链入门(7) — 区块链的骨骼2
文章中提起过的SPV支付(简易支付验证)吧。通过这个SPV支付能带给我们什么便利呢?
中本聪在论文里简要地提及了这一概念,指出: 不运行完全节点也可验证支付,用户只需要保存所有的block header就可以了。
1. SPV的是怎么出现的?
在比特币整个生态圈里,大部分都是普通用户,即只有基本的比特币投资及消费支付需要的用户,他们可能没有矿机,没有高端配置的电脑,那么他们是否也要运行一个全节点程序呢?
而对于这些用户来说,他们需要知道自己是否支付成功,就只能到区块链上查找这笔交易。在一个全节点中就可以做到查询,因为全节点保存了整条区块链的所有数据。
但你要知道,现在官方显示的结果,比特币所有区块数据目前在120G左右,而且还是持续增长中。用户们不可能在手机上安装那么大内存的软件,想要在手机得到验证,就只能通过SPV简单支付验证了。
SPV可真的对于大多数的用户来说是福利了,不需要大量数据就能够进行支付验证,支持简单支付验证!

小编在这里提醒各位同学注意了!!!(重要的事情只说一遍)
大家要搞清楚区块链的支付验证与交易认证的区别!不要混淆了:
SPV指的是区块链支付验证,而不是区块链交易验证。 这两种验证方式存在很大的区别:区块链交易验证的过程比较复杂,包括账户余额验证、双重支付判断等,通常由保存区块链完整信息的区块链验证节点来完成。而支付验证的过程比较简单,只是判断该笔支付交易是否已经得到了区块链节点共识验证,并得到了多少的确认数即可。总的来说就是: 交易验证要检验这个交易是否合法,支付验证就是验证这笔交易是否已经存在 。
2. SPV是怎么验证的?

想学的话,我们用一张表格来对比全节点和SPV节点吧:
存储数据存储数据大小UTXO数据库验证方法全节点全部区块N*1M未花费UTXO参考交易在区块链中的高度来验证SPV全部区块头N*80byte无参考交易在区块链中的深度来证明
通过上面这个表格,我们可以很容易看到,全节点的验证方法。
一个全节点,想要检查123号区块中的某个交易,你就要把从这个区块开始一直追溯到创世区块的123个区块全部连接起来,然后建立一个完整的UTXO数据库,通过确认该utxo是否还未被支付来证实交易的有效性,是比较繁琐复杂的。 而SPV验证,它的工作只需要做这两件事:1.找到要验证的这笔交易在哪个区块2.确定这个交易是否被6次确认过了
如果验证的这笔交易已经被6次确认过了,代表这笔交易已经被最长链承认了,则这笔交易是真实存在的。
具体的验证过程如图:
SPV支付验证过程
3. SPV的安全性如何?
用SPV简单支付验证,可以节省一大笔存储空间,无论未来交易量有多大,它的区块头保存的数据都是固定大小,80个字节,按照每小时6个的出块速度,每年产出52560个区块。当只保存区块头时,每年新增的存储需求约为4兆字节,100年后累计的存储需求仅为400兆,即便是最普通的终端硬件设备,也有将数据保存在本地的能力。 当然,这种简单的支付验证也带来一定的弊端。 由于只是简单地通过区块头来验证以下是否存在交易,相当于警卫在进行登记检查的时候,只是看了以下门牌号是不是在许可范围内,而不再去检查住在里面的这个人的身份。这个时候安全性就完全地取决于门牌的真实性了。 SPV 由于没有全部的交易记录,不能验证某个交易不存在,这个漏洞会被针对spv节点的 拒绝服务 或者 双重支付攻击 利用。相当于把主要的工作交给了同事(其他完整节点),同事认真负责就不会有问题了,同事如果被掉包了或者叛逆了,就要出事了。 因此,SPV节点需要随机链接多个节点,增加与至少一个可靠节点相连接的概率,但是这种随机链接的需求也会容易受到网络分区和sybil攻击。

【总结】 各种节点的出现是为了满足区块链不同应用的场景需求,也就是说成为节点的终端越来越多样化,逐渐完善区块链的生态圈。区块头汇聚了区块链实现各种功能的重要信息,而SPV节点就是充分利用了这一点,只保存区块链的区块头信息从而实现“简单支付验证”的功能。当然啦,如果想要保证万无一失的安全性,最可靠的方法还是运行完整区块链的节点。
声明:本文由入驻金色财经的作者撰写,观点仅代表作者本人,绝不代表金色财经赞同其观点或证实其描述。
提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。
金色财经 善欧巴
Block unicorn
Foresight News
火币HTX
道说区块链
比推 Bitpush News
白话区块链
佐爷歪脖山
