区块链的分叉通常可以分成两类,硬分叉软分叉

硬分叉

        系统在产生某一个区块后通过调整参数,产生永久性的分叉,各个分叉此后都会一直继续延长下去。
        例如,比特币系统在某一个时间节点,将区块大小的上限由1M修改成4M,此后大部分算力都会对系统进行升级。这样一来,比特币社区会分成“两派”,使用的分别是新系统和旧系统,新系统会挖“大区块”(大小上限为4M的区块),旧系统会挖“小区块”(大小上限为1M的区块)。

        由于大部分算力都对系统进行了升级,即大部分算力都使用了新系统,因此大区块的生成速度更快。对于新系统而言,大区块所在的链和小区快所在的链都是合法的,因为大区块是兼容小区块的(大区块的上限是4M,小区块的上限是1M)。由于上面的链比下面的链长(见图),因此新系统认为上面的链是最长合法链。如下图所示。

硬分叉

        对于旧系统而言,它认为大区块是非法的,即使其所在的链很长,它也认为其是非法链,因此不会认同该链。旧系统挖到区块后,会在小区块所在链上继续延伸。这样一来,新系统和旧系统就永远地分道扬镳了,因此产生了永久的分叉。

硬分叉

        比特币的历史上一个比较著名的硬分叉是,在2017年8月1日 ,比特币系统进行了更新,增加了区块容量,移除了费用替代法 ,使用新系统的链变为“比特现金”(Bitcoin Cash),而使用原系统的链依然是”比特币“。时至今日,比特币和比特现金在加密货币的市场占有率都很高。

软分叉

        系统在产生某一个区块后调整参数,只产生很多临时性的分叉,但合法链始终只有一条。
        例如,比特币系统在某一个时间节点,将区块大小的上限1M修改成上限为0.5M,此后大部分算力都会对系统进行升级。这样一来,比特币社区同样会分成“两派”,使用的分别是新系统和旧系统,新系统会挖“小区块”,旧系统会挖“大区块”。如下图所示。

软分叉

        但是,大区块是兼容小区块的(因为大区块的上限是1M,小区块的上限是0.5M),因此旧系统认为上面的链是最长合法链(见图),因此,它挖到矿后,会将大区块链到上面的链上。如下图所示。

软分叉

        而新系统认为大区块是不合法的(大区块大小超过了0.5M),因此,它挖到小区块后,会从大区块的前一个区块处分叉,并沿着该分叉继续延长。如下图所示。

软分叉

        因此,无论过多久,系统都只会有一条合法链。而旧系统即使挖到矿了,也得不到任何奖励,因此会纷纷将系统升级。

软分叉

        当对比特币区块结构中的某些域增加一些新的含义时,会出现软分叉。例如,扩展区块体中的coinbase交易,增加一个UTXO的Merkle Root的hash值,从而实现“检验全节点发送给轻节点的账户余额是否正确”的功能。

        比特币的历史上一个比较著名的软分叉是,增加P2SH(Pay to Script Hash)脚本拼接方法。

最后更新: 2019年03月20日 19:54

原始链接: http://yoursite.com/2019/03/18/区块链的分叉/