作者:Anthony Towns
引言
本指南主张了一种可称为 “在共识之前达成共识(consensus before consensus)” 的方法,也即,重要的是,在变更与共识规则有关的代码(consensus code)、让变更成为现实以前,要确立倾向于这一变更的社会共识。
这种建立社会共识的过程可以分为四个阶段:
- 研究和开发
- 专业用户探索
- 行业评估
- 投资者审核
在经过上述阶段、社会共识得以建立和稳定之后,部署共识代码变更是比较直接的,可以分为以下两个阶段:
- 敲定
- 激活
本指南将参与比特币共识流程的参与者划分为多种角色,这在 “角色” 章节中有更加细致的描述。

- 高大友好的巨人在读比特币共识升级指南 -
角色
本指南将参与者分类为以下角色:
- 独立的技术专家
- 研究者 —— 对比特币相关领域、详细的抽象研究和最差情形分析有学术兴趣。
- 协议开发者 —— 实现/评审 共识逻辑的人。
- 专业用户 —— 对比特币有实践方面的兴趣,并且有试用比特币领域新东西的强烈意愿。
- 维护者 —— 维护和发布节点软件(比如
Bitcoin Core)的人。
- 比特币商业
- 行业 —— 开发利用或依赖于比特币的软件和服务的人。是比特币商业的 技术/编程者 侧面。
- 企业家 —— 比特币商业的风险承担侧面。
- 矿工 —— 参与区块构造和交易排序的人(具体来说,可分为矿池维护者和哈希率控制者)。
- 监督者
- 投资者 —— 持有比特币作为价值存储物、投资比特币商业的人。
- 审计者 —— 审计比特币的供给量和所有权的人(审计/金融 侧面;至于编程侧面,可归类为 “协议开发者”)。
这样的分类当然不是完备的;比如说,许多协议开发者同时也是研究者,或者也属于行业;许多矿工同时也一定程度上是企业家;以及,许多拥有别的角色的人,也同时是投资者。
重点总结
本指南预期,各角色有自己各位关注的阶段,而不是均等地参与分叉开发的每一个阶段。
独立的技术专家
关于独立的技术专家,本指南的预期是:
- 研究员:主要参与 “研究和开发(R&D)” 阶段,但也密切关注 “专业用户探索” 和 “行业评估” 阶段,并支持投资者的评估。
- 协议开发者:在这两个阶段承担重要的工作:在专业用户探索阶段开发可用的原型,并且在 “敲定” 阶段制作高质量的最终实现。也观察 R&D 阶段,以了解什么事物值得花费时间;并且密切关注行业评估阶段,以在需要时更新原型实现;支持投资者的评估。
- 专业用户:主要关注探索阶段,但也密切关注行业评估阶段的有趣进展,并支持投资者评估。
- 维护者:主要审核敲定阶段审核所产生的高质量最终实现;并在较小程度上确保 “激活” 阶段也顺利开展。可能也会检查为专业用户开发的原型实现,主要是因为这可以较早发现和修复问题。
比特币商业
关于比特币商业的参与者,本指南的预期是:
- 行业:顾名思义,集中在行业评估阶段,并会在投资者评估阶段报告发现。
- 企业家:本指南关注的是尽可能降低共识变更的风险,所以,关于如何从拥抱风险中获益并没有什么见解。一种也许有用的方法,为独立的技术专家参与研究、专用用户探索以及行业评估阶段提供经济支持,从而透彻的了解相关变更的潜力。在历史上,许多比特币企业在采用新的共识特性时动作缓慢,所以,以这种方式早一些接触新特性方面的专家,也许可以更快取得市场优势。
- 矿工:本指南只建议矿工关注两个阶段:投资者审核阶段,以确保任何可能影响他们业务的变更会在敲定之前捕捉到;激活阶段,以加快变更的部署。
监督者
最后,关于监督者角色,本指南的预期是:
- 投资人:本指南假设软分叉流程对投资人来说是理想的,可以尽可能减少他们需要承担的工作,但最大化他们可以发挥的影响力。因此,他们会关注投资者评估阶段,作为建立社会共识的关键途径。
- 审计者:我们中间的审计者应该会参与投资者评估阶段,以保证拟议的变更不会打破他们运行审计的能力;并且会在激活阶段快速升级到新特性,以确保他们的审计结果在新特性部署之后依然是准确的。

研究与开发阶段
建立对你的想法的支持的第一步,是让研究者和开发者参与进来。
非常概要地说,这通常包括以下活动:
- 以适合于 Optech 周报的程度介绍你的想法
- 比较你的想法与以往出现的类似想法
- 说明你的想法与其它方法的取舍
- 活得关于你的想法的缺点的反馈,并尝试修复它们
- 建立模拟系统,让研究者在其中挖洞
- 作出理论上的安全证明
这一阶段的主要目标是:
- 节约时间(如果你的想法以前已经被讨论过了,就不必再重复)
- 确保问题空间得到充分的探索
- 在投入过量的想法和精力之前,头脑风暴出替代性的解决方案
- 关于这类变更是改善还是恶化了现状,形成广泛接受的指标

专业用户探索
建立对你的想法的支持的第二部,是做出一些具体的东西,然后人们可以进一步探索你的想法。
概要地说,这通常包括:
- 开发出一个可用的原型
- 让共识变更合并到 inquisition 并在 signet 测试网上激活。
- 开发和维护你自己的比特币节点软件的复刻,并运行你自己的 signet/regtest 链,让人们可用实验。
- 在 Liquid、Liquid Testnet 或者 Chia 以及其它基于 “钱币” 模型(而不是 “账户” 模型)的区块链网络上部署你提出的特性
- 制作详细的逐步教程,讲解可以如何试用这个原型
- 让专业的用户参与对抗性试验(“red team” trials),从而看出如果某一步除了问题,会怎么样;并且能够看出你的变更是否能在敌意环境下生存
本阶段的主要目标是:
- 确保你的想法可以像你想象中的那样实现
- 在实践中测试你的想法、找出意料之外的错误
- 将开箱即用的实现呈现给行业参与者
最后一点对于让整个流程能够进入下一个节点是至关重要的。

行业评估
对比特币共识规则的绝大部分变更,都会对现有的比特币商业产生一定的影响。这个阶段是为了确保这样的影响得到了理解,并且任何负面影响都远远不及正面影响,以及,最终来说,这些影响非常重大,值得我们付出精力。
至少,这包括要联系受影响的项目、与维护它的人讨论,看看集成变更是否容易,以及,变更是否能解决任何问题(是否真的有用)。如果你找出了可以提升的地方,要回头作出优化,看看只需少量调整实现还是需要重新设计。
理想情况下,能够让受影响的产品发布实验性版本、包含支持或采用拟议变更的更新,就最好了。对于开源的产品,这可能是提议的作者可以独自实现的事。
这一阶段的目标是,在技术层面上演示该提议能够发挥它的潜力,以至于,其前景足够好,能够吸引行业的参与,并且其实现如同我们的愿景那样工作。

投资者评审
从一定程度上说,投资者才是关于 “比特币是什么” 有最终发言权的人 —— 他们决定自己要运行什么软件来审计自己的所有权和全局供给量、他们集体决定计时器的位置、他们决定比特币与其他货币的汇率,并且,在保存和花费自己的钱币时,他们决定自己 会/不会 使用什么特性。
将投资者评审作为建立社会共识的最后一个阶段,能够满足两个目的:肯定投资者的最终发言权,并且让他们能获得以往所有阶段的努力和成果所带来的好处,从而让他们的最终决定更加明智。
这个阶段的目标是,确保以往所有阶段得到真诚的执行,并且确实完成了 —— 提议已经得到了研究者的审核、可以按照计划来实现、适合当前的生态系统,并且,如果激活,将很快准备好进入生产环境。

敲定
一旦每个人都同意了相关的提议,那么就到最后一步了:
- 确保相关的 BIP 存在,并且是透彻且清晰的
- 确保有全面的公开测试向量
- 为变更以及全面的测试进入
Bitcoin Core开启一个 PR - 让代码在 regtest 和 signet 上激活(通过普通版本的
Bitcoin Core,而不仅仅是 inquisiton) - (在 signet 或 regtest 上)发送一些测试交易,使用人们可以用非
Bitcoin Core代码(比如其它节点实现、库、钱包,等等)来轻易测试的新特性

激活
一旦建立了广泛共识、BIP 也编写好了、测试也完成了、代码也合并了,那就是时候激活了。因为前面已经走完了所有步骤,这一阶段可能是整个流程最简单的部分。
激活可以采取两种方法:
- 快速激活
- 快速激活指的是在一个较短的时间框架内激活,尽管大比例的验证节点不升级到支持新规则会带来风险。
- 通过要求几乎所有矿工都强制执行新规则,这种方法可以变得安全。
- 因此,快速激活要在 90% 的哈希算力都表态准备好激活之后,才能触发;然后,激活可以在预先确定的一段时间之后自动发生。
- 如果对于采用变更并没有真正的共识,这种方法有机会检测出来 —— 在矿工的准备信号没有都到 90% 阈值的时候。
- 信号日(flag day)激活
- 与快速激活相反,信号日激活是直接安排好,到了未来的某个时间点,激活就自动发生。
- 选出的这个时间点必须保证几乎所有的节点运营者都会升级到新版本的节点软件,从而强制执行新的规则。
- 它并不依赖于矿工的支持或者说表态。
- 如果对于采用变更并没有真正的共识,这种方法没有提供检测出错误的机会,只能在链分裂中暴露出来(要么是作为强制要求发送信号来激活的一部分,要么是在激活之后尝试违反新规则)。
如果前面的阶段都得到了诚意遵循,两种方法都有可能成功而不引发问题。这里推荐的方法是:
- 与矿工对话,确定他们不会反对
- 如果他们反对,则评估理由:
- 如果存在广泛的反对,则反思为何你错误地认为对拟议的变更已经有共识,然后回到更早的阶段。
- 如果提议已知对矿工极为不利,但存在广泛的共识认为应该激活,则应继续推进,因为对比特币有长期好处的事,对矿工也有长期的好处。
- 尝试一次在较短时间框架(两个月或三个月)内要求高阈值(95%)的快速激活。
- 如果快速激活失败,但依然有广泛的共识认为变更是可取的,则进行信号日激活。

(完)