#tokens #send #contract #receive #chain #remote #enabled

bin+lib cw20-ics20

启用 IBC 的合约,接收 CW20 代币并将它们通过 ICS20 发送到远程链

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-alpha12021 年 3 月 12 日

#1319 in 神奇豆子

Download history 1270/week @ 2024-03-13 752/week @ 2024-03-20 852/week @ 2024-03-27 1178/week @ 2024-04-03 768/week @ 2024-04-10 1092/week @ 2024-04-17 1470/week @ 2024-04-24 1044/week @ 2024-05-01 1135/week @ 2024-05-08 947/week @ 2024-05-15 1168/week @ 2024-05-22 1717/week @ 2024-05-29 1367/week @ 2024-06-05 1684/week @ 2024-06-12 1688/week @ 2024-06-19 1287/week @ 2024-06-26

6,476 每月下载量
用于 53 个包 (通过 abstract-cw-multi-test)

Apache-2.0

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