abstract_std/native/ibc/
ibc_host.rs1use cosmwasm_schema::QueryResponses;
2use cosmwasm_std::{Addr, Binary};
3
4use crate::{
5 account::{self, ModuleInstallConfig},
6 ibc_client::InstalledModuleIdentification,
7 objects::{account::AccountId, module::ModuleInfo, TruncatedChainId},
8};
9
10pub mod state {
11 use cw_storage_plus::{Item, Map};
12
13 use super::*;
14 use crate::objects::storage_namespaces;
15
16 pub const CHAIN_PROXIES: Map<&TruncatedChainId, Addr> =
18 Map::new(storage_namespaces::ibc_host::CHAIN_PROXIES);
19 pub const REVERSE_CHAIN_PROXIES: Map<&Addr, TruncatedChainId> =
20 Map::new(storage_namespaces::ibc_host::REVERSE_CHAIN_PROXIES);
21
22 pub const TEMP_ACTION_AFTER_CREATION: Item<ActionAfterCreationCache> =
24 Item::new(storage_namespaces::ibc_host::TEMP_ACTION_AFTER_CREATION);
25
26 #[cosmwasm_schema::cw_serde]
27 pub struct ActionAfterCreationCache {
28 pub client_account_address: String,
29 pub account_id: AccountId,
30 pub action: HostAction,
31 pub chain_name: TruncatedChainId,
32 }
33}
34#[cosmwasm_schema::cw_serde]
37pub struct InstantiateMsg {}
38
39#[cosmwasm_schema::cw_serde]
40pub struct MigrateMsg {}
41
42#[cosmwasm_schema::cw_serde]
44#[non_exhaustive]
45pub enum InternalAction {
46 Register {
48 name: Option<String>,
49 description: Option<String>,
50 link: Option<String>,
51 namespace: Option<String>,
52 install_modules: Vec<ModuleInstallConfig>,
53 },
54}
55
56#[cosmwasm_schema::cw_serde]
57#[non_exhaustive]
58pub enum HelperAction {
59 SendAllBack,
60}
61
62#[cosmwasm_schema::cw_serde]
64pub enum HostAction {
65 Dispatch {
68 account_msgs: Vec<account::ExecuteMsg>,
69 },
70 Internal(InternalAction),
72 Helpers(HelperAction),
74}
75#[cosmwasm_schema::cw_serde]
79#[derive(cw_orch::ExecuteFns)]
80pub enum ExecuteMsg {
81 UpdateOwnership(cw_ownable::Action),
82 RegisterChainProxy {
85 chain: TruncatedChainId,
86 proxy: String,
87 },
88 RemoveChainProxy {
90 chain: TruncatedChainId,
91 },
92 #[cw_orch(fn_name("ibc_execute"))]
95 Execute {
96 account_id: AccountId,
97 account_address: String,
100 action: HostAction,
101 },
102 ModuleExecute {
105 source_module: InstalledModuleIdentification,
106 target_module: ModuleInfo,
107 msg: Binary,
108 },
109 Fund {
111 src_account: AccountId,
112 src_chain: TruncatedChainId,
113 },
114}
115
116#[cosmwasm_schema::cw_serde]
118#[derive(QueryResponses, cw_orch::QueryFns)]
119pub enum QueryMsg {
120 #[returns(cw_ownable::Ownership<Addr> )]
123 Ownership {},
124 #[returns(ConfigResponse)]
126 Config {},
127 #[returns(ClientProxiesResponse)]
130 ClientProxies {
131 start_after: Option<String>,
132 limit: Option<u32>,
133 },
134 #[returns(ClientProxyResponse)]
137 ClientProxy { chain: String },
138 #[returns(Binary)]
140 ModuleQuery {
141 target_module: InstalledModuleIdentification,
142 msg: Binary,
143 },
144}
145
146#[cosmwasm_schema::cw_serde]
147pub struct ConfigResponse {
148 pub ans_host_address: Addr,
149 pub module_factory_address: Addr,
150 pub registry_address: Addr,
151}
152
153#[cosmwasm_schema::cw_serde]
154pub struct ClientProxiesResponse {
155 pub chains: Vec<(TruncatedChainId, Addr)>,
156}
157
158#[cosmwasm_schema::cw_serde]
159pub struct ClientProxyResponse {
160 pub proxy: Addr,
161}