允许紧急升级互联网计算机治理容器的提案获得通过
互联网计算机社区正在积极塑造区块链的功能和升级路线图,并在开发者论坛内进行了激烈的讨论,DFINITY 基金会正在以技术贡献的形式向互联网计算机生态系统投入研发资源,技术升级取决于社区讨论、投票和通过向网络神经系统 (NNS) 提出的议案进行采纳。
“通过节点所有者/提供者提案添加治理容器紧急升级功能”的提案 (#24807) 已于 2021 年 10 月 11 日 15:00 UTC 提交给 NNS,神经元持有者的投票在 48 小时后于 10 月 13 日结束,获得 99.997% 的批准,投票权为 314,358,478。
DFINITY 基金会和互联网计算机协会,以及相应的神经元追随者,在更广泛的 ICP 神经元持有者社区有机会对该提案进行投票之前,放弃了早期投票。
在提案生命周期的每个阶段,神经元持有者都将有能力指导基金会的努力,使互联网计算机更高效、更快、更易于开发人员使用。社区决定启动哪些升级以及采用哪些代码,从而允许互联网计算机实时发展。
有多种类型的 NNS 提案,这是一个 Motion 提案,不会主动更改互联网计算机的代码,但它确实提供了一种链上机制,供社区对其方向和设计进行投票。此特定提案旨在批准替代提案提交、投票和执行机制的设计和计划,该机制仅用于在治理容器出现故障或出现错误时更新治理容器。
概括
所有区块链都以共识为基础,在大多数区块链中,典型的协议升级机制是项目社区说服节点提供者(又名“矿工”)同意在某个时间点执行某个协议升级,这通常是通过许多对话和链下协议来完成的。
使互联网计算机成为世界上唯一的自适应区块链的原因之一是它能够通过允许神经元持有者提交给位于 NNS 子网中的治理容器的提案并对其进行投票,从而在链上升级自身。这意味着互联网计算机的变化是通过提交提案并通过治理容器自动执行的,这需要 ICP 代币持有者超过 50% 的神经元投票权。
这完全是链上共识,但是如果治理容器坏了或有错误会发生什么?如果不能接受或执行提案,如何升级以修复自身?
在这种情况下,互联网计算机将不得不退回到典型的传统区块链机制进行升级:社区必须就新的二进制文件达成一致并说服绝大多数节点提供商部署它。为了避免这种过时方法的陷阱,建议的解决方案是创建一个“紧急回退”机制,以防治理容器关闭,但不会一直回退到“要求绝大多数节点提供者手动部署新版本的二进制文件。”
提议的解决方案是一种机制,让替代提案的提交、投票和执行专门更新治理容器的 Wasm 代码,以防万一它出现故障,它从节点提供者那里而不是神经元那里收集投票(后者是不可能的,因为治理容器已关闭),并且需要三分之二 + 1 个节点同意。
您可以在提案的开发者论坛主题上找到详细信息、更新和问题的答案。
文档
功能草图:
https://forum.dfinity.org/t/proposal-to-add-capabilities-for-emergency-upgrades-of-governance-canister-via-node-owner-provider-proposals/7437
时间线
1-pager 在开发者论坛上发布以供审核:2021 年 9 月 20 日
与 NNS 团队负责人 David Ribeiro Alves 的社区对话:2021 年 10 月 7 日
NNS 提案 (#24807) 批准设计 + 项目提交:UTC 时间 2021 年 10 月 11 日 15:00
NNS 提案 (#24807) 批准设计 + 项目到期:UTC 时间 2021 年 10 月 13 日 15:00
如果此 NNS 提案通过,实施和部署将需要数天时间:2021 年 10 月 15 日至 30 日
拟议功能的优缺点
优点:
使用这种机制的紧急提案将有一个可审计的链上跟踪。
该解决方案将仅影响治理容器的升级,而不影响互联网计算机网络的任何其他部分。
该解决方案需要相同的拜占庭容错 (BFT) 安全假设:NNS 子网中至少三分之二的节点需要同意,这比简单多数的常规提案和互联网计算机为达成共识所持有的相同 BFT 假设更高。
该解决方案旨在紧急情况下使用,以便互联网计算机社区不必一直退回到更基本的说服节点和手动升级节点的方法,这是一个比目前存在的更容易、更安全、更快的安全网络。
缺点:
这种设计解决方案将减少节点提供者更新治理容器的摩擦,人们可以看到当前让节点提供者同意更新二进制文件的痛苦是有益的。
基本问题
1. 治理容器是否曾经宕机,以至于节点需要手动同意更新治理容器(三分之二节点提供者同意)?
是的,只有一次。在创世之后的第一周,出现了一个错误,即 NNS 已达到最大未完成提案数,并且没有清除积压。这导致了事件报告以及论坛和社交中报告的各种错误,NNS 最终通过要求节点提供商手动升级运行的软件来更新。由于互联网计算机是一个去中心化的区块链,基金会只能为了网络的健康而要求节点提供者这样做。
因为至少需要 NNS 子网中三分之二的节点同意(这是整个网络的安全假设),所以这种手动升级属于现有的安全参数。
2. 节点可以串通获取我的 ICP 实用程序代币吗?
此更改将更新根容器的 Wasm,而不是任何其他容器(例如 Ledger 容器)或网络的一部分。
所有共识协议的严酷事实是,所有区块链 —— 从比特币到以太坊,包括互联网计算机 —— 都具有这样的属性:如果绝大多数节点都同意网络状态,那么这就是网络状态。在实践中,博弈论和越来越多的独立方都使这极不可能。尽管众所周知,以太坊区块链的状态在 DAO 黑客攻击后发生了回滚,但这仅发生过一次,而且成本很高。在这种情况下,它将是 NNS 子网中的绝大多数节点。
互联网计算机通过最大化独立节点提供者的数量来最小化这种风险。互联网计算机还很年轻,随着时间的推移将继续增加新的独立节点供应商,从而进一步降低风险。
3. 为什么互联网计算机社区现在需要这个?
最近,几个区块链网络出现了严重中断,因此必须积极主动地继续保护互联网计算机网络。另外,这是一个相对容易的更改,也是我们在创世课程中的一个行动项目,在那里更新网络非常困难,这种变化将使网络更具弹性。治理容器太重要了,不能冒险使其难以升级。如果它关闭,则所有其他提议和升级都会停止。
4. 此功能是否会花费很多时间,花在其它地方是否更好?
不,它相当简单,作为 3.5 个月前教训的一部分,DFINITY 基金会工程师已经完成了实施,但尚未部署,这需要社区的批准。
5. 此功能是否经过安全审查?
此功能已经过 NNS 团队和 DFINITY 安全团队的审查。
6. NNS 中有哪些容器?
NNS 子网当前托管以下容器:
根容器:所有其他容器的控制器,用于升级它们。
生命线容器:根容器的控制器,用于升级它。
注册表容器:为互联网计算机提供配置服务的容器。
治理容器:实施治理的容器。
分类帐容器:接收来自用户的消息以发送交易的容器。
分类帐存档容器:存档旧分类帐交易区块的容器。
Cycles 铸造容器:铸造 Cycles 并在创建/充值时将它们发送到容器的容器。
互联网身份容器:为互联网身份 dapp 提供服务的容器。
NNS 前端 dapp 容器:为 NNS 前端 dapp 提供服务的容器。
容器也在这里可见:
https://k7gat-daaaa-aaaae-qaahq-cai.ic0.app/dev/dfinity
7. 什么是紧急情况?
在这种情况下,“紧急情况”有一个非常严格的定义:由于某些因素(错误、DOS 攻击等),治理容器无法用于接收/投票/执行提案,因此我们不能依赖正常的、基于神经元的、升级程序以解决问题,它不应该用于任何其他情况。
8. 由于并非所有节点提供者都是平等创建的(不同的节点提供者具有不同数量的节点),如果某些恶意节点提供者持有投票权,以至于治理容器在没有“支付更新费用”的情况下无法更新怎么办?
大多数 BFT 共识协议的基本安全假设是最多 1/3 的节点是恶意的(恶意的定义很广泛,可能意味着有缺陷、不可用、不正确的实现或积极尝试颠覆协议)。
该机制利用了相同的确切假设:在推动提案之前,需要 2/3 的投票支持。由其节点提供商手动升级每个节点以运行新二进制文件的替代方案,这将是一个链下事件,具有完全相同的安全限制:2/3 的节点必须升级。
9. 投票(即使是节点提供者)实际上是如何发生的?他们需要知道什么才能投票?
参与 NNS 子网的节点提供商之一可以提交一个特殊的提案来升级治理容器,其他提供商可以对该提案进行投票,这两件事都是通过命令行完成的。
10. 这种机制实际上是如何运作的?如果治理容器关闭,那么哪个容器提供这种回退机制?
有一个根容器控制所有其他容器,因此只有这个容器可以升级它们。但是,目前,此容器不接受提案。NNS 容器升级提议提交给治理容器,治理容器在通过神经元投票接受后,告诉根容器升级给定的容器。这带来了一个问题,因为治理容器是单点故障,如果它损坏,则无法升级。
该提案是添加一种特殊类型的提案,其范围非常有限(仅用于升级治理容器,并且只能由在 NNS 子网上运行节点的节点提供者提交),可以直接提交给根容器。
由于在这种情况下治理被破坏,我们不能依赖神经元进行投票,因此节点提供者将改为投票,其参数与强制升级 IC 副本二进制文件所需的参数完全相同,但要少得多风险和更高的速度。
此外,这是完全可审计的,因为提案会有链上记录,任何社区成员都可以监控这些提案,因为将有一种方法可以返回对所有人开放的当前待处理提案集。
11. 为什么只有加入 NNS 子网的节点提供者才能提交这些应急提案?
因为通过这种方式,安全假设与底层系统完全相同(它们并没有获得比现有更多的权力,只是使其更加明确和可审计)。
12. 根容器出现故障时会发生什么?
根容器本身由另一个容器控制,即生命线容器,它可以对其进行升级(反过来又由根容器控制,形成一个循环)。所以如果根容器坏了,它可以通过生命线升级,反之亦然:如果生命线容器坏了,它可以通过根容器升级。唯一的单点故障是治理容器。
下一步
现在提案已经通过,设计背后的研究团队将继续向社区更新项目流程和时间表。
开始在 smartcontracts.org 上构建并加入开发者社区 forum.dfinity.org。
来源:DFINITY
翻译:Catherine
- 往 期 推 荐 -
Web3 游戏、NFT 和 Play2Earn 在互联网计算机上爆炸式增长
长按关注 DFINITY 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群