翻译整理:PolkaBase
「代码中的多个错误导致节点从 Kusama 网络退出,并丢失了存储已验证块区块的数据库。因此,相同的节点在重新启动时对这些块进行了双重签名。Kusama 议会的动议已给用户补偿了由这一问题而造成的惩罚罚金。」
7 月 31 日,周五,运行时 (runtime) 版本为 v2019 的两个 Kusama 验证节点开始每隔几分钟崩溃,给出两个明显的错误,并报告了一个问题。乍一看,问题似乎与验证者的密钥有关。随后发现这不是原因,因为受影响的验证节点间确认他们没有在过程中更改密钥。此外,该问题似乎仅存在于 Kusama 网络上,而不存在于 Polkadot 上。
进一步深入研究,团队意识到该问题似乎是由 GRANDPA 模棱两可引起的,导致 Kusama 中的斜线事件开始的,该事件最初是由文件描述符泄漏引起的,导致节点崩溃。此泄漏使节点无法将 GRANDPA 投票者的状态(给定回合中的投票)写入磁盘,并导致丢失此数据的节点在重新启动后再次投票,这次投票的区块比其原本选择要验证的区块更新。这导致了 GRANDPA 算法遭遇了表现模棱两可的算法情况。
GRANDPA Equivocation: 一个验证人在同一个区块时间、但在不同链上同时签署两个意向或两个以上意向投票信息的区块。
https://wiki.polkadot.network/
这两个事件的组合导致在 v0.8.15 (Kusama v2015)发布并升级了网络之后的某个时候出现了大幅惩罚验证节点的情况。颁发机构发现功能已经在运行时模块级别上使用了一段时间,但是在客户端上默认未启用,并且该版本还使 GRANDPA 算法能够报告未签名外部的模棱两可。
GRANDPA 的新报告功能 : https://github.com/
掌握了这些信息后,团队的主要假设是,文件描述符泄漏引起的模棱两可实际上早就已经开始发生,但仅在 7 月 v0.8.15 升级后才报告:通过运行此版本的网络,节点撞车事故后开始报告自身的节点情况,引起了相关团队的关注。尽管如此,对由 Parity 运行的节点的日志进行的调查仍未发现任何先前的模棱两可“Equivocation”(它们将被记录到终端)的问题的发生。
对文件描述符泄漏的根本原因的进一步研究指出了两个主要罪魁祸首:权限发现和度量收集。授权发现使用了过多的套接字来从 DHT 查询数据(即发现其他授权 IP 地址)。对于系统指标收集(例如,CPU 和内存),我们依靠 sysinfo crate,该 crate 在系统中的所有进程和每个进程的线程上保留文件描述符的高速缓存(通过从 / proc 读取来获取数据)。
短期解决方案是默认禁用“授权发现”功能,并停止收集系统指标。如果有适当的解决方法,可以过度使用 sockets,那么将来的发行版中将再次重新启用 Authority Discovery 模块。
在发布新版本之前,Parity 团队建议手动禁用颁发机构发现。另外,在节点崩溃的任何情况下,建议验证节点在重新启动之前引入延迟(1-2 分钟)。如果未在磁盘上持久保留节点的票证,这会降低节点在 GRANDPA 中产生”模棱两可”(Equivocation) 的可能性。
经过一些讨论和发展,Polkadot v0.8.22 已发布,包括上面详细介绍的短期修复。所有验证节点都应升级其版本并监视结果。Kusama 议会已恢复了由该错误引起的所有削减,并且本着这种精神,就恢复经济损失而非验证人提名损失进行了新的讨论。
为了跟上发展步伐,有很多方法可以加入 Kusama 社区。加入 Kusama 频道的讨论:
在我们的网站和 Kusama Wiki 上了解有关 Kusama 的更多信息:
https://wiki.polkadot.network/
想加入 Kusama 背后的核心成长团队吗?加入大使计划:
翻译、整理:Shawn PolkaBase