abstract-app 0.26.1

base app contract implementation
Documentation
use abstract_sdk::features::AbstractRegistryAccess;
use abstract_std::{
    objects::module::{ModuleInfo, ModuleVersion},
    IBC_CLIENT,
};
use cosmwasm_std::Addr;

use crate::{state::ContractError, AppContract, IbcCallbackEndpoint};

impl<
        Error: ContractError,
        CustomInitMsg,
        CustomExecMsg,
        CustomQueryMsg,
        CustomMigrateMsg,
        SudoMsg,
    > IbcCallbackEndpoint
    for AppContract<Error, CustomInitMsg, CustomExecMsg, CustomQueryMsg, CustomMigrateMsg, SudoMsg>
{
    fn ibc_client_addr(&self, deps: cosmwasm_std::Deps) -> Result<Addr, Self::Error> {
        let registry_query_result = self
            .abstract_registry(deps)?
            .query_module(
                ModuleInfo::from_id(
                    IBC_CLIENT,
                    ModuleVersion::from(abstract_ibc_client::contract::CONTRACT_VERSION),
                )?,
                &deps.querier,
            )
            .map_err(Into::<abstract_std::AbstractError>::into)?;

        Ok(registry_query_result.reference.unwrap_native()?)
    }
}