pub mod state {
use std::collections::HashSet;
use cosmwasm_std::Addr;
use cw_storage_plus::{Item, Map};
pub use crate::objects::account::ACCOUNT_ID;
use crate::objects::module::ModuleId;
pub type SuspensionStatus = bool;
#[cosmwasm_schema::cw_serde]
pub struct Config {
pub version_control_address: Addr,
pub module_factory_address: Addr,
}
#[cosmwasm_schema::cw_serde]
pub struct AccountInfo {
pub name: String,
pub chain_id: String,
pub description: Option<String>,
pub link: Option<String>,
}
pub const SUSPENSION_STATUS: Item<SuspensionStatus> = Item::new("\u{0}{12}is_suspended");
pub const CONFIG: Item<Config> = Item::new("\u{0}{6}config");
pub const INFO: Item<AccountInfo> = Item::new("info");
pub const ACCOUNT_MODULES: Map<ModuleId, Addr> = Map::new("modules");
pub const DEPENDENTS: Map<ModuleId, HashSet<String>> = Map::new("dependents");
pub const SUB_ACCOUNTS: Map<u32, cosmwasm_std::Empty> = Map::new("sub_accs");
pub const REMOVE_ADAPTER_AUTHORIZED_CONTEXT: Item<u64> = Item::new("rm_a_auth");
}
use cosmwasm_schema::QueryResponses;
use cosmwasm_std::{Addr, Binary};
use cw2::ContractVersion;
use self::state::AccountInfo;
use crate::{
manager::state::SuspensionStatus,
objects::{
account::AccountId,
gov_type::{GovAction, GovernanceDetails, TopLevelOwnerResponse},
module::ModuleInfo,
ownership::Ownership,
AssetEntry,
},
};
#[cosmwasm_schema::cw_serde]
pub struct MigrateMsg {}
#[cosmwasm_schema::cw_serde]
pub struct InstantiateMsg {
pub account_id: AccountId,
pub owner: GovernanceDetails<String>,
pub proxy_addr: String,
pub version_control_address: String,
pub module_factory_address: String,
pub name: String,
pub description: Option<String>,
pub link: Option<String>,
pub install_modules: Vec<ModuleInstallConfig>,
}
#[cosmwasm_schema::cw_serde]
pub struct CallbackMsg {}
#[cosmwasm_schema::cw_serde]
#[non_exhaustive]
pub enum InternalConfigAction {
UpdateModuleAddresses {
to_add: Option<Vec<(String, String)>>,
to_remove: Option<Vec<String>>,
},
}
#[cosmwasm_schema::cw_serde]
#[non_exhaustive]
pub enum UpdateSubAccountAction {
UnregisterSubAccount { id: u32 },
RegisterSubAccount { id: u32 },
}
#[non_exhaustive]
#[cosmwasm_schema::cw_serde]
pub struct ModuleInstallConfig {
pub module: ModuleInfo,
pub init_msg: Option<Binary>,
}
impl ModuleInstallConfig {
pub fn new(module: ModuleInfo, init_msg: Option<Binary>) -> Self {
Self { module, init_msg }
}
}
#[cosmwasm_schema::cw_serde]
#[derive(cw_orch::ExecuteFns)]
pub enum ExecuteMsg {
#[cw_orch(payable)]
ExecOnModule { module_id: String, exec_msg: Binary },
UpdateInternalConfig(Binary),
#[cw_orch(payable)]
InstallModules {
modules: Vec<ModuleInstallConfig>,
},
UninstallModule { module_id: String },
Upgrade {
modules: Vec<(ModuleInfo, Option<Binary>)>,
},
#[cw_orch(payable)]
CreateSubAccount {
name: String,
description: Option<String>,
link: Option<String>,
base_asset: Option<AssetEntry>,
namespace: Option<String>,
install_modules: Vec<ModuleInstallConfig>,
account_id: Option<u32>,
},
UpdateInfo {
name: Option<String>,
description: Option<String>,
link: Option<String>,
},
UpdateStatus { is_suspended: Option<bool> },
UpdateSubAccount(UpdateSubAccountAction),
Callback(CallbackMsg),
UpdateOwnership(GovAction),
}
#[cosmwasm_schema::cw_serde]
#[derive(QueryResponses, cw_orch::QueryFns)]
pub enum QueryMsg {
#[returns(ModuleVersionsResponse)]
ModuleVersions { ids: Vec<String> },
#[returns(ModuleAddressesResponse)]
ModuleAddresses { ids: Vec<String> },
#[returns(ModuleInfosResponse)]
ModuleInfos {
start_after: Option<String>,
limit: Option<u8>,
},
#[returns(ConfigResponse)]
Config {},
#[returns(InfoResponse)]
Info {},
#[returns(SubAccountIdsResponse)]
SubAccountIds {
start_after: Option<u32>,
limit: Option<u8>,
},
#[returns(TopLevelOwnerResponse)]
TopLevelOwner {},
#[returns(Ownership<String>)]
Ownership {},
}
#[cosmwasm_schema::cw_serde]
pub struct ModuleVersionsResponse {
pub versions: Vec<ContractVersion>,
}
#[cosmwasm_schema::cw_serde]
pub struct ModuleAddressesResponse {
pub modules: Vec<(String, Addr)>,
}
#[cosmwasm_schema::cw_serde]
pub struct ConfigResponse {
pub account_id: AccountId,
pub is_suspended: SuspensionStatus,
pub version_control_address: Addr,
pub module_factory_address: Addr,
}
#[cosmwasm_schema::cw_serde]
pub struct InfoResponse {
pub info: AccountInfo,
}
#[cosmwasm_schema::cw_serde]
pub struct ManagerModuleInfo {
pub id: String,
pub version: ContractVersion,
pub address: Addr,
}
#[cosmwasm_schema::cw_serde]
pub struct ModuleInfosResponse {
pub module_infos: Vec<ManagerModuleInfo>,
}
#[cosmwasm_schema::cw_serde]
pub struct SubAccountIdsResponse {
pub sub_accounts: Vec<u32>,
}