区块链的硬分叉和软分叉
我们知道,区块链分叉分为两种:硬分叉和软分叉。在解释“硬分叉”和“软分叉”这两个概念之前,先解释“向前兼容”和“向后兼容”这两个概念
向前兼容和向后兼容
向前兼容的英文为:Forwards Compatibility,Forward有“将来”的含义。因此向前兼容就是指:以前的版本支持现在版本生成的数据,现在的版本支持以后的版本数据。比如你的CD盘可以放在CD光驱播放,也可以放在DVD光驱播放。
向后兼容的英文为:Backwards Compatibility,Backward有“回头”的意思。所以向后兼容就是指现在的版本可以支持以前的版本数据。比如你的PC的DVD光驱也可以播放CD盘。
新节点和旧节点
区块链升级过程中,一部分节点会进行区块链代码升级,本文这里暂称为新节点。一部分节点不愿意进行区块链代码升级,继续运行原有的旧版本的区块链代码,本文这里暂称为旧节点。
硬分叉和软分叉
硬分叉:旧节点不能识别新节点产生的区块(旧节点没有向前兼容新节点产生的区块),导致把一条链直接分成了两条完全不同的链,一条是旧链(运行原有的旧版本的区块链代码,由旧节点运行),一条是新链(运行升级后的新版本的区块链代码,由新节点运行)。
软分叉:新旧节点并存,但是不会影响整个系统的稳定性和有效性。旧节点会兼容新节点(旧节点是向前兼容新节点产生的区块),只是新节点不兼容旧节点而已(即新节点不向后兼容旧节点产生的区块),二者依然可以共存在一条链上
硬分叉的例子
:
a) 比特币分叉:一些人开始觉得比特币的区块容量太小,总出现拥堵,于是这些人要求对比特币的区块大小进行升级扩容。有人支持就有人反对,这种对比特币发展的分歧导致了比特币首次硬分叉,旧链上的币仍然是比特币BTC(区块容量达到了8M),新链上的币是BCH(Bitcoin Cash,比特币现金。区块容量达到了8M),有兴趣的同学参考这篇文章: https://new.qq.com/omn/20190808/20190808A0J3NF00.html
顺便说一下,BCH和BTC最大的区别只是在于区块容量的参数不同,两者分叉前的交易都是一样的,只是交易的币种不一样。可以理解为BCH那条链把分叉前的区块里的交易按照原来的方式重新运行了一遍,只是把币种由原来的BTC换成了BCH。这个可以从区块浏览器里去看一下:
BTC链第30000个区块的信息:
https://btc.com/000000000000000082ccf8f1557c5d40b21edabb18d2d691cfbf87118bac7254
BCH链第100个区块的信息:
https://bch.btc.com/000000000000000082ccf8f1557c5d40b21edabb18d2d691cfbf87118bac7254
可以看出,BTC链第30000个区块的交易和BTC链第300000个区块的交易是一样的,上面的第一笔交易应该是矿工挖出区块的奖励。但矿工地址不一样,这里不清楚是不是BTC和BCH的地址计算方法不一样。
b) 以太坊分叉:The DAO项目是区块链物联网公司Slock.it发起的一个众筹项目,于2016年5月正式发布,截止到当年6月,The DAO项目募集资金超过1.6亿美元。没过多久,The DAO项目就被黑客盯上了,因为智能合约上的巨大漏洞,导致The DAO项目被转移了市值五千万美元的以太币。
为了挽回众多投资者的资产并停止恐慌,以太坊创始人V神(Vitalik Buterin)最后提出硬分叉的设想,并最终通过社区的多数投票表决在以太坊第1920000区块完成了硬分叉,回滚了包括被黑客占有的所有以太币。即使以太坊硬分叉成了两条链,依然有部分信仰着区块链不可篡改特性的人留在以太经典这条原链上
参考文章
https://blog.****.net/badbad_boy/article/details/5815811
https://www.jianshu.com/p/26ed15380bcf
https://www.zhihu.com/question/35970198