astro_assembly/
migration.rs1#![cfg(not(tarpaulin_include))]
2
3use cosmwasm_schema::cw_serde;
4use cosmwasm_std::{
5 Addr, CosmosMsg, DepsMut, Empty, Env, Order, Response, StdResult, Uint128, Uint64,
6};
7use cw2::{get_contract_version, set_contract_version};
8use cw_storage_plus::Map;
9
10use astroport_governance::assembly::{Proposal, ProposalStatus};
11
12use crate::contract::{CONTRACT_NAME, CONTRACT_VERSION};
13use crate::error::ContractError;
14use crate::state::PROPOSALS;
15
16#[cw_serde]
17pub struct OldProposal {
18 pub proposal_id: Uint64,
19 pub submitter: Addr,
20 pub status: ProposalStatus,
21 pub for_power: Uint128,
22 pub outpost_for_power: Uint128,
23 pub against_power: Uint128,
24 pub outpost_against_power: Uint128,
25 pub start_block: u64,
26 pub start_time: u64,
27 pub end_block: u64,
28 pub delayed_end_block: u64,
29 pub expiration_block: u64,
30 pub title: String,
31 pub description: String,
32 pub link: Option<String>,
33 pub messages: Vec<CosmosMsg>,
34 pub deposit_amount: Uint128,
35 pub ibc_channel: Option<String>,
36 pub total_voting_power: Uint128,
37}
38
39const OLD_PROPOSALS: Map<u64, OldProposal> = Map::new("proposals");
40
41#[cfg_attr(not(feature = "library"), cosmwasm_std::entry_point)]
42pub fn migrate(deps: DepsMut, _env: Env, _msg: Empty) -> Result<Response, ContractError> {
43 let contract_version = get_contract_version(deps.storage)?;
44
45 match contract_version.contract.as_ref() {
46 CONTRACT_NAME => match contract_version.version.as_ref() {
47 "2.0.1" => {
48 let proposals = OLD_PROPOSALS
49 .range(deps.storage, None, None, Order::Ascending)
50 .collect::<StdResult<Vec<_>>>()?;
51
52 proposals.into_iter().try_for_each(|(id, old_proposal)| {
53 let proposal = Proposal {
54 proposal_id: old_proposal.proposal_id,
55 submitter: old_proposal.submitter,
56 status: old_proposal.status,
57 for_power: old_proposal.for_power,
58 against_power: old_proposal.against_power,
59 start_block: old_proposal.start_block,
60 start_time: old_proposal.start_time,
61 end_block: old_proposal.end_block,
62 delayed_end_block: old_proposal.delayed_end_block,
63 expiration_block: old_proposal.expiration_block,
64 title: old_proposal.title,
65 description: old_proposal.description,
66 link: old_proposal.link,
67 messages: old_proposal.messages,
68 deposit_amount: old_proposal.deposit_amount,
69 ibc_channel: old_proposal.ibc_channel,
70 total_voting_power: old_proposal.total_voting_power,
71 };
72 PROPOSALS
73 .save(deps.storage, id, &proposal)
74 .map_err(ContractError::Std)
75 })
76 }
77 "3.0.0" => Ok(()),
78 _ => Err(ContractError::MigrationError {}),
79 },
80 _ => Err(ContractError::MigrationError {}),
81 }?;
82
83 set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?;
84
85 Ok(Response::new()
86 .add_attribute("previous_contract_name", &contract_version.contract)
87 .add_attribute("previous_contract_version", &contract_version.version)
88 .add_attribute("new_contract_name", CONTRACT_NAME)
89 .add_attribute("new_contract_version", CONTRACT_VERSION))
90}