From 8bb42c2b1b657a53b1eead140d34e98e2ed69f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C5=9Fu?= Date: Mon, 25 Jul 2022 14:05:22 +0300 Subject: [PATCH] Add migration code for mixnet and vesting contracts (#1477) --- .../mixnet-contract/src/msg.rs | 4 +- .../vesting-contract/src/messages.rs | 4 +- contracts/mixnet/src/contract.rs | 2 + contracts/mixnet/src/lib.rs | 1 + contracts/mixnet/src/queued_migrations.rs | 39 +++++++++++++++++++ contracts/vesting/src/contract.rs | 2 + contracts/vesting/src/lib.rs | 1 + contracts/vesting/src/queued_migrations.rs | 17 ++++++++ 8 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 contracts/mixnet/src/queued_migrations.rs create mode 100644 contracts/vesting/src/queued_migrations.rs diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs index ac1f460715..ddbec18188 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs @@ -214,4 +214,6 @@ pub enum QueryMsg { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] -pub struct MigrateMsg {} +pub struct MigrateMsg { + pub mixnet_denom: String, +} diff --git a/common/cosmwasm-smart-contracts/vesting-contract/src/messages.rs b/common/cosmwasm-smart-contracts/vesting-contract/src/messages.rs index 668d24db66..a9dd627557 100644 --- a/common/cosmwasm-smart-contracts/vesting-contract/src/messages.rs +++ b/common/cosmwasm-smart-contracts/vesting-contract/src/messages.rs @@ -12,7 +12,9 @@ pub struct InitMsg { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] -pub struct MigrateMsg {} +pub struct MigrateMsg { + pub mix_denom: String, +} #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, Default)] pub struct VestingSpecification { diff --git a/contracts/mixnet/src/contract.rs b/contracts/mixnet/src/contract.rs index e0e78068bd..0e90ecd6c8 100644 --- a/contracts/mixnet/src/contract.rs +++ b/contracts/mixnet/src/contract.rs @@ -27,6 +27,7 @@ use crate::mixnodes::bonding_queries::{ query_checkpoints_for_mixnode, query_mixnode_at_height, query_mixnodes_paged, }; use crate::mixnodes::layer_queries::query_layer_distribution; +use crate::queued_migrations::migrate_config_from_env; use crate::rewards::queries::{ query_circulating_supply, query_reward_pool, query_rewarding_status, query_staking_supply, }; @@ -463,6 +464,7 @@ pub fn query(deps: Deps<'_>, env: Env, msg: QueryMsg) -> Result, _env: Env, _msg: MigrateMsg) -> Result { + migrate_config_from_env(_deps, _env, _msg)?; Ok(Default::default()) } diff --git a/contracts/mixnet/src/lib.rs b/contracts/mixnet/src/lib.rs index 281675a90d..5b0d0c8d0c 100644 --- a/contracts/mixnet/src/lib.rs +++ b/contracts/mixnet/src/lib.rs @@ -9,5 +9,6 @@ mod gateways; mod interval; mod mixnet_contract_settings; mod mixnodes; +mod queued_migrations; mod rewards; mod support; diff --git a/contracts/mixnet/src/queued_migrations.rs b/contracts/mixnet/src/queued_migrations.rs new file mode 100644 index 0000000000..758d91980d --- /dev/null +++ b/contracts/mixnet/src/queued_migrations.rs @@ -0,0 +1,39 @@ +// Copyright 2022 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use cosmwasm_std::{Addr, DepsMut, Env, Response}; +use cw_storage_plus::Item; +use mixnet_contract_common::{ContractStateParams, MigrateMsg}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use crate::error::ContractError; +use crate::mixnet_contract_settings::models::ContractState; +use crate::mixnet_contract_settings::storage::CONTRACT_STATE; + +pub fn migrate_config_from_env( + deps: DepsMut<'_>, + _env: Env, + msg: MigrateMsg, +) -> Result { + #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] + pub struct OldContractState { + pub owner: Addr, + pub mix_denom: String, + pub rewarding_validator_address: Addr, + pub params: ContractStateParams, + } + const OLD_CONTRACT_STATE: Item<'_, OldContractState> = Item::new("config"); + + let old_state = OLD_CONTRACT_STATE.load(deps.storage)?; + let new_state = ContractState { + owner: old_state.owner, + mix_denom: msg.mixnet_denom, + rewarding_validator_address: old_state.rewarding_validator_address, + params: old_state.params, + }; + + CONTRACT_STATE.save(deps.storage, &new_state)?; + + Ok(Default::default()) +} diff --git a/contracts/vesting/src/contract.rs b/contracts/vesting/src/contract.rs index 02e1b7ec42..b1dad8944c 100644 --- a/contracts/vesting/src/contract.rs +++ b/contracts/vesting/src/contract.rs @@ -1,4 +1,5 @@ use crate::errors::ContractError; +use crate::queued_migrations::migrate_config_from_env; use crate::storage::{ account_from_address, locked_pledge_cap, update_locked_pledge_cap, ADMIN, MIXNET_CONTRACT_ADDRESS, MIX_DENOM, @@ -41,6 +42,7 @@ pub fn instantiate( #[entry_point] pub fn migrate(_deps: DepsMut<'_>, _env: Env, _msg: MigrateMsg) -> Result { + migrate_config_from_env(_deps, _env, _msg)?; Ok(Response::default()) } diff --git a/contracts/vesting/src/lib.rs b/contracts/vesting/src/lib.rs index 4e57232fe5..4e44a69be8 100644 --- a/contracts/vesting/src/lib.rs +++ b/contracts/vesting/src/lib.rs @@ -1,5 +1,6 @@ pub mod contract; mod errors; +mod queued_migrations; mod storage; mod support; mod traits; diff --git a/contracts/vesting/src/queued_migrations.rs b/contracts/vesting/src/queued_migrations.rs new file mode 100644 index 0000000000..75d63ba648 --- /dev/null +++ b/contracts/vesting/src/queued_migrations.rs @@ -0,0 +1,17 @@ +// Copyright 2022 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use cosmwasm_std::{DepsMut, Env, Response}; +use vesting_contract_common::MigrateMsg; + +use crate::{errors::ContractError, storage::MIX_DENOM}; + +pub fn migrate_config_from_env( + deps: DepsMut<'_>, + _env: Env, + msg: MigrateMsg, +) -> Result { + MIX_DENOM.save(deps.storage, &msg.mix_denom)?; + + Ok(Default::default()) +}