跨链通信协议ibc 1.0 的 rc版本公告


1、概要

自 IBC 上次更新以来,Interchain GmbH 的 IBC 团队一直致力于在 Cosmos SDK 中完成符合 1.0 开发规范的实现。我们与 Informal Systems,Agoric,Akash,Iqlusion,Chorus One,Tendermint 等团队密切合作,设法临时加入了一些最新功能,查明并修复了一些漏洞,添加了广泛的测试,并全面完善代码库文档。大约一个月前,团队完成了 1.0 开发的里程碑。从那时起,我们就与 Informal Systems 团队一起进行了深入的内部代码审核工作,就在几天前,我们完成并合并了最新的审核修复程序,这意味着 IBC 现在已经为即将到来的整个生态范围的 Stargate 升级做好了准备。

本文列举了过去几个月中最重要的协议和开发实施变化,描述了预期的 Stargate IBC 推出计划的两个阶段,并概述了参与方式。

2、功能增加和漏洞修复

最后增加的功能主要集中于满足早期 IBC 应用的需求,并为将来使用 IBC 的区块链以及 IBC 协议本身的升级都铺平了道路。主要亮点:

我们已经对 IBC 的确认模型进行了重构,以支持异步数据包处理,这样就可以立即确认数据包的接收,但是可以在处理发生后的未指定时间段内写入确认,不一定要在同一交易中甚至可以不在同一区块中。这对 Agoric 等平台使用的异步合约执行模型特别有用。在收到数据包后立即确认,可以恢复先前的同步确认功能。

在升级使用 IBC 与其他账本发送或收取信息的账本时,我们试图在最大程度地减少对应用干扰的基础上,制定程序来维护 IBC 功能。涵盖两种升级:一是基于特定链的轻客户端升级(包括「不中断的」,如链 ID 的更改,以及「中断的」,如 Tendermint 区块头结构的更改),二是 IBC 协议本身的升级。前者使用「upgradeClient」功能来进行处理,该功能允许验证人在执行升级之前签署新客户端状态的序列化表示,而后者使用连接握手中的版本协商来进行处理,从而允许链实现较新版本的 IBC 协议(如,支持新的通道类型)以继续与旧版本通信。

  • 修复版本协商

说明变更

https://github.com/cosmos/ics/pull/479

SDK 拉取请求

https://github.com/cosmos/cosmos-sdk/pull/7328

Informal Systems 团队正在进行建模和验证 IBC 协议的工作,在连接和通道握手中使用的版本协商子协议里发现一个错误,从而使恶意中继器(Relayer)可以停止握手或使得链最终以不正确(不同意)的版本结束。我们与 Informal 的研究团队紧密合作,在两次握手中都更新了版本协商协议,在保持灵活的版本选择的基础上,防止这种情况发生。

  • 基于治理的客户端恢复

SDK 架构决策记录

https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-026-ibc-client-recovery-mechanisms.md

SDK 拉取请求

https://github.com/cosmos/cosmos-sdk/pull/7029

为了避免发生由于客户端意外过期或其他错误行为而导致的通证(ICS 20)意外锁定,或其他应用程序状态分离的情况,我们实现了一种机制,可以创建带有选项的 IBC 轻客户端,该选项允许治理系统(如,Cosmos Hub)在常规提案过程和阶段后,如果客户端过期或冻结,可以落实到位新的客户端状态。当然,可以在创建客户端选择是否允许这样的治理重写。

  • 跨链转账面额追踪

SDK 架构决策记录

https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-001-coin-source-tracing.md

SDK 拉取请求

https://github.com/cosmos/cosmos-sdk/pull/6871

为了允许长链的跨链通证转账不会受到面额大小限制,我们针对 ICS 20(通证转账)实施了一种面额追踪方案。收到转账后,ICS 20 模块将使用哈希函数来计算恒定大小的面额,将反向映射存储到通证路径(端口和通道标识符),并将新计算的面额用于 bank 模块内的内部追踪。ICS 20 安全模块与用户交互不受影响。

  • 每个连接的数据包延迟时间

说明变更

https://github.com/cosmos/ics/pull/507

SDK 拉取请求

https://github.com/cosmos/cosmos-sdk/pull/8069

为了在处理数据包之前(可能会导致状态变更),在正确遵循 Tendermint 轻客户端安全模型基础下,预留时间以提交不当行为的证据并处理,我们实现了每个连接的延迟时间,使得在区块头处理过程和数据包处理过程之间强制预留出一定的延迟时间。我们发现了这个问题,并在 Informal Systems 研究团队的协助下设计并完成了修复。

  • 确定性的标识符选择

说明变更一

https://github.com/cosmos/ics/pull/482

说明变更二

https://github.com/cosmos/ics/pull/493

SDK 拉取请求

https://github.com/cosmos/cosmos-sdk/pull/7993

为了防止恶意 Relayer 拒绝特定标识符服务,也为了简化 Relayer 用户体验和消除协议语义上的歧义,现在分别在客户端创建、连接握手和通道握手过程中确定性地选择客户端、连接以及通道的标识符。我们发现了这个问题,并在 Informal Systems 研究团队的协助下设计并完成了修复。

3、Stargate IBC 推出计划的两个阶段
Interchain GmbH 团队认为,IBC 开发实现已准备就绪,可供 Stargate 使用。我们还一直在与 Akash 团队合作,更新 Golang IBC Relayer,以完成最新的上游 SDK 变更,这部分更新已接近完成,但我们仍欢迎更多的测试(尤其是来自潜在 Relayer 运营商的测试)。Stargate 提案相关内容不在本文章的讨论范围之内,一些测试网仍在进行中。发起最终提案的人员需要注意几个必须选择的重要参数——我们建议将 Cosmos Hub 的历史区块头信息保留时间至少设置为一天,将 IBC 的 recv/send 启用为 false,并仅允许 Tendermint 使用轻客户端。

在 Cosmos Hub 上完成 Stargate 升级后,任何人都可以创建 IBC 客户端,连接和通道,但尚无法使用 IBC 的同质化通证转账协议(ICS 20)在枢纽间来回进行通证转账。为了激活跨链转账,第二个参数变更提案也必须通过,并由治理提案来决定何时进行。一旦激活,IBC 转账将完成开放。

4、参与方式

多个测试网仍在进行中——查看 Stargate 代码库并加入 Cosmos Discord 频道获取实时信息。

Stargate 代码库:

https://github.com/cosmosdevs/stargate

Cosmos Discord 频道:

https://discord.gg/vcExX9T

正如先前所发布的,Stargate 漏洞赏金活动正在火热进行中,赏金金额现已翻倍——如果你是查找漏洞的好手,快来加入吧。

您可以通过以下方式找到 Cosmos:

官网:https://cosmos.network

论坛:https://forum.cosmos.network

微信公众号:cosmosnetwork

加微信群:irisnetwork2018 (或扫描下方图片二维码)

英文电报群:https://t.me/cosmosproject

推特(中文):https://twitter.com/cosmoschina

推特(英文):https://twitter.com/cosmos

Medium:https://blog.cosmos.network

微博:http://suo.im/5McvY0

币乎:Cosmos