硬分叉

社区对区块链共识发生永久性分歧,在新共识规则发布后,未升级节点无法验证已升级节点产生的区块,就意味着发生了硬分叉。硬分叉即不兼容之前版本的软件升级。硬分叉修改的“共识”具体是指修改了比特币交易数据结构,或修改了比特币区块数据结构。

 

比特币硬分叉实例
2013年3月12日,新发布的bitcoin qt 0.8.0版本采用了新的数据库level db。旧数据库有时不接受超过800Kb的区块,新版本的区块被被qt0.7版本节点拒绝。结果导致在区块高度225430比特币区块链产生两条链,发生了硬分叉。

2015年7月4日,新版本的Bitcoin Core 0.10.0添加了BIP 66,进行软分叉升级。但有一个矿池BTC Nuggets没有升级,升级前后的两个版本的区块链各自延续,导致比特币区块链在区块高度363731发生一次硬分叉。

 

软分叉和硬分叉的异同
软分叉和硬分叉主要区别是新旧节点相互兼容性。软分叉修改数据结构后,新节点生产的交易和区块能够被旧节点验证并接受,硬分叉就不能。

在具体修改的对象层面上,软分叉和硬分叉没有区别,都修改或试图修改交易数据结构,或区块数据结构。软分叉和硬分叉在修改“共识”层面上本质上是没有区别的。

硬分叉和软分叉都绝对不会去修改交易历史记录。2010年8月15日刷出天量币的漏洞那次,修改的也是交易数据结构,因其在新交易数据结构的定义下非法而将一个区块里的交易作废。

硬分叉需要保证的兼容性只需要向后兼容(升级过的节点接受没有升级的节点生产的交易和区块),也就是新节点需要从0高度区块开始验证整个区块链就可以了。