什么是软分叉和硬分叉?每次提到数字加密货币,有两个词不得不提:硬分叉和软分叉。尤其是最近几个月,比特币世界里面里充斥着“劈腿”的声音,那么接下来小编就要来给大家介绍介绍什么是软分叉和硬分叉?
比特币是一套软件,对软件代码进行修改升级就经常会涉及到两个概念,一个叫硬分叉,一个叫软分叉。这到底是什么意思呢?社区里最常见的定义说是对共识的修改。但“共识”具体指的是什么,很难理解。我们还是多实际的修改代码层面来看下它们的定义吧。
比特币的交易格式和交易历史记录
在理解什么是硬分叉和软分叉之前,我们先要知道这两者要修改的东西是什么。
比特币交易在汉语中有双重意思,这是硬分叉和软分叉经常被误解的一个关键。
比特币交易其中一个含义指的是我们发送比特币统一使用的数据结构,这是一套规则,我们所有人发送比特币,不论你使用什么钱包软件都得遵守这一套规则。它被定义成一个数据结构,其中的每一个字段代表着什么意思。所有钱包软件都能理解这个意思。
比特币交易的另一个含义是指使用比特币的人相互之间发送比特币的事件。就比如我发了0.12345BTC给你,这是一次交易。所有这些发送比特币的事件,构成了比特币交易历史记录,这就是目前组成比特币完整节点的80多G的数据的主要内容。所有这些记录都可以在区块链浏览器上可以查的到,你只要在区块链浏览器上键入你的比特币地址就可以查到你所有的交易记录。
做个比喻来说明。交易格式就类似于我们去银行给别人汇款填写的那张汇款单,汇款单上明确定义了汇款人的姓名、身份证、手机号、账号、金额、收款人姓名、账号……等信息。比特币的交易格式也规定了汇款人的信息和收款人的信息,不过这些信息与人的身份信息无关,比特币交易规定的要填写的具体信息请看下一章。
硬分叉和软分叉的“官方”定义
硬分叉和软分叉在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(临时性分叉)”,这种几乎是文字游戏的定义法,让社区很多人害怕硬分叉。认为硬分叉是一个非常可怕的事。
什么是软分叉和硬分叉?此外,今年将迎来比特币疯狂产子。随着比特币自动分叉网站投入运营,懂点编程皮毛的就能发行自己的分叉币,总之大家在投资过程中一定要小心谨慎。