SPV协议证明

简单付款验证,通常缩写为SPV,是原始比特币白皮书中概述的系统,该系统使轻型客户(在低端系统上运行的钱包)能够验证交易已包含在比特币中并因此进行了付款。

前面讲的那句话是有可能的,因为当中本聪设计比特币时,他使用了一种叫做Merkle树的数据结构来存储每个块中的交易。Merkle树并不是什么奇特的东西。它只是一种结构,它将所有事务成对地分组并将它们散列在一起,然后继续对产生的散列进行散列处理,直到只剩下一个散列,即Merkle根。这时将创建1个树,其中每个节点都有两个子节点。可以使用它们来创建父节点。

  merkle树的可视化,L1-L4是比特币交易,

现在,关于Merkle树最棒的事情是,只有知道Merkle根/顶散列的人才能验证交易是否是树的一部分,也就是说,它是否包含在比特币区块中。这是通过获取连接Merkle根和底层事务之一的路径中的节点,并将它们捆绑在起来创建个证明:

SPV构建证据证明L1是包含在区块中。

有了一个SPV证明,我们唯一有权访问顶部哈希的用户可以以可验证的方式遵循返回根的路径,他可以一起检查Hash1和Hash0散列生成散列顶部,这意味着Hash1和Hash0是其合法的子代,然后用同样的方法检查 Hash0-0 Hash0-1,因此宣称这两个哈希散列也是原来始区块的一部分,最后检查L1是否为Hash0-0的源,证明L1包含在区块中,因此将其确认为已接受的比特币交易。

为什么SPV证明如此重要?

      SPV的证明似乎不是什么大不了的事,毕竟你可以通过运行一个完整的节点来验证比特币交易,为什么你要跳这么多圈来做同样的事情呢?运行一个完整的节点需要下载整个区块链,但如果我们使用SPV证明我们只需要知道每个区块的merkle根即可验证交易,所以我们只需要每块存储80字节,而不是完整的节点所需的每个区块所存储的内存更大的大小。这种超过99.99{57a47fa3c00b995430b25e4f3dc2aca9498ba8c691b7e02bab113c356d2c8a50}的减少幅度使得在低资源设备或智能合约中运行验证成为可能。如果我们下载每个区块,这件事是完全不可能的。

缺点

      一旦成功攻击51{57a47fa3c00b995430b25e4f3dc2aca9498ba8c691b7e02bab113c356d2c8a50}的加密货币。攻击者就可以骗过依赖SPV证明的客户,让他们接受任何类型的无效交易,比如凭空造出数字货币。考虑到如果成功进行了一次51%的攻击,则客户有可能会质疑会有多大的威胁,因此重复攻击会破坏基本的安全假设并损害整个系统。

不过,目前正在针对可以防止这种情况发生的系统进行一些研究。

Leave a Reply

Your email address will not be published.