BTC-分叉
约 937 字大约 3 分钟
2021-09-22
相关术语
state fork 临时性分叉
deliberate fork 故意的分叉
hard fork 硬分叉
soft fork 软分叉
through put 吞吐量
原来一条链,现在分成俩条链,这就叫做分叉。分叉可能有多种原因造成。
比如挖矿时候有俩个节点差不多同一个时间挖到,这时候俩个都可以发布区块,这时候就会产生临时性的分叉,管这种分叉叫做state fork
。由于对比特币这个区块链当前的状态产生分歧而导致的分叉。
比如forking attack
,分叉攻击也属于state fork
。也是属于对比特币这个区块链当前的状态产生了意见分歧,只不过这个意见分歧是故意造成的。管这种情况叫做deliberate fork
。
还有有一种产生分叉的情况是比特币的协议发生了改变。要修改比特币协议需要软件升级,在一个去中心化的系统里,升级软件的时候,没有办法保证所有节点同时都升级。假设大部分节点升级了协议,少数节点还没有升级,或者不同意修改。也会产生分叉。这种情况称为protocd fork。根据对协议修改的内容不同,又分为硬分叉hard fork
和软分叉soft fork
。
硬分叉
如果对比特币协议增加一些新特性,扩展一些新功能,这时候那些没有升级的节点它是不认可这些新特性的,认为是非法的。这个时候产生意见分歧,就会导致分叉。
硬分叉的一个例子就是比特币中对区块大小的限制block size limi
t。 比特币规定区块最多是1M大小,有些人认为1M太小了,影响了比特币的through put
,也增加了交易的延迟。可以大概算一下,2501000,000=4000 大概是一个区块是4000个交易左右,平均10分钟一个区块。所以60∗104000=7tx/sec ,也就是大概每秒7个交易,是非常低的。像信用卡能够处理的交易能够比这个多好几个数量级。甚至很多电商网站每秒交易的处理速度也是远远大于这个。所以有些人认为区块太小了,同时也增加了延迟,因为区块里就能装这么多交易,如果交易数目太多就得等到下一个区块才能写进去。
假设有人发布了更新,从1M增加到了4M。假设大多数节点更新了,少数节点没有更新。这里的多数和少数不是按照账户数目来算的,是按照算力来算。只要旧节点不更新,硬分叉就不会消失。
软分叉
如果对比特币协议加一些限制,原来合法的交易或者合法的区块在新的协议有可能变得不是合法的。假设有人发布了更新,把大小从1M变成0.5M。还是假设有新节点和纠结点,大多数升级后认可0.5M,这个时候新节点的如果算力够大,就会被放弃,最后切换到新节点上挖,而且这个问题还会再出现,再分叉,再通过最长合法链。这种情况不会有永久性的分叉,所以称为软分叉。
一个著名的例子,就是P2SH(Pay to Script Hash)
,就是通过软分叉的方式来升级的。详细见之前的比特币脚本笔记。