比特币要纳入Taproot升级,这几种软分叉方式,你选择?

Taproot是一个旨在提高比特币隐私性及灵活性的拟议协议升级 , 目前该方案正处于开发的后期阶段 , BitcoinCore的贡献者一致认为 , Taproot升级将使得比特币受益 , 截至目前 , 该方案似乎也受到了更广泛的比特币生态的欢迎 。 因此 , Taproot很可能会被纳入BitcoinCore协议 , 而其它比特币提议也可能会随之推出 。
但仍有一个问题:比特币网络应该如何进行升级?Taproot是共识协议层的一个改变 , 这意味着比特币节点必须以某种方式从旧规则切换到新规则 , 并且要避免网络的分裂 。 由于各种原因 , 这在过去被认为是一个挑战 。
目前 , 比特币开发者们正在考虑改进激活协议升级的策略 。
比特币要纳入Taproot升级,这几种软分叉方式,你选择?
文章图片
以前的软分叉和BIP9
好消息是Taproot的实施会是一次软分叉 。 这种类型的升级增加或收紧了规则 , 而硬分叉则是删除或放松规则 。 添加或收紧规则的好处是 , 升级节点认为有效的任何内容 , 在非升级节点看来也会是有效的 。 (如果旧节点同时接受交易类型A和B , 但新规则只允许交易类型A , 则旧节点将在执行新规则的网络上保持兼容 。 )
比特币最早的软分叉是通过截止日(flagdays)机制激活的 。 开发者(特别是中本聪)在一个新的比特币软件客户端的代码中嵌入了一个未来日期 , 指定了升级后的节点将执行新规则的时间点 。 矿工和用户被鼓励在此日期之前升级 , 以避免网络分裂 。 (注:在那些日子里 , 矿工和用户往往是重合的 , 这与今天是不同的)
由于未升级的节点仍然与新规则兼容 , 因此软分叉的一个好处是 , 如果大部分算力强制升级 , 整个比特币网络会就其区块链版本达成共识 。 这也意味着 , 在实施新的协议规则时 , 不需要立即升级所有节点 , 从而允许用户具有一定的灵活性 。
自2012年左右以来 , 软分叉已越来越多地利用算力作为协调机制 , 以协调向新规则的转换 。 通过在区块中嵌入一些数据 , 矿工可以向其它矿工和网络的其余部分发出信号 , 告知他们已升级软件的信息 , 从而准备好实施新的规则 。 一旦有足够的算力信号支持 , 所有升级的节点都会被触发以执行新规则 。
经过几次升级 , 这一战略演变成BIP9(比特币改进提议) 。 例如 , BIP9就是用来激活比特币上一次隔离见证(SegWit)软分叉升级的机制 。 矿工们有一年的时间来启动升级 , 要求在任何难度区间内95%的区块都包含就绪信号位 。 如果一年后没有发生这种情况 , 激活期就会过期 , 升级就会失败 。 (当然 , 可以简单地再试一次)
然而 , 对于隔离见证(SegWit)来说 , BIP9的运行并不顺利 。 与以前的某些升级一样 , 有些矿工可能由于漠不关心而在一段时间内没有进行升级(通常没有太大的动力促使矿工快速升级) 。 但一个更大的问题是 , 一些矿工已开始将信号传递过程理解为一种对升级的投票 , 他们不会发出准备就绪的信号 , 而是就是否支持表示投票意见 。 更糟糕的是 , 一些矿工最终利用这一“投票权”阻止升级 , 以试图在比特币开发过程中获得政治影响力 , 或者他们可“投票”反对升级 , 以暗中获益 。
经过长时间的激烈争吵 , 隔离见证(SegWit)最终确实激活了 , 但只有在其他比特币客户端包含新的激活方案之后 。 一些用户运行的BIP148客户端中包含的BIP148 , 被编程为仅接受截止日(flagday)后支持协议升级的区块 。 同时 , btc1客户端中包含的BIP91 , 有效地将算力要求从95%降低到75% 。 面对潜在的网络分裂和可能的收入损失情况 , 一直在阻挠的矿工们让步了 。
但对于大多数BitcoinCore开发者来说 , BIP9已暴露出它是一个次优的解决方案 , 因此 , 开发者们已开始考虑替代方案 。
BIP8
BIP8是BIP9的早期替代方案 , 它是由BIP148的作者Shainfry和BitcoinKnots , 以及BitcoinCore贡献者Luke-jr提出的 , 它最初与BIP9相似 , 但关键的区别在于:一年后若算力支持不足 , 升级并不会因此失败 , 它会做完全相反的事情 , 即在那个时间点激活软分叉 。 与截止日(flagday)类似 , 所有升级的节点将从那时起开始实施新规则 。 而那些仍未能升级的矿工 , 其挖取的区块 , 将冒着被升级的矿工和用户拒绝的风险 。
BIP9背后的主要思想是 , 假设用户进行了升级 , 矿工们就无法阻止软分叉 , 因此无法利用这种投票权来谋取利益 。 他们可以加快激活速度并帮助协调顺利的协议升级 , 但是即使他们自己不激活升级 , 升级也最终会发生 。
BIP8的最新草案 , 包含了一些显著的变化 。 首先 , 当信号期即将到期时 , BIP8允许为节点配置两种不同的策略:如前两段所述 , 强制激活 , 或者像BIP9一样不强制激活 。 此外 , 节点(如果这样配置的话)实际上并没有激活升级本身 , 而是为升级发出信号 。 而不表示支持升级的区块 , 将被拒绝 。 这两个变化的结合有一个有趣的特性 , 即如果比特币算力的大部分都被迫发出信号支持升级 , 即使没有配置为强制执行信号的BIP8节点也将随升级一起进行 。
反对BIP8及其强制信号(或自动激活)的一个论点是 , 它可能会有风险 , 尤其是在较短的时间内 。 如果算力占多数 , 且至少有部分用户不升级 , 则该方案会造成升级节点网络和未升级节点网络分裂 。 假设大多数用户支持升级 , 这可能最终会有利于网络的升级部分 。 但在此期间 , 未升级的用户将面临资金损失的风险 , 而未升级的矿工将浪费掉算力 , 从而有损比特币的安全性 。
最好的办法是提供足够的时间进行升级 。 不幸的是 , 每个人对时间的长度看法是不同的 , 一些人认为强制信号可能在一年内开始 , 另一些人则认为需要几年时间 。
BIP8存在的另一个复杂问题是 , 设置强制信号的默认值 。 如果在默认情况下关闭强制信号 , 用户可能会发现自己不协调 , 从而增加网络分裂的风险 。 另一方面 , 如果在BitcoinCore客户端中 , 强制信号被选为默认设置 , 则历史上广泛采用的BitcoinCore实际上就保证了升级将会发生 。 一些人认为 , 这会使BitcoinCore开发者对比特币的协议规则产生太大的影响 。 出于这个原因 , BIP8的合著者Luke-jr倾向于通过特殊的客户端专门部署带有强制信号的BIP8 , 类似于BIP148客户端 。
另一些人则认为 , BitcoinCore开发者始终会根据自己的最佳判断发布软件 , 同时牢记用户需求并避免有争议的升级 , 设置BIP8默认值也不例外 。 如果有人不同意BitcoinCore开发人员的最终选择 , 他们可选择不升级到新版本 , 甚至分叉BitcoinCore代码 , 以推出竞争版客户端 。
现代软分叉激活
虽然BitcoinCore开发者确实会考虑用户需求 , 并尝试避免有争议的升级 , 但并不是所有人都相信这是可能的 。 也许在这次发布之后 , 会出现全新的问题 。 或者 , BitcoinCore开发者可能遗漏了一些东西 。
这就是为什么BitcoinCore贡献者MattCorallo提出了一项被称为“现代软分叉激活”策略的原因 。 现代软分叉激活包括三个步骤 , 它基本上实现了BIP9(或没有强制信号的BIP8)和带有截止日激活的BIP8的组合(尽管强制信号可能是一种选择) 。
作为第一步 , BIP9将允许矿工通过算力激活软分叉 。 如果矿工们在一年内没有激活它 , 第一个激活窗口就会过期 。 然后 , 作为第二步 , 开发者们需要一些时间来分析激活失败的原因 , 如果他们确实发现了问题 , 就重新考虑这个提议 。 但是 , 如果他们发现方案没有问题 , 则第三步是重新部署软分叉 , 这一次使用BIP8和flagday激活:矿工们有另一次机会用算力激活方案 , 但如果他们再次失败 , 软分叉将在第二个信号周期结束时激活 。 (BitcoinCore贡献者AJTowns表示 , 在第二个信号周期内 , 算力激活阈值也可能随着时间的推移逐渐降低)
【比特币要纳入Taproot升级,这几种软分叉方式,你选择?】Corallo相信 , 如果提议没有错的话 , 这种方案将提供BIP9的好处 , 而不会带来负面影响 。 如果矿工愿意 , 他们可以协调一次平稳的升级 , 并且没有强制激活 , 如果激活最初失败 , 开发者可以花时间重新考虑提议 。 同时 , 由于没有充分的理由 , 矿工从阻止升级中获得的收益要少得多 , 因为众所周知 , 升级最终仍将继续进行 。


    推荐阅读