本文是 Cosmos 社区爱好者 Daniela Pavin 对参与 GoZ 挑战赛的 IRISnet 战队的专访的中文翻译。文章讲述了 IRISnet 战队在比赛中的表现与贡献,以及参赛感受。原文链接:
https://blog.cosmos.network/a-tale-of-game-of-zones-irisnet-6c1813e2eb7f
经常有人问我:「有这么多区块链项目中,为什么你却对 Cosmos 情有独钟?」
爱它的理由千千万,但要我说来主要是这两点:
首先,在前沿思想和技术的践行上, Cosmos 生态总是处于先驱地位:
曾成功举办的 Game of Stake (GoS)挑战赛是加密货币领域第一个基于权益证明的对抗性测试网,这次比赛快速教会了上百名「宇航员」(即参与者)使用 Cosmos 的可用工具,并让 Cosmos Hub (枢纽)在当年成功顺利地发布。
GoS 的成功在 Game of Zones (GoZ)里也得到完美重现。GoZ 是一个激励性测试网,目的是在 IBC 正式发布前去测试它的极限,探索它的优缺点。来自全球各地的参与者参与了三个阶段的挑战,得到的成果超出了预期。
其次就是参与到 Cosmos 生态中的那些人们:
实际上,这次比赛的高额奖金足以让参赛者不惜代价去照着比赛规则战胜其他对手。但 GoZ 的 150 个参赛队伍不仅在参赛的积极性与战术方面做到了最好,他们还彼此帮助,相互支持与协作,彼此祝贺对方取得的成果。
这就是 Cosmos:它是一个国际化的生态,在这个生态中最出色的那些权益证明共识机制区块链的实践者日复一日地将自身的知识贡献出来,为「宇航员」们所用。
因此,不论何时别人问我喜欢 Cosmos 哪一点,我都时刻做好准备去回答:我喜欢它的参与者的精神,勇气,与人性之光。
在这些参与者中,有一个团队格外突出——他们完美拥抱了 Cosmos 的精神内核。这个团队就是IRISnet 的核心团队。
在 GoZ 举办之前
在 GoZ 举办之前,IRISnet 战队就已经对 IBC 模块和中继器( Relayer) 进行了深入研究,进行备赛。
在这个阶段,IRISnet 战队不仅发现了 Relayer 中错误提示不准确的问题:
https://github.com/iqlusioninc/relayer/pull/108
还发现并提交了 3 个重要的 Bug,提交的内容已经作为有参考价值的资料被 GoZ 漏洞赏金计划收录。被 IRISnet 战队发现的异常内容总结如下:
Consensus Bug 该 Bug 会导致 Gaia 重启后部分内存数据丢失,进而致使共识失败。由于团队在第 1a 阶段接近结尾的时刻反馈了该问题,因此问题被解决后,主办方决定重启第 1 阶段(命名为第 1b 阶段)。
https://goz.cosmosnetwork.dev/2020/05/13/restarting-game-of-zones-new-competition-schedule-phase-1b-updates-and-hub-software-for-launch/
在 Tess Rinearson | Interchain 的博客中可以看到更多相关内容:
https://blog.cosmos.network/technical-game-of-zones-update-from-interchain-gmbh-e981ce4ac08f
ICS-20 Event Bug 在同一个交易中包含多个消息时,产生的 event 数据将会异常。具体来说,是每一个消息的 event 都会包含之前所有的 event 的数据。这会导致 event 数据过多进而产生一系列的问题,比如 Relayer 无法通过查询得到正确的 packet 信息。
Unordered channel Bug 通过无序通道发送的 ICS20 数据包可以被重复转发,这会导致在对方链上发行的跨链 token 数量大于原链中原生的 token 数量。
此外,尽管这不是比赛中必需的,IRISnet 战队还提出了一个 Relayer 激励机制的草案:
https://github.com/cosmos/ics/issues/411
他们认为这对跨链生态的发展极为重要。
除了发现代码库中现存的重要 Bug,这个战队还为社区提供了实用的工具,如支持 IBC 协议的 Rainbow 钱包和 GoZ 网络状态浏览器,让「宇航员」们能够去体验 IBC 发布后的 Cosmos 的跨链未来世界。
我们可以看到,优秀的团队总是不会让你失望!
第 1a 阶段
在认真研究 GoZ 主办方指定的比赛规则后,IRISnet 战队非常高效地开发了自动化工具和监控程序,主要包含以下几点:
他们启动了自己的私有全节点进行交易广播,而不是使用公开节点
他们的自动化程序发送交易失败会自动重试
同时,实时的监控系统中包含了一系列的报警,以便开发者能迅速地手动处理异常情况
尽管如上文所提到的, 第 1a 阶段由于 Consensus Bug 导致了 GoZ Hub 产生显著的不稳定性,但 IRISnet 战队还是顺利应对了发生的问题。
在第 1a 阶段 IRISnet 战队排名第三,获得了挑战奖:
Announcing the Phase 1 Winners of Game of Zones
第 1b 阶段
随着 Consensus Bug 的解决,GoZ 的第 1b 阶段可以说是在最好的技术基础之上启动了。但考虑到第 1a 阶段发生的事情, IRISnet 战队决定去对 ICS-20 Event Bug 进行更深入地测试。
这也让 IRISnet 的核心开发者们发现了比困扰第 1a 阶段的 Consensus Bug 更严重的问题:
https://github.com/cosmos/cosmos-sdk/pull/6269
该 Bug 有可能会影响到 GoZ Hub 的性能; 除此之外,战队还发现了内存溢出、节点停止、查询请求超时等问题。这可能会导致黑客可以在比赛的任何阶段对不同的 Channel 发起攻击。
在向主办方指出当时 Hub 中存在的这个问题后,IRISnet 战队在第 1b 阶段结束后给出了具体的演示——利用该 Bug 尝试对 GoZ Hub 的公开 PRC 节点进行攻击,使大部分公开节点停止运行。
最后,IRISnet 战队针对第 1a 、1b 阶段出色的演示结果被认可,获得了 GoZ 活跃奖:
Announcing the Winners of the Game of Zones Liveness Reward
第 2 阶段
GoZ 第 2 阶段的关注点是吞吐量。也就是说,在自身中继器上传输最多数据到 GoZ Hub 的团队将在这一轮获胜。为了达成这个目标,IRISnet 战队的开发者们对 Relayer 进行了许多改进和优化,主要在以下几个方面:
实现了自动化批量发送跨链交易
实现了自动化批量 relay packet
使用多线程提高查询效率
增加了超时以及交易失败等异常情况的处理
修复最新区块中产生的 packet 无法查询 proof 的问题
尽管主办方对第 2 阶段的正式排名还未发布,但通过 P2P Validator 的非官方计分板我们能看到 IRISnet 战队在 150 多个参赛队伍中排名第四:
https://dash-goz.p2p.org/public/dashboards/qmf48DlWlQHpnuHg3dLvt7My1MkY7UoE5ru1Iljk?org_slug=default
第 3 阶段
第 3 阶段的主要目的是对 IBC 的安全性进行测试,对其他分区(Zone)发起最佳扰乱性、欺骗性的攻击的团队将会是获胜者。
在这一阶段,IRISnet 战队在 GoZ Hub 和 IRIS Hub 之间实现了迷惑式中继(deceptive relay),并模拟了一系列的异常场景用于说明后果和影响:
https://github.com/irisnet/goz/blob/master/phase-3/scenes.md
可在此处看到为验证此结果而执行的过程的演示:
https://github.com/irisnet/goz/blob/master/phase-3/deceptive.md
通过验证关键的异常情景,战队为 Cosmos SDK 和 Relayer 改进做出了充分的贡献。他们提交两个 PR ,对导致该异常情况的问题进行了修复:
https://github.com/cosmos/cosmos-sdk/pull/6337
https://github.com/iqlusioninc/relayer/pull/271
正如第 2 阶段一样,主办方也尚未给出第 3 阶段的正式排名,但(从推特上的消息可知)我很高兴地告诉各位:IRISnet 战队已经获得第 3 阶段的「最具创新&迷惑性状态机设计奖」奖!
✨🏆 Congratulations @irisnetwork for winning Most Innovative/Deceptive State Machine! 🏆✨ pic.twitter.com/XZUsP79rrb
— Game of Zones (@CosmosDevs) June 10, 2020
实至名归,恭喜!
你可以在 Jessy Irwin, Jack Zampolin 和 Zaki Manian 举办的 GoZ 闭幕式回放里找到完整的获胜者名单:
https://www.twitch.tv/videos/646851387
来自 IRISnet 战队的最后致意
在故事快要讲完之际,可以看看我对 IRISnet 战队做的小采访——这次比赛对他们来说意味着什么?
Daniela: 在这次比赛中你们不断提交代码的修订、PR,还发布了 GoZ 网络状态浏览器及其更新版本,甚至还有 IBC 版本的 Rainbow 钱包。你们是如何同时做到这么多事情的?
IRISnet 开发团队:在这次 GoZ 比赛中,我们 IRISnet 团队所有参与人员的工作分为三个方向,分别负责对抗性竞赛、Rainbow-GoZ 钱包、GoZ 网络状态浏览器。也正因为如此,我们每个人都可以不受干扰且完全自主地专注自己的任务。
Daniela: 像一年前的 GoS 一样,GoZ 不但考验着代码,还考验着参赛团队。很显然这次比赛在很短的时间内就带来了令人瞩目的技术进步,诞生了许多创意用例,并让参赛团队不断成长,去熟练使用 IBC 模块并运行中继器。
你们对此有何看法?你们觉得比赛中最具挑战性和最激动人心的事情是什么?
IRISnet 开发团队:这是一个持续 3 周的全球性比赛,参赛的队伍来自不同的时区,比赛中还有各种可能出现的临时情况——这需要我们保持持续思考与精神的高度集中。这对每个团队都是艰巨的挑战。
比赛中 GoZ Hub 各个节点负载非常高,如何在这种情况下保证我们的程序能够稳定运行也是一个巨大的挑战。
同时我们要和各个优秀的团队进行竞争,需要想尽办法优化我们的工具以取得更好的名次,这也是一个令我们十分兴奋的挑战。
Daniela: 投入的工作和时间都只为这一个宏伟的目标——IBC 协议的降临。你们对 GoZ 有什么想法?对未来有什么期待?
IRISnet 开发团队:这次 GoZ 比赛是一个非常好的学习如何使用 IBC 和 Relayer 的机会。在比赛中我们和很多优秀的团队同台竞技,见到了很多优秀的战术和思路,学到了很多。我们非常期望 GoZ 比赛能为将来整个 Cosmos 生态的建立和完善打下坚实的基础。
总结
感谢 IRISnet 战队介绍了他们在 GoZ 中经历的关键性事件和所做的工作。
尽管他们对自己做到的成就保持着谦虚态度,但我不得不说我很认可的是:即使遇到意外情况,他们也有付出额外努力和追求卓越的意愿。
衷心祝贺有着杰出才能、创新灵魂和团队精神的 IRISnet 战队,以及其他参与 GoZ 的团队!在这场比赛中,真正的胜利属于为共同目标而努力的所有人!
来源:COSMOS