Polkadot 的金丝雀网络——Kusama 出现了一点混乱。下面简要介绍一下原因和解决方案。

Kusama 的第一次冒险

在周六英国时间中午左右,全民公投结束了一项升级提案(旨在将 Kusama 区块链更新为 Kusama 运行时版本 1034)。关联的升级发生了,用升级的新逻辑替换了 Kusama 的核心逻辑。

但由于与最近的更改相关的命名问题,该更改将 Kusama 逻辑与临时 Polkadot 逻辑分开,因此升级无意中将链更新的不是 Kusama 运行时,而是临时 Polkadot 主网运行时环境。

由于两者之间 Babe 共识算法的参数不同,因此新的运行时与 Kusama 客户端代码不兼容。Babe 停止出块,而 Kusama 宕机了。

回滚…

Kusama 在区块链的尾部确认了一个区块。这意味着,在 50% 验证人的支持下,可以“回滚”一个块,其中发生的一些更改会导致链停止,而更改很重要,可能通过更改传入其中的交易或外部数据来实现。

在我们的例子中,这并没有提供解决方案,因为公投总是在第#516559 块的开头结束,从而导致代码更改。因此,仅仅回滚一个块是没有用的 : 换句话说,没有已知的事务可以被构造或删除,从而避免有问题的代码更改。

值得庆幸的是,我们不需要回滚太多区块:升级提案的全民公决几乎没有投票,对升级提案只需修改一票就足以确保它没有通过。

该表决事务可能在区块#516558 之前的任何时候发生,该区块紧接在计数表决和执行提案之前(或不会执行)。从理论上讲,我们只需要回滚两个区块,但实际上,还有更多的区块有助于提供安全余量以确保包括所需的交易。

然而,有一个小问题是,这两个区块中的一个已经被我们的 Grandpa 确定了。在这种情况下,回滚被故意设计为现实不可能,至少在没有绝大多数网络参与者的支持和对代码库的深入了解的情况下是这样。回滚 Grandpa 状态是困难的,但不是不可能的,假设我们有 Kusama 验证人社区的协调。

最后一个问题是,我们的块生产方案 Babe 在设计时假设每个 Babe 会话至少要创建一个块。在 Kusama,每小时都会有 Babe 会话。在暂停后的第一个小时内,不会对 Kusama 的 130 个验证器进行任何修复 ; 事实上,当我们对情况的初步分析是网络已经停止了两个小时。

这意味着即使我们可以恢复 Grandpa 并构建一个替代块来避免有问题的升级,在超过一个小时的延迟情况下,验证人节点一旦尝试出块,Kusama 就会在之后堵住。

发明 DeLorean

事实上我们需要更有创造性地思考。如果我们现在还不能编写代码块,那么我们就需要修改代码块,以便所有缺失的代码块都能按照 Babe 的期望进行编写,至少每小时编写一个。

事实上我们希望每小时超过一个验证人,以便让验证人有机会注意到会话正在进行,并发出它们在线的信号——如果没有这个信号,好的验证者将被踢出,并可能因为“离线”而被惩罚。

答案是至少从 Babe 的观点来看,不仅要回滚几个块,还要回滚时间本身。从 2020 年 1 月 7 日上午 9 点(格林尼治标准时间)开始,Kusama 验证者将相信他们已经回到了格林尼治标准时间 2020 年 1 月 4 日 12:10:12,大约是有问题的升级事件发生前 25 分钟(和 48 个区块)。这使我们有时间拒绝升级建议并阻止 Kusama 成为金丝雀形的区块。

但除非我们想无限期地活在过去的两天半里 (我们不想这样做),否则我们的禽类 DeLorean 也需要一种回到未来的方式。我们不能像博士和马蒂那样直接进入未来 ;Babe 会注意到现在和现在之间产生区块的缺乏,然后停止工作。

只是往左边跳…

幸运的是,当你可以控制区块链的外部环境时,各种事情都成为可能。你不仅可以在时间上前后跳跃,还可以做一些更微妙的事情,比如加速时间。

因此,Kusama 将在回访过去之后回到今天,但不是通过一次跳跃,而是通过扭曲时间本身来实现。具体来说,是实际世界与 Kusama 之间的六倍扭曲。

在气泡内部,时间是气泡外部时间的六倍运行。这使验证人有机会产生块并声明它们处于在线状态(尽管它们通常只有六分之一的时间,所以最好快一点!)。

从链的角度来看,它使 Babe 感到高兴,因为它被包裹在气泡内并且无法看到外部状态,所以一切都将发展顺利。

当然,我们不能永远保持翘曲速度,否则 Kusama 就会飞向未来,把我们都抛在后面。所以我们安装了一个自动关闭开关 ; 一旦 Kusama 赶上了我们现在的时间,泡泡里面的时钟和外部时钟一样时,泡泡就消失了,一切都恢复正常。

如果一切顺利,那么结果就是 Kusama 将在明天(格林尼治标准时间晚上 9 点左右)从旅途中返回,届时将会有一段“正常”的历史,也不会知道发生了什么不寻常的事情。

原文链接:https://medium.com/@gavofyork/kusamas-first-adventure-2cd4f439a7a4

       翻译: 空谷

编辑:Mike

关于 PolkaBase

PolkaBase 是以波卡技术为基础的区块链 3.0 生态,致力于打造一个能推动区块链技术与应用落地、产生优质内容和产品价值、并吸引区块链行业外部资源与团队的新一代社区;在技术普及、生态孵化、高校与产业联合、价值用户和国际化五大方面,弥补现有社群的不足,推动生态的深化与发展。

Kusama 的第一次冒险

来源链接:mp.weixin.qq.com