硬分叉(Hard Fork)与软分叉(Soft Fork)

硬分叉与软分叉也是很多朋友们比较容易糊涂的地方。举一些已经发生的例子,以太坊因DAO事件发生过一次硬分叉,BIP148是软分叉修改意见,8月1日的Bitcoin Cash造成了比特币的硬分叉。那么究竟什么是硬分叉?什么是软分叉?理解起来确实有些晦涩。我查阅了一些资料,结合自己的理解,希望可以帮助大家把两者弄得更清楚些。

什么是硬分叉?

先来看看Bitcoin.org的定义

A permanent divergence in the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules.

区块链的永久性分裂。当没有升级的节点不能验证已升级的节点基于新的共识协议所创建的区块时,硬分叉产生。

这个定义该如何解读呢?我们来看下图

图片来自于Bitcoin.org开发者文档

硬分叉是对原有软件协议的修改。新的软件版本定义了新的规则,与旧版本不兼容。我们知道,在新版本发布前,所有新区块的产生是运行在网络上的节点基于旧规则验证通过的结果。而新版本一经发布,并非所有节点都会选择升级。那些继续选择旧版本的节点发布的区块只能由运行旧版本软件的节点验证通过,而升级了新软件版本的节点发布的区块只能由运行新版本软件的节点验证通过。由此便产生了基于两种规则的区块链。

由于规则不兼容,因此矿工们工作在各自的最长链条上。我们可以把它理解为在分叉前共享源头的两条完全不相干的区块链,他们永远不会再合并。ETH和ETC是这样,BTC和BCC也是如此。

什么是软分叉?

同样,我们先来看Bitcoin.org的定义

A softfork is a change to the bitcoin protocol wherein only previously valid blocks/transactions are made invalid. Since old nodes will recognise the new blocks as valid, a softfork is backward-compatible.

软分叉是对比特币协议的一次修改。只有先前有效验证的区块/交易将不再合规,由于旧节点依然可以验证新区块,软分叉被认为是向后兼容的。

再从视觉上我们感受一下与硬分叉的区别

图片来自于Bitcoin.org开发者文档

软分叉也是对原有软件协议的修改。与硬分叉不同的是,新的软件版本所定义的新规则与旧版本兼容,但比旧版本更严格。当新版本发布时,升级了新软件版本的节点发布的区块可以被所有节点验证通过。而没有升级新版本的节点发布的区块只能在运行旧版本软件的节点上验证通过。此时,同样会产生两个区块链条,这种情况称为软分叉。

当网络中的大多数节点选择部署新软件版本后(更精确的说法是大多数算力),新链条将产生更多的区块,工作在旧版本节点上的矿工们将会逐步升级软件并转移到新链条上来工作,这里有两方面原因。

1. 由于新链条成为最长链条,并且新链条上的区块被旧版本节点上的矿工们认可,所以他们会迁移到最长链上来。

2. 由于旧版本节点发布的新区块会被新版本节点“莫名其妙”的拒绝,所以会敦促他们升级新软件版本。

最终,并不会像硬分叉一样产生两个不相干的区块链,而是会产生一些临时性的分支。BIP148即是如此。这里需要特别提到的一点是,只有当大多数算力支持软分叉时才会使新规则生效。

原创文章,版权所有,转载请注明出处。