如何理解比特币挖矿的工作量证明
扫描二维码
随时随地手机看文章
BCH开发者awemany发布了一篇白皮书——《Storm——Using weak proof-of-work for instant confirmations on Bitcoin Cash》(《风暴——使用弱工作量证明实现比特币现金交易即时确认》)
为理解《风暴》,我重读了弱区块白皮书。
先来理解下比特币挖矿工作量证明。
一个挖矿的过程是计算一个随机数,谁先算出这个符合条件的数,这个条件叫“目标值”,就成功挖到一个区块,就可以拿到区块奖励和交易手续费了。考虑到交易安全性,比特币系统设定全网平均10分钟就会有人算对一次,如果这个平均时间比10分钟快,那系统就会加大计算的难度,反之就减少。
为了衡量挖矿出块时间,系统定义了一个叫“难度”的值。“难度值”和“目标值”是可以通过计算公式相互计算的。
为了给出弱区块的定义,我们先将比特币通过POW挖出符合“目标值”的区块叫“强区块”。请记住“目标值”和“强区块”这两个概念。
对应的,我们定义一个“弱目标值”,即定义一种PoW计算难度更低的“低难度值”,对应的也就可以计算出一个低目标值,就叫“弱目标值”。比如“低难度值”只有前面的“难度值”的四分之一,也可以是十分之一,这就看系统的多方衡量考虑。当矿工计算的随机数符合了这个“低难度值”的条件下计算出来的“弱目标值”时,这个矿工就挖到了一个叫“弱区块”的区块。
这种“弱区块”的出块速度就要比“强区块”快很多,比如快4倍,或10倍,依据系统设定的“低难度值”是原“难度值”的多少而定。
弱区块和强区块类似,也包含类似的数据结构,也有前散列值、随机数、根散列值、coinbase信息,和大量的交易交易。这种弱区块书写成“Δ-区块”。
由弱区块组成的链就称为子链,这是依附在强区块链上的。当有矿工挖到一个强区块时,子链就关闭了。然后系统再开启一个子链,等着依附到下一个强区块上。
当有矿工挖到强区块后,依附在上面的子链就会被打包进强区块。关闭子链后,这个强区块的具体数据结构应该和现有的区块数据结构完全一样。
有了弱区块和子链后,广播强区块的过程就可以被优化。在强区块被挖出之前,Δ-区块已经在矿工层面达成共识了,所有矿工已经同步了弱区块。当一个矿工挖出强区块后,再向全网广播强区块时,就只需要广播该强区块的所有Δ-区块哈希值,整个强区块的数据结构就不需要广播了。这可以大大降低区块广播过程的数据量,降低强区块被孤立的风险。
弱区块没有区块奖励,只有强区块才有。但弱区块有交易手续费,所以矿工也可以通过挖弱区块获得收益。
挖到强区块的矿工,是无法拿到弱区块里的交易手续费的。每一个弱区块被挖出来后,该矿工会在弱区块里构建一笔“弱coinbase交易tx”,将该弱区块里的所有矿工费收集在这笔“tx”里。但这笔tx在强区块被挖出前是无效的,只有等到强区块被挖出后,子链被关闭时,由强区块矿工来分配所有的交易手续费。
这多考验矿工人性,如果没有硬分叉,我很难相信弱区块能够形成协议共识。虽然Bitcoin unlimited的开发者始终认为弱区块是不需要硬分叉来部署。不过,这只是理论上不需要,工程上最好是设计成硬分叉。
比特币牵涉到的利益关系极其复杂,对比特币协议的进化需要多种领域的知识,包括经济学、计算机科学、数学 ,甚至现在还牵扯进来了各种政治类智慧。