#cosmwasm #terra #cosmwasm-contracts #bindings #module #smart-contracts #blockchain

terra-cosmwasm

为 CosmWasm 合同绑定 Terra 核心自定义模块的调用

18 个版本 (10 个稳定版)

3.0.0-beta.02021年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

Download history 273/week @ 2024-04-22 258/week @ 2024-04-29 230/week @ 2024-05-06 264/week @ 2024-05-13 213/week @ 2024-05-20 258/week @ 2024-05-27 224/week @ 2024-06-03 178/week @ 2024-06-10 310/week @ 2024-06-17 223/week @ 2024-06-24 26/week @ 2024-07-01 98/week @ 2024-07-08 328/week @ 2024-07-15 313/week @ 2024-07-22 180/week @ 2024-07-29 166/week @ 2024-08-05

每月 1,008 次下载
18 包中使用 18 个(17 个直接使用)

Apache-2.0

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。您可能希望您的合同在执行结束时执行 MsgSwapMsgSwapSend 等操作。为此,使用预定义的函数创建一个消息: ​

  • 创建交换信息
  • 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