首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解密区块链:硬分叉

我们在前面提到过,比特币扩容的问题一直争论不休,至今也没有形成一致的意见,有的人倾向于2MB这种比较保守的方案,也有人倾向于立即提至8MB。

俗话说的好:众口难调,比特币区块链节点数量非常多,而且会越来越多,想要在这么多的节点中形成比较一致的意见,几乎不可能,但区块扩容随着时间的推移,越来越迫在眉睫。

这就导致,一旦比特币基金会即使获得51%以上的节点的同意,仍然会产生一个问题,那就是分叉问题。

分叉分为硬分叉和软分叉。

今天我们来说说硬分叉。什么是硬分叉呢?

比特币官网是这么解释的:

区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。

进一步解释就是:比特币升级之后,一部分升级到新的版本的节点,产生了新的区块,比如新的区块是扩容后2MB的区块,而没有升级的节点,还是生成之前1MB大小的区块,这就导致没有升级的节点,无法验证新的2MB的区块,分叉就产生了。

当然,作为新的已升级的节点,却可以验证没有升级节点产生的区块。

这就像软件新旧版本一样,新版本可以兼容旧版本,但旧版本一般兼容不了新版本。

这就是硬分叉。

那么,如果硬分叉产生了,会出现什么问题呢?

硬分叉一旦产生,就很难解决,除非所有节点都升级到新的节点,走向新的区块链,或者所有人都退回到旧的版本,使用旧的区块链。

比特币历史上出现过两次因为意外导致的硬分叉。

在2013年3月12日,当时是bitcoin qt 0.8.0版本软件发布了,0.8版本采用了一种新的数据库level db。有的矿工节点升级了bitcoin qt 0.8版本,有的矿工还继续使用bitcoin qt0.7版本的软件。双方各自生产区块,但bitcoin qt 0.8采用的新数据库生产出的区块被被qt0.7版本节点拒绝掉。具体的原因是旧的数据库对超过800Kb的区块有时不接受。因此在区块高度225430比特币区块链分成了两条链,结果导致了比特币区块链产生两条链,一条是包含大于800kb区块的链,另一条是拒绝承认这些包含更大区块的链,这就发生了硬分叉。

当时是采用bitcoin qt 0.8版本的矿工放弃了他们挖的链,退回到bitcoin qt 0.7版本上继续挖矿。

这次硬分叉是一次意外,是bitcoin qt 0.8版本的软件出了bug,导致采用旧软件的节点拒绝验证新软件节点生产的区块。但硬分叉的成因就是采用旧软件版本的节点拒绝验证采用新软件版本的节点生产的区块,然后双方各自挖矿。

在2015年7月4日比特币区块链在区块高度363731发生一次硬分叉。当时是Bitcoin Core 开发者往新版本的Bitcoin Core 0.10.0添加了BIP 66。这本来是一起软分叉的修改,在比特币网络上主要矿池都使用了0.10版本的软件时,但有一个矿池BTC Nuggets没有升级,导致BTC Nuggets挖出来的两个区块其他矿工拒绝掉,然后双方就各自挖矿延续自己认为是正确的区块链,由此产生硬分叉,分成了两条链。

随后bitcoin.org发布公告,呼吁矿工升级到bitcoin core 0.10.2版本来消灭分叉。

这也是一次意外,硬分叉的成因是采用新软件版本的节点拒绝验证采用旧软件版本的节点生产的区块,然后双方各自挖矿。

产生硬分叉后,一般通过大家的道德来达成一种共识,比如退回到旧版本继续挖矿,而摒弃新版本挖出的分叉。

或者共同升级到一个版本以消灭新分出来的分叉。

(未完待续)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171222G0XFJD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券