区块链学习基础篇—简单支付验证SPV(8)

SPV产生的背景

在比特币整个生态圈里,大部分都是普通用户,即只有基本的比特币投资及消费支付需要的用户,他们可能没有矿机,没有高端配置的电脑,那么他们是否也要运行一个全节点程序呢?要知道,现在官方显示的结果,比特币所有区块数据目前在80G左右,而且还是持续增长中。普通用户来讲,主要就是为了支付交易,下载完整的区块数据没必要,也比较占用空间。

SPV技术原理

简单来讲,就是比特币网络里的节点在打包一个区块的时候,会对区块里所有的交易进行验证,并且,一个交易还会得到6至7次的确认来确保交易最后的完成。正是如此,在使用简单支付验证时,只要判断出一个交易在主链上的某个区块里出现过,则可以证明该交易之前已被验证过。

那怎么验证呢?

中本聪再一次展示了他高瞻远瞩的能力,令人钦佩不已,他曾在比特币白皮书里提到,“不运行全节点也可以验证支付,用户只需要保存所有的区块头(Block Header)就可以了。用户虽然不能自己验证交易,但如果能够从区块链的某处找到相符的交易,他就可以知道网络已经认可了这笔交易,而且得到了网络的多个确认。

这是一个伟大的创新,解决了人们在支付验证时如何处理超大规模区块数据的难题。

SPV如何实现?


区块链学习基础篇—简单支付验证SPV(8)_第1张图片
默克树结构

所有的具体交易信息的哈希值都存放在叶子节点,将所有这些信息两两进行归纳,重复这样一个过程,最后归纳成一个节点,即根节点(如图中的节点0),通过一个根节点这样的哈希值就代表了所有打包到这个区块里的交易信息,所以大大减少了区块头部的大小。不仅如此,当要搜索某一个交易,比如上图中的23的时候,可通过几步,比如0-2-5-11即可以快速搜到

SPV节点验证交易在那个区块时,有两种好处:

1、SPV充分利用默克树结构,在寻找交易时,只需下载寻找区块头而不是整个区块。

2、区块头只有80字节,每小时6个,一年也就4M大小。

3、如何定位区块呢?

比特币提供了一种叫做布隆过滤器(Bloom filter)的功能,节点会在通信链路上建立一个这样的过滤器,限制只接受含有目标地址的交易,从而能过滤掉大量不相关的数据,减少客户端不必要的下载量。比如,SPV节点会收到少于1KB的有关区块头和Merkle路径的数据,其数据量只约占一个完整区块(目前大约1MB)的千分之一。

这样一来,借助这个功能,“轻钱包”不用借助中心化的方式也可以实现,在手机上面运行也不是太大问题。


下一篇:什么是闪电网络?



区块链学习基础篇—简单支付验证SPV(8)_第2张图片

你可能感兴趣的:(区块链学习基础篇—简单支付验证SPV(8))