Author

Topic: "SPV mining"使得比特币矿池"不乐意"进行快速区块广播 (Read 227 times)

hero member
Activity: 490
Merit: 500
通常情况下,玩家们普遍认同区块广播速度不够快是限制现有比特币发展的重要瓶颈。并且在过去的几年中,活跃在比特币圈内的开发人员也一直致力于研究通过采取压缩区块等方法,来换取更高的区块确认速度。但不为人知的是,由于比特币现有网络的运行越来越依靠几大中心化程度越来越多的主要矿池,目前已知的“解决方案”背后,却会带来一系列诸如“间谍式挖矿”--“SPV mining”等问题。如果现状继续发展,结果是这些大矿池更加“不乐于”积极的去广播。
 
矿池“自私”一点儿,或许更有利于自己
 
刚才开篇说到的内容或许很难让人理解,那让我们先简单的来看一个陈旧的概念:“私自的挖矿。”
 
简单的说,所谓的“私自挖矿”实际上是区块链攻击方式的一种。例如挖矿者A在某一时刻挖到了新的区块,且并没有立刻进行全网广播。这种“自私”的行为使得同一时间内其他的竞争者并没有得知这个区块的存在,还在继续花费成本寻找这个实际上已经被掘出的区块上。从而确定矿工A的领先低位。不过这么做并非没有风险--因为挖矿本身就是算力的竞赛。假设矿工A在某一时刻如果选择隐藏自己挖到的区块B,但区块B又被其他的竞争者采用更大的算力找到,并进行了广播,那么A的这个隐藏块很可能就会被废掉,之前所做的挖掘工作也成了无用功。通常情况下,如果想采取隐藏区块的方式来获取更大的收益,攻击者起码需要控制全网百分之25-30的算力,如果这一幅度超过全网的算力的50%,就会形成所谓的51%攻击。
   
幸运的是,对于比特币而言,无论是单个矿工还是目前现有的几大矿池都没有哪个拥有全网半数以上的算力。甚至超过25%算力的矿池数量也少的可怜。
 
不去验证也能接着挖
 
目前,许多矿工实际上在从事一种可以被称为“SPV mining”的“缺验证”挖矿工作。如何理解呢?首先,一个比特币区块实际上包含了多组数据:交易信息、时间戳、随机值等等。其中一个重要的组成部分是当前新区块的区块头信息中引用了上一个区块区块头的哈希值。全网中每个区块的区块头的产生都要依赖前一个区块的区块头数据。这样使得矿工只能依照区块的次序进行挖掘。
 
这种方式实际上存在着漏洞--矿工们可以仅仅知道上一个区块区块头部分信息的情况下来挖掘后面的区块,而不用等着获悉上一个区块的数据全貌后再进行工作。某种意义上说,这样能让矿机更加高效的进行区块的计算,以期获得更高的收益。
 
如今的比特币矿池大多用户众多,对于矿池的经营者来说,如何从全网最新的区块中更快的获得区块头信息再分任务发下去,一定程度上也决定了矿池的效率。这样一来,谁也不愿意傻到放着好办法不用而去等着获取全网区块全貌后再开工这就是SPV mining的由来。例如某些矿工可以跟其他人一起连接在矿池A中,跟其他人一起最高速的获得矿池公布新区块的区块头信息。有些矿机但接下来这些矿工做的并非是为矿池的当前继续打工而是马上投入到了下一个区块的计算当中。
 
可能引起的“问题”
 
不幸的是,这种“图省事”的挖矿办法确给比特币网络带来了问题。
 
首先这些“图省事”的矿工无法验证所获得区块头哈希值的有效性,如果矿池本身挖到了个一个废块,这些“省事儿”矿工就会在错误的路径上继续工作下去,从而导致分叉的出现--比2015 BIP66 的区块分叉。不过对部分矿池经营者来说,有人有可能会放任这种情况的存在。如通过提供给这些“省事儿”矿工错误的区块头信息,会使得他们浪费自己的算力,直到这些矿工获得了区块的全部信息后,才发现自己的之前的活原来白干了。不过这样一来,也变相降低了比特币网络的安全性。
 
“广播”速度的背后
 
如果这些“问题”矿工的数量不多,那还好说,但现在的问题是有“图省事”行为的矿工总数超过了全网的一半。可以预见的是,当如此众多的矿机在缺少对上一个区块全部有效信息进行验证的情况下就投入到了下一个区块的计算中,带来的不仅是区块被拒绝或者丢弃的风险了。个别大的矿池可以通过延长区块的广播间隔来发动那些对不进行“SPV mining”挖矿池子的51攻击。从而让自己获取更大的利益。
 
简而言之,虽然最快的进行区块广播是每个矿池应该做的事情,但由于“SPV mining”的大范围存在却扭曲了现实情况,甚至使得这一切变得更加糟糕。当前,依旧没有太好的解决办法。
Jump to: