abstract_adapter/endpoints/
ibc_callback.rs

1use abstract_sdk::{base::IbcCallbackEndpoint, features::AbstractRegistryAccess};
2use abstract_std::{
3    objects::module::{ModuleInfo, ModuleVersion},
4    AbstractError, IBC_CLIENT,
5};
6use cosmwasm_std::{Addr, Deps};
7
8use crate::{state::ContractError, AdapterContract};
9
10impl<Error: ContractError, CustomInitMsg, CustomExecMsg, CustomQueryMsg, SudoMsg>
11    IbcCallbackEndpoint
12    for AdapterContract<Error, CustomInitMsg, CustomExecMsg, CustomQueryMsg, SudoMsg>
13{
14    fn ibc_client_addr(&self, deps: Deps) -> Result<Addr, Self::Error> {
15        let registry_query_result = self
16            .abstract_registry(deps)?
17            .query_module(
18                ModuleInfo::from_id(
19                    IBC_CLIENT,
20                    ModuleVersion::from(abstract_ibc_client::contract::CONTRACT_VERSION),
21                )?,
22                &deps.querier,
23            )
24            .map_err(Into::<AbstractError>::into)?;
25
26        Ok(registry_query_result.reference.unwrap_native()?)
27    }
28}