美文网首页技术栈
区块链学习基础篇—简单支付验证SPV(8)

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

作者: LuCasKim | 来源:发表于2017-11-14 22:29 被阅读1120次

SPV产生的背景

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

SPV技术原理

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

那怎么验证呢?

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

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

SPV如何实现?

默克树结构

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

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

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

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

3、如何定位区块呢?

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

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

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

相关文章

网友评论

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

    作者:iBlockKim
    链接:https://www.jianshu.com/p/849e2562a0d8
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    假如说当前发生了一笔交易,, 那么这个验证过程的流程是怎样的??

    查找每一个区块的 二叉树,在这个树上查找有没有交易??

    事实上,如果这个交易被确认了也只会在当前区块之后的区块中存在,不需要查找前面的区块

本文标题:区块链学习基础篇—简单支付验证SPV(8)

本文链接:https://www.haomeiwen.com/subject/mvuxmxtx.html