use cw_orch::{interface, prelude::*};
use crate::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg};
#[interface(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsg)]
pub struct CounterContract;
impl<Chain: CwEnv> Uploadable for CounterContract<Chain> {
fn wasm(&self) -> WasmPath {
artifacts_dir_from_workspace!()
.find_wasm_path("counter_contract")
.unwrap()
}
fn wrapper(&self) -> Box<dyn MockContract<Empty>> {
Box::new(
ContractWrapper::new_with_empty(
crate::contract::execute,
crate::contract::instantiate,
crate::contract::query,
)
.with_migrate(crate::contract::migrate),
)
}
}
use crate::contract::CONTRACT_NAME;
use cw_orch::anyhow::Result;
use cw_orch::prelude::queriers::Node;
impl CounterContract<Daemon> {
pub fn await_launch(&self) -> Result<()> {
let daemon = self.get_chain();
let rt = daemon.rt_handle.clone();
rt.block_on(async {
let node = daemon.query_client::<Node>();
let mut latest_block = node.latest_block().await.unwrap();
while latest_block.header.height.value() < 100 {
daemon.next_block().unwrap();
latest_block = node.latest_block().await.unwrap();
}
});
let contract = CounterContract::new(CONTRACT_NAME, daemon.clone());
contract.upload().unwrap();
let msg = InstantiateMsg { count: 1i32 };
contract.instantiate(&msg, None, None).unwrap();
Ok(())
}
}