假如乐成对加密钱币举办51%进攻,进攻者就可以或许骗过依赖于SPV证明的客户端,使其接管所有的无效生意业务,好比伪造钱币的生意业务。若51%进攻乐成,就有大概呈现双花,从而冲破基本的安详假设,对整个系统造成危害。不外,为防备此类环境产生,今朝也有许多系统正在研究中。
简朴付出验证(简称SPV)是原始比特币白皮书中所概述的一个系统,它使轻客户端(在低端系统上运行的钱包)可以或许验证一笔生意业务已被打包进入比特币区块链中,以此验证一笔付出的真实性。这是可以实现的,因为傍边本聪设计比特币时,他就利用一种叫做默克尔树的数据布局将生意业务存储到每个区块中。默克尔树并非新奇之物,它只是一种布局,可将所有生意业务成对分组,并对其举办哈希计较,然后继承对生成的哈希值举办哈希计较,直至只剩最后一个哈希值(称为默克尔根)。这样就组成了一棵默克尔树,个中每个节点都有两个子节点,可用于建设父节点。
上图:默克尔树视图,L1~L4是比特币生意业务
上图:证明L1已包括于区块中的SPV证明
默克尔树最酷的处地址于,只有知道默克尔根/Top Hash的人才气验证该笔生意业务是否属于此树的一部门,换句话说,就是可以或许验证该笔生意业务是否已打包于比特币区块中。它通过获取毗连默克尔根与个中一笔底部生意业务的路径中的节点,并将它们绑缚在一起来建设证明:
通过此项证明,只能会见默克尔根的原利用户可以或许以可验证的方法追踪返回根部的路径,他可以验证Hash1和Hash0颠末哈希后生成了默克尔根,这意味着Hash1和Hash0是其合举措哈希,然后再对Hash0-0和Hash0-1举办同样的验证,以此证明这两个哈希也是原始区块的一部门。最后,查抄L1是否为Hash0-0的源,证明L1已被打包进区块中。若一切无误,就可以证明这是一笔已被接管的比特币生意业务。
为什么SPV证明如此重要?也许会有人说,,SPV证明也没多了不得,究竟运行一个全节点就可以验证比特币生意业务,那为什么还要绕这么多圈子只为了做同样的工作呢?要知道,运行一个全节点需要下载整个区块链,但假如我们利用SPV证明,只需知道每个区块的默克尔根就可以验证生意业务,因此我们的每个区块只需存储80字节,而不消像全节点那样存储整个区块。SPV证明节减了超99.99%的存储空间,使得我们可以在低端设备或智能合约中举办验证,但假如要下载每个区块的数据,低端设备是完全无法做到的。
漏洞
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。