区块链技术与应用 - P10 - 比特币分叉

Posted by raftale on October 7, 2024

比特币分叉

分叉定义:一条链分叉成两条链。 产生原因:

  1. state fork:同时挖到两个区块,即节点对区块链的当前状态有分歧。
    • forking attack: 人为故意造成的分歧
  2. protocol fork: 比特币协议升级造成的新旧节点分歧。
    • hard fork:永久性的分叉,一般是扩大扩规,旧节点无法进行兼容
    • soft fork:临时性的分叉,一般是收紧规则,旧节点可以兼容新节点的区块,但新节点可能无法兼容旧节点的区块

hard fork

硬分叉是永久性的。

协议升级产生了新的特性,部分节点不认同该特性不愿意升级就会产生分歧。

区块大小造成的硬分叉

硬分叉的一个例子就是比特币的区块大小限制。

比特币规定区块大小最大为1M,一个交易大概250k,一个区块包含的交易就大概为4000个。

如果有人发布新的协议,将区块大小从1M更新到4M。

假设旧节点升级后变成新节点,由于旧节点不接受新节点挖出的大于1M的区块,对于旧节点来说,包含了大于1M的区块链即使是最长链,也不是最长合法链,所以旧节点会一直在小于1M的最长合法链上工作。 但对于新节点来说,新节点的算力更强,也接受小于1M的区块,新节点会一直在大区块链上挖矿。

两条链最后就分裂成两个社区,各安各的规则挖矿。

但这里我有个点没想明白,如果新节点的算力不强,或者新节点的算力逐渐衰弱,那最后根据最长合法链原则来说,新节点的链将不再是最长链,那最后还是会接受旧节点的最长链?但根据现实来看,好像并没有这种情况发生,所以这里面应该还有什么机制能保证硬分叉。 问了下gpt,一个比较靠谱的回答是,btc和bch硬分叉时,即使算力不占优势,但因为调低了挖矿难度,所以能一直保证最长链。

soft fork

软分叉是暂时性的。

还是以区块大小举例子,如果协议升级将区块大小从1M改为0.5M。

假设旧节点升级后变成新节点,新节点只能接受0.5M以下的区块,因为旧节点也认可0.5M以下的区块,所以新旧节点在一条最长合法链上工作,但旧节点偶尔挖到的大于0.5M的区块会因为分叉而不断的被作废掉,相当于旧节点会有概率白做工。

但是系统不会有永久性的分叉。