https://github.com/terra-money/terra-cosmwasm
Terra bindings for CosmWasm
https://github.com/terra-money/terra-cosmwasm
Last synced: 5 months ago
JSON representation
Terra bindings for CosmWasm
- Host: GitHub
- URL: https://github.com/terra-money/terra-cosmwasm
- Owner: terra-money
- Created: 2020-07-06T07:26:08.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-08-29T15:14:36.000Z (about 2 years ago)
- Last Synced: 2025-05-02T13:48:56.709Z (6 months ago)
- Language: Rust
- Size: 395 KB
- Stars: 51
- Watchers: 11
- Forks: 24
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Terra Bindings for CosmWasm
This crate provides Terra-specific bindings to enable your CosmWasm smart contracts to interact with the Terra blockchain by exposing messages and queriers that can be emitted and used from within your contract.
## Installation
Add the following to your smart contract's `Cargo.toml`:
```toml
[dependencies]
terra-cosmwasm = { version = "1.2" }
```
## Contents
Currently, the Terra bindings include:
- Query support for:
- Market
- swap rate between 2 currencies at market price
- Treasury
- current tax cap for a denomination
- current tax rate
- Oracle
- exchange rates for the given base_denom / quote_denoms
- Messages
- `MsgSwap`
- `MsgSwapSend`
## Usage
### Querying
In order to use the query functions enabled by the bindings, create a `TerraQuerier` instance within your contract logic -- in either `init()`, `handle()`, or `query()` entrypoints. You can access all the enabled queries through this object.
```rust
// src/contract.rs
use cosmwasm_std::Coin;
use terra_cosmwasm::{ TerraQuerier, SwapResponse, TaxRateResponse, TaxCapResponse, ExchangeRatesResponse };
...
// handler
pub fn try_something(
deps: &mut Extern,
env: Env,
offer: &Coin
) -> StdResult {
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"])?;
...
}
```
## Creating Messages
**NOTE:** The Terra bindings do not cover messages that have already been implemented by the CosmWasm team, such as staking-related messages and fundamental ones like `MsgSend`.
You may want your contract to perform messages such as `MsgSwap` and `MsgSwapSend` operations at the end of its execution. To do this, create a message using the predefined functions:
- `create_swap_msg`
- `create_swap_send_msg`
And add it to the vector of `messages` in your `HandleResponse` before you return `Ok`.
```rust
use cosmwasm_std::CosmosMsg;
use terra_cosmwasm::{create_swap_msg, TerraMsgWrapper};
...
pub fn try_something(
deps: &mut Extern,
env: Env,
offer: &Coin
) -> StdResult> {
...
let msg: CosmosMsg = create_swap_msg(contract_addr, offer_coin, ask_denom);
let res = HandleResponse {
messages: vec![msg],
log: vec![],
data: None
};
Ok(res)
}
```