扩容和硬分叉
比特币一个区块的大小是有限制的,不能超过1M,随着比特币的不断发展,使用比特币的人数越来越多,比特币网络上的交易越来越多,1M区块大小成为了比特币的发展瓶颈。区块容量问题导致了比特币网络拥堵问题日益严重,制约了比特币的发展。
为了比特币更好的发展,比特币社区开始讨论修改比特币的代码,突破比特币的1M区块上限。
分叉的概念,在讲工作量证明的时候,我们说过当同一时刻不同矿工同时基于一个父区块生成两个新区块时,这时比特币分出现短暂的分叉,再过一个或者几个区块后,整个网络会选择出最长的链,从而放弃分叉出来的区块,这里所讲到的分叉是暂时的,不会对比特币网络构成威胁,是在最长链的选择过程中出现的正常现象。
而在解决比特币区块容量问题时,由于是要更改比特币的基本规则,那就会涉及到有些节点接受新规则,有的节点不接受新规则,这里整个网络就会分成两派,从而造成比特币的分叉,这种分叉是永久的,会影响比特币用户,是因为更改规则而引起非正常现象。
在分叉之前,所有的节点运行同样的软件,遵循着同样的共识协议,维护着同样的一条链。这时,一部分节点使用新版本的软件,拥有了新的共识协议,这时会出现下面四种情况:
新节点认为老节点发出的区块或交易合法;
新节点认为老节点发出的区块或交易不合法;
老节点认为新节点发出的区块或交易合法;
老节点认为新节点发出的区块或交易不合法;
这些情况在我们下面介绍的硬分叉与软分叉里都会有所体现。
硬分叉与软分叉
硬分叉是指当比特币协议规则发生改变,旧节点拒绝接受由新节点创造的区块的情况,区块链将分成两条独立的链。矿工需要在两条区块链中选择一条并进行挖矿。当必须硬分叉时,我们需要要求所有节点同时升级软件,未升级的节点将不能正常工作。如果有较多老节点不愿意升级,他们将工作在另外一条完全不一样的链上。在硬分叉的时候,新的节点要求比老的节点要求要宽松很多,新的节点认可老节点生产的区块,老节点不认可新节点生产出来的区块。
软分叉是当比特币协议规则发生改变,旧的节点并不会意识到规则是不同的,它们将遵循改变后的规则,继续接受由新节点创造的区块。因此软分叉不会产生两条区块链,而是在原区块链上同时存在新、旧两种节点挖的区块。当进行软分叉时,我们需要并不要求所有节点同时升级软件,超过半数的节点运行升级过后的新程序,这时老节点生产出来的区块不被新的节点认可。在软分叉的时候,新的节点要求比老的节点要严格很多,新的节点不认可老节点生产的区块,老节点认可新节点生产出来的区块。
软硬分叉的优缺点
软硬分叉有各自的优缺点。
软分叉和硬分叉相比拥有下面的优点:
软分叉总是只有一条链,没有分成两条链的风险;
软分叉不要求所有节点同一时间升级,允许逐步升级,且并不影响软分叉过程中的系统稳定性和有效性;
但是软分叉也是有缺点的:
软分叉的前提是老的节点总是能够接受新节点的区块,这就要求把系统设计成向前兼容;
软分叉总是建立在对老节点进行欺骗的基础上,它让老节点没有察觉实际上已经发生的变化,某种程度上违背了单点完整验证的原则;
讲到这里,我们是不是会有这样的感觉:硬分叉是很粗暴的,强行要求大家在新的规则下工作,要么合作,要么分家;而软分叉就会温和的多,尽力在现有规则的基础上引导用户去接受新的规则。