为什么叫分叉?
在传统的中心化软件体系中,由于数据存储都是集中的,软件版本管理也是集中的,如果是重大的版本升级,完全可以设置为若不更新到最新版本软件就不能进行登录操作,从而确保用户使用的总是最新版本。
然而区块链就是去中心化的协同服务网络,一旦有新的软件版本发布后,并非每个人都会去升级到最新版本,假设发布的新版本增加了之前版本不能识别的数据结构,此时部分用户升级了新版,部分用户还没有升级,这些新旧版本的软件仍然在各自不停的挖矿、验证、打包区块,一段时间过后就会在新版系统和旧版系统上发展成两条链,这就是分叉。
“分叉”又分为“硬分叉”和“软分叉”:
硬分叉:新的版本定义了新的规则,并且与旧版本不兼容;
软分叉:兼容性更强,是对过去版本协议规则的一种补充,即向后也向前兼容。
当新版本发布后,并非所有节点都会选择升级,那些没有升级新版本协议的区块发布的交易将只能由运行旧版本软件的区块认证通过,而因此升级了新协议的区块发布的交易只能由运行新版本软件的区块认证通过;由于规则不兼容,因此矿工们工作在各自的最长链条上。于是产生了两条基于不同规则的、永远不会合并的区块链。
区别于硬分叉,软分叉兼容性强,是对过去版本协议规则的一种补充,即向后也向前兼容,新版本创建的区块可被新旧版本验证,而旧版本创建的区块只能被旧版本验证,新版本则会拒绝,根据最长链原则,在产生分叉链条后,老版本用户就不得不升级到新版本以迁移到最长链上来工作,这时临时分叉出来的链条就会消失,确保了区块和交易信息的唯一性。
例子:
历史上最大的硬分叉事件:TheDao被黑客攻击的事件。
2016年6月区块链最大ICO项目TheDao遭黑客攻击,导致300多万以太币资产被分离出TheDAO 资产池,当前相当于20亿美元。
当时以太坊创始人建议做软分叉重新算账:
从块高度1760000开始把任何与The DAO相关的交易认做无效交易。然而,还是有人提出反对。他们认为这违反了区块链的不可篡改性以及智能合约的契约精神,哪怕TheDAO的钱被偷走了,但是只要数据被写在了区块上,就是不可篡改的,因此他们并不配合V神的分叉,依然使用老版本。
就这样,软分叉最后生生搞成了一次硬分叉,新ETH依然获得了大多数矿工和开发者的认可,但是还是有少数人坚持使用老节点,这时挖出来的币被称为ETC(ethereum classic),即以太经典。