Note

科普 | 比特币全节点同步太慢?不用全节点也可验证支付的 SPV 机制

· Views 34

这是白话区块链的第1352期原创 
作者 | 三黎
出品|白话区块链(ID:hellobtc)


比特币自诞生以来,就因浪费电力资源为人所诟病,但其强大的算力是必要过程,很难找到更好的方式来代替。
随着它出现的年头越来越久,在其底层技术区块链上参与交易的人也越来越多,分布式账本的内容量急剧扩张,中本聪设置的一个区块 1 MB 的存储量使得交易过程和交易速度有了限制。
因此,下载整个账本成了令人头痛的一件事。能不能不下载整个账本,只找与自己相关的部分呢?换句话说,找个过滤器,把没用的都留在外面。
于是出现了 SPV 机制。

01 SPV 机制
科普 | 比特币全节点同步太慢?不用全节点也可验证支付的 SPV 机制
SPV 全称“ Simplified Payment Verification ”,常见翻译为简单支付验证。其目的是为了验证某笔交易是否存在,但并不能验证交易的合法性,这需要进行两步操作,第一步是确认交易支付是否被验证过,第二步是计算得到了多少确认数。
中本聪在论文里提及了这一概念:
在不运行全节点时也依然有可能对交易进行验证,用户只需要保留最长链上的所有的区块头数据。
简单而言就是:
假如小黑给大白转了一个比特币,大白怎么才能知道币已经交易完成了呢?在去中心化的系统里找证人那是不太可能的。
按照传统的办法就是:大白需要下载下来所有的区块链账本,然后找到小黑的账户,先瞅瞅它之前是不是有这样一个比特币,并且有没有转给大白的记录。仅仅是第一步,就使得大白的存储量要爆掉。
每个比特币的区块容量是 1 MB ,区块头只有 80 KB ,因此只需要下载区块头就可以节省很多空间。
区块头和区块体究竟是什么呢?
把区块头比做人的头部,里面存储着区块的头信息,如哈希值、时间戳等;而区块体则类似于人的整个身体,存储着这个区块的详细数据,如具体交易信息。区块头包含在区块体中。
也就是说一个区块头尽管有哈希值,但下载了区块头后大白仍无法知道交易记录在哪个区块里,这时候就需要拿着交易 ID 去找全节点查一下,是否有且在哪一个区块里。


02 SPV 的支付验证过程
咦,那万一矿工和小黑联合起来骗大白怎么办?
这时候 SPV 机制就派上用场了。
如果矿工说小黑转过来了,但其实并没有。那么为了圆谎他必须伪造更多的交易,使得这些交易能得到和自己区块头里同样的哈希值。但由于哈希的技术特性,改变后的数据要想和原始数据得出一样的哈希值,那是很难实现的。
总之, SPV 整个交易过程是这样的:
第一步,确认交易支付是否被验证过
首先计算待验证支付的交易哈希值,把区块头从区块链网络上保存至本地,再从区块链获取待验证支付对应的默克尔树哈希认证路径
对比获得的哈希值与自己的是否一致,若一致,则证明支付真实有效。
第二步,验证得到了多少确认数。根据该区块头所处的位置,确定该支付已经得到的确认数量。
完成这两步,交易支付验证就完成了。

03 小结
SPV 机制不仅节省了储存空间,减少了 P2P 网络带宽的浪费,使得普通用户在没有下载完整数据的情况下也可以操作,而且也给查账带来了极大方便。

Disclaimer: The content above represents only the views of the author or guest. It does not represent any views or positions of FOLLOWME and does not mean that FOLLOWME agrees with its statement or description, nor does it constitute any investment advice. For all actions taken by visitors based on information provided by the FOLLOWME community, the community does not assume any form of liability unless otherwise expressly promised in writing.

FOLLOWME Trading Community Website: https://www.followme.com

If you like, reward to support.
avatar

Hot

No comment on record. Start new comment.