有关共识和分叉 -硬分叉和软分叉有什么区别? (MIKE HEARN)

vatten Yellow v2 · 2016-02-01 12:35 · 132 次点击 · 4.30943274

https://medium.com/@octskyward/on-consensus-and-forks-c6a050c792e7#.bxtobx1b3

2015年漫长的夏季展示了比特币社区令人惊奇的一些事:很多人对区块链到底是怎么工作的有很奇怪的技术上不可行的主意

此事的高潮以Michael Marquardt(bitcoin.org和其他几个论坛的管理员)禁止任何有关比特币XT的讨论,并威胁要将使用XT的服务商从比特币官方网站删除。他的理由是XT是一个山寨币,因为它试图实现一个硬分叉。但同时,软分叉却是完全OK的

这种说法从技术上来说毫无任何道理,本文中我将解释为什么是如此

软分叉和硬分叉

如果你接触比特币论坛够久,你不可能不知道这两个词。就我和一些爱好者的交流表明,很多人都有误解,一次次的我碰到一些人自以为了解其实根本不了解这两个词的意义

这不奇怪。“软分叉”这个概念是最近才出现的,好像是在IRC的交流中形成,而不是一个BIP或者其他的标准性文件。甚至程序员自己都经常错误的定义

一个硬分叉是指:当比特币的协议发生了一些变化,以至于旧节点不接受新节点所创建的区块。随着这些区块被旧节点抛弃,矿工们将在他们(各自)的协议中认为正确的最近一个区块上添加区块

一个软分叉是指:当比特币的协议发生了一些变化,但旧节点却不能发现这个协议的变化,从而继续接受新节点用新协议所挖出的区块。旧节点矿工将可能在他们不能完全理解和验证的新区块上继续添加区块

这常被Core程序员称为“向后兼容性”,但这是不对的,也可能就导致了误解。“向后兼容性”是指新的软件接受旧格式的数据或程序。当WINDOWS 10能运行为WINDOWS XP写的程序,这是向后兼容性。无论哪种分叉方式都需要这种向后兼容性,否则新的节点将无法从头验证整个区块链

可见(对软分叉来说)正确的用词是“向前兼容性”:旧的软件仍可持续接受新版本软件产生的数据。当你在WORD 2013中保存一个文件,然后可以在WORD 2011中打开,这是向前兼容性

值得一提的是,Satoshi没有用过“硬分叉”这个词; 想必他也没想到会出现其他形式的分叉。那时还没有软分叉的概念,也是件好事,因为这个概念是有严重缺陷的:在一个正常工作的比特币网络中,绝不应该有软分叉发生

这看似是个武断的论断,让我们仔细分析一下

为什么软分叉是不好的

看起来,允许旧版的软件能在不升级的情况下处理新数据是毫无疑问的:为什么不呢?很显然的,软件工程师都喜欢向后和向前兼容性,如果你能做出一个新版本软件和旧版本软件共存运行,通常都是件好事

向前兼容性比向后兼容性要少见。原因是,如果你在文件或协议中加入一些新的功能时,旧版软件不能理解。有时你可以将新功能作为可选:旧版软件可以忽视。这叫做“恩典的降级”,也是个常见的手法,尤其是在开发具有新功能网页的时候想让旧的浏览器也能使用

既然向后和向前兼容性在软件工程中通常都是有利的事情,为什么比特币不同?原因很简单:

向前兼容性彻底推翻了运行一个全节点的全部意义

很容易了解为何如此。XT或者CORE软件安装后,下载从创世区块开始的每一个区块,通过这样做,他们审核整个区块链。他们检查每一笔交易和签名。当审核完毕后,你就可以确信你用的这个总账簿代表了比特币有史以来全部的真相

这是比特币去中心化的很关键的一部分:通过使用你自己的你所审核过的一份区块链的拷贝,然后只接受根据这个区块链可验证为是正确的交易,你确保没有货币超发和重复支付等关键的经济规则

想法是很简单的:没有任何人,甚至是一个拥有多数算力的矿工,可以强迫我接受一笔不符合我本机上区块链记录里的交易

等等。。。你确定吗?

这就是软分叉所带来的问题

在一个软分叉中,一个有关协议的改变被精心设计成让旧节点认为某些东西是有效的,但实际上可能是无效的

这里有个比方。假设一家大公司有一队审计人员,还有一队交易员。交易员想进行一种新的交易,但公司政策当前不允许:审计人员根据规则核查每一笔交易。改变公司政策是很漫长的流程。但有一天,有个交易员突然灵机一动。“同志们”,他说,“我有个主意,我要做一些衍生品合约交易,但我在交易记录上会写成买入土地。当你们看到的时候,就在脑子中把土地替换为衍生品合约,一切照常。审计人员不会发现的!”

审计人员就是运行比特币全节点的个人和服务商。交易员就是那些修改代码的程序员。他们对交易规则的违反对公司是有利还是有害在这里不是问题的关键,关键在于他们做事情的方式。现在审计人员仍然在反复核查每一笔交易,但他们的计算将会产生错误的结果,因为他们无法理解他们所审计的数据的真正意义

(这里我因过于技术而省去一部分有关P2SH通过怪异的软分叉方式实现的讨论,有兴趣可去看原文)

为什么要使用如此怪异的方式去实现P2SH的改变?

你猜到了–软分叉。这种数据结构的构造,导致总是会被旧节点接受认为是有效的。但如果旧节点发送了一个它们认为是有效但却不符合新规则的交易,新节点就会拒绝这个交易而算出一个不一致的区块链

但你本来运行全节点的初衷就是为了防止这样的事情发生!

未完待续

vatten medium avatar
1

vatten Yellow v    一个月前

(续前)

硬分叉会导致什么情况?

如果P2SH是通过硬分叉实现的,包含新格式的P2SH交易的区块将会简单的被旧节点拒绝

因此,你的节点拒绝了一个区块,因为里面包含有一个你不懂的交易(衍生品交易)。接下来呢?在我们想象的公司里,审计员将会通知CEO(你)并询问如何处理。你是决定者。

比特币也是如此:作为用户你将通过EMAL或SMS从你运行的节点得到一个警告,并决定该如何处理:

  1. 阅读有关新规则的改变并接受,决定升级到新版本
  2. 阅读有关新规则的改变并决定不接受,不升级(下面会再谈到这个问题)
  3. 决定接受任何你所不懂的交易。你也许会这么做如果你认为让节点持续运行比保证区块的有效性更重要

这最后一个选择是非常危险的,但注意,这就是软分叉中旧节点的行为!区别仅在于,你作为用户特别的许可了这一行为,但你的许可不会影响到其他用户的决策。只有你自己承担因这个决策而导致的区块链出错的风险。CORE和XT软件目前不支持这第三个选项,但如果有人需要,可以加入这个选项

我的意思是什么呢?知识就是力量。当你知道规则已经发生了改变,你就可以根据这个信息做出更好的决策。在软分叉中,你作为用户不知道系统规则已发生了改变,就会盲目的决策

有关选择

最近bitcoin.org添加了一条新的政策。是这样说的:

有争议的硬分叉对比特币来说是很糟糕的。最好的情况下,有争议的硬分叉导致少数派感觉到丧失了政治权利。最差的情况下,会导致比特币彻底失去价值

这是个很有趣的说法,因为它暗示可能(用软分叉的办法)改变比特币而不导致某些人的权力丧失

这可不是货币运行的方式。货币是一个社会的工具,使用某种货币即意味着你接受它的规则,即使你不喜欢。你不可能使用美元而不受到定量宽松的通膨危害。即使从技术上来说如果你是个大银行你也许可以避免这种危害,但迟早你会在流通中接收到新增的货币,并开始和客户争论这是一条让商业活动死亡的捷径

在比特币里,任何被绝大多数用户支持的变化不可避免导致少数不接受这个变化的人丧失权力。这和使用硬分叉还是软分叉毫无关系:不管你使用何种技术手段,如果新格式的交易已经成为主流,迟早你会开始收到来自新格式的交易的币。这时你有两种可能,能验证新规则,或不能验证新规则。但不能验证新规则的结果导致的不过是降低你的安全性。因此实际上大家都会升级。反对一个大多数人支持的软分叉和反对一个大多数人支持的硬分叉毫无区别:如果你不喜欢新规则,你将丧失权利。这是一个选择而已

我们可以在P2SH的软分叉中看到这样的证据。另外一个竞争性方案也得到了一些矿工和程序员的支持,但最后大家都接受了我们现在所使用的方案。他们没有任何选择余地,或者说,他们选择跟从大多数共识。是否是软分叉没有任何不同

因此说硬分叉和软分叉的区别在于人权的不同没有任何意义。这种区别不仅是错误的,而且是毫无联系的

分叉对矿工和商户的影响

如果你是个矿工或者商户,你应该更优先考虑使用硬分叉而不是软分叉,原因如下:

商户:你务必要确认你所接受的交易是被绝大多数比特币节点证明是正确的,并且越快越好。这意味着你的节点必须运行大多数人所运行的节点。如果你没有跟上大多数节点,你可能会被骗。这意味着你必须尽早发现你当前版本已经不是大多节点使用的了,并且你需要拒绝那些你无法验证的交易

拒绝比被骗要好:如果一个用户抱怨他们的支付无法确认,这表明你的版本可能已经过时了,即使你没有设置好email/sms警告。但如果你愿意,你总是可以将你的全节点设置成假定网络中有一个软分叉,尽可能随时提醒你出现的变化

在我提出了这些意见之后,CORE程序员改进了部分代码,使得软分叉更像一个硬分叉:CORE软件将忽略含有不能理解的格式的交易,直到那个交易已经出现在一个区块里。这种改进是否对你有帮助更多取决于时机。这样他们的解释是,如果你只等待一个区块或使用未确认的交易,那样导致的不安全性是你自己的问题

矿工:如果你是一个矿工,并且和大多数节点用的版本不同,无论是硬分叉还是软分叉你都会亏损。但是,硬分叉还是更好一些。第一,硬分叉是容易察觉的,所以一个配置好的节点会迅速通知你节点需要升级。节点也可以迅速关闭你的矿机以便你不会继续挖少数派分支的币。第二,如果你坚持认为大多数算力的链是没有前途的,大家最终会同意你的理想,你可以继续挖你的少数算力链。如果你的赌博成功了,那也许未来某天大家都会转到你的链上,那你将因为你的远见而因为在低难度挖到的那些币得到丰厚的酬劳。不过这个赌博风险是非常高的,你可以迅速烧掉无数的资金,即使在以前的硬分叉中矿工也从没有这么做过,但技术上是可能的

但在软分叉中,你将会持续挖矿,并挖出一些你认为是有效的区块,但这些区块会被绝大多数矿工拒绝。但当他们孤立你的块时,你会以为仅仅是运气不好,你会继续再挖下一个块。。。然后又被孤立了。如果你是个小矿场,并不经常挖出块,那要到很久以后你才会发现这不是一连串的霉运,而是网络协议已经改变了而你却并不知道

硬分叉会毁灭比特币吗?

不可能。如果可能的话,任何人都可以通过挖一两个不同规则的块来让比特币硬分叉而完蛋。区块链的机制就是为了保证硬分叉不会造成任何破坏

“有争议的”硬分叉会导致比特币彻底失去其价值这一说法,出现在bitcoin.org的政策里,但我认为正好相反。要求任何变化都需要有100%(或99%)的一致支持,就意味着任何人都可以通过拒绝一个变化劫持整个社区直到他们得到他们想要的东西。如果比特币是这样工作的,那将永远不可能实现任何改进而彻底变得毫无价值

vatten medium avatar
2

vatten Yellow v    一个月前

可以看到,即使是这么大白话几乎完全不提代码的科普文,也不是很容易理解,因为中间涉及多个来回转折的逻辑,但如果你能完全看懂这篇文章,那恭喜你已经是比特币的专家了

Trueiron medium avatar
3

Trueiron Yellow v    一个月前   via Android

先赞再看!
抽时间好好看看!

比特币感谢地址: 1ronNBrnGoAmfTQ9L5mXcSJUL3moNzoz2
mkz899 medium avatar
4

mkz899 Yellow v    30 天前   via iPhone

關於這點,我覺得Mike 說得是非常有道理的

比特币感谢地址: 12tuNgu2RHYQy7BNcU2AubvPx3dPN1qjsV
时尘西 medium avatar
5

时尘西 Yellow v    30 天前   via Android

“分叉”这个词,在专业人士看来,是一个中性术语。但是在普通用户会觉得这是一个贬义词,他们很有可能会把分叉等同于分裂,一听说比特币要分叉了,吓得半死。
我建议在对普通用户宣传的时候,把分叉这个词,替换为“比特币协议升级”。

比特币感谢地址: 1Pp5SQ9uHqm7GTR1U6xdUFdqYkbN8nQ1cc
vatten medium avatar
6

vatten Yellow v    30 天前

最近两天看了很多TALK论坛上的口水战,觉得即使是在懂英语的美国,到现在这个地步,能对区块链概念有准确理解的也是凤毛麟角,所以有关这些问题的讨论也就最终变成政治和阴谋论了

就和美国大选一样,最终是长的帅会说笑话的当选了,每个具体的问题都太复杂,跟群众解释是毫无意义的

比特币创建了就是为了避免受到政治影响,现在看来不能免俗,人都是一样的。最好固定代码不要再搞什么改变了

Advertisements
有关共识和分叉 -硬分叉和软分叉有什么区别? (MIKE HEARN)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s