比特币分叉
分叉定义:一条链分叉成两条链。 产生原因:
- state fork:同时挖到两个区块,即节点对区块链的当前状态有分歧。
- forking attack: 人为故意造成的分歧
- 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的区块会因为分叉而不断的被作废掉,相当于旧节点会有概率白做工。
但是系统不会有永久性的分叉。