【译】Hard Forks, Soft Forks, Defaults and Coercion

2023-11-02

区块链领域的一个重要论据是硬叉或软叉是否是首选的协议升级机制。 两者之间的基本区别在于,软叉通过严格减少有效的交易集来改变协议的规则,所以遵循旧规则的节点仍然会进入新链(假设大多数矿工/验证者实施叉),而硬叉允许以前无效的交易和块变得有效,所以客户必须升级他们的客户才能保持硬叉链。 还有两种分叉形式: 严格扩张硬叉,严格扩大有效的交易组合,因此旧规则对新规则和双边硬叉来说是一个软分叉,这两个规则集都是不兼容的。

下面是一个Venn图来说明叉子类型:



这两个常见的好处如下。

  • 硬叉让开发人员在协议升级时有更大的灵活性,因为他们不需要注意确保新规则“符合”旧规则
  • 软叉更方便用户使用,因为用户不需要升级以保持连锁
  • 软叉不太可能导致连锁分裂
  • 软叉只需要真正需要矿工/验证者的同意(因为即使用户仍然使用旧规则,如果使链条使用新规则的节点,那么只有在新规则下有效的东西才会进入链条)。 硬叉需要用户同意

除此之外,硬性叉子经常遭受的一个主要批评是硬叉子是“强制性的”。 这里所强调的那种强制不是物理的力量, 相反,它是通过网络效应来强制的 也就是说,如果网络将规则从A更改为B,那么即使您个人喜欢A,但如果大多数其他用户喜欢B并切换到B,那么尽管您个人不同意为了进行更改而必须切换到B与其他人一样的网络。

硬叉的支持者常常被嘲笑为试图对网络进行“敌意接管”,并“强迫”用户与他们一起前进。 此外,连锁分割的风险通常被用来作为“不安全”的硬叉。



我个人的观点是,这些批评是错误的,而且在很多情况下是完全倒退的。 这个观点并非特定于以太坊或比特币或任何其他区块链; 它是由这些系统的一般属性引起的,并且适用于它们中的任何一个。 此外,下面的论点仅适用于有争议的变更,至少有一个选区(矿工/验证人和用户)的很大一部分不赞同; 如果变更不具争议性,那么无论叉子的格式如何,通常都可以安全地进行。

首先,让我们讨论强制问题。 硬叉和软叉都以某些用户可能不喜欢的方式改变协议; 如果任何协议更改的支持不足100%,则会执行此操作。 此外,在任何情况下,至少有些持不同意见者认为,坚持更大群体的网络效应比评估自己对协议规则的偏好更重要。 因此,这两种分叉类型都是强制性的,就网络效应而言。

然而,硬叉与软叉之间存在本质区别: 硬叉是选择性的,而软叉允许用户根本不选择“选择” 为了让用户加入硬叉链,他们必须亲自安装实现分叉规则的软件包,并且与规则不一致的用户组的变化甚至比他们重视网络效应更强烈,理论上可以简单地留在旧的连锁店 - 实际上,这样的事件已经发生了

在严格扩大硬质叉和双侧硬质叉的情况下,情况确实如此。 然而, 软叉的情况下, 如果分叉成功,则不存在非叉形链 因此, 软叉明显地从体制上赞成强制分离,而硬叉具有相反的偏见 我自己的道德观点促使我赞成分离而非强制,尽管其他人可能会有所不同(最常见的观点是网络效应真的非常重要,而且“ 一枚硬币统治全部 ”是非常重要的,尽管更适度的版本也是如此存在)。

如果我不得不猜测为什么,尽管存在这些论点,软叉通常被认为是“硬性较差”,但我认为这是因为它感觉像一个硬叉子“迫使”用户安装软件更新,而用软分叉用户不会“有”做任何事情。 然而,这种直觉是错误的:重要的不是个人用户是否必须执行点击“下载”按钮的简单官僚步骤,而是用户是否被强迫接受协议规则的改变 ,他们会宁可不接受。 如上所述,通过这种度量方式,这两种叉子最终都是强制性的,并且难以出现的叉子在保持用户自由方面稍微好一些。




现在,让我们看看极具争议的分支,特别是矿工/验证者偏好和用户偏好冲突的分支。 这里有三种情况:(i)双侧硬叉,(ii)严格扩张硬叉,和(iii)所谓的“用户启动软叉”(UASF)。 第四类是矿工在未经用户同意的情况下启动软叉; 我们将在稍后讨论。

首先,双边硬叉。 在最好的情况下,情况很简单。 这两种硬币在市场上交易,交易者决定两者的相对价值。 从ETC / ETH的情况来看,我们拥有绝大多数证据表明,无论其意识形态如何,矿工绝大多数情况下都会根据价格比例简单地将硬币分配给硬币,以最大化他们的利润。



即使一些矿工对一方或另一方表达意识形态偏好,过度倾向于有足够的矿工愿意套用价格比率和乱率比率之间的任何不匹配,并使两者保持一致。 如果一个矿工的卡特尔试图形成不在一个链上挖矿的话,那么就会有过度的缺陷诱因。

这里有两个边缘案例。 第一种可能性是,由于调整算法的效率低,开采硬币的价值随着价格的下降而下降,但难以补偿,使得开采非常无利可图,并且没有矿工愿意在继续推进链条直到其难度恢复平衡为止。 以太坊的情况并非如此,但比特币可能就是这种情况 因此,少数连锁店很可能永远不会脱离地面,因此它将会消亡。 请注意,这是否是一件好事的规范性问题取决于你对强制与分裂的看法; 正如你从我之前写的内容中可以想象的那样,我个人认为这种少数连锁反对的难度调整算法是不好的。

第二个边缘案例是,如果差距非常大,那么大型连锁企业可以有51%攻击较小的连锁企业。 即使在ETH / ETC以10:1的比例分配的情况下,也没有发生; 所以它肯定不是一个给定的。 然而,如果主导链上的矿工更喜欢强制让分离和按照这些价值行事,那就永远是可能的。



接下来,我们来看看严格扩展硬叉。 在一个SEHF中,有一个属性是非分叉链在分叉规则下是有效的,所以如果分叉具有比非分叉链低的价格,它将具有比非分叉链更小的散列能力,并且因此,无叉链条最终将被原始客户和分叉客户规则视为最长的链条 - 因此分叉链“ 将被歼灭 ”。

有一种观点认为,这样一个分支的成功存在着强烈的内在偏见,因为分叉链将被湮没的可能性将被推销到价格中,从而推低价格,使链条更有可能成为歼灭......对我而言这一论点似乎很强烈,所以这是一个很有理由做出任何有争议的硬派双边而非严格扩张。

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



上面提到的最后一种叉是用户激活的软叉。 在UASF中,用户可以打开软分支规则,而无需得到矿工的共识。 预计矿工们只会摆脱经济利益。 如果许多用户不遵循UASF,那么将会出现硬币分裂,这将导致与严格扩展的硬叉相同的情况,除了 - 这是概念的真正聪明和迂回的部分 - 相同的“湮灭风险”压力强烈反对严格扩张的硬分叉中的分叉链,反而强烈支持UASF中的分叉链 即使UASF选择加入,它也会使用经济不对称来偏向成功(尽管偏差不是绝对的;如果UASF决定不受欢迎,那么它将不会成功,并且只会导致连锁分裂)。

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

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

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

注意(2)是关于(1)的软叉,并且(3)关于(2)是软叉。 现在,有利于(3)的经济压力很大,因此软分叉未能实现其目标。

结论是这样的。 软叉是一种危险的游戏,如果它们有争议并且矿工开始反击,它们会变得更加危险。 严格扩展硬叉也是一个危险的游戏。 采矿者激活的软叉子是强制性的; 用户激活的软叉子不那么强制性,虽然由于经济压力而仍然非常强制,并且它们也有其危险。 如果你真的想要做出有争议的改变,并且认为这样做的高社会成本是值得的,那么只需做一个干净的双边硬盘,花一些时间来增加一些适当的重放保护,并让市场对它进行整理。

https://vitalik.ca/general/2017/03/14/forks_and_markets.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【译】Hard Forks, Soft Forks, Defaults and Coercion 的相关文章

随机推荐

  • 百度API获取地理坐标

    楼主是在用R画地图的时候需要获取各个地点的地理坐标从而接触到百度API的 不过它也可以应用到很多其它方面 楼主实验室有前往不同地区进行采样的需求 那么就可以记录下采样地点后 通过百度API一次性获取所有地理坐标 从而减免了很多麻烦呢 那么鉴
  • 对无签名的APP进行签名 命令行签名

    下面是在命令行对app进行签名 就是那么简单
  • 实例分割新思路之SOLO v1&v2深度解析

    前言 实例分割一般有两种做法 一种是top down 既先检测 bbox 后在每个bbox中进行mask的分割 例如Mask R CNN 第二种为bottom up做法 先分割出每一个像素 再进行归类 本文介绍的两篇论文另辟蹊径 直接分割实
  • 彻底卸载Keil4和Keil5

    一 卸载 在keil安装目录下找到uninstall exe文件 点击卸载 卸载完后将该文件下的所有文件删除 二 清除注册表 按下windows R打开运行 输入regedit打开注册表 将HKEY CLASSES ROOT目录下的 所有U
  • 2020初步总结

    一晃来这快两年了 今年写的博客也还算比较勤快吧 最忙的应该是上半年 经历了忙成狗的阶段 下半年还算稍微好点 对今年的总结是 1 每个月保证出博客量在12篇以上 这点还是有保证的 最忙的5月的时候 也是能保证12篇 2 对相关的学习进行了深入
  • 深度学习模型参数量计算

    若你的模型parameters为7327930 则 7327930 4 Byte 1024 1024 27 95 MB
  • 【Git详解大全】

    文章目录 1 Git 概述 1 1 版本控制 2 Git常用命令 2 1 初始化本地库 2 3 添加到暂存区 2 4 提交本地库 2 5 修改文件 2 7 历史版本 3 分支操作 3 1 什么是分支 3 2 分支的操作 4 Git团队协作
  • theos linux环境,MAC OS X下的Linux环境

    关键字 HomeBrew 好比Windows下的Cygwin 安装Homebrew 该si胜过macport ruby e curl fsSL https raw githubusercontent com Homebrew install
  • 【知识分享】C语言应用-易错篇

    一 C语言简介 C语言结构简洁 具有高效性和可移植性 因此被广泛应用 但究其历史的标准定义 C语言为了兼容性在使用便利性作出很大牺牲 在 C陷阱与缺陷 一书中 整理出大部分应用过程中容易出错的点 本文为 C陷阱与缺陷 的浓缩版本 想要更详细
  • 009 5道例题讲解函数递归——“C”

    函数递归是什么 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接 调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问
  • Leetcode2486-追加字符以获得子序列

    双指针遍历即可 class Solution public int appendCharacters string s string t int n s size m t size int l 0 r 0 while l
  • 连接游戏服务器网络延迟高,网络延迟_连wifi玩游戏网络延迟高-太平洋IT百科

    网络延迟是游戏玩家最不能忍的 为了解决网络延迟的问题 玩家们装了光纤 换了路由 然而 为你我用了半年的积蓄 玩个农药还跳ping 开局两分钟 延迟400ms 网络延迟在王者荣耀中卡得连鲁班七号都表示 我想静静 连WIFI玩游戏网络延迟高怎么
  • 为什么动态库不能被其他动态或静态库包含

    如果静态库包含了动态库 则动态库失去了它的意思 因为动态库是在运行时调用的 如果包含在静态库里 意味着在编译时把动态库编译进去了 gcc不会做这么荒唐的事的 如果动态库包含了动态库 这也没必要 因为运行时可以直接调用了 为什么还要包含到另一
  • 腾讯云服务器搭建小皮面板phpstudy教程

    腾讯云控制台设置 找到自己服务器所在的实例 这里可以获得远程登录的账号密码 域名解析在下面添加自己ip解析到购买的域名就好了 搭建云服务器及php环境搭建教程如下 方包用的是windows server 服务器 适合新手 不像linux那样
  • GDI+ 中路径渐变画刷的使用

    背景 路径是一系列相互连接的直线和曲线 由许多不同类型的点所构成 用于表示复杂的不规则图形 GraphicsPath 类表示 路径渐变画刷允许设置颜色从中心向边界渐变的画刷 可以设置中心点颜色和边界点的颜色 构建路径渐变画刷 使用路径构建
  • Linux命令集锦-持续更新

    centos版本 CentOS Linux release 7 6 1810 Core 一 查看端口占用 lsof Linux安装 sudo yum install lsof Mac安装 brew install lsof lsof i p
  • 2020年排名前10的前端框架

    Ant Design 网站链接 https ant design index cn 蚂蚁金服出品 非常著名的框架 就算你不了解前端 也会在公司的项目中多少听到程序员说起过 目前很多公司都在用 已经很成熟 而且提供了对设计师友好的 Sketc
  • tensorflow目标检测api使用过程中的问题

    tensorflow目标检测api使用过程中的问题 使用环境 win10 pycharm开发平台 所有的依赖包都是用pip安装的 按照官方要求把api的依赖库装完之后在测试的时候提示no module named object detect
  • xshell卸载不干净导致无法安装

    卸载xshell 删除两个地方的注册表 Windows 文件夹下 C Program Files x86 InstallShield Installation Information 这个目录下 删了这个文件夹 F3FDFD5A A201
  • 【译】Hard Forks, Soft Forks, Defaults and Coercion

    区块链领域的一个重要论据是硬叉或软叉是否是首选的协议升级机制 两者之间的基本区别在于 软叉通过严格减少有效的交易集来改变协议的规则 所以遵循旧规则的节点仍然会进入新链 假设大多数矿工 验证者实施叉 而硬叉允许以前无效的交易和块变得有效 所以