全面、

硬分叉、软分叉、默认和强制

区块链领域的重要争论之一是硬分叉还是软分叉是首选的协议升级机制。两者之间的基本区别在于,软分叉通过以下方式改变了协议的规则: 严格减少 有效的交易集,因此遵循旧规则的节点仍将进入新链(前提是大多数矿工/验证者实现分叉),而硬分叉允许以前无效的交易和块变得有效,因此客户端必须升级他们的客户端才能留在硬分叉链上。硬分叉也有两种子类型: 严格扩展 硬分叉,严格扩展有效交易集,因此旧规则实际上是相对于新规则的软分叉,并且 双边 硬分叉,两个规则集双向不兼容。

这是一个维恩图来说明分叉类型:

通常提到的两者的好处如下。
  • 硬分叉使开发人员在进行协议升级时具有更大的灵活性,因为他们不必小心确保新规则“适合”旧规则
  • 软分叉对用户来说更方便,因为用户不需要升级就可以留在链上
  • 软分叉不太可能导致链分裂
  • 软分叉实际上只需要矿工/验证者的同意(即使用户仍然使用旧规则,如果创建链的节点使用新规则,那么无论如何只有在新规则下有效的东西才会进入链);硬分叉需要 选择参加 征得用户同意

除此之外,对硬分叉经常提出的一个主要批评是硬分叉具有“强制性”。这里所指的强制不是肉体上的强制,而是强制。相反,它是 通过网络效应进行强制。也就是说,如果网络将规则从 A 更改为 B,那么即使您个人喜欢 A,如果大多数其他用户喜欢 B 并切换到 B,那么您必须切换到 B,尽管您个人不赞成更改才能继续运行和其他人一样的网络。

硬分叉的支持者经常被嘲笑为试图对网络进行“敌意接管”,并“强迫”用户跟随他们。此外,链分裂的风险通常被用来形容硬分叉“不安全”。


我个人认为,这些批评是错误的,而且很多时候是完全倒退的。这种观点并不特定于以太坊、比特币或任何其他区块链;它源于这些系统的一般属性,并且适用于其中任何一个。此外,以下论点仅适用于有争议的变更,其中至少一个选区的大部分(矿工/验证者和用户)不赞成这些变更;如果更改是无争议的,那么无论分叉的格式是什么,通常都可以安全地完成。

首先,我们来讨论一下强制问题。硬分叉和软分叉都以一些用户可能不喜欢的方式改变了协议; 任何 如果协议更改的支持率低于 100%,则会发生这种情况。此外,几乎不可避免的是,至少 一些 在任何情况下,持异议者中的大多数人都更看重坚持更大群体的网络效应,而不是他们自己对协议规则的偏好。因此,从网络效应的意义上来说,这两种分叉类型都是强制性的。

然而,硬分叉和软分叉有一个本质的区别: 硬分叉是可选择加入的,而软分叉则不允许用户“选择”。为了让用户加入硬分叉链,他们必须亲自安装实现分叉规则的软件包,而那些不同意规则更改甚至比他们重视网络效应更强烈的用户理论上可以简单地留在硬分叉链上。老连锁店——实际上,这样的活动 已经发生了.

无论是严格扩展硬分叉还是双边硬分叉,都是如此。然而,在软分叉的情况下, 如果分叉成功,则未分叉的链不存在。 因此, 软分叉显然在制度上倾向于强制而不是分裂,而硬分叉则具有相反的偏见。我自己的道德观点使我倾向于分裂而不是强制,尽管其他人可能有所不同(最常见的论点是网络效应确实非常重要,并且至关重要的是“一枚硬币统治一切“,尽管也存在更温和的版本)。

如果我不得不猜测为什么,尽管有这些争论,软分叉经常被标榜为比硬分叉“更具强制性”,我会说这是因为感觉硬分叉“强迫”用户安装软件更新,而使用软分叉,用户根本“不必”做任何事情。然而,这种直觉是错误的:重要的不是个人用户是否必须执行单击“下载”按钮的简单官僚步骤,而是用户是否 被迫接受协议规则的更改 他们宁愿不接受。如上所述,按照这个指标,两种分叉最终都是强制性的,而且硬分叉在保护用户自由方面表现得更好。

现在,让我们看看备受争议的分叉,特别是矿工/验证者偏好和用户偏好冲突的分叉。这里分为三种情况:(i)双边硬分叉,(ii)严格扩展硬分叉,以及(iii)所谓的“用户激活的软分叉”(UASF)。第四类是矿工激活软分叉的情况 未经用户同意;我们稍后会讨论这个。

首先,双边硬分叉。在最好的情况下,情况很简单。这两种货币在市场上进行交易,交易者决定两者的相对价值。从ETC/ETH案例中,我们有压倒性的证据表明,矿工们极有可能简单地根据价格比率将算力分配给代币,以实现利润最大化,而不管他们自己的意识形态观点如何。

即使一些矿工声称对某一方有意识形态偏好,也极有可能有足够多的矿工愿意利用价格比和算力比之间的任何不匹配进行套利,并使两者保持一致。如果一个矿工卡特尔试图组成一个不在一条链上挖矿的联盟,那么就会有巨大的背叛动机。

这里有两种边缘情况。第一个可能是,由于难度调整算法效率低下,币价下跌,挖矿价值下降,但难度并没有下降来弥补,导致挖矿非常无利可图,没有矿工愿意以同样的价格挖矿。损失继续推动链条前进,直到其难度恢复平衡。以太坊的情况并非如此,但很可能 比特币就是这样。因此,少数链很可能永远不会落地,因此它将会消亡。请注意,规范性问题 这是否是一件好事 取决于您对强制与分裂的看法;正如你可以从我上面写的内容中想象到的那样,我个人认为这种对少数链不利的难度调整算法是不好的。

第二个边缘情况是,如果差异很大,大链可以 51% 攻击较小的链。即使在 ETH/ETC 以 10:1 的比例进行分割的情况下,这种情况也没有发生;所以这当然不是给定的。然而,如果主链上的矿工更喜欢强制而不是允许分裂并按照这些价值观行事,那么这种情况总是有可能发生的。

接下来我们看一下严格扩展硬分叉。在 SEHF 中,非分叉链具有在分叉规则下有效的属性,因此如果分叉的价格低于非分叉链,则其算力将低于非分叉链,并且因此非分叉链最终将被接受为最长链 通过原始客户端和分叉客户端规则 – 所以分叉链“将会被消灭“。

有一种观点认为,对于这种分叉成功存在着强烈的内在偏见,因为分叉链被消灭的可能性将被纳入价格中,从而推低价格,使得该链更有可能被淘汰。毁灭……对我来说,这个论点似乎很有说服力,所以这是一个很好的理由 任何 有争议的双边硬分叉而不是严格扩展。

Bitcoin Unlimited 开发人员建议通过以下方式处理此问题 手动进行双边硬分叉 发生之后,但更好的选择是内置双边性;例如,在比特币的情况下,可以添加一条规则来禁止某些未使用的操作码,然后在非分叉链上进行包含该操作码的交易,这样在分叉规则下,非分叉链将从此被禁止。视为永久无效。在以太坊的例子中,由于状态计算如何工作的各种细节,几乎所有硬分叉几乎都是自动双边的。其他链根据其架构可能具有不同的属性。

上面提到的最后一种分叉是用户激活的软分叉。在UASF中,用户开启软分叉规则,无需费心与矿工取得共识;预计矿工们只是出于经济利益而顺从。如果许多用户不同意 UASF,那么就会出现代币分裂,这将导致与严格扩展硬分叉相同的场景,除了——这是这个概念中真正聪明和狡猾的部分—— 同样的“毁灭风险”压力在严格扩展的硬分叉中强烈反对分叉链,而在 UASF 中强烈支持分叉链。即使 UASF 是选择性加入的,它也会利用经济不对称来偏向成功(尽管这种偏向不是绝对的;如果 UASF 明显不受欢迎,那么它就不会成功,只会导致链分裂)。

然而,UASF 是一种危险的游戏。例如,假设一个项目的开发人员想要制作一个 UASF 补丁,将之前接受所有交易的未使用操作码转换为仅接受符合某些很酷的新功能规则的交易的操作码,尽管该操作码是在政治或技术上有争议并且矿工不喜欢。矿工们有一个聪明而狡猾的反击方式: 他们可以单方面实施矿工激活的软分叉,使所有使用软分叉创建的功能的交易总是失败.

现在,我们有三个规则集:

  1. 操作码 X 始终有效的原始规则。
  2. 仅当交易的其余部分符合新规则时,操作码 X 才有效的规则
  3. 操作码 X 始终无效的规则。

请注意,(2)是相对于(1)的软分叉,(3)是相对于(2)的软分叉。现在,有强大的经济压力支持(3),因此软分叉未能实现其目标。

结论是这样的。软分叉是一种危险的游戏,如果有争议并且矿工开始反击,它们就会变得更加危险。严格扩展硬分叉也是一种危险的游戏。矿工激活的软分叉是强制性的;用户激活的软分叉的强制性较低,但由于经济压力仍然具有相当的强制性,而且它们也有其危险。如果你真的想做出有争议的改变,并且认为这样做的高社会成本是值得的,那么只需进行一次干净的双边硬分叉,花一些时间添加一些适当的重放保护,然后让市场来解决。

Sumber: https://vitalik.eth.limo/general/2017/03/14/forks_and_markets.html