abstract-boot 0.6.2

Abstract deployment helpers with BOOT
Documentation
use crate::{
    AnsHost, DexApi, IbcClient, Manager, ModuleFactory, OSFactory, Proxy, Subscription,
    TMintStakingApi, VersionControl, ETF as EtfBoot,
};
use abstract_os::IBC_CLIENT;
use abstract_os::{
    ANS_HOST, ETF, EXCHANGE, MANAGER, MODULE_FACTORY, OS_FACTORY, PROXY, SUBSCRIPTION,
    TENDERMINT_STAKING, VERSION_CONTROL,
};
use boot_core::{state::StateInterface, BootEnvironment, IndexResponse, TxHandler};

#[allow(clippy::type_complexity)]
pub fn get_native_contracts<Chain: BootEnvironment>(
    chain: &Chain,
) -> (
    AnsHost<Chain>,
    OSFactory<Chain>,
    VersionControl<Chain>,
    ModuleFactory<Chain>,
    IbcClient<Chain>,
)
where
    <Chain as TxHandler>::Response: IndexResponse,
{
    let ans_host = AnsHost::new(ANS_HOST, chain.clone());
    let os_factory = OSFactory::new(OS_FACTORY, chain.clone());
    let version_control = VersionControl::new(VERSION_CONTROL, chain.clone());
    let module_factory = ModuleFactory::new(MODULE_FACTORY, chain.clone());
    let ibc_client = IbcClient::new(IBC_CLIENT, chain.clone());
    (
        ans_host,
        os_factory,
        version_control,
        module_factory,
        ibc_client,
    )
}

pub fn get_os_core_contracts<Chain: BootEnvironment>(
    chain: &Chain,
    os_id: Option<u32>,
) -> (Manager<Chain>, Proxy<Chain>)
where
    <Chain as TxHandler>::Response: IndexResponse,
{
    if let Some(os_id) = os_id {
        let version_control = VersionControl::new(VERSION_CONTROL, chain.clone());
        let core = version_control.get_os_core(os_id).unwrap();
        chain.state().set_address(MANAGER, &core.manager);
        chain.state().set_address(PROXY, &core.proxy);
        let manager = Manager::new(MANAGER, chain.clone());
        let proxy = Proxy::new(PROXY, chain.clone());
        (manager, proxy)
    } else {
        let manager = Manager::new(MANAGER, chain.clone());
        let proxy = Proxy::new(PROXY, chain.clone());
        (manager, proxy)
    }
}

pub fn get_apps<Chain: BootEnvironment>(chain: &Chain) -> (EtfBoot<Chain>, Subscription<Chain>)
where
    <Chain as TxHandler>::Response: IndexResponse,
{
    let liquidity_interface = EtfBoot::new(ETF, chain.clone());
    let subscription = Subscription::new(SUBSCRIPTION, chain.clone());
    (liquidity_interface, subscription)
}

pub fn get_apis<Chain: BootEnvironment>(chain: &Chain) -> (DexApi<Chain>, TMintStakingApi<Chain>)
where
    <Chain as TxHandler>::Response: IndexResponse,
{
    let dex_api = DexApi::new(EXCHANGE, chain.clone());
    let staking_api = TMintStakingApi::new(TENDERMINT_STAKING, chain.clone());
    (dex_api, staking_api)
}