use cosmwasm_schema::QueryResponses;
use cosmwasm_std::{Addr, Binary};
use crate::{
account::{self, ModuleInstallConfig},
ibc_client::InstalledModuleIdentification,
objects::{account::AccountId, module::ModuleInfo, TruncatedChainId},
};
pub mod state {
use cw_storage_plus::{Item, Map};
use super::*;
use crate::objects::storage_namespaces;
pub const CHAIN_PROXIES: Map<&TruncatedChainId, Addr> =
Map::new(storage_namespaces::ibc_host::CHAIN_PROXIES);
pub const REVERSE_CHAIN_PROXIES: Map<&Addr, TruncatedChainId> =
Map::new(storage_namespaces::ibc_host::REVERSE_CHAIN_PROXIES);
pub const TEMP_ACTION_AFTER_CREATION: Item<ActionAfterCreationCache> =
Item::new(storage_namespaces::ibc_host::TEMP_ACTION_AFTER_CREATION);
#[cosmwasm_schema::cw_serde]
pub struct ActionAfterCreationCache {
pub client_account_address: String,
pub account_id: AccountId,
pub action: HostAction,
pub chain_name: TruncatedChainId,
}
}
#[cosmwasm_schema::cw_serde]
pub struct InstantiateMsg {}
#[cosmwasm_schema::cw_serde]
pub struct MigrateMsg {}
#[cosmwasm_schema::cw_serde]
#[non_exhaustive]
pub enum InternalAction {
Register {
name: Option<String>,
description: Option<String>,
link: Option<String>,
namespace: Option<String>,
install_modules: Vec<ModuleInstallConfig>,
},
}
#[cosmwasm_schema::cw_serde]
#[non_exhaustive]
pub enum HelperAction {
SendAllBack,
}
#[cosmwasm_schema::cw_serde]
pub enum HostAction {
Dispatch {
account_msgs: Vec<account::ExecuteMsg>,
},
Internal(InternalAction),
Helpers(HelperAction),
}
#[cosmwasm_schema::cw_serde]
#[derive(cw_orch::ExecuteFns)]
pub enum ExecuteMsg {
UpdateOwnership(cw_ownable::Action),
RegisterChainProxy {
chain: TruncatedChainId,
proxy: String,
},
RemoveChainProxy {
chain: TruncatedChainId,
},
#[cw_orch(fn_name("ibc_execute"))]
Execute {
account_id: AccountId,
account_address: String,
action: HostAction,
},
ModuleExecute {
source_module: InstalledModuleIdentification,
target_module: ModuleInfo,
msg: Binary,
},
Fund {
src_account: AccountId,
src_chain: TruncatedChainId,
},
}
#[cosmwasm_schema::cw_serde]
#[derive(QueryResponses, cw_orch::QueryFns)]
pub enum QueryMsg {
#[returns(cw_ownable::Ownership<Addr> )]
Ownership {},
#[returns(ConfigResponse)]
Config {},
#[returns(ClientProxiesResponse)]
ClientProxies {
start_after: Option<String>,
limit: Option<u32>,
},
#[returns(ClientProxyResponse)]
ClientProxy { chain: String },
#[returns(Binary)]
ModuleQuery {
target_module: InstalledModuleIdentification,
msg: Binary,
},
}
#[cosmwasm_schema::cw_serde]
pub struct ConfigResponse {
pub ans_host_address: Addr,
pub module_factory_address: Addr,
pub registry_address: Addr,
}
#[cosmwasm_schema::cw_serde]
pub struct ClientProxiesResponse {
pub chains: Vec<(TruncatedChainId, Addr)>,
}
#[cosmwasm_schema::cw_serde]
pub struct ClientProxyResponse {
pub proxy: Addr,
}