Trias联合“北大软微-八分量协同创新实验室”定期举办技术沙龙。该实验室成立于2017年9月份,以可信计算、区块链等作为主要研究方向,致力于推动智能互联新时代下的人机互信问题的解决。
现在,我们会推出由实验室教授、博士生以及硕士生主笔撰写的系列文章。本期文章由北京大学的博士生辛武撰写。
在学术 | 分叉史上的三次重大事件一文中,我们简要概述了三次分叉事件,本文会对分叉的类别和原理做出简要的介绍,务求让没有经验的小白也完全看得懂。
一、区块链分叉概念
区块链的分叉需要从“系统升级”谈起,大家都知道区块链构建的是去中心化的系统,而我们传统的系统大都是中心化的系统。
对于中心化的系统,其升级比较简单,可分为:服务器升级和终端(客户端)升级。对于服务器升级来说,只要在后台部署好,即可一键升级;对于终端升级来说,可以选择在软件库或应用商店直接升级,终端版本的不一致并不会影响客户使用其服务。
对于去中心化的系统,其升级比较复杂。由于其没有中心机构,没有服务器,所以不存在服务器升级;对于终端升级来说,可以在各自社区中下载、安装,然后完成升级。这里需要注意的是:终端版本的不一致,可能影响客户使用其服务,最终导致其分叉。
区块链分叉就是指区块链在进行“升级”时发生了意见分歧,从而导致区块链分叉,即终端版本不一致。由于没有中心化机构,数字货币每次“代码升级”都需要获得社区的一致认可,如果社区无法达成一致,区块链就会形成分叉。
“升级”可能导致“共识机制”不同,共识机制可分为以下几种:
l 共识算法:NBFT/CFT:Paxos、Raft;BFT:PBFT、 POW、POX
l 区块大小:1MB、2MB、8MB、32MB、64MB
l 账户模型:UTXO、账户余额
l 挖矿难度:时间间隔、Hash函数
l 货币总量
l ……
二、区块链分叉分类
在区块链升级时或终端版本升级时,如果新版本和旧版本中的区块能够相互兼容,称为“软分叉”,不能相互兼容就称为“硬分叉”。
软分叉和硬分叉都“向后兼容”,这样才能保证新节点可以从头验证区块链。而软分叉还可以“向前兼容”,向前兼容是指旧版本的终端可以接受由新版本的终端所产生的区块,如下图所示:
旧版本 新版本 旧版本
三、比特币的最长链原则
在比特币挖矿中,存在2个矿工几乎同时解出题目或计算出Hash值的情况,即同时挖矿成功。在这种情况下2个矿工会形成2个区块,其数据一定不一样。接下来对这2个区块进行分析:
首先,这2个区块中记录的第一笔交易为:CoinBase交易(挖矿交易)。这笔交易没有转出地址,即没有任何人付给矿工这笔钱,这笔钱来自系统;矿工可以理所应当的记录自己获得了12.5比特币;所有节点都认可矿工这样记录,因此矿工就得到了挖矿收入。由于每个矿工只会把挖矿收入转入自己的地址,而每个矿工的地址不同,故2个区块中的第一条记录肯定不一样;
其次,这2个区块中打包的交易数据也不同。由于交易手续费不同,矿工都会优先打包手续费高的交易,当存在相同手续费的交易情况时,每个矿工的选择也会不同。
由于这2个矿工的区块数据都不一样,所以他们解题得出的结果也是不一样的,即计算出的Hash值不同,但都是正确答案,只是区块不同。于是,此时区块链中出现了两个都满足要求的不同区块。
那么,全体矿工这时该怎么办呢?
由于在区块链中网络广播的距离远近不同,不同的矿工接收到这2个区块是有先后顺序的。通常情况下,矿工们会把自己先看到的区块复制过来,然后接着在这个区块开始新的挖矿工作。出现了这样的情景:
以POW共识机制为例,从分叉的区块起,由于不同的矿工跟从了不同的区块,在分叉出来的两条不同链上,算力是有差别的。
由于算力和矿工的数量成正比,因此两条链的增长速度也是不一样的,在一段时间之后,总有一条链的长度要超过另一条。
矿工永远认为最长链是正确的。当矿工发现全网有一条更长的链时,他就会抛弃他当前的链,把新的更长的链全部复制回来,在这条链的基础上继续挖矿;所有矿工都这样操作,这条链就成为了主链。
如下图所示,分叉出来的链会被抛弃掉,之后会消失。在这个分叉过程中:所有矿工都遵从同样的机制,即“追随最长链原则”。
四、围绕区块链分叉的分析
根据前面区块链分叉场景的描述,区块链分叉有以下四种情况:
l 第一种:区块链内部机制——区块链产生孤块(软分叉)
数字货币正常记账因网络延迟等技术原因,可能出现了两个不同内容区块,当其中一个后面跟的区块更多时,另一个区块及跟随的短链就会被抛弃变成“孤块”,这也就是所谓“追随最长链原则”
l 第二种:终端版本升级——软分叉
软分叉是指旧的节点并不会意识到区块链代码发生改变,并继续接受由新节点创造的区块。矿工们可能完全没意识到区块链已经分叉了。
l 第三种:终端版本升级——硬分叉
硬分叉升级时要求大家都更换到新版本,如果有人还用旧版本,就会产生两个相互不承认的分叉链,这时“最长链原则”无效了。但旧版本出的块往往没有交易所支持,区块奖励一文不值,所以用旧版本的人发现没人跟随他出块,就会找原因,发现新版本就会立刻更新版本,旧版本的链就消失了。
l 第四种:社区、链、币的分裂——永久分叉(硬分叉)
如果两个不兼容的版本不是因为意外而并存,而是因为各有一些人支持不同版本的特征,坚决反对另一个版本的特征。
两个版本就一直有人支持同时运行,互相不接受包含了对方版本特征的链。记出来的区块链就永久分成了两个链,链上记载的币就分成了两种,社区也分裂成两个社区。
五、总结
“区块链分叉”会消失的情况:
l 第一种:区块链内部机制——区块链产生孤块(软分叉)
l 第二种:终端版本升级——软分叉
l 第三种:终端版本升级——硬分叉
“区块链分叉”不会消失的情况
l 第四种:社区、链、币的分裂——永久分叉(硬分叉)
对于不会消失的“区块链分叉”,即永久分叉,并非技术问题,而是一个涉及人性和利益的问题,目前看来,似乎难以解决。