从比特币挖矿到 PoW 共识机制:探究比特币的迷人之处
那么挖矿到底是什么?矿工如何通过挖矿获得比特币?这需要从比特币区块链系统采用的PoW(工作量证明)共识机制说起。
PoW(工作量证明)共识机制
我先给大家讲一个故事:
有一个村庄,这个村庄里的很多事情都需要大家一起来决定。例如,有一天,村长需要全体村民决定今天中午在村食堂包饺子还是面条。
通常我们能想到的方式就是投票——每个村民有一票,少数服从多数。但有些村民不愿意去食堂吃饭,就可能把自己的票给别人,这样可能会造成不公平。大多数在食堂吃饭的人可能都没有实现自己的愿望。
于是村长改变了一个方法。 10时50分,他用扩音器向全体村民广播:“大家选择午餐是食堂包饺子还是面条。想来食堂吃饭的可以到食堂门口推一下。” 11点把巨石推到门东,中午我们吃饺子;推到门西,我们中午吃面条。”
于是想在食堂吃饭的人就去推石头。贡献多的人终于实现了自己的愿望,贡献少的人也愿意这么做,因为这一直是村里的规矩。
这个故事讲述了一种实现人群共识的方法,我们可以称之为“工作量证明机制”。用你付出的努力来证明你选择的意愿。
在本系列的第一篇文章中,我们讨论了区块链系统保持每个人的账本一致的能力。这种保持所有节点数据一致的机制称为共识机制。使用不同的共识算法可以达到不同性能的共识效果,最终目的是保持数据的一致性。
记录工作量证明,不可篡改
我们已经知道,在比特币系统中,记录交易是系统工作的基本方式。在比特币区块链系统中,区块是记录交易的最基本的容器。比特币(BTC)当前的区块大小限制为 1MB(前几天刚刚诞生了一种新的虚拟货币,称为比特币现金 - BCC,目前区块大小限制为 8MB)。
由于区块的大小是有限的,因此每个区块中可以容纳的交易数量也是有限的。目前的比特币系统规定平均每10分钟生成一个区块。因此,矿工的工作方式本质上就是收集10分钟内互联网上产生的所有交易,然后将交易填充到一个区块中。该块大致如下表所示:
注意第一项。在任何一个区块中,第一项是没有转账地址的,也就是所谓的(挖矿交易)。没有人付给矿工这笔钱。矿工们刚刚写道,他们理所当然地收到了 12.5 个比特币。所有节点都同意矿工写这个,这样矿工就获得挖矿收益。
不同的矿工填写区块时,数据肯定是不同的,因为每个矿工的首条肯定是不同的,矿工只会将挖矿收益转移到自己的地址上。所以矿工的声明是“获得了12.5个比特币”,矿工Nancy的声明是“Nancy获得了12.5个比特币”。
每个矿工都填写了自己收集到的交易以及应该获得的收益。那么,谁的记录会被大家认可呢?比特币使用工作量证明机制,允许矿工相互竞争来解决数学问题。谁先解决了这个问题,谁的区块就会得到大家的认可。
就像片头故事中的村庄一样,每个矿工都在奋力推着巨石。当巨石压下他记录的那一页账目后,他大喊道:“我的工作量成功了。” ,快来看看!”所有的矿工都过来抄了那页账本,贴在自己账本的最后,然后又开始了新的记账流程。如此循环往复,账本就被记下来了。一页一页地增加,账本越来越厚。
当“中本聪”决定采用工作量证明机制时,他的出发点是防止系统受到攻击。 “中本聪”认为,如果攻击者想要通过搞乱账本来进行攻击,那么他需要足够的算力。也就是说,他比大多数推石头的人都强。这样一来,他就需要付出巨大的成本,但换来的收益却不足以抵消成本,所以攻击者没有经济动力去攻击比特币系统。
与推石头的方法不同的是,在比特币中,每个人都通过穷举结果来解决数学问题。并不是计算能力强的人每次都会获胜,因为有些人可能运气好,一下子就获胜了。找到了答案。计算能力强的人这次可能就没这么幸运了,他们尝试了很多次都没有遇到解决办法。
但从概率的角度来看,得到答案的次数与自身算力在整个比特币网络中的占比是一致的。也就是说,如果一个矿工拥有全网30%的算力,那么基本上在1000分钟(产生100个区块)的时间内,他找到的答案就是30个区块,他就获得了30%的挖矿收入。
然而,现在比特币的价格越来越高,推石头的人已经不满足于自己推了。相反,他们把家里所有的大骡子和马都派去干活。在“中本聪”最初的设计中,一个CPU一票,通过算力来决定由哪个矿工记下最终账目。随着比特币价格的上涨,GPU挖矿开始出现。后来人们对GPU的速度并不满意,开始制造挖矿专用芯片。专用芯片计算比特币问题的能力是普通CPU的数万倍。因此,比特币不再是“一个CPU,一票”。这也偏离了“中本聪”的最初设计。比特币网络基本上已经被几大矿池垄断,这背离了去中心化货币的初衷。