5.3 天下无恶
5.3.1 难度优先
前面我们谈到区块链应“不断成长”,否则,一旦停止生长,则作恶者就能很容易地追赶上,从而实现篡改的目的。
在“不断成长”的前提下,可以从另一个角度来看工作量证明:在数据正确、谜题解答正确的条件下,根据“长度优先”,就能推导出“难度优先”,因为,最长的分支上凝结了更多的算力,即投入了更多的工作量。
若作恶者要篡改数据,则要完成相应的算力,而“长链凝结了最多算力”这一特点,使得作恶者无能为力,这就是依靠算力来保护区块链,实现防篡改原因所在。作恶者要篡改区块链中的数据,就必须完成相应的工作量。而没有足够的算力是实现不了的,特别是在更改较久的历史数据时,必须从更改处开始计算各区块的谜题,而正确的区块链仍在不断生长。因此,必须计算存量区块的谜题和增量区块的谜题,也就是说,这个追赶动作更是要与守规矩的节点拼算力了。
5.3.2 恶者无利
作恶者为了某种利益,伪造、篡改交易或制造双重支付交易,将这些交易装入区块,并希望通过共识算法,将该区块混进区块链中。
一直说“作恶者”修改交易或区块,那怎么才能够使修改成功?首先,他修改的内容必须“正确”,否则,通过不了别人的验证。其次,他修改一个区块后,只有沿此区块长出新的分支,且新分支战胜旧分支,才能使修改成功。
那他到底能修改什么?其实,在比特币的世界里,他能修改的内容非常有限。
(1)他不能修改别人的交易,因为,有别人的签名,他修改的交易通过不了其他矿工的验证;对自己的交易,他能修改的也非常有限,因为有验证且金额要有来源,所以他不能使金额变大。他只能改变收款人,如原来给张三的资金,现在改为给李四,但张三的货已发给了付款方。
(2)如果区块没有满的话,他可以在区块中增加交易,该交易如果正确,则不是坏事,一旦不正确,如交易的资金已经被先前的交易花出去了,则验证不会通过。
(3)他可以删除一个交易,这种情况才是他“作恶”的主要原因:该交易曾作为付款,他收到了货物,当他删除了该交易后,即作废了原来的付款交易,原来的付款资金又回到了他的手中,他又可以使用这笔资金了。
虽然他的修改内容有限,但若得逞,则会摧毁区块链“防篡改”的招牌。
可以说,公有链对不守规矩者采取完全放任的态度。那么,如何保证区块链的正常运作?实际上,它是基于前述的这样一个公理:绝大多数人是“好人”,即把“守规矩的记账员的算力大于50%”作为公有区块链的前提。
在此前提条件下,作恶者产生的含“修改区块”的新分支一定过不了守规矩者的关,即一定会被剪掉,因为“坏人”的算力不足,新分支追不上旧分支。由此可见,作恶者无利可图。
算法并没有惩罚作恶者,而是奖励守规矩者。在激励政策下,作恶者会放弃作恶,因为他的区块达不成共识,无利可图,反而浪费了自己的算力成本。但若他不作恶,提供的区块是合格的,则有可能在竞争中获胜,从而获得奖金。所以,在技术和资金的双重作用下,作恶者“弃恶从善”了。