区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

1.8 区块链的硬分叉

区块链就和传统的程序一样,随着时间的推移,软件的设计本身也会发生改变,甚至是在软件中出现严重的漏洞,如果在传统软件中就会产生升级的操作。而升级后是否向下兼容就会对整个软件造成完全不同的影响。区块链也是一样,区块的数据格式、生成区块的算法以及对区块链进行打分的算法都可能会升级。如果这种升级向下不兼容,就会出现两套算法在同时运行的情况。运行旧软件的计算机节点会继续用旧的协议来继续构建区块,而运行新软件的节点就会用新的协议去构建新的区块。通常升级会从某一个固定的区块开始,所以从这个固定的区块开始,就会分叉出两条完全不同的链。两者再也没有互相融合的可能。这就是区块链的硬分叉。

和传统软件升级不一样的是,硬分叉的代价很大,因为节点是否升级所牵扯的面很广,其中除了技术的原因,还有很多利益纠葛,比如有的节点的硬件就是专门为旧的协议设计,无法很好地适配新的协议,那么这些节点升级新协议的可能性就很小,甚至这种升级根本就不可能实现。更进一步,不同的人对区块链的想法不一样,不同的工作组有可能给出完全不同的升级协议,而这些协议都可能被一定数量的节点所接受,结果就是同一个区块链随着时间的推移,可能会发生很多次硬分叉。例如,比特币就被分叉过很多次,在交易市场上,很多和比特币的名字很类似的币,其实就是硬分叉导致的。以太坊也在某一次DAO黑客事件后进行回滚,有的节点不接受这次回滚,结果就是分叉出以太坊和经典以太坊两条链。

要解决硬分叉问题,在技术上并没有什么好的办法。不过随着时间的推移,不同的链在进行公平的竞争,最终总会有一些更好的被留下来,其他一些则被慢慢淘汰。所以,硬分叉到底是不是一个严重的问题,更多的就要看观察角度了。