abstract_manager/
migrate.rs

1use abstract_std::{
2    manager::{
3        state::{AccountInfo, CONFIG, INFO},
4        MigrateMsg,
5    },
6    objects::{gov_type::GovernanceDetails, module_version::assert_contract_upgrade, ownership},
7    MANAGER,
8};
9use cosmwasm_std::{DepsMut, Env};
10use cw2::set_contract_version;
11use cw_storage_plus::Item;
12use semver::Version;
13
14use crate::{
15    commands::ManagerResponse,
16    contract::{ManagerResult, CONTRACT_VERSION},
17};
18
19/// Abstract Account details.
20#[cosmwasm_schema::cw_serde]
21struct AccountInfo0_22 {
22    pub name: String,
23    pub governance_details: GovernanceDetails<String>,
24    pub chain_id: String,
25    pub description: Option<String>,
26    pub link: Option<String>,
27}
28
29const INFO0_22: Item<AccountInfo0_22> = Item::new("\u{0}{4}info");
30
31#[cfg_attr(feature = "export", cosmwasm_std::entry_point)]
32pub fn migrate(mut deps: DepsMut, _env: Env, _msg: MigrateMsg) -> ManagerResult {
33    // If old account info stored that includes governance details
34    // We need to update account info and store new ownership
35    if let Some(info) = INFO0_22.may_load(deps.storage)? {
36        // Update account info
37        INFO.save(
38            deps.storage,
39            &AccountInfo {
40                name: info.name,
41                chain_id: info.chain_id,
42                description: info.description,
43                link: info.link,
44            },
45        )?;
46        // Update ownership
47        let config = CONFIG.load(deps.storage)?;
48        ownership::initialize_owner(
49            deps.branch(),
50            info.governance_details,
51            config.version_control_address,
52        )?;
53    }
54
55    let version: Version = CONTRACT_VERSION.parse().unwrap();
56
57    assert_contract_upgrade(deps.storage, MANAGER, version)?;
58    set_contract_version(deps.storage, MANAGER, CONTRACT_VERSION)?;
59    Ok(ManagerResponse::action("migrate"))
60}