SPV的来源

2024-04-27 23:48
文章标签 来源 spv

本文主要是介绍SPV的来源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SPV的来源

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

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

    他提到的这个方案就是SPV,简单支付验证。

 

    两种验证

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

没有SPV节点时,是如何验证的呢?

 

    如何验证

 

对比一下全节点和SPV节点的区别:
      存储数据     存储数据的大小     UTXO数据库     验证方法
全节点     全部区块     N*1M     未花费UTXO     参考交易在区块链中的高度来验证
SPV     全部区块头     N*80byte     无     通过参考交易在区块链中的深度来证明

全节点的验证方法,一个全节点,想要检查123号区块中的某个交易,你就要把从这个区块开始一直追溯到创世区块的123个区块全部连接起来,然后建立一个完整的utxo数据库,通过确认该utxo是否还未被支付来证实交易的有效性。

 

区块链节点利用SPV对支付进行验证的工作原理如下:

①计算待验证支付的交易哈希值;

②节点从区块链网络上获取并存储最长链的所有区块头至本地;

③节点从区块链获取待验证支付对应的默克尔树哈希认证路径;

④根据哈希认证路径,计算默克尔树的根哈希值,将计算结果与本地区块头中的默克尔树的根哈希值进行比较,定位到包含待验证支付的区块;

⑤验证该区块的区块头是否已经包含在已知最长链中,如果包含则证明支付真实有效;

⑥根据该区块头所处的位置,确定该支付已经得到的确认数量。

 

    上述第三部中,SPV在实现上涉及到一个问题,如何才能通过交易特征值(比如tx_hash)来定位到该支付交易所在的区块?原有协议中,可以通过getheaders命令来获取block headers,可以通过getdata命令支持获取指定的block, 但不支持通过tx_hash反向查找所在的block。为了定位block,客户端往往不得不下载整个区块链。

    比特币提供了一种叫做布隆过滤器(Bloom filter)的功能,节点会在通信链路上建立一个这样的过滤器,限制只接受含有目标地址的交易,从而能过滤掉大量不相关的数据,减少客户端不必要的下载量。

 

安全性

    spv由于没有全部的交易记录,不能验证某个交易不存在,这个漏洞会被针对spv节点的拒绝服务或者双重支付攻击利用。

 

    spv节点需要随机链接多个节点,增加与至少一个可靠节点相连接的概率,但是这种随机链接的需求也会容易受到网络分区和sybil攻击。

merkle树

    区块链中的每个区块都包含了产生于该区块的所有交易,且以Merkle树表示。

    默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。

    区块链中的应用

    在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。生成一棵完整的Merkle树需要递归地对哈希节点对进行哈希,并将新生成的哈希节点插入到Merkle树中,直到只剩一个哈希节点,该节点就是Merkle树的根。

 

    

如何验证交易

    为了证明区块中存在某个特定的交易,一个节点只需要计算log2(N)个32字节的哈希值,形成一条从特定交易到树根的认证路径或者Merkle路径即可。随着交易数量的急剧增加,这样的计算量就显得异常重要,因为相对于交易数量的增长,以基底为2的交易数量的对数的增长会缓慢许多。这使得比特币节点能够高效地产生一条10或者12个哈希值(320-384字节)的路径,来证明了在一个巨量字节大小的区块中上千交易中的某笔交易的存在。

 

    例如,我们想验证交易D3是否在区块中,我们需要一个merkle路径来证明D3存在于区块中。该路径由粉色块表示,H2、H8、H13;我们收到merkle路径后,然后根据自己已有的H3,生成H9,然后由H9和H8生成H12,最后生成root;然后和区块中的merkel root比较,如果一致则说明该笔交易确实位于区块中。

    Merkle树的⾼效随着交易规模的增加⽽变得异常明显。下表展现了为了证明区块中存在某交易而所需转化为Merkle路径的
数据量。

 

 

 

 

这篇关于SPV的来源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941823

相关文章

如何确定公共转录组数据集的来源性别

太长不看版: 文献报道XIST和RPS4Y1是区分性别的两个高可信度的标记基因,因此你没有必要去用其他性染色体上的基因去确定数据集的性别。 不仅仅是在使用公共的单细胞转录组数据,其实早在公共芯片数据或者RNA-seq数据挖掘中,就有人在考虑一个问题,这个数据的元信息作者会不会搞错了呢? 以性别为例,我们很容易想到表达Y染色体上基因数据肯定是男性,但是我们也知道基因也不是任何时刻都表达,所以如

splunk指定syslog来源的sourcetype

日常工作使用splunk来分析数据,由于会接收到来自不同网络设备的数据,大多由sysylog发送出来,默认端口为udp的514端口,这样就会造成数据类型sourcetype没法确定,在使用过程中只能依靠host(来源ip)来判断,如果一台设备发送不同类型的数据,就没办法区分。因此需要用splunk的配置文件来指定udp:514的sourcetype。 在$HOME/etc/apps

通过userAgent识别请求来源与微信或微信小程序

如何识别http请求是否来自微信客户端 在http数据包的header结构中解析“User-Agent”即可,判断是否包含关键字“micromessenger”(这里请注意不要拦截其他微信http请求,所以关键词请匹配好),示例代码如下: String userAgent = request.getHeader("User-Agent");if(userAgent.matches(".*mi

升级你的App推广策略!Xinstall用户来源朔源功能引领行业新潮流

一、引言 在App推广和运营的道路上,你是否曾经遇到过这样的困境:投入了大量的资源,但用户增长却迟迟不见起色?或是用户增长迅速,但用户留存率却极低?这些问题,往往源于我们对用户来源的不了解。今天,我们就来聊聊如何通过Xinstall这个强大的工具,实现App用户来源的精准溯源,从而让我们的推广和运营更加高效。 二、什么是Xinstall用户来源朔源功能? Xinstall是一款专为App推广和

ai的产生预示什么样的社会产生?(来源:kimi编辑器+自己的理解和消化)

AI的产生和发展对社会产生了深远的影响,它正在塑造一个以技术(能源技术很关键,环境和谐)和数据为驱动的新社会形态。以下是一些关键方面,展示了AI如何塑造社会: 自动化社会:AI推动了自动化的进程,许多重复性或危险任务(自己已经开始不断地重复,包括自己觉得重复的脑力工作)现在可以由机器(重复的脑力工作得到了解放,人的活动开始变得更加有活力)完成,提高了生产效率(处理事物的量越来越大,时间开始变得越

【CSS in Depth2精译】1.1.1 样式表来源

您添加到网页的样式表并非浏览器呈现样式的唯一来源。样式表有三种不同的类型或来源。您添加到页面的样式称为 作者样式(author styles);此外还有 用户样式(user styles),即终端用户设置的自定义样式;以及 用户代理样式(user-agent styles),即浏览器默认样式。用户代理样式的优先级较低,因此会被您的样式所覆盖。而用户样式很少见,即便存在,其优先级也介于用户代理样式和

emacs company自动补全的候选来源

company的安装和配置,这里不再说明。spacemacs里,可以通过SPC h SPC快捷键,选择company的readme.org去阅读。 emacs company实现补全的候选来源,叫company-backends;是一个emacs变量,可以使用c-h v company-backends查看。如下所示: company-backends is a variable define

SpringSecurity-5-UserDetailsService与UserDetails接口(用户来源)

欢迎你来看我的SpringSecurity系列文章,因为是系列文章,所以部分文章内容是有承前启后的关系 这个UserDetailsService接口是用户数据的来源,就是登录用户的数据从哪里来,是从数据库来?还是从你电脑的TXT文本上过来的,还是从其他地方,该接口会返回UserDetails接口的实例,而这个UserDetails接口,就是用户信息,因为用户信息除了username,passwo

论文写作神器:15大参考文献来源网站推荐

撰写论文需要大量的参考文献支撑论点,这对在校学生和学者而言都是一大挑战。今天,我们可以充分利用网络资源,高效获取优质文献,摆脱遍查图书馆和杂志社的艰辛。本文就为大家推荐15大优质的参考文献来源网站,助力论文写作! AIPaperDone 拥有完美文献综述的AI论文网站 - AIPaperDone - AI 万字论文生成 1. Google Scholar Google Scholar囊

抗性淀粉:健康益处、食物来源、与肠道菌群的关联

谷禾健康 目前越来越多营养概念诸如"低碳水化合物饮食"正在流行,然而,所有的碳水化合物都是不好的吗? 其实并非如此。 其中,抗性淀粉就是一种特殊的碳水化合物,它与我们通常所熟知的淀粉有区别。抗性淀粉之所以得名,是因为它能够抵抗人体消化酶的作用,逃离被吸收的命运,直接进入肠道。这种特性使得抗性淀粉拥有许多健康功效,它不仅能调节血糖,还能促进有益菌的生长,改善肠道功能,甚至还能增强饱腹感,帮助控制体