Contract - module call
Explanation of executing modules inside a CosmWasm contract using sending Native SCRT as an example.
Sending Native SCRT from a contract is realtively trivial and can be done using the BankMsg::Send message.
This is a contract-to-module call. Any native denoms can be send in this way (ex. native IBC tokens).
#[entry_point]
pub fn execute(
deps: DepsMut,
env: Env,
info: MessageInfo,
msg: ExecuteMsg // this is a custom struct defined in your msg.rs
) -> StdResult<Response> {
// example: send 33 uscrt
let coins_to_send: Vec<Coin> = vec![Coin {
denom: "uscrt".to_string(),
amount: Uint128::from(33u128),
}];
let message = CosmosMsg::Bank(BankMsg::Send {
// replace with recipient of your choice
to_address: info.sender.clone().into_string(),
amount: coins_to_send,
});
let res = Response::new().add_message(message);
Ok(res)
}Having Trouble? Always make sure your contract has enough funds to begin with!
You can send some coins to your contract like this:
You can always see decrypted error messages from the contract like so:
Transaction logs
You can see the spent coins as events when you query for the transaction:
Last updated
Was this helpful?