硬分叉、软分叉以及回滚操作之间的关系可以用下图表示:
如果仅看图片不是很理解的话,也别着急,您继续往下看!
官方定义
硬分叉和软分叉在bitcoin.org上都有定义,但定义其实很模糊,原文中硬分叉和软分叉被定义成这样:
A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules。
区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。
A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don’t know about.
当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉,又称软分叉。
看完官方的定义,你是不是觉得一头雾水、不知所云?
别担心,下面我举个通俗的例子来解释,让你一分钟了解什么是硬分叉和软分叉。
当系统升级后,网络中部分节点完成了升级,同时也有部分节点未升级。这时会有两种情况:
情况1:升级后的节点无法验证未升级节点产生的新数据(区块),同时未升级的节点也识别不了已升级的节点产生的新数据(区块),简单的说就是“升级前后的节点互不兼容”,原有正常的一条链被分成了两条链(已升级的一条链和未升级的一条链,且这两条链互不兼容),这个时候硬分叉就产生了。
情况2:升级后的节点可以验证未升级节点产生的新数据(区块),但是未升级的节点识别不了已升级的节点产生的新数据(区块),这时原有正常的一条链也被分成了两条链,但是升级后的新节点可以兼容升级前的旧节点,这个时候就是软分叉的情况了。
无论硬分叉还是软分叉,都属于异常情况。当硬/软分叉产生时,都需要有方案来解决。
解决方案1:未升级的节点在适当的时间完成升级,和已升级的节点汇合且数据互通,就能消除分叉,这种操作适合软分叉。
这种情况在区块链上经常发生,所以这里就不举具体的例子了。
解决方案2:未升级的节点和已升级的节点同时再升级到更高级的版本(该高级版本可以让之前互不兼容的正常的数据互通),以此来消灭分叉,这种操作适合硬分叉。
案例:2015年7月4日,比特币区块链在区块高度363731发生一次硬分叉。当时是Bitcoin Core 开发者往新版本的Bitcoin Core 0.10.0添加了BIP 66(相当于0.10.1版本)。这本来是一起软分叉的修改,在比特币网络上主要矿池都使用了0.10版本的软件时,但有一个矿池BTC Nuggets没有升级,导致BTC Nuggets挖出来的两个区块其他矿工拒绝掉,然后双方就各自挖矿延续自己认为是正确的区块链,由此产生硬分叉,分成了两条链。随后bitcoin.org发布公告,呼吁矿工升级到bitcoin core 0.10.2版本来消灭分叉。
解决方案3:已升级的节点降级退回到未升级的状态(又称回滚操作),这样所有数据都会回到最初的状态,因此分叉也就消除了。这种操作也多用在硬分叉。
案例:2013年3月12日,bitcoin qt 0.8.0版本发布了,它采用了新的数据库。有的矿工节点升级了bitcoin qt 0.8版本,有的矿工还继续使用bitcoin qt0.7版本的软件。双方各自生产区块,但bitcoin qt 0.8采用的新数据库生产出的区块被被qt0.7版本节点拒绝掉。这就发生了硬分叉。当时是采用bitcoin qt 0.8版本的矿工放弃了他们挖的链,退回到bitcoin qt 0.7版本上继续挖矿。
看到这里,你是不是对硬分叉、软分叉以及回滚操作之间的关系有了清楚的认识呢?这时再回头看它们的关系图是不是就很清晰明白呢?
以上是个人浅显的理解,如果有不当之处欢迎批评指正。
领取专属 10元无门槛券
私享最新 技术干货