45 个版本 (6 个稳定版)
2.0.0 | 2024 年 3 月 26 日 |
---|---|
1.1.2 | 2023 年 11 月 23 日 |
1.1.0 | 2023 年 6 月 20 日 |
1.0.1 | 2022 年 12 月 19 日 |
0.6.0-alpha1 | 2021 年 3 月 12 日 |
#1319 in 神奇豆子
6,476 每月下载量
用于 53 个包 (通过 abstract-cw-multi-test)
110KB
2K SLoC
CW20 ICS20
这是一个启用 IBC 的合约,允许我们通过标准的 ICS20 协议将 CW20 代币从一个链发送到另一个链的银行模块。简而言之,它让我们可以用 IBC 发送自定义的 CW20 代币,并在其他链上像使用原生代币一样使用它们。
它仅设计用于发送代币和赎回之前发送的代币。它不会铸造来自外国链的资产所属的代币。这与 Golang 的 ibctransfer
模块不同,但我们正确实现了 ICS20 并返回错误信息... 希望Go端能够正确处理。
工作流程
该合约从最小状态开始。它只存储所有发送的数据包的默认超时时间(秒)。最重要的是,它将本地 IBC 端口绑定以启用通道连接。
外部方首先需要使用此合约作为端点之一创建一个或多个通道。它将使用标准的 ics20 无序通道进行版本协商。一旦建立,它将管理一个已知通道列表。您可以使用 ts-relayer 命令 ibc-setup ics20
创建这些通道。
至少有一个通道后,您可以通过 接收模式 将任何 CW20 代币发送到该合约。接收消息必须包含要发送的通道和远程地址。可以可选地包括自定义超时。
消息
它只接受来自 cw20 合约的 CW20ReceiveMsg。随该消息发送的数据必须是 JSON 序列化的 TransferMsg。
pub struct TransferMsg {
/// The local channel to send the packets on
pub channel: String,
/// The remote address to send to
/// Don't use HumanAddress as this will likely have a different Bech32 prefix than we use
/// and cannot be validated locally
pub remote_address: String,
/// How long the packet lives in seconds. If not specified, use default_timeout
pub timeout: Option<u64>,
}
此外,它支持通过 ExecuteMsg::Transfer(TransferMsg)
直接发送本地代币。您必须与转账消息一起发送 恰好一个 币种,这笔金额将被转移到远程主机。
查询
查询相对于此合约已建立的通道才有意义。
Port{}
- 返回此合约已绑定的端口 ID,以便您可以创建通道。此信息可以通过 wasmd 合约信息查询获取,但我们在这里提供了一个方便的查询。ListChannels{}
- 返回此合约上创建的所有通道的(目前未分页的)列表。返回它们的本地 channelId 以及一些基本元数据,如远程端口/通道和它们运行在其上的连接。Channel{id}
- 返回一个特定通道的更详细信息。除了列表视图中可用信息外,它还返回该通道上的当前未结余额以及该通道上曾经发送的总金额。
IBC 响应
这些由 ICS20 规范定义。
值得注意的是,每个通道都有一个通过该通道发送的代币余额。如果对于未知代币或大于我们已发送的余额的转账请求,我们将返回错误消息。
依赖关系
~4–5.5MB
~122K SLoC