记录工作量证明,不可篡改
我们已经知道,在比特币系统中,记录交易是系统工作的基础方式。在比特币区块链系统中,区块是记录交易的最基本容器。在比特币(BTC)中目前区块大小限制为1MB,(前几天刚刚诞生了一种新的虚拟货币,叫做比特币现金——BCC,这个区块大小限制目前是8MB)。
由于区块的大小有限制,因此每个区块所能容纳的交易数量也是有一定限制的。目前比特币系统规定平均每10分钟产生一个区块,因此,矿工工作的方式实质上就是在10分钟内收集网上产生的所有交易,然后将交易填到一个区块里。这个区块大约如下表所示:
注意第一条,在任何区块里,第一条都是没有转出地址的,就是所谓的CoinBase(挖矿交易)。没有任何人付给矿工这笔钱,矿工只是理所应当的写上自己获得了12.5比特币。所有节点都认可矿工这样写,因此矿工就得到了挖矿收入。
不同的矿工在填写区块的时候,数据一定是不一样的,因为每个矿工的第一条肯定不一样,矿工只会把挖矿收入转入自己的地址。所以矿工Michael的CoinBase是“Michael获得了12.5比特币”,矿工Nancy的CoinBase是“Nancy获得了12.5比特币”。
每一个矿工都把自己收集到的交易和自己该获得的收入填好了,那么,到底谁的记录才会被大家认可呢?比特币就采用工作量证明机制,让矿工互相间竞争求解一个数学题,谁先解出来了,谁的区块就会被所有人认可。
就好像开篇的故事讲的那个村子一样,每个矿工都在努力地推那个巨石,一旦石头把自己记录的那一页账目压住了,他就大喊一声,“我的工作量证明成功了,你们快来看!”全体矿工就都过来把那一页账目抄写一份,贴在自己账本的最后面,然后又开始新的记账过程。周而复始,生生不息,账本一页一页的增加,账本越来越厚。
“中本聪”决定采用工作量证明机制的时候,出发点是避免系统受到攻击。“中本聪”认为,如果一个攻击者想用搞乱账本的方式来进行攻击,那么他就需要足够的计算能力。也就是说,他要比大多数推石头的人的力量更大。这样,他就需要付出巨大的成本,但是换回的收益并不足以抵消成本,因此攻击者是没有攻击比特币系统的经济学动力的。
与推石头的方式不同的地方在于,比特币中是大家一起通过穷举结果的方式,来求解一个数学题,并不是算力强的人每次都会赢,因为有人可能很幸运,一下子就搜索到了那个答案。而算力强的人,可能这次没那么幸运,穷举了很多次也没有碰到解。
但是从概率上看,求出答案的次数和自己在整个比特币网络中算力的比例是一致的,也就是说,如果一个矿工拥有了全网30%的算力,那么基本上在1000分钟(产生了100个区块)里,有30个区块都是他找到的答案,他获得了30%的挖矿收益。
但是,现在由于比特币的价格越来越高,推石头的人已经不满足于自己去推了,而是把家里的大骡子大马都派上去干活了。在“中本聪”最初的设计里,一个CPU一票,用算力来决定哪个矿工记的账成为最终的账目。随着比特币价格的增高,开始出现了GPU挖矿,后来人们又不满足于GPU的速度,开始制造专用芯片挖矿。专用芯片在计算比特币问题的能力上是普通CPU的数万倍,因此现在比特币已经不是“一个CPU一票”了,这也背离了当初“中本聪”的设计,比特币网络已经基本上被几大矿池所垄断,背离了去中心化货币这一初衷。