use cosmwasm_std::coins;
use counter_contract::{
msg::{ExecuteMsg, GetCountResponse, InstantiateMsg, QueryMsg},
CounterContract, CounterExecuteMsgFns, CounterQueryMsgFns,
};
use cw_orch::prelude::*;
use cw_orch_traits::Stargate;
use osmosis_std::types::{
cosmos::base::v1beta1::Coin,
osmosis::tokenfactory::v1beta1::{MsgCreateDenom, MsgMint},
};
use prost::Message;
use prost_types::Any;
pub const SUBDENOM: &str = "complex-test";
pub fn main() {
dotenv::dotenv().unwrap();
env_logger::init();
let daemon = Daemon::builder(cw_orch::daemon::networks::UNI_6) .build()
.unwrap();
let counter = CounterContract::new(daemon.clone());
let upload_res = counter.upload();
assert!(upload_res.is_ok());
let init_res = counter.instantiate(
&InstantiateMsg { count: 0 },
Some(&counter.environment().sender_addr()),
&[],
);
assert!(init_res.is_ok());
let exec_res = counter.execute(&ExecuteMsg::Increment {}, &[]);
assert!(exec_res.is_ok());
let query_res = counter.query::<GetCountResponse>(&QueryMsg::GetCount {});
assert!(query_res.is_ok());
let exec_res = counter.increment();
assert!(exec_res.is_ok());
let query_res = counter.get_count();
assert!(query_res.is_ok());
let sender_addr = daemon.sender_addr().to_string();
daemon
.commit_any(
vec![Any {
type_url: MsgCreateDenom::TYPE_URL.to_string(),
value: MsgCreateDenom {
sender: sender_addr.clone(),
subdenom: SUBDENOM.to_string(),
}
.encode_to_vec(),
}],
None,
)
.unwrap();
let denom = format!("factory/{}/{}", sender_addr, SUBDENOM);
daemon
.commit_any(
vec![Any {
type_url: MsgMint::TYPE_URL.to_string(),
value: MsgMint {
sender: sender_addr.clone(),
amount: Some(Coin {
amount: "100000".to_string(),
denom: denom.clone(),
}),
mint_to_address: sender_addr.clone(),
}
.encode_to_vec(),
}],
None,
)
.unwrap();
let contract_addr = counter.address().unwrap();
daemon
.bank_send(&contract_addr, &coins(50_000, denom.clone()))
.unwrap();
assert_eq!(
daemon
.bank_querier()
.balance(&contract_addr, Some(denom.clone()))
.unwrap(),
coins(50_000, denom.clone())
);
}