- 链
- IBC 应用
- Relayer
- IBC 轻客户端
v3.0.0)升级到支持该特性的版本(例如 v3.2.0)时,就需要本文档。对于 v1.x 发布线中小于 v1.5.0 的所有 ibc-go 版本、v2.x 发布线中小于 v2.3.0 的版本,以及 v3.x 发布线中小于 v3.1.0 的版本,都不支持基础 denom 中包含斜杠的代币进行 IBC 转账。因此,在升级时需要执行本文档中描述的原地或创世迁移。
如果链在升级支持该特性之前接收到基础 denom 中带斜杠的代币,接收过程可能会通过,但 trace 信息会不正确。
例如,如果基础 denom testcoin/testcoin/testcoin 被发送到一条不支持基础 denom 中包含斜杠的链上,接收将会成功。然而,接收链上存储的 trace 信息将会是:Trace: "transfer/{channel-id}/testcoin/testcoin", BaseDenom: "testcoin"。
当链升级为完全支持带斜杠的 denom 时,必须修正这些错误的 trace 信息。
为此,链的二进制程序应包含一个迁移脚本,在链从不支持基础 denom 中包含斜杠升级为支持该特性时执行。
链
ICS20 - Transfer
Transfer 模块现在将支持基础 denom 中包含斜杠,因此我们必须遍历当前的 traces,检查其中是否存在格式错误的条目,并修正 trace 信息。升级提案
创世迁移
如果链选择通过导出创世状态的方式为基础 denom 中的斜杠提供支持,那么必须在创世迁移期间修正 trace 信息。 所需的迁移代码可能如下所示:This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG. Any changes that must be done by a user of ibc-go should be documented here. There are four sections based on the four potential user groups of this document:
- Chains
- IBC Apps
- Relayers
- IBC Light Clients
testcoin/testcoin/testcoin is sent to a chain that does not support slashes in the base denom, the receive will be successful. However, the trace information stored on the receiving chain will be: Trace: "transfer/{channel-id}/testcoin/testcoin", BaseDenom: "testcoin".
This incorrect trace information must be corrected when the chain does upgrade to fully supporting denominations with slashes.
To do so, chain binaries should include a migration script that will run when the chain upgrades from not supporting base denominations with slashes to supporting base denominations with slashes.