硬分叉 vs 软分叉 孰是孰非?

来源:互联网 发布:ipad好玩软件推荐 编辑:程序博客网 时间:2024/04/28 02:08

2015年这个漫长而炎热的夏季,已经暴露了一些关于比特币社区,令人惊讶的东西:很多人对于区块链算法如何实际运行的技术原理,其实是陌生的。

最终,bitcoin.org及各个论坛的管理者迈克尔·马夸特(Michael Marquardt),禁止了所有关于Bitcoin XT的讨论,并威胁说要从官方比特币网站上删除使用Bitcoin XT的服务。他的理由是,Bitcoin XT是一个山寨币,因为它触发了一个硬分叉。而另一方面,他认为“软分叉”(soft forks)却是完全可以接受的。

这一立场,从技术角度上来说,是根本站不住脚的,在这篇文章中,我将解释下原因。

 

软分叉和硬分叉

 

你在比特币论坛上可能并不会看到这两个词,在我随机地与比特币爱好者们的聊天当中,发现很多人都将这个术语抛在了脑后。我一次又一次地遇到过不明白这些单词意思的人,但我觉得他们应该是要明白的。

这并不奇怪,“软分叉”的概念是相对比较新出现的,并且似乎已经涌现在IRC的交流讨论当中,而不是BIP或者其他类型的标准文件。奇怪的是,甚至连开发者们也会错误地定义这个术语。

硬分叉,是当比特币协议规则发生改变,旧节点拒绝接受由新节点创造的区块的情况。违反规则的区块将被忽视,矿工会按照他们的规则集,在他们最后见证的区块之后创建区块。

软分叉,是当比特币协议规则发生改变,旧的节点并不会意识到规则是不同的,它们将遵循改变后的规则集,继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。

这通常被一些比特币核心开发人员描述为“向后兼容”,但这其实并不正确,并可能会让别人产生困惑。向后兼容的定义是,新的软件接受由旧软件所产生的数据或者代码,比如说Windows 10可以运行Windows XP的应用,这是向后兼容。两个分叉类型需要向后兼容,否则新节点就无法从头验证区块链。

正确的说法实际上应该是向前兼容:指旧的软件继续接受由新软件所产生的数据以及代码。当你保存了一份Word 2013文档时,你仍然可以用Word 2011来打开它,这就是向前兼容。

值得一提的是,中本聪本人并没有使用过“硬分叉”这个短语,想必此前他还未曾遇到过分叉的情况,软分叉的概念还没有绕过来么,这就对了,因为这个概念本身就有很大的缺陷:在一个正常的比特币网络中,软分叉永远都不应该发生。

这可能看起来像一个大胆的主张,让我们更进一步地分析下它。

 

为何说软分叉是糟糕的?

 

可能会出现旧软件继续处理数据,而无需进行升级的情况 :为什么你会不想要呢?现实情况是,软件工程师们都是喜欢向前和向后兼容的,如果你的新应用程序和旧版本的可以互相操作,通常都会是双赢的。

向前兼容比向后兼容更为罕见,原因是,如果你为自己的文件或者协议添加了一些新的功能,旧版本的软件就无法理解它。有时候,你可以让新的功能是可选的:意思是指旧软件忽视掉新功能是OK的,这就是所谓的功能退化,这是一个流行的技术,特别是当网站使用了新功能后,而有些用户又想使用旧浏览器进行访问时。

向前以及向后兼容在软件工程当中,已经是非常普遍地应用了,那比特币有什么不同么?原因很简单:

向前兼容,会使运行一个节点的全部目标失效。

原因很容易就能解释,XT/Core 两个版本的下载,以及处理每一个区块,都要从创世块开始,做这个过程的目的是为了对比特币区块链进行审计。每添加一个数字,它们都会检查每一个签名。当审计完成的时候,你可以确保你使用的总账将规则应用写入到这个软件当中。

这是比特币去中心化的关键部分:使用你自己的总账副本,通过你的计算机进行计算,然后根据这个总账,仅接受有效的比特币支付,是你在增强比特币的关键经济政策。

情况很简单:没有人,甚至是拥有多数算力的矿工,可以哄骗你去接受违反这些规则的钱。

或者说……他们可以么?

下面就是软分叉的问题所在了。

在软分叉中,协议的改变是经过精心编制过的,本质上是在诱骗旧节点去相信一些东西是有效的,但它实际上可能并非如此。

这里有一个类比,试想一下一家拥有审计师团队以及交易团队的大公司。交易员们希望做一个新型的交易,但公司目前是不允许的:审计人员会执行公司的政策,检查交易员们在做些什么。而更改策略可能会是一项很慢的工作。突然有一天,一个交易员灵机一动,“嘿,伙计们,”他说,“我有一个想法,我要提交一些衍生品交易,我打算把它写在纸上,当你看到它时,它看上去就好像是一笔正常的交易,但其实它不是,审计员们是不会发现的!”

这里的审计员们,正是运行比特币全节点的人以及服务,而交易员就是那些想要改变规则的人,无论这种规则变化是一个好主意与否,其实在这里都不相关:重要的是,它们是如何进行的,审计人员正在交叉检查每一笔交易,但是他们的计算可能会得出错误的答案,因为他们不明白他们所核查的交易的真实性质。

在技术上是如何进行这项工作的? 我们可以看看一个称之为P2SH的比特币模式,P2SH是一个非常有用的模式,它可以让多重签名更易使用,但是在区块链上会看起来很奇怪:

https://blockchain.info/tx/f837ca5c1a15fa6c2e5c7380386bacba10e936fe8625e12d9fa6c177a8f605c1

 OP_HASH160 6af7caf9b09224af8a171318f69d254c1756e54e OP_EQUAL 

这是一个比特币脚本,英文的意思是:“anyone who knows the password can spend this money” ,翻译过来就是“任何人知道这个密码,都可以花走这笔钱。”

它的问题就在于它的不安全:因为没有签名,所以当你广播了一笔,提供给任何人“密码”的交易,其他人也是可以进行一笔输出交易的,因为密码现在是公开的嘛,所以最后就存粹地变成了一场竞赛,看谁的交易第一个传递给矿工。

P2SH之所以可行,是因为比特币协议进行了修改,包含了一条新规则:当你看到上述形式的输出脚本,实际上不要将它当作一个脚本看待,而是一直特殊的处理方式:密码实际上才是“真实”运行的脚本。所以说P2SH其实是安全的,不要担心。但是为什么要使用这种迂回而奇怪的方式呢?

你猜对了,软分叉就是问题所在。这种结构的设计,总是被认为是,不了解P2SH规则的旧节点会认为交易是有效的。如果出现一笔交易,所花的币是在旧版本比特币规则下,但并不满足新的 P2SH规则的话,审查员们就无法正确地对此进行核查,并会计算出一个不正确的总账。

但是,防止这种情况的发生,就是你起初要去运行一个全节点的全部理由!哎哟!

 

硬分叉到底会发生些什么?

 

让我们想象一下 P2SH以不同的方式进行引入:通过硬分叉,那么脚本就会是这个样子的:

OP_HASH160 6af7caf9b09224af8a171318f69d2... OP_EQUAL OP_RUN

注意最后的OP_RUN:这是一个并不存在当前比特币指令集的操作码。正确地定义下,脚本会是这个样子的:

OP_HASH160 6af7caf9b09224af8a171318f69d2... OP_EQUAL OP_???

当他们到达OP _ ???位时,他们会停止并拒绝交易以及区块,因为他们会意识到,他们不知道这笔交易意味着什么。

我应该指出一点,当前实际有一个P2SH的相对提案,其名为OP_EVAL,关于它的讨论,是非常激动人心的,我不记得那场辩论的细节,也不想在这里进行重复,这也只是一个例证而已。

好了,所以你的节点已经拒绝了一个区块,因为它看不懂。怎么办呢?在我们想象的公司中,审计员会召唤CEO(也就是你),来作出一个决定,你就是决策者。而在比特币的情况下:你会因为某种方式被惊动,比如说短信或者电子邮件,然后你要做出决定该怎么做。你可以…

  1. 阅读有关的规则变动,然后你觉得是OK的,升级然后继续。
  2. 阅读有关的规则变动,然后你觉得不行,需要更多的考虑。
  3. 明确表示要去信任任何你无法理解的脚本输出,如果你觉得自己节点的正常运行时间,要比正确的审计结果更重要时,那你可能会去这样做。

最后的选择是有风险的,但是你会发现,软分叉发生了! 所不同的是,你是明确要求的它,你的选择不会影响其他人。只有你在冒险进行一个不正确的分类帐。 Bitcoin Core和Bitcoin XT 今天并不支持第三个选项,但是如果任何人想要,给它增加一个开关来让它启动是一件很容易的事情。

我的观点?了解就是力量。当你知道 规则已经改变时,你可以使用这些信息来采取更好的决策。而软分叉,你将不会知道规则已经改变,这就好像是在盲目地飞行。

 

选择

 

最近,bitcoin.org采取了一项新的政策,它说:

争议硬分叉对比特币是一件坏事。最好的情况下,一个有争议的硬分叉会让选择失败方链的人,感到选择权被剥夺。而最糟糕的情况是,它将使得比特币永远失去它的价值。

这是一个非常奇怪的说法,因为这就意味着改造比特币,而无需引起所谓的“选择权被剥夺”是可能的。

任何比特币的改变,都是由大多数人接受了规则的改变,正是这些人“剥夺”了那些不想要进行改变的人的权力。硬分叉也好,软分叉也罢,无论哪种技术被使用,如果交易使用了新的规则,那么就会进入广泛的传播,那么迟早你会收到支付的币,并追溯到一个新规则的交易。然后你就有两种选择,你可以验证新规则,或者不进行验证。而不进行验证的问题就是降低了自己的安全性:这就好比是将你脸上的鼻子切了下来。因此,在实践中,所有人总是会选择升级。多数人不同意软分叉,和多数人不同意硬分叉并没有什么不同,如果你不喜欢新的规则……那就坚定地选择就是了。

我们可以看到 P2SH本身就证明了这一点,这个竞争提案得到过一些矿工和开发人员的支持,但最终大家却接受了我们当前的这个版本。他们在这个问题上,没有选择,或者说,他们选择接受了改变,并继续使用比特币,而一个软分叉也没有什么区别。

因此,关于硬分叉 vs 软分叉的问题,说成是对个人权利的伟大斗争,在技术上是说不通的。它们之间是完全不相干的。

 

分叉对于矿工和商人意味着什么?

 

这篇文章有点长,所以下面我会尽量简单地进行描述。如果你是矿工或者商人,你应该会更喜欢硬分叉的更改方式,原因如下。

商人: 对于支付给你的钱,你的想法是这笔交易是尽可能多地被验证,并且你想要的是更快的验证。这就意味着,你的节点需要运行主要的规则集,如果你被甩在了后面,你是可以被欺骗的。如果你所在的链并不是主数,你需要尽快地知道,然后你要忽略掉你无法核实的交易。

请注意,在我提出关于比特币核心开发者们的一些问题之后,他们调整了代码,使得一些软分叉实际上更接近于硬分叉:Core会忽略掉那些似乎使用未知操作码的交易(也就是我们想要的!)…直到它们出现在区块当中。因此,这个调整是否有助于你,在很大程度上取决于时机。

矿工:如果你是一名矿工,并落后于多数人选择的规则,你将因为自己所使用的分叉链而失去经济回报。然而,硬分叉还是较好的。首先,它是可检测的,因此一个正确配置的节点,通过电子邮件/短信/电话的方式,可以让你知道自己的节点已经过时了。它也可以自动地关闭挖矿作业,那么你就不会浪费资源去挖取无效块。其次,如果你认为对方链是错的,然后你认为他们会同意你的观点,你可以继续尝试挖取弱链碰碰运气。然后在某个时候,每个人又回到了你的这条链,那么你就会得到所有其他矿工所没有的,可爱的coinbase。当然,这种策略是非常危险的,我是不会推荐的。但在技术上来说,是存在可能性的。

软分叉情况下,你会挖取你认为是有效的块,但实际上是其他矿工所忽略的块。然后,当他们孤立你的块时,你会认为这只是普通的运气不好罢了,并尝试建立另一个无效块……然后将再次获得孤块。如果你只是一个不常产生块的小矿工,你要弄清楚这件事情,可能需要花费你相当长的时间。然而你的口袋,还只是一个洞而已。

 

硬分叉会毁了比特币?

 

不是的,如果说有这种情况的话,那么从字面上来说,任何人都可以通过不同的规则来挖一个或者两个区块,来杀死比特币。区块链算法的根本目的是确保它不会发生任何破坏性的事情。

认为“有争议”的硬分叉会导致比特币永久性地失去价值,这个想法出自 bitcoin.org的政策。要求任何比特币的更改都需要100%(或者99%)的人同意,或者说至少有一个比特币核心开发者的认同,这就意味着,任何人都可以保持整个社区不变,他们都可通过拒绝同意进行赎回,除非他们得到他们自己想要的东西,没有哪一种基础设施是这样干的。如果比特币就是这样子,那它永远都不可能发展,最终将变得一文不值。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 办健康证身份证丢了怎么办 宁波二院怎么办健康证 健康证和培训证怎么办 楼下烧煤炉呛人怎么办 衣服染了笔渍怎么办 济宁二院怎么办健康证 刚按揭车的想卖怎么办 房子已过户银行不放贷怎么办 办房贷信用逾期给拒了怎么办 二手房过户了房贷下不来怎么办 没有房证的房子买卖怎么办 老公失踪房产证要他签字怎么办 税务机关对长期欠税怎么办 离婚有贷款的房子怎么办 买房没过户房主反悔怎么办 房子过户卖方爱人去世怎么办 黄浦区学生社会实践护照掉了怎么办 北京医保卡坏了怎么办 去了越南的签证怎么办 护照签证到期还在国外怎么办 办护照预约满了怎么办 未满16岁怎么办护照 办理护照采集指纹录不上怎么办 办理护照时指纹没有怎么办 未满16岁的怎么办护照 身份证照得太丑怎么办 武汉江夏怎么办健康证 小孩偏胖肚子大怎么办 手机安全中心密码忘记了怎么办 进京证一年12次怎么办 青霉素和头孢都过敏怎么办 手汗孢疹肿胀怎么办能吃消炎药吗 手机上办进京证怎么办 杭州公共自行车还车点满了怎么办 法院判决书下来对方不给钱怎么办 抓进看守所的人怎么办 在拘留所里病重抢救怎么办 昆明公租房户型确认后怎么办 18年工作好难找怎么办 我没工作了怎么办2018 婚姻质量差不幸福该怎么办