1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use crate::{contract::ContractCodeReference, state::ChainState, BootError, IndexResponse};
use cosmwasm_std::{Addr, BlockInfo, Coin, Empty};
use serde::{de::DeserializeOwned, Serialize};
use std::fmt::Debug;
pub type TxResponse<Chain> = <Chain as TxHandler>::Response;
pub trait TxHandler: ChainState + Clone {
type Response: IndexResponse + Debug;
type Error: Into<BootError> + Debug;
fn sender(&self) -> Addr;
fn wait_blocks(&self, amount: u64) -> Result<(), Self::Error>;
fn next_block(&self) -> Result<(), Self::Error>;
fn block_info(&self) -> Result<BlockInfo, Self::Error>;
fn execute<E: Serialize + Debug>(
&self,
exec_msg: &E,
coins: &[Coin],
contract_address: &Addr,
) -> Result<Self::Response, Self::Error>;
fn instantiate<I: Serialize + Debug>(
&self,
code_id: u64,
init_msg: &I,
label: Option<&str>,
admin: Option<&Addr>,
coins: &[cosmwasm_std::Coin],
) -> Result<Self::Response, Self::Error>;
fn query<Q: Serialize + Debug, T: Serialize + DeserializeOwned>(
&self,
query_msg: &Q,
contract_address: &Addr,
) -> Result<T, Self::Error>;
fn migrate<M: Serialize + Debug>(
&self,
migrate_msg: &M,
new_code_id: u64,
contract_address: &Addr,
) -> Result<Self::Response, Self::Error>;
fn upload(
&self,
contract_source: &mut ContractCodeReference<Empty>,
) -> Result<Self::Response, Self::Error>;
}