软分叉?硬分叉?

区块链是一条链状,通过一条链将许多区块锁定在这个区块链上,然而因为多种理由,可能是人为的修改共识,也可能是正常共识阶段临时产生的不同步型分叉,使得一条链在某个分叉点后分成互相没有交集的两条链。

在比特币的百科上有这样的描述:

这个基本定义比较绕口,形成一张表格如下:

老客户端 新客户端
硬分叉 识别新客户端产生的区块为无效 将产生老客户端无法识别的新区块
软分叉 识别新客户端产生的区块为有效 可能会将老客户端产生的区块识别为无效

什么是硬分叉

硬分叉是对协议的修改,启用了新的交易或区块格式,使得老客户端无法识别,因此要求所有客户端都要升级。通常情况下,对区块的结构、难度,共识的规则,或者改变有效的交易类型,都会产生硬分叉。但不是所有新增交易类型都必须使用硬分叉,也可以定义一种特殊的交易,使其对老客户端来看是有效交易(但其实无法真实的识别的交易),来增加新的交易种类。

硬分叉通常都是有意而为之的,通常都是由区块链的开发者煽动的,其通常情况会有两种结果。

什么是软分叉


软分叉是对协议的修改,使得老客户端可以将新的区块识别为合法的区块,所以说软分叉是向后兼容的。新的交易类型经常是以软分叉的方式添加进来,它只需要发送者和接收者以及对应的新客户端能够识别新的交易类型即可。在过去,P2SH和隔离见证都是通过这种方式添加到比特币当中的。

软分叉不需要所有节点都升级,就可以保持共识,因为由新客户端产生的所有区块,也都是符合老规则的,因此老客户端是可以接受这些区块的。

注意,网络上流传着另外一种解释,即软分叉的老客户端依旧可以产生新客户端可以识别的区块,以此使得老客户端能够在一段时间内不升级,这个说法不完全正确,因为老客户端无法识别新客户端新添加的功能,当然也无法将含有新功能的新交易或区块正确的打包,即有可能打包出老客户端认为是有效的区块,但是新客户端认为是无效的区块,长期来看,老客户端产生的区块可能会被新客户端拒绝而丧失获取奖励的机会。

举例来说,2017年8月启用的隔离见证功能,因为修改交易的结构,使得老客户端虽然能继续识别其新的数据结构,但没有对应的逻辑对新的交易进行验证,

便可能出现将无效的交易当作有效的交易进行打包,并执行挖矿操作,但该区块广播到新客户端后,由于新客户端可以对新的交易进行验证,并发现其不合法,便拒绝该区块,使得老客户端辛苦的挖矿操作变得无意义。

因此在软分叉发生后,是有可能产生如下图所示的情况,即新老客户端均能产生互相识别为合法的区块,但随着该次分叉修改的程度高低,出现该种情况的几率呈负增长。


区块链系统概述章节目录:

1、用密码学保护区块(包括:哈希计算、数字签名、对交易签名。)

2、把区块连成链状(用哈希标记区块、单向链表的区块链)

3、用分布式网络把区块共享出去  

4、保存少量数据的轻量客户端

5、用智能合约对数据上锁

6、重要基础概念(软分叉、硬分叉、拜占庭将军问题、授权区块链)【请见下期~】