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
6,564 每月下载量
用于 99 个crate(直接使用46个)
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()))
}
在消息中使用
Asset
和AssetList
各自都提供了一个未经验证的对应版本,其中包含未经验证的地址和/或代币符号,并实现了允许它们被序列化为JSON的特性和功能,因此可以直接用于Cosmos消息
use cosmwasm_schema::cw_serde;
use cw_asset::AssetUnchecked;
#[cw_serde]
pub enum ExecuteMsg {
Deposit {
asset: AssetUnchecked,
},
}
虽然Asset
和AssetList
也实现了相关的特性,因此也可以用于消息,但并不推荐这样做;不要信任消息中传递的地址是否有效是一个良好的安全实践。相反,也要自行验证它们
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