想想大家会经常在新闻和论坛里看到某某币将要进行分叉,到底分叉是什么?软分叉和硬分叉又是什么?下面就来给大家分析分析。比特币是一套软件,对软件代码进行修改升级就经常会涉及到两个概念,一个叫硬分叉,一个叫软分叉。这到底是什么意思呢?社区里最常见的定义说是对共识的修改。但“共识”具体指的是什么,很难理解。我们还是多实际的修改代码层面来看下它们的定义吧。
硬分叉和软分叉在bitcoin.org上都有定义,但定义其实很模糊,为了防止我胡说(质疑bitcoin.org上的定义,确实让我诚惶诚恐。),我摘录原文:
硬分叉被定义成这样:
A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can't validate blocks created by upgraded nodes that follow newer consensus rules.
https://bitcoin.org/en/glossary/hard-fork
区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。
软分叉的定义是这样的:
A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don't know about.
https://bitcoin.org/en/glossary/soft-fork
当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。
社区对区块扩容是该执行硬分叉还是软分叉的争议,我猜bitcoin.org上的这两个模糊的定义应该负主要责任。最大的责任是原文中的“consensus rules(共识规则)”定义不清晰,如果我们在去bitcoin.org上寻找“consensus rules(共识规则)”是什么意思,原文是这样的:
The block validation rules that full nodes follow to stay in consensus with other nodes.
https://bitcoin.org/en/glossary/consensus-rules
完整节点为了和其他节点维持共识而遵循的区块验证规则。
这个对共识的定义,在逻辑上就犯了循环认证的谬误,这个定义就是说“共识就是为了维持共识的规则”。这和许三多说的话是一样的:“有意义就是好好活。”“那什么是好好活呢?”“好好活就是做有意义的事情。”其实他根本就没有回答什么是好好活,以及什么是有意义。
另外这两个定义中把硬分叉定义为“permanent divergence(永久性分叉)”,和把软分叉定义为“temporary fork(临时性分叉)”,这种几乎是文字游戏的定义法,让社区很多人害怕硬分叉。认为硬分叉是一个非常可怕的事。
“共识”这个词忽悠了太多的人了。其实在“不破坏共识”包装下的软分叉,本质上和硬分叉是一样要修改相同的对象的,而且更可怕的代价是向前兼容,即要求不升级的软件去忽视升级过的软件生产的数据和代码,冒这种风险得来的好处仅仅是懒得升级软件。我想任何理智的人都是不愿意接受这种风险收益比的。