1. 什么是 SPV
SPV(Simplified Payment Verification,简单支付验证),是一种不运行完全节点也可验证支付的简单便捷方法。
用户必须下载全网完整的区块链账本数据,只需要保存所有的区块头(block header),不用自己验证交易过程,只需要能确认该笔交易存在主链上的某个区块里,并被几个区块确认了。
2. 举个故事栗子
在一个月黑风高的夜晚,饭饭凭借高超地技巧和手段完成了某地下组织安排的秘密任务,随后一个无法追踪来源的电话打过来,低声地说道:“饭师傅牛逼!10分钟就把我家堵了很久的马桶疏通了,作为奖励,我刚打了10个BTC给你,请你确认下。下次马桶堵了还找你通!”
这时如何验证这笔交易就成了一个问题。
如果完全地验证这笔交易,就需要下载完整的比特币区块链账本,好些个G大小的数据就要下载半天,然后还涉及到验证转账发起地址是否有足够余额可以交易、检查是否发生双花、脚本能否通过等等问题。如果饭饭亲自去做这些,是非常麻烦的。
这时用SPV来验证就方便很多。首先下载主链上全部的区块头到本地。比特币每个区块大小容量是 1MB,而区块头的大小固定只有 80 字节,不到一个区块大小的万分之一。然后计算该笔交易的hash值,定位到包含该hash的区块。再用区块中hash值根据merkle tree的值来确认区块是否在主链上。根据区块所在的位置,计算该交易得到了多少个区块确认。
3. 优点
有的同学就说这也很复杂啊,其实这个过程不需要我们自己来做,一般钱包客户端都自动帮你实现了这个功能。
通过只下载区块头数据,极大地减轻了客户端存储的负担。无论一个区块包含的交易量是多少,区块头的大小是固定的80字节。下载全网的区块头数据也不过几十MB的大小,是现在任何一款手机或电脑都是能负载起的。
网友评论