软分叉

软分叉修改的“共识”具体是指修改了比特币交易数据结构,或修改了比特币区块数据结构。

临时分叉
当新共识规则发布后,未升级节点会因为不知道或还没来得及升级新共识规则而产生不合法区块,就会产生临时性分叉。

软分叉的困难
软分叉因为没有升级的节点能接受新节点生产的新数据,所以不会出现两条链。但为实现软分叉要做到新旧节点产生的数据完全兼容是非常困难的,失败的软分叉容易成为硬分叉。这也就是Bip 66软分叉最终变成硬分叉的原因。

比特币交易的数据结构所有的字段都已被占用,并已准确定义。再进行软分叉就只能擦除原有字段,再重新定义。这可能会导致原有功能丧失,如果这个功能不可或缺,就会导致硬分叉。这正是隔离见证的做法。

软分叉的兼容性
软分叉需要保证完美的兼容性要保证:向后兼容(升级后的节点接受没有升级的节点生产的交易和区块);向前兼容(有升级的节点接受升级过的节点生产的交易和区块)。

比特币交易数据和区块结构有一个字段“版本号”,意为“明确这笔交易或区块参照的规则”。这意味着中本聪希望使用硬分叉来修改规则,修改规则,就要重新定义版本号。但软分叉在不修改版本号的前提下,却修改了规则。

硬分叉涉及的变化
1.没有升级的旧节点;2.升级了的新节点;3.旧节点发生的旧交易格式的交易;4.新节点发生的新交易格式的交易;5.旧节点生产出的只含旧区块格式的旧区块;6.新节点生产出的含新区块格式的新区块。

更复杂的因素还包括:完整节点;SPV节点;新旧节点算力占比;SPV挖矿节点;未确认交易和多个确认交易;CSV交易;RBF交易等。