区块链通俗读本
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.4 工作量证明

矿工为什么接受别的矿工提交的区块?工作量证明的“法律”要求大家接受最先提交含有谜题正解的区块,即他展示了“工作量”,而谜题的解就是证明。

一个区块包含的工作量是多少?当然,该区块上谜题的解就是工作量,但它只是很小的一部分,因为该区块包含前置区块的“缩微”(见第3章),因此,该区块的工作量就包含了它前置区块的谜题解的工作量,即产生该区块需要先产生前置区块,依此类推。由此可知:一个区块所包含的工作量是从创世纪块开始到这个区块为止所有区块的谜题解的工作量之和。因此,工作量证明的“法律”要求大家接受“最长的链”,它包含的区块数最多,当然这条链上累积的工作量就是最多的。

也就是说,一个区块所包含的工作量是这个区块高度的谜题解的工作量累积。工作量证明,即工作量多者优先,等价于“长度优先”,是指矿工总是选取当前“见到”的最长的分支,之后,如果发现另一分支长得更长,则立即选取新“见到”的最长的分支,从而对先前的选择做出调整,所以,对所有矿工而言,他们见到的“最长链”只有右端几节可能有差异,即前述的软分叉,而左侧是一致的,即达成了共识。

综上,工作量证明有如下要求。

(1)你作为一个诚实的矿工,必须在正确性被验证的前提下,基于“最长优先”原则,选取最长的链,即选取你所“见到”的最高区块作为“挖矿”基础,将最高区块作为自己产生下一区块的父区块。

(2)一旦你“挖矿”成功,即求出了谜题的解,应立即向网络提交你的新区块,参与“最长优先”的竞争,竞争成功则会获得奖励。

(3)在你“挖矿”的过程中,一旦发现正在挖的区块已被别人挖出,或者发现高度更高的新区块,应立即停止当前的“挖矿”,而以最高区块为基础进行新的“挖矿”,以便在下一轮竞争中获得机会。

(4)当前区块的谜题难度系数是由其前置区块中填入的值决定的。这个值在一个调整周期内是固定的,并在到达调整周期后进行计算调整(比特币每2016块为一个调整周期),即系统设定了一个区块链生长的速度,再用一个周期内的实际生长速度与设定的速度比较,调整下一个周期的难度系数,以此控制区块链的生长速度。需要注意的是,难度系数是针对区块的,而不是针对矿工的,不要认为算力小的矿工的难度系数就小。

其中,上述(1)是原则要求,(2)和(3)是理性选择,即你知道有(1)的原则要求,又知道胜者有奖励,若想争取奖励,就必须按(1)去做,因此在实际操作中理性的人就会按(2)和(3)去做。(4)体现工作量,即解开了该难度的谜题,被认为完成了该区块所需要的工作量。

个体行为导致集体行为结果的一致性,即最终一致性,因此,工作量证明是一种共识算法。