http://www.wgdsb.com

SPV钱包是什么:SPV、SPV节点和SPV钱包

BTB发布于2018-08-24 09:54:22
0
48
0

  SPV钱包是什么:SPV、SPV节点和SPV钱包

  一、什么是SPV

  SPV是“Simplified Payment Verification”(简单支付验证)的缩写。中本聪论文简要地提及了这一概念,指出:不运行完全节点也可验证支付,用户只需要保存所有的block header就可以了。用户虽然不能自己验证交易,但如果能够从区块链的某处找到相符的交易,他就可以知道网络已经认可了这笔交易,而且得到了网络的多少个确认。

  

SPV钱包

  按照中本聪的原文,这里有个细节需要注意,SPV指的是“支付验证“,而不是“交易验证”。这两种验证有很大区别。

  “交易验证”非常复杂,涉及到验证是否有足够余额可供支出、是否存在双花、脚本能否通过等等,通常由运行完全节点的矿工来完成。

  “支付验证”则比较简单,只判断用于“支付”的那笔交易是否已经被验证过,并得到了多少的算力保护(多少确认数)。

  考虑这样一种情况,A收到来自B的一个通知,B声称他已经从某某账户中汇款一定数额的钱给了A。去中心方式下,没有任何人能证明B的可靠。接到这一通知,A如何能判断B所说的是真的呢?

  在比特币系统中,这一通知是以一个固定格式的“交易”来实现的,该交易中包含B的汇款账户支票、B的签名、汇给A的金额以及A的地址。

  如果A想本人亲自验证这笔交易,首先,A要遍历区块链账本,定位到B的账户上,这样才能查看B所给的账户支票上是否曾经有足够的金额;接下来,A要遍历后续的所有账本,看B是否已经支出了这个账户支票上的钱给别人(是否存在双花欺骗);然后还要验证脚本来判断B是否拥有该账户的支配权。这一过程要求A必须得到完整的区块链才行。

  但是,如果A只想知道这笔支付是否已经得到了验证(如果验证了就发货),他可以依赖比特币系统来快速验证。即,检查发生此项支付的那笔交易是否已经收录于区块链中,并得到了多少个确认。

  原理:block header中有三个关键字段,一是prev_block_hash(前一区块的hash值,确保了区块链所记录的交易次序);二是bits(当前区块的计算难度), 三是merkle_root_hash(借助merkle tree算法,确保收录与区块中所有交易的真实性)。

  验证某个交易是否真实存在时,理论上,用户可以通过以下方式进行验证:

  (为了简化模型,我们假设用tx_hash来定位block。这种方法有被“交易可锻性”攻击的风险,实际应用中可以根据output_point来定位。)

  0. 从网络上获取并保存最长链的所有block header至本地;

  1. 计算该交易的hash值tx_hash;

  2. 定位到包含该tx_hash所在的区块,验证block header是否包含在已知的最长链中;

  3. 从区块中获取构建merkle tree所需的hash值;

  4. 根据这些hash值计算merkle_root_hash;

  5. 若计算结果与block header中的merkle_root_hash相等,则交易真实存在。

  6. 根据该block header所处的位置,确定该交易已经得到多少个确认。

  优点:极大地节省存储空间。减轻终端用户的负担。无论未来的交易量有多大,block header的大小始终不变,只有80字节。按照每小时6个的出块速度,每年产出52560个区块。当只保存block header时,每年新增的存储需求约为4兆字节,100年后累计的存储需求仅为400兆,即使用户使用的是最低端的设备,正常情况下也完全能够负载。

  问题:如何才能通过tx_hash定位到该交易所在的区块? 以往的比特币协议中缺少对此的支持。

  二、比特币钱包

  在进一步讨论SPV的实现之前,先要说明一下比特币钱包存放的是什么,钱包和私钥之间是什么关系?

  既然用到“钱包”一词,那么应该与我们日常生活中使用的钱包有一定的相似之处。为了更直观说明,我们与日常生活中所使用的钱包做一下对比。

  

SPV钱包

  日常生活中里面存放的可能是纸币、支票、印鉴等等(为了简化说明,我们把银行卡排除在外,使用银行卡涉及到很多中间环节,增加表述上的复杂度)。

  用纸币购物时,

  1. 从钱包中凑足若干张不同面值的纸币,计算总面值是否大于所需金额以及应找回多少零钱;

  2. 将这些纸币直接交给卖方;

  3. 卖方验证这些纸币的真伪;

  4. 卖方计算这些纸币的面值是否大于或等于商品价格,并找回相应的零钱。

  5. 将收到的零钱放回钱包。

  比特币的钱包里存放的相当于是一张张标有面值的“一次性支票”和对应的“印鉴”。支付时,





作者:Molly Jane Btbpig
编译:BTB

SPV钱包是什么:SPV、SPV节点和SPV钱包相关文章

本文地址: http://www.wgdsb.com/benzhan/6331.html
声明:原创译作欢迎交流讨论,文章内容和观点不代表万格比特的立场。如需转载,请务必注明文章作者以及来源。部分图片来源于网络,我们尊重版权,如有疑问敬请联系,我们将核实并删除。