http://www.yzthzm.com

萨菲罗斯的无限之旅什么是硬分叉,什么是软分叉,什么是共识?

1

第0章 引言

比特币是一套软件,对软件代码进行修改升级就经常会涉及到两个概念,一个叫硬分叉,一个叫软分叉。这到底是什么意思呢?社区里最常见的定义说是对共识的修改。但“共识”具体指的是什么,很难理解。我们还是多实际的修改代码层面来看下它们的定义吧。

第1章 比特币的交易格式和交易历史记录

在理解什么是硬分叉和软分叉之前,我们先要知道这两者要修改的东西是什么。

比特币交易在汉语中有双重意思,这是硬分叉和软分叉经常被误解的一个关键。

比特币交易其中一个含义指的是我们发送比特币统一使用的数据结构,这是一套规则,我们所有人发送比特币,不论你使用什么钱包软件都得遵守这一套规则。它被定义成一个数据结构,其中的每一个字段代表着什么意思。所有钱包软件都能理解这个意思。

比特币交易的另一个含义是指使用比特币的人相互之间发送比特币的事件。就比如我发了0.12345BTC给你,这是一次交易。所有这些发送比特币的事件,构成了比特币交易历史记录,这就是目前组成比特币完整节点的80多G的数据的主要内容。所有这些记录都可以在区块链浏览器上可以查的到,你只要在区块链浏览器上键入你的比特币地址就可以查到你所有的交易记录。

做个比喻来说明。交易格式就类似于我们去银行给别人汇款填写的那张汇款单,汇款单上明确定义了汇款人的姓名、身份证、手机号、账号、金额、收款人姓名、账号……等信息。比特币的交易格式也规定了汇款人的信息和收款人的信息,不过这些信息与人的身份信息无关,比特币交易规定的要填写的具体信息请看下一章。

第2章 比特币的交易格式和区块格式

比特币的交易历史记录这个概念大家都容易懂,就不展开说了,也没啥好说的。但比特币的交易格式,也就是交易的数据结构需要重点解释,否则无法理解什么叫硬分叉和软分叉。

一笔比特币交易是一个含有输入值和输出值的数据结构,该数据结构植入了将一笔资金从初始点(输入值)转移至目标地址(输出值)的代码信息。这个数据结构包含一些字段,我们详细来看下这些字段,摘自《精通比特币》第5章。

2

所有的比特币钱包的都得按照这个表格规定的方式来发送比特币,否则在比特币网络上就不会被识别,也就是无效的交易。这就像是你去银行汇款,你不按照汇款单填写,银行就不接受一样。

比特币网络会在平均10分钟内,收集各个节点发出的交易然后打成一个包,叫区块,盖上时间戳,然后添加到区块链上。区块是什么呢?

区块就是聚合了交易信息(也就是平均十分钟内网络上各个节点发出的比特币交易)的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。区块的数据结构被定义成下面这个样子。

3

所有的挖矿节点钱包都得按照这个表格规定的方式来打包区块,否则在比特币网络上就不会被别的完整节点识别(SPV节点不算),也就是会被认为是无效的交易。

第3章 硬分叉和软分叉的“官方”定义

硬分叉和软分叉在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

完整节点为了和其他节点维持共识而遵循的区块验证规则。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。