重新创造比特币20:分叉之重组与分裂

作者:何岩,由 recreating.org发行。

0.前言 #

迄今为止,Bitcoin系统的所有技术概念都已经出场。

本篇我们来看看系统运行过程中的一个现象,即分叉。

Bitcoin系统的核心精神就是竞争。

竞争的表象就是分叉。

1.分叉 #

咖啡馆,中本聪和Gilfoyle围坐在显示屏前,一行行的文字快速滚动着,就像黑客帝国里的场景。

Bitcoin系统日志

Bitcoin系统日志

天书一般的日志,在中本聪和Gilfoyle看来却犹如一部大片,Bitcoin网络好似一个原始的动物战场,矿工之间进行着力量角逐,微观的混乱中蕴含着整体的秩序。

最原始的力量竞争

最原始的力量竞争

算力就是蛮力,谁的算力大,谁就获得区块奖励。

这样的竞争毫无门槛,规则公开,任何人都可以参与,只要你愿意付出成本(电费)。

大多数时间里,节点之间都在各自挖矿,大家相安无事。

可是一旦网络中同时出现两个区块广播,这就会上演短兵相接的较量。系统中的所有节点都会被卷入,每个节点都要表态,选择跟随哪个区块,选择错了,自己的利益就会受损,记账网络分成两派,这就是所谓的分叉。

好戏就这么开始了:

目前,网络中的最新区块为五角星,这是三爷(节点3)在上一轮挖出的区块。(见下图)

记账网络的和平时期

记账网络的和平时期

新的一轮挖矿开始,小男孩和牛头人几乎同时得出随机数。

小男挖出的新区块为三角形(绿色),牛头人挖出的新区块为菱形(蓝色)。(见下图)

短兵相接

短兵相接

这时候其它节点的难题来了,要在这俩个新区块中做出选择。

选择的方式就是“跟随”,即,基于此区块来挖掘自己的下一轮新区块。

网络暂时形成了两个阵营,这种状态就称之为:分叉(forks)。(见下图)

天下大势,分久必合,合久必分。

天下大势,分久必合,合久必分。

2.重组 #

此时,系统虽然分叉,但是不影响用户使用。

无论客户端连接到哪派,业务处理都一样。

交易写入,两派节点都会写入到交易内存池。

交易查询,两派节点都会返回同样的结果。(内存池+区块,两派相同)
系统是否分叉,用户是感知不到的。

这就好比,美国的总统竞选期间,国会依旧照常办公。

两派的竞争的结果取决于谁呢?

答案是取决于下一轮挖出新区块的节点。

小红帽率先挖矿出新一轮区块:红桃。(见下图)

小红帽广播最新区块红桃

小红帽广播最新区块红桃

所有节点都同步红桃。

由于小红帽在上一轮“跟随”了小男孩的绿色三角,其它节点接受了红桃,也就意味着同时接受了绿色三角。

这样一来,上一轮的胜者便是小男孩。

此时,系统由分叉恢复为合一,我们将这一过程称之为:重组(Reorg)(见下图)

重组:由分叉回归合一

重组:由分叉回归合一

之前牛头人的蓝色菱形区块成了一个被遗弃的区块,即,孤块。

Gilfoyle问到:“孤块的存在是否是一个缺陷?”

中本聪反问:“你为什么会这么想?”

Gilfoyle答:“因为这会让牛头人有一种挫败感,打击了挖矿积极性。更重要的是系统时不时就呈现出分叉状态,给人一种系统不是很稳定的感觉。”

中本聪说:“我理解了,你是在表达,一个完美的系统不应该存在冗余。孤块就是冗余,孤块代表着竞争的失败。在我看来,你的这种理解是源自典型的精确系统世界观,即一切运行都要最高效,没有意外,没有多余损耗,一切都要可计划,可控制,可设计。”

Gilfoyle说:“的确是这样。”

中本聪说:“而站在复杂系统的世界观来看,孤块的存在不仅不是缺陷,反而是精髓之处。有成功有失败,这才符合大自然的进化机制。失败意味着什么?失败意味着你还不够好:You are not good。只有失败才能让节点们反思,反思才能改变,改变就是进化。在我看来,孤块不是缺陷,而是像炼钢时,铁中故意加入的杂质,无杂质不成钢。”

“比特币本身不是一个纯粹的系统;它自带着很多绝大多数数学家和计算机科学家看做是缺陷的性质。而这些“缺陷”正是比特币强大的内因。” - Craig Wright

铁与钢

铁与钢

牛头人经过反思,发现不只是算力不够,其它方面也在影响着挖矿:

1.区块的验证速度要加快:新一轮挖矿的开始,开始于同步区块验证的完毕。

2.构建区块的容量要加大:大区块等于更多手续费,强者都会构建大区块,跟随强者,构建大区块。

3.网络传输速度要加快:挖矿的意义不是发掘区块;而是让你发掘的区块能够传递到所有其他的挖矿者那里去。所以网络的传输速度也很重要。
经过权衡,牛头人发现,均衡的提升基础设施的建设更加划算。
改善完区块验证和区块构建的代码,又升级了自己和邻居节点的网络。

经过验证,牛头人惊喜的发现做对了,后面再与小男孩的短兵相接,都赢了。

小男孩失败之后,也走上同样的道路,升级基础设施。

能够主动改变的节点都是强者,强者和强者链接会越来越紧密,组成了Bitcoin的神经中枢,我们称之为:小世界网络。

小世界模型

小世界模型

小世界让Bitcoin系统更加高效健壮。

小世界网络不是垄断,而是开放。

“到底一个市场是竞争的还是垄断的,不能简单地数那些市场上已经出现的正在经营者的竞争者的数量,而应该去看那些潜在的竞争者,看他们进入市场到底会不会遇到人为设置的行政障碍。只要存在这个障碍,那么不论市场上现有的竞争者有多少,这都是一个封闭的市场,一个垄断的市场,一个缺乏竞争的市场;如果没有这样的限制,人们可以随意进出,那不管看得见的竞争者数目是多少,它都是一个充分竞争的市场" — 薛兆丰

3.双花攻击与算力守护 #

黄鼠狼想要喝咖啡,便构建了一笔交易,将自己的一条30Bitcoin的UTXO指向了老板Bob的公钥,老板Bob通过客户端查到30Bitcoin已经到账,将咖啡给了黄鼠狼。(见下图)

黄鼠狼构建的第一笔交易数据

黄鼠狼构建的第一笔交易数据

黄鼠狼拿到咖啡后就开始使坏,想要白喝。

于是又构建了一笔交易,将上一笔中已经花掉的那30Bitcoin的UTXO又一次的指向了自己的公钥地址。

一笔UTXO被重复引用两次,这就是所谓的双花。(见下图)

一笔UTXO被两笔交易引用,就是双花

一笔UTXO被两笔交易引用,就是双花

正常情况下,记账网络会根据先见为真原则,采用第一笔交易,抛弃第二笔交易。

但是,黄鼠狼临时加大算力,挖出了一个与众不同的新区块:采用第二笔交易,抛弃第一笔交易。

广播区块,记账网络同步完毕,双花成功!黄鼠狼一脸幸灾乐祸。

老板Bob一看黄鼠狼的表情,觉得不对劲,再一查客户端,之前的30Bitcoin消失了。

当前网络区块链如下(见下图)

最新区块为黄鼠狼挖出的

最新区块为黄鼠狼挖出的

我们可以看到,黄鼠狼挖出的是最新的区块,高度为2001。

难道Bitcoin系统如此脆弱吗?一次算力攻击,就可以双花作恶。

当然不会,黄鼠狼还没高兴超过2分钟,记账网络忽然出现了一个高度同样为2001的竞争区块。

此时,记账网络进入分叉状态。(见下图)

忽然出现竞争区块

忽然出现竞争区块

原来这个竞争区块是小男孩挖出来的,小男孩验证黄鼠狼的区块发现里面存在双花数据,认定黄鼠狼在作恶,拒绝同步黄鼠狼的区块,而继续挖掘自己的区块,1分钟之后将挖出的区块广播到网络中。

这时候网络中同时存在两个区块,其它节点如何选择呢?

大多数节点,都会选择小男孩的区块,因为在区块验证环节,大家都会发现黄鼠狼的区块中有双花交易。

少数刚刚加入的节点,会选择黄鼠狼的区块,因为新加入的节点,没有历史交易数据,无法判断黄鼠狼和小男孩谁的区块中是双花交易,所以只能依照先见即真原则,选择跟随黄鼠狼。

黄鼠狼这时候很着急,眼看着自己的战果就要作废,立即投入更多的算力,在区块高度2002挖出了新区块。黄鼠狼心想,这下我的双花区块该站稳了吧(见下图)

黄鼠狼挖出了最新区块

黄鼠狼挖出了最新区块

对于新节点来说,因为无法分辨谁作恶,的确会选择同步黄鼠狼的这支作恶链。

但是对于大多数诚实节点,大家依旧抛弃了黄鼠狼的新区块,选择继续在上面的诚实链上继续“跟随”。

经过几轮较量,大多数诚实节点的算力之和大于黄鼠狼的算力,所以上面那条诚实链会最终超出下面那条作恶链。(见下图)

算力大者获胜

算力大者获胜

这时候,之前不明真相的新节点,会根据“跟随”最长链的原则,改为“跟随”上面的诚实链。

只要黄鼠狼的算力没有超过整体的51%,作恶链就迟早会被重组,曾经挖出的区块都会变成孤块。

黄鼠狼心想:“为了一杯咖啡,损失这么多算力,我难道是个2B吗?”

双花攻击,只能针对攻击者自己的UTXO,对其它用户的交易记录没有影响,因为攻击者无法构建出其它用户UTXO的解锁脚本。

即便系统由于双花攻击,暂时分叉,也不影响其它用户的正常使用。

只会对被双花攻击老板Bob有短暂的影响。

等到系统重组之后,诚实链战胜作恶链,老板Bob的余额又会恢复正常。

诚实的节点们,一直在用自己的算力,守护着系统的公正。

所以说,Bitcoin系统不担心短暂的算力攻击,哪怕邪恶算力超过51%,只要邪恶算力一撤,邪恶链还是会被诚实链重组。

这就好比,独裁者一倒,国家还是会恢复民主自治。

4.分裂 #

黄鼠狼死性不改,买了很多节点,算力超过了整体的51%。

新挖出的区块中,将区块奖励改成了5000Bitcoin。黄鼠狼心想,做一把大恶,赚个5000Bitcoin,交易卖掉,赚一笔就跑。

系统再次分叉,这一次黄鼠狼的邪恶链持续成为最长链。

可是,和预期不同,系统没有发生重组,系统分裂了。(见下图)

分叉不在重组即为分裂

分叉不在重组即为分裂

这是为什么?

因为,改变区块奖励本质上是改变了游戏规则,改变了游戏规则,就不在是公平竞争,而是将一个游戏,分裂成了两个不同游戏。

这就好比,足球游戏分裂成了美式足球(football)和英式足球(soccer)。

分叉可以合一则为重组,分叉不再合一则为分裂。

所以,黄鼠狼等于是自己又发明了一个新系统:Shitcoin。

交易所只能兑换原始的Bitcoin系统,并不认可这个Shitcoin。(但是,真实世界中的交易所确装满了Shitcoin。真是一个不完美的世界。)

黄鼠狼又失算了:“Bitcoin系统这么强悍吗?”

5.白皮书:一个人要懂得多少的复杂,才可以创造出简单。 #

中本聪说:“这下我可以安心的将Bitcoin交给全世界了”

随后,中本聪以Bitcoin的0.1版本作为协议基础,写成了Bitcoin的白皮书《比特币:一个点对点的电子现金系统》(Bitcoin a peer-to-peer electronic cash system)

并强调协议不变(set in stone):“一旦0.1版本发布,核心设计在其整个生命周期中都是一成不变的。”

6.更改域名bitcoinsv.com #

很多年以后,黄鼠狼竟然丧心病狂的黑掉了中本聪的电脑,偷到了www.bitcoin.org域名的控制权。

并将www.bitcoin.org指向了自己分裂出来的Shitcoin。
中本聪只好注册新域名:www.bitcoinsv.com,并指向真正的Bitcoin(BSV)。

“唉!将会有多少无明众生被表面的虚名所蒙蔽啊!”中本聪自言自语道。

光明与黑暗的争战将会一直持续下去。

一代过去,一代又来,大地却永远长存。

日光之下,根本没有新事。

7.后记 #

重组即公平竞争,规则之内的博弈。

分裂即非公平竞争,规则之间的争斗。

到此为止,本书全部完成。

前10篇为上半部,主要讨论系统的业务:交易

后10篇为下半部,主要讨论如何支撑交易:P2P网络、工作量证明等

本系列的核心价值在于,定位,即给技术概念以定位。

很多技术概念做了简化描述,目的是让读者更容易理解其定位。

本书写的是Bitcoin的生存(内环转动),下一本书将要写Bitcoin的发展(外环涌现),包括:Metanet、SPV、Token、Application等,书名为:重新创造元网(Recreating Metanet)敬请期待。

相关链接 #

重新创造比特币:前言

Part One : 交易
重新创造比特币1:从一个简单的web交易系统开始
重新创造比特币2:第一个版本上线啦
重新创造比特币3:舍弃账户模型
重新创造比特币4:数字签名
重新创造比特币5:公钥和私钥
重新创造比特币6:第二个版本上线啦
重新创造比特币7:UTXO
重新创造比特币8:基于UTXO的系统重构
重新创造比特币9:万物皆交易
重新创造比特币10:交易脚本

Part Two : 群系统
重新创造比特币11:群系统(上)
重新创造比特币12:群系统(下)
重新创造比特币13:P2P网络
重新创造比特币14:交易的同步
重新创造比特币15:账本的同步
重新创造比特币16:Block Chain
重新创造比特币17:网络的弹性
重新创造比特币18:工作量证明(上)
重新创造比特币19:工作量证明(下)
重新创造比特币20:分叉之重组与分裂

书面设计矢量图_36.png

英文版Amazon.com在售 : Recreating Bitcoin

BSV打赏:
1Djc4TdVBi8urzmSXKHwg8cpEAYKcRQxgY

©2019 - Recreating.org all rights reserved

 
4
Kudos
 
4
Kudos

Now read this

Recreating Bitcoin 14:Synchronizing Transactions

Epilogue # In the last chapter, Satoshi and Gilfoyle complete the simplest P2P network but have not achieved the synchronization of the ledger across network. The first step to solve the problem is to synchronize the transactions.... Continue →