#assets #cosmos #helper #coin #tokens #native #representation

cw-asset

与Cosmos资产(原生币和CW20代币)交互的辅助库

19个版本 (稳定)

新版本 4.0.0 2024年8月23日
3.1.1 2024年2月13日
3.1.0 2024年1月11日
3.0.0 2023年2月3日
0.3.1 2021年12月31日

#4#coin

Download history 1090/week @ 2024-05-03 1566/week @ 2024-05-10 1388/week @ 2024-05-17 1729/week @ 2024-05-24 1321/week @ 2024-05-31 2070/week @ 2024-06-07 1435/week @ 2024-06-14 2004/week @ 2024-06-21 1689/week @ 2024-06-28 1606/week @ 2024-07-05 1636/week @ 2024-07-12 1426/week @ 2024-07-19 1630/week @ 2024-07-26 1653/week @ 2024-08-02 1624/week @ 2024-08-09 1282/week @ 2024-08-16

6,564 每月下载量
用于 99 个crate(直接使用46个)

Apache-2.0

76KB
1.5K SLoC

cw-asset

Cosmos各种可交易资产(原生币和CW20代币)的统一表示,以及与它们交互的辅助函数

许可证

本仓库内容开源,采用Apache 2.0许可证。


lib.rs:

Cosmos各种可交易资产(原生币和CW20代币)的统一表示,以及与它们交互的辅助函数

基本用法

以下代码生成消息,向接收者发送一些SDK硬币和CW20代币

use cosmwasm_std::{Api, Response};
use cw_asset::{Asset, AssetError};

fn transfer_two_assets(api: &dyn Api) -> Result<Response, AssetError> {
    let asset1 = Asset::native("uusd", 12345u128);
    let msg1 = asset1.transfer_msg("recipient_addr")?;

    let asset2 = Asset::cw20(api.addr_validate("token_addr")?, 67890u128);
    let msg2 = asset1.transfer_msg("recipient_addr")?;

    Ok(Response::new()
        .add_message(msg1)
        .add_message(msg2)
        .add_attribute("asset_sent", asset1.to_string())
        .add_attribute("asset_sent", asset2.to_string()))
}

资产列表

还提供了一个AssetList结构体,用于同时处理多个资产

use cosmwasm_std::{Api, Response};
use cw_asset::{Asset, AssetError, AssetList};

fn transfer_multiple_assets(api: &dyn Api) -> Result<Response, AssetError> {
    let assets = AssetList::from(vec![
        Asset::native("uusd", 12345u128),
        Asset::cw20(api.addr_validate("token_addr")?, 67890u128),
    ]);

    let msgs = assets.transfer_msgs(api.addr_validate("recipient_addr")?)?;

    Ok(Response::new().add_messages(msgs).add_attribute("assets_sent", assets.to_string()))
}

在消息中使用

AssetAssetList各自都提供了一个未经验证的对应版本,其中包含未经验证的地址和/或代币符号,并实现了允许它们被序列化为JSON的特性和功能,因此可以直接用于Cosmos消息

use cosmwasm_schema::cw_serde;
use cw_asset::AssetUnchecked;

#[cw_serde]
pub enum ExecuteMsg {
    Deposit {
        asset: AssetUnchecked,
    },
}

虽然AssetAssetList也实现了相关的特性,因此也可以用于消息,但并不推荐这样做;不要信任消息中传递的地址是否有效是一个良好的安全实践。相反,也要自行验证它们

use cosmwasm_std::{Api, StdResult};
use cw_asset::{Asset, AssetError, AssetUnchecked};

const ACCEPTED_DENOMS: &[&str] = &["uatom", "uosmo", "uluna"];

fn validate_deposit(api: &dyn Api, asset_unchecked: AssetUnchecked) -> Result<(), AssetError> {
    let asset: Asset = asset_unchecked.check(api, Some(ACCEPTED_DENOMS))?;
    Ok(())
}

依赖关系

~4–7.5MB
~152K SLoC