比特币分叉
时间:2019-12-13 09:48:16
软硬分叉涉及的问题是去中心化节点软件、协议、版本升级的问题,所有在区块链中运行的节点有一样的软件,遵守一样的共识机制、维护同一条链,但是一旦软件、协议、版本升级后,所有节点不可能同一时间都更新到同一版本,这就造成了一部分节点拥有新的共识协议机制,这时候会网络中出现新、老、两种节点。那么在区块生成的时候,新节点产生的区块,老节点就会认为合法或者不合法,老节点产生的区块,新节点也会认为合法或者不合法。在区块链中一直有一个51%算力的临界点,那么我们这里认为新节点的算力是大于50%的。
什么是比特币分叉
其实比特币的分叉就是对整个比特币网络的升级,就和苹果IOS系统需要不断更新升级一样,原来的比特币网络比较拥挤、满足不了目前用户快速增长的需求,自然就需要扩容升级。
分叉又分为软分叉和硬分叉,软分叉仅仅是网络的升级更新,升级前的节点能很好地兼容升级后的节点,并不会产生一个新的虚拟币出来。比如刚刚过去的以太坊大都会扩容,扩容后依然只有一条ETH主链,也就是软分叉。
硬分叉则不然,发生硬分叉后原来的区块链将分成 几条独立的链,也就是会产生新的数字货币出来,比如BCC就是比特币硬分叉产生的币,ETC也是以太坊硬分叉的产物。
软分叉和硬分叉是算力选择的结果,比特币的算力是一定的,如果有足够的算力支持某一种扩容方案的话,那么将发生软分叉。相反,如果没有任何一种方案获得足够多的算力支持,那么比特币网络将会发生硬分叉,新产生的链将相应地产生一种比特币。原来持有比特币的人,在硬分叉后都拥有分叉后的每一种比特币。
在比特币这类加密货币系统中,软分叉是比特币软件升级后对区块的校验准则是收拢了,硬分叉是比特币软件升级后对于区块的校验准则是扩大了。比特币协议规则进行变更时选择安装新软件升级为新的协议版本的矿工节点叫做新节点,选择不升级遵守旧的协议规则的矿工节点为旧节点。
软分叉中新规则是包含在旧规则里的。但凡新规则的由升级后的新节点创造的区块也一定符合旧规则,可以通过未升级的矿工节点的验证。但相反就不行了,升级后的新矿工节点对于未升级的旧矿工节点创建的区块并不能全盘接受,旧规则的圆圈比新规则要大,如果是根据红色部分规则创建的旧区块,那就无法通过升级后新矿工节点的验证。软分叉具有向前兼容性。向前兼容性是指这个软件可以接受由新软件产生的数据以及代码。
硬分叉中旧规则是包含在新规则里的。但凡符合旧规则的由未升级的旧节点创建的区块也一定符合新规则,可以通过升级后新矿工节点的验证。但相反就不行,未升级的旧节点对于升级后的新节点创造的区块并不能全盘接受,新的规则要比旧的规则更大,如果是按照黄色部分规则创造的新区块就无法通过未升级前矿工节点的验证了。硬分叉则是向前不兼容的,新节点创造出来的合法区块会被旧节点认为是非法的,不能够通过检验。
我们来看一个软分叉的例子,比特币刚刚诞生的时候发生过两次非常严重的危机,其中一次就是比特币的溢出漏洞。比特币的总量本来应该是2100万枚,结果因为那一次的溢出漏洞,比特币链上产生了1800多亿枚的比特币。这次漏洞是怎么发生的呢?在2010年的8月15日,比特币由于系统中的一个bug出现了第1次溢出漏洞,在74,638区块上出现了1844亿枚比特币。幸好及时被人发现,在比特币论坛上提交了这个问题,中本聪确认这个问题之后,提供了软件的升级补丁,这个升级补丁会强制将区块链的数据回退到错误区块之前的正确区块,让矿工们重新在这里进行挖矿。也就是通过软分叉的方式进行了解决。
这个时候发现了错误,下载了补丁进行升级的矿工会把自己的账本数据回退到74,637这个区块,然后重新往下挖矿。但是由于这个时候发现错误的矿工还很少,他们提供的算力比较少,所以整个区块链的速度是很慢的。原本正常的出块速度是10分钟一个区块,10分钟一个区块的速度是比特币软件通过全网矿工的算力计算出来的大约全网矿工一同进行计算的话,10分钟能出一个区块,而现在大部分的矿工还没有意识到错误,还在原来的错误的链上进行工作,所以在新的链上面,矿工们提供的算力就很少,出块速度很慢。
正确的74,638这个区块一直到将近8个小时后才被挖出,现在新的已经升级版本的节点,他们遵守的就是黄色区域的规则,旧的没有升级的矿工节点遵守的是红色区域的规则,新版本的节点多了一条规则是比特币交易输出额度最大不能超过2100万个比特币,而旧规则的版本当中是没有这个限制的,是它的一个bug。
软分叉中只有矿工需要升级,而用户和商家可以继续运行。原因在于由新矿工节点创造的区块可以通过旧矿工节点的检验,对于用户和商家发起的交易依然是可以通过矿工检验的。对于旧矿工节点而言,如果想要抢到记账权,除了验收收到的规则是否合法之外,还必须要在这个基础上继续向下挖一个区块,而如果他们遵守的是旧规则,那么旧旷工挖出的区块,最终可能会被主链抛弃成为孤块,那矿工花费的算力就白费了。商家和用户不参与记账权的抢夺,他们只需要进行区块的合法校验以及放到自己的账本上进行同步就可以了,所以在软分叉中只有矿工需要升级,用户和商家可以继续运行比较旧的节点。
硬分叉中所有节点都是需要升级的,因为硬分叉的新规则比旧规则更宽泛,使得原本旧规则下非法的区块在新规则下变得合法,所以用户和商家这些普通的全节点也必须升级软件。比如说一个新的矿工节点,产生了一个区块,如果用户商家没有升级,那么矿工产生的这个区块在这些用户商家眼里就是非法的,因为用户和商家他们遵守的旧规则要更窄一些。硬分叉最典型的例子就是比特现金(BCH)的诞生。
那分叉是不是就一定不好呢?其实也未必,区块链是一个很复杂的去中心化的系统,社区的意见难免会产生一些分歧,与其妥协出一个折中的方案,还不如分叉出来各自独立,让大家可以有不同的解决方案。所以分叉并不是就一定会产生新的加密数字货币,它们的本质上都是一种升级方式,硬分叉是一种升级方式,软分叉也是一种升级方式。在升级的时候当规则发生收拢或者扩大的时候,只要这个链上的参与者能够形成一致的意见,那么这个链就不会分出来两条链。而比特现金之所以会产生新的区块链和新的加密数字货币主要是因为这个硬分叉的方案,大家没有形成一致的意见,所以才会有新的链产生。
比特币分叉的原因
比特币在创造出来的时候,区块链一个区块的大小上限是1M,随着比特币交易日渐活跃,这个区块限制已经成为瓶颈,当区块内容的字节数提升后,必然会造成交易拥堵,因为你的交易可能因为这个区块数据已经满了而进不了块儿,那么就得不到确认,由于持续拥堵,如果你的交易费给太少,可能永远都得不到确认。那为什么不提升这个限制呢?这不是顺理成章的么?为啥还要闹分叉呢?
比特币扩容问题其实由来已久,早在2015年6月开始,整个比特币社区就陆续提出了各种各样的扩容方案,最有代表性的有以下几种:
BIP100:由矿工们进行投票,将新的区块建议上限值写在Coinbase交易中,新的值在当前的基础上有20%上下浮动空间。全网80%的算力参与,即可激活新的大小。
BIP101:自2016年起,立即提升限制到8M,然后每两年翻番,并持续至2036年,届时一个区块体积上限为8.2G。
BIP102:体积限制一次性从1M提升到2M。
BIP103:每个特定周期增长4.4%,折合年增长率为17.7%,直至2063年7月,届时体积上限约为1.4G。
BIP109:体积限制一次性从1M提升到2M,但是需要全网75%算力激活。
BIP248:2016年将体积提升到2M,2018年提升到4M,2020年提升到8M。
这还只是有代表性的方案,其它乱七八糟的方案更多,但是这些方案归根结底,基本可以分为两类:长期派和短期派。长期派比较理想化,希望把上限一次性到位,后面就不用变了,省得总分叉,总折腾吃瓜群众们,比如BIP101和BIP103。而短期派则认为,未来不可预测,固定的规则太暴力,甚至没有意义,不如边走边看,先把眼前问题解决了,典型如BIP100方案。但是由于BIP100细则太复杂,投票过程繁琐,后简化为BIP102和BIP109。至于BIP248,算是一种折中方案吧。
比特币硬分叉
如果区块链软件的共识规则被改变,并且这种规则改变无法向前兼容,旧节点无法认可新节点产生的区块,即为硬分叉。
这时候旧节点会拒绝新规则的区块,于是新节点和旧节点会开始在不同的区块链上运行(挖矿、交易、验证等),由于新旧节点可能长期存在,这种分叉也可能会长期持续下去。
上图中Block 4a与Block 4b是自然分叉的结果,最终在Block 5整个区块链达成了最终一致性(详细可见《深入比特币原理(十二)》)
假设当区块链扩展到Block 6时发布了改变共识规则的新客户端版本,于是运行不同客户端的节点出现分歧:
运行新版本的矿工将接受新规则下产生的区块Block 7b;
运行旧版本的矿工由于不能认可新规则,将拒绝Block 7b,并挖出基于旧规则的Block 7a;
此时区块链即发生了硬分叉,新旧矿工将在各自的区块链上进行挖矿,他们的去留将决定两条链的生死和价值。
硬分叉的过程
1.开发者发布新的客户端,新的客户端改变了区块链的共识规则且不被旧客户端兼容,于是客户端软件出现了分叉(software fork)。
2.区块链网络中部分节点开始运行新的客户端,在新规则下产生的交易与区块将被旧节点拒绝,旧节点开始短暂的断开与这些发送被自己拒绝的交易与区块新节点的连接,于是整个区块链网络出现了分叉(network fork)。
3.运行新客户端的矿工开始基于新规则挖矿,并会接受新规则下的交易与区块,于是运行不同客户端版本的矿工算力出现了分叉(mining fork)。
4.运行新客户端的矿工开始挖出基于新规则的区块,而旧客户端的矿工仍然会挖掘基于旧规则的区块,于是整个区块链出现了分叉(chain fork)。
硬分叉的两面性
在没有得到几乎所有生态中的参与者同意的情况下,硬分叉很可能会分裂整个比特币生态,所以这是一种极具争议和危险的区块链升级技术。整个比特币社区对于硬分叉非常谨慎,到目前为止,比特币一共发生过两次软件升级造成的硬分叉,但都是意外情况(软件BUG)引起,最终矿工们通过回退或全体升级达成了一致使事态影响没有扩大。
但我认为硬分叉在未来关键的时刻将发挥巨大的作用,是比特币可以长期发展的根基。
可以预见当比特币即将遭遇重大风险,甚至灭顶之灾时,这时候整个比特币生态由于利益相关很容易就会达成共识,对比特币客户端进行升级以避免危机。
举个形象的例子,如果有一天人类可以移民火星生活,一定会有人站会出来说人类不应该移民火星,因为那样分裂了人类社会。但如果有一天地球资源枯竭,无法满足人类生存的时候,相信几乎所有人都会达成要移民的共识。
现在经常会听到各种比特币死亡论,比如量子计算机的发展,比特币密码算法被破解等等,很多专家信誓旦旦的宣称“如果发生XXX情况,比特币就死亡了,所以比特币没有未来”。
现在你了解了硬分叉的存在,相信你可以理解要解决这些问题在技术上并不困难,在一个去中心化的系统中困难的是达成共识。要达成共识大部分时候可能很困难,但有时候也可能很简单。
IFO(Initial Fork Offerings)
IFO是继ICO后被创造出的新概念,一些社区或集团为了改进比特币的机制而分叉出一条新的区块链,这实际是一种硬分叉的场景。
如2017年8月1号,Bitcoin Cash(BCH)区块链成功在区块高度478559与主链分离。这一新的加密货币默认区块大小为8MB,并且可以实现区块容量的动态调整。
由于旧节点只认可小于1MB的区块,所以运行BCH客户端节点产生的区块无法向前兼容,将被旧节点拒绝,最后运行不同客户端的矿工将会长期运行在两条不同的区块链上(BTC和BCH)。
IFO本来可以是一种很不错的对比特币改造的实验方法,但在BCH后短时间内连续出现了BTG(比特币黄金)、BCD(比特币钻石)、SBTC(超级比特币)等十几条分叉链,却成为了许多利益集团敛财的工具。这些分叉币不但丝毫没有影响比特币的价值与地位,反而他们自己看起来大部分即将归零。
比特币软分叉
如果区块链的共识规则改变后,这种改变是向前兼容的,旧节点可以兼容新节点产生的区块,即为软分叉。
实际上,软分叉通常刚开始并不会产生两条区块链,因为新规则下产生的块会被旧节点接受,旧节点只是无法识别新规则的真实意义。所以新旧节点仍然处于同一条区块链上,对整个系统的影响也就较小。
软分叉在比特币历史上发生过多次,这里以BIP-34举例:
在Coinbase交易的输入中有一个字段coinbase data内容可以任意定制。BIP-34就是要求在coinbase data中必须包含块高度(Block Height)信息且将块版本(Block version)从“1”修改为“2”。
显然在旧规则下,节点并不关心coinbase data是什么内容,完全可以兼容包含块高度信息的区块,所以不会就此产生分叉。
BIP-34的升级过程如下:
1.刚开始矿工将块版本号变为“2”以表示准备好进行升级,此时并不要求coinbase data必须包含块高度信息。
2.当最近1000个区块中超过75%的版本号为“2”时,整个系统开始强制要求版本号为“2”的区块coinbase data中必须包含块高度信息。但版本号为“1”的区块仍然被所有节点接受。
3.当最近1000个区块中超过95%的版本号为“2”时,版本号为“1”的区块开始被认为无效,节点会拒绝版本号为“1”的区块,于是会逼迫最后一小部分节点进行升级。(否则完成挖矿获得的奖励将失去价值)。
软分叉提供了一种逐步升级比特币的方式,除了BIP-34,还有BIP-65、BIP-66、BIP-9等特性进行了软分叉升级,它们的升级方式也有一定的区别,有兴趣的朋友可以去文首提供的BIP链接中查看具体的升级内容和方法。
软分叉的争议
软分叉相比硬分叉虽然“温和”了不少,但由于软分叉必须向前兼容,也就是说不能增加新字段,只能在已有结构下做修改,所以升级空间有限。且软分叉同样也存在着一些争议,比如:
技术债务
软分叉相比硬分叉技术实现要复杂很多,会使区块链的代码变得更复杂,这不利于未来的代码维护,也更容易出现BUG。
验证放松
未升级的客户端视新规则下的区块为有效,但是对新规则并不进行验证,对于旧节点而言它不再能做完整的验证,似乎有悖去中心化的理念。
不可逆转
硬分叉通常是扩展共识规则,而软分叉是收紧共识规则,所以一旦进行了软分叉,想要回退就非常困难了,很可能造成硬分叉而导致资金损失。
分叉的博弈
最后我们聊一下在比特币的升级(分叉)中存在的不同“角色”,大家可以自己思考下他们各自的博弈关系。
社区开发者:这是比特币最核心的团体,没有他们孜孜不倦的贡献高质量的代码,比特币可能早就不存在了,任何的比特币核心客户端升级都需要由他们发起。可以说比特币的未来主要靠这些开发者决定。
矿工:比特币主要的既得利益者,矿工的算力支持对于比特币升级(分叉)至关重要,如果没有矿工的支持,任何升级都不可能成功。矿工越多,算力越大,去中心化程度就越高,安全性越强,往往矿工的数量与规模和数字货币的价值是呈正相关的。
交易所:早期并没有交易所的存在,但是现在交易所对于数字货币的发展越来越重要,对于一项区块链分叉,如果没有交易所的支持,矿工获得的数字货币将难以兑现,价值会大大缩水,所以交易所的支持对于分叉币或山寨币是非常关键的。
商家:也是早期不存在的“角色”,但是商家的支持对于比特币的商用化进程非常重要,如果没有任何商家愿意支持比特币,比特币要成为货币的理想将无法实现,所以商家的支持度也是未来数字货币生死的关键因素。
最终用户:一种数字货币的推广,离不开广大最终用户的支持,如果一种数字货币没有人愿意使用,那它最终也会消亡。
目前比特币分叉的博弈中前三者的影响力较大,比如社区开发者和矿工长期存在扩容的争议,BCH就是矿工单方面的分叉行为,我理解矿工是希望扩大区块的,这样他们可以收取更多的交易费,而且区块的增大会淘汰一些小矿工(需要更大的存储和更好的带宽条件);而社区开发者却希望通过二层协议(闪电网络我们将在后面单独讲解)的方式去解决扩容问题,将一些交易从链上放到链下,让比特币主网络作为一种“清算网络”,显然这对于矿工来说没有什么好处。
后两者目前的影响力有限,但是一旦数字货币技术等各方面条件成熟,商家与最终用户的选择会变得极其重要,互联网的“网络效应”会开始发挥作用,不同领域的数字货币可能出现赢者通吃的局面。
比特币分叉热门资讯
区块链分叉是什么?区块链硬分叉与软分叉的区别
区块链的帐本要如何维持一致性是相当重要的问题,所谓的分叉,是指纪录区块链帐本的节点,对帐本的共识出现分歧,简单来说,又是全网出现两种或多种版本的帐本,这时就必须依赖所谓的「链分叉选择规则(fork choice rule...
历年来比特币分叉币时间表一览
2009 年初,化名为中本聪的神秘加密货币开发者(或开发者团队)发布了第一个加密货币比特币的程序。从那时起,比特币不仅在全球范围内吸引了许多人,还启发了数百种其他的数字货币。...
区块链分叉是如何进行的?
区块链开创性地利用密码学元素和共识机制构建了一个安全的去中心化系统。区块链是比特币的核心,它利用点对点网络通信,让区块链中的每一个参与的节点,对每个区块提案进行确认共识,将最后的共识区块信息存储在区...
比特币分叉是什么意思?比特币软分叉和硬分叉详解
比特币分叉是一个非常复杂的工程。任何一次比特币分叉,从理念提出,到社区讨论,到代码设计,到宣传和推广,到矿工和用户部署,这是一个非常复杂的工程。...
比特币分叉与法币通胀有何区别?
法定货币在不断贬值,我们通过日常的生活都能感知到,最直接的表现是购买力的下降。为了对抗通胀,中本聪推出了通缩属性的比特币,被人誉为“数字黄金”,给了普通人一个选择。...
比特币分叉币比特无限(BCX)会归零吗?
BCX,比特无限 BitcoinX是比特币在块498888高度分叉诞生的新链。零知识证明、智能合约、DPOS等机制的增加,使得BCX网络更易用、效率更高、更可靠、更具有实用价值。从而打造真正适用于未来社会的比特币网络。...