区块链大学区块链研习社区块链

《锋哥论道区块链》之三区块链基础--区块链分叉

2019-04-16  本文已影响10人  7dfc697cf7a9

1.区块链延伸过程中的不断分叉
我们以比特币进行解释。当矿工使用POW共识机制寻找下一个满足那个包含多个0的HASH值的矿工可以生成这个区块,但是可能存在两个矿工同时找到符合条件的HASH值,并将自己的结果进行广播。区块链在这个时刻,出现了两个都满足要求的不同区块。那么,全体矿工这时该怎么办呢?由于距离远近,不同的矿工看到这两个区块是有先后顺序的。通常情况下,矿工们会把自己先看到的区块复制过来,然后接着在这个区块开始新的挖矿工作。于是,出现了这样的情景:

11.png
在以工作量证明机制为共识算法的区块链系统中,这个问题是这样被解决的:从分叉的区块起,由于不同的矿工跟从了不同的区块,在分叉出来的两条不同链上,算力是有差别的。形象地说,就是跟从两个链矿工的数量是不同的。
由于解题能力和矿工的数量成正比,因此两条链的增长速度也是不一样的,在一段时间之后,总有一条链的长度要超过另一条。当矿工发现全网有一条更长的链时,他就会抛弃他当前的链,把新的更长的链全部复制回来,在这条链的基础上继续挖矿。所有矿工都这样操作,这条链就成为了主链,分叉出来被抛弃掉的链就消失了。
这种类型分叉是一种正常现象,分叉都会很快消失。最终,只有一条链会被保留下来,成为真正有效的账本,其他都是无效的,所以整个区块链仍然是唯一的。
从block hash算法我们知道,合理的block并不是唯一的,同一高度存在多个block的可能性。那么,当同一个高度出现多个时,主链即出现分叉(Fork)。遇到分叉时,网络会根据下列原则选举出Best Chain:
》不同高度的分支,总是接受最高(即最长)的那条分支
》相同高度的,接受难度最大的
》高度相同且难度一致的,接受时间最早的
》若所有均相同,则按照从网络接受的顺序
》等待Block Chain高度增一,则重新选择Best Chain
2.软分叉与硬分叉(由于软件升级导致的分叉)
(1)软分叉
我们知道比特币网络是一个P2P网络,每个节点部署了1个比特币网络的客户端,类似BT下载软件。既然是软件,就避免不了要升级,不管是发布新Feature,还是说Bug Fix,软件必然是要一版有一版的升级。但问题就来了:全球那么多节点,不可能所有节点的客户端软件都同时升级。必然有的节点在用老版本的,有的节点在用新版本的,这个时候,软件兼容性问题就来了。
所谓软分叉,就是指这次升级是“前向兼容”的(forward-compatiable)。有的客户端升级到了新版本,有的客户端还用老版本,老版本的客户端可以正确处理新版本客户端产生的数据。具体点就是,新版本产生的Block和Transaction,老版本的节点能正确处理;反过来,当然同样可以。
所以大家可以看到:软分叉其实并没有分叉,还是一条链,只是这条链上面的Block有不同的版本。 软分叉这个词,主要是相对接下来要讲的“硬分叉”来说的。软分叉看起来很好,新旧版本一起工作,但它也有很多争议。
软分叉的争议点:
1)软分叉加大了技术复杂度。我在设计新版本的一致性协议的时候,还要考虑这个协议要被老版本的兼容,因为历史包袱,设计自然带有折中妥协。导致新版本的代码可维护性变差,自然出Bug的概念变高,安全性变差。
2)软分叉升级不能回滚
举个例子:现在整个网络所有节点的版本都是v1,然后某些节点升级到了v2,在v2这个版本上面成交了一些Block和Transaction。但现在你发现v2这个版本有个安全的Bug,你要回滚v2,让所有节点都回到v1。那v2上面挖出的Block和Transaction,在v1版本上面虽然可以验证通过,但其实是放松了限制的,这会导致安全问题。所以这就意味着v2上面挖出的Block和Transaction要作废。
(2)硬分叉
硬分叉就比较容易理解了,新发布的版本和旧版本不兼容。意味着:要么所有节点都升级到新版本,这样整个网络还是一条链;要么一部分节点用旧版本,一部分节点用新版本,大家互相不认可对方挖出的Block,整个网络分裂成2条链,这相当于发行了一种新的货币!!!
而这就要说到比特币的2大门派:隔离见证派 与 矿池派的撕逼大战,也正是这场撕逼大战,导致现在的比特币出现了1次硬分叉,搞出了2种货币:旧的BTC(Bitcoin Coin) 与 新的BCH(Bitcoin Cash)。
具体参考http://www.8btc.com/tan90d97
上一篇下一篇

猜你喜欢

热点阅读