知乎上的定义
比特币中的软分叉和硬分叉主要指因比特币协议的突发改变而导致的兼容性的问题。比特币协议发生改变,会有两个不同版本的比特币协议在同时使,他们对其他区块的接受规则不同会导致区块链长期分叉。
比特币协议
这里的比特币协议,指的是每笔比特币交易都按照特定的交易数据格式进行。如果不按照这种格式交易,则不被网络识别,也就无法被认定为有效交易而被记录在区块中。
比特币的交易数据格式如下:
我们注意到:
比特币交易数据结构的所有字段从一开始就已经有了明确的定义,除了再输入中的序列号一栏,功能为是目前未被使用的交易替换。
这一点非常重要,这是出现软硬分叉的前提。
软分叉
当出于某种需要,未被明确定义的交易字段被重新定义导致交易数据结构发生改变
未升级的老节点可以验证升级后新节点产生的区块
已升级的新节点也可以验证未升级老节点生产出的区块
这种分叉称为软分叉。
硬分叉
当出于某种需要,已被明确定义的交易字段被重新定义导致交易数据结构发生改变
未升级的老节点无法验证升级后新节点产生的区块
已升级的新节点可以验证未升级老节点生产出的区块
这种分叉称为硬分叉。
软硬分叉的区别
软分叉是向前兼容,而硬分叉是向后兼容
由于软分叉要向前兼容,在定义交易字段时必需具备一定的前瞻性,而硬分叉则不需要考虑这一点,所以软分叉在定义字段的技术要求方面比较高
硬分叉是对已被定义的交易字段重新作定义,而每次重新定义后必需要有大于50%的算力认可才能被网络承认,在操作上没有软分叉方便
软硬分叉各有千秋,不过软分叉比较具有可实施性,因为硬分叉每升一次级就得通知全网络并征得半数以上的节点同意才能实施。