#代币 #发送 #合约 #接收 # #远程 #cw20

bin+lib abstract-cw20-ics20

接收 CW20 代币并通过 ICS20 协议将其发送到远程链的 IBC 合约

5 个版本 (稳定)

3.0.0 2024 年 7 月 11 日
2.0.0 2024 年 5 月 1 日
2.0.0-rc2024 年 4 月 25 日
1.4.0 2024 年 4 月 15 日
1.2.2 2024 年 1 月 24 日

#245 in 魔法豆

Download history 660/week @ 2024-04-16 618/week @ 2024-04-23 946/week @ 2024-04-30 368/week @ 2024-05-07 428/week @ 2024-05-14 621/week @ 2024-05-21 863/week @ 2024-05-28 511/week @ 2024-06-04 1177/week @ 2024-06-11 638/week @ 2024-06-18 626/week @ 2024-06-25 614/week @ 2024-07-02 942/week @ 2024-07-09 783/week @ 2024-07-16 675/week @ 2024-07-23 552/week @ 2024-07-30

3,170 每月下载
2 个 crate 中使用 (通过 abstract-cw-plus-interfac…)

Apache-2.0GPL-3.0-only

120KB
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 规范定义。

值得注意的是,每个通道都有一个在该通道上发送的代币余额。如果收到一个我们不知道的代币名称的转账请求,或者余额大于我们发送的余额,我们将在确认包中返回错误。

依赖项

~5–17MB
~191K SLoC