18 个版本 (10 个稳定版)
3.0.0-beta.0 | 2021年12月27日 |
---|---|
2.2.0 | 2021年8月6日 |
2.1.0 | 2021年6月29日 |
1.2.4 | 2021年3月17日 |
1.1.0 | 2020年7月31日 |
#3 在 #terra
每月 1,008 次下载
在 18 个 包中使用 18 个(17 个直接使用)
13KB
210 行
Terra CosmWasm 绑定
本软件包提供了 Terra 特定绑定,使您的 CosmWasm 智能合同能够通过公开的消息和查询器与 Terra 区块链交互,这些消息和查询器可以在您的合同内部发出和使用。
安装
在您的智能合同的 Cargo.toml
中添加以下内容:
[dependencies]
terra-cosmwasm = { version = "2.2" }
内容
目前,Terra 绑定包括:
- 查询支持
- 市场
- 两种货币在市场价格之间的兑换率
- 国库
- 某种面额的当前税收上限
- 当前税率
- 预言机
- 给定 base_denom / quote_denoms 的兑换率
- 市场
- 消息
MsgSwap
MsgSwapSend
使用方法
查询
为了使用绑定提供的查询功能,请在您的合同逻辑中创建一个 TerraQuerier
实例 — 在 init()
、handle()
或 query()
入口点中。您可以通过此对象访问所有启用的查询。
// src/contract.rs
use cosmwasm_std::Coin;
use terra_cosmwasm::{ TerraQuerier, SwapResponse, TaxRateResponse, TaxCapResponse, ExchangeRatesResponse };
...
// handler
pub fn try_something<S: Storage, A: Api, Q: Querier>(
deps: &mut Extern<S, A, Q>,
env: Env,
offer: &Coin
) -> StdResult<HandleResponse> {
let querier = TerraQuerier::new(&deps.querier);
let swap_rate: SwapResponse = querier.query_swap(offer.clone(), "uusd")?;
let tax_cap: TaxCapResponse = querier.query_tax_cap("usdr")?;
let tax_rate: TaxRateResponse = querier.query_tax_rate()?;
let exchange_rates: ExchangeRatesResponse = querier.query_exchange_rates("uusd", vec!["uluna", "ukrw"])?;
...
}
创建消息
注意: Terra 绑定不包含 CosmWasm 团队已经实现的某些消息,如与质押相关的消息和基本消息,例如 MsgSend
。您可能希望您的合同在执行结束时执行 MsgSwap
和 MsgSwapSend
等操作。为此,使用预定义的函数创建一个消息:
创建交换信息
create_swap_send_msg
并将其添加到你的HandleResponse
中的messages
向量中,在你返回Ok
之前。
use cosmwasm_std::CosmosMsg;
use terra_cosmwasm::{create_swap_msg, TerraMsgWrapper};
...
pub fn try_something<S: Storage, A: Api, Q: Querier>(
deps: &mut Extern<S, A, Q>,
env: Env,
offer: &Coin
) -> StdResult<HandleResponse<TerraMsgWrapper>> {
...
let msg: CosmosMsg<TerraMsgWrapper> = create_swap_msg(contract_addr, offer_coin, ask_denom);
let res = HandleResponse {
messages: vec![msg],
log: vec![],
data: None
};
Ok(res)
}
依赖项
~3.5–5.5MB
~114K SLoC