From 2b5b00e851d18eadb5398fc8fc39ab0839517a47 Mon Sep 17 00:00:00 2001 From: Herry Ho <45537372+herryho@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:18:13 +0800 Subject: [PATCH] Parachain staking ledger migration (#1077) * parachain-staking-ledger-migration * cargo fmt * put migrations into module * add migrations to bifrost-kusama * migrate from Ledger::Moonbeam to Ledger::ParachainStaking --- pallets/slp/src/agents/common.rs | 4 +- .../agents/parachain_staking_agent/agent.rs | 47 ++-- pallets/slp/src/agents/utils.rs | 7 +- pallets/slp/src/migrations/mod.rs | 1 + pallets/slp/src/migrations/v3.rs | 103 +++++++++ pallets/slp/src/primitives/mod.rs | 2 + pallets/slp/src/tests/moonriver_tests.rs | 212 +++++++++--------- .../slp/src/tests/parachain_staking_tests.rs | 18 +- runtime/bifrost-kusama/src/lib.rs | 4 +- runtime/bifrost-polkadot/src/lib.rs | 4 +- 10 files changed, 263 insertions(+), 139 deletions(-) create mode 100644 pallets/slp/src/migrations/v3.rs diff --git a/pallets/slp/src/agents/common.rs b/pallets/slp/src/agents/common.rs index c6b8068f4..14f194243 100644 --- a/pallets/slp/src/agents/common.rs +++ b/pallets/slp/src/agents/common.rs @@ -474,7 +474,7 @@ impl Pallet { _ => None, }; - let entry = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { + let entry = LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { currency_id, delegator_id: *who, validator_id: validator, @@ -513,7 +513,7 @@ impl Pallet { let mut all_occupied = true; for (_, ledger) in DelegatorLedgers::::iter_prefix(currency_id) { - if let Ledger::Moonbeam(moonbeam_ledger) = ledger { + if let Ledger::ParachainStaking(moonbeam_ledger) = ledger { if moonbeam_ledger.delegations.len() > moonbeam_ledger.request_briefs.len() { all_occupied = false; break; diff --git a/pallets/slp/src/agents/parachain_staking_agent/agent.rs b/pallets/slp/src/agents/parachain_staking_agent/agent.rs index 7b5693157..c27a988c3 100644 --- a/pallets/slp/src/agents/parachain_staking_agent/agent.rs +++ b/pallets/slp/src/agents/parachain_staking_agent/agent.rs @@ -120,7 +120,7 @@ impl .ok_or(Error::::ValidatorNotExist)?; let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { ensure!( ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -171,7 +171,7 @@ impl request_briefs: request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let moonbeam_ledger = Ledger::>::Moonbeam(new_ledger); + let moonbeam_ledger = Ledger::>::ParachainStaking(new_ledger); DelegatorLedgers::::insert(currency_id, who, moonbeam_ledger); } @@ -206,7 +206,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { // first bond and bond more operations // If this is a bonding operation. // Increase the total amount and add the delegation relationship. @@ -336,7 +336,7 @@ impl ensure!(validators.contains(&collator), Error::::ValidatorError); let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { ensure!( ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -374,7 +374,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { // first bond and bond more operations // If this is a bonding operation. // Increase the total amount and add the delegation relationship. @@ -476,7 +476,7 @@ impl let collator = (*validator).ok_or(Error::::ValidatorNotProvided)?; let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { ensure!( ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -526,7 +526,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { ensure!( old_ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -634,7 +634,7 @@ impl // check if the delegator exists. let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { // check if the delegator is in the state of leaving. ensure!(ledger.status == OneToManyDelegatorStatus::Active, Error::::AlreadyLeaving); } else { @@ -650,7 +650,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { ensure!( old_ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorAlreadyLeaving @@ -702,7 +702,7 @@ impl let collator = (*validator).ok_or(Error::::ValidatorNotProvided)?; let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { ensure!( ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -744,7 +744,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { ensure!( old_ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -856,7 +856,7 @@ impl // First, check if the delegator exists. let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { ensure!( ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -883,7 +883,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { ensure!( old_ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -991,7 +991,7 @@ impl // first check if the delegator exists. let ledger_option = DelegatorLedgers::::get(currency_id, who); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { // check if the delegator is in the state of leaving. match ledger.status { OneToManyDelegatorStatus::Leaving(_) => Ok(()), @@ -1010,7 +1010,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { let leaving = matches!(old_ledger.status, OneToManyDelegatorStatus::Leaving(_)); ensure!(leaving, Error::::DelegatorNotLeaving); @@ -1059,7 +1059,7 @@ impl let ledger_option = DelegatorLedgers::::get(currency_id, who); let mut due_amount = Zero::zero(); - if let Some(Ledger::Moonbeam(ledger)) = ledger_option { + if let Some(Ledger::ParachainStaking(ledger)) = ledger_option { // check if the delegator is in the state of leaving. If yes, execute leaving. if let OneToManyDelegatorStatus::Leaving(leaving_time) = ledger.status { ensure!(now >= leaving_time, Error::::LeavingNotDue); @@ -1097,7 +1097,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { // make sure leaving time is less than or equal to current time. let scheduled_time = if let OneToManyDelegatorStatus::Leaving(scheduled_time_unit) = @@ -1141,7 +1141,7 @@ impl status: OneToManyDelegatorStatus::Active, }; let parachain_staking_ledger = - Ledger::>::Moonbeam(new_ledger); + Ledger::>::ParachainStaking(new_ledger); *old_ledger_opt = Some(parachain_staking_ledger); Ok(()) @@ -1162,7 +1162,7 @@ impl currency_id, who, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { ensure!( old_ledger.status == OneToManyDelegatorStatus::Active, Error::::DelegatorLeaving @@ -1464,7 +1464,7 @@ impl let ledger = DelegatorLedgers::::get(currency_id, who).ok_or(Error::::DelegatorNotBonded)?; - let total = if let Ledger::Moonbeam(moonbeam_ledger) = ledger { + let total = if let Ledger::ParachainStaking(moonbeam_ledger) = ledger { moonbeam_ledger.total } else { Err(Error::::Unexpected)? @@ -1586,7 +1586,7 @@ impl ParachainStakingAgent { LeaveDelegator, Revoke, }; // update DelegatorLedgers storage - if let LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { + if let LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { currency_id: _, delegator_id, validator_id: validator_id_op, @@ -1599,7 +1599,7 @@ impl ParachainStakingAgent { currency_id, delegator_id, |old_ledger_opt| -> Result<(), Error> { - if let Some(Ledger::Moonbeam(ref mut old_ledger)) = old_ledger_opt { + if let Some(Ledger::ParachainStaking(ref mut old_ledger)) = old_ledger_opt { match update_operation { // first bond and bond more operations Bond => { @@ -1815,7 +1815,8 @@ impl ParachainStakingAgent { request_briefs: request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let moonbeam_ledger = Ledger::>::Moonbeam(new_ledger); + let moonbeam_ledger = + Ledger::>::ParachainStaking(new_ledger); *old_ledger_opt = Some(moonbeam_ledger); // execute request diff --git a/pallets/slp/src/agents/utils.rs b/pallets/slp/src/agents/utils.rs index e81bc6a54..2cf07fb9c 100644 --- a/pallets/slp/src/agents/utils.rs +++ b/pallets/slp/src/agents/utils.rs @@ -226,7 +226,9 @@ impl Pallet { if now <= timeout { let currency_id = match entry.clone() { LedgerUpdateEntry::Substrate(substrate_entry) => Some(substrate_entry.currency_id), - LedgerUpdateEntry::Moonbeam(moonbeam_entry) => Some(moonbeam_entry.currency_id), + LedgerUpdateEntry::ParachainStaking(moonbeam_entry) => + Some(moonbeam_entry.currency_id), + _ => None, } .ok_or(Error::::NotSupportedCurrencyId)?; @@ -283,7 +285,8 @@ impl Pallet { Self::get_delegator_ledger_update_entry(query_id).ok_or(Error::::QueryNotExist)?; let currency_id = match entry { LedgerUpdateEntry::Substrate(substrate_entry) => Some(substrate_entry.currency_id), - LedgerUpdateEntry::Moonbeam(moonbeam_entry) => Some(moonbeam_entry.currency_id), + LedgerUpdateEntry::ParachainStaking(moonbeam_entry) => Some(moonbeam_entry.currency_id), + _ => None, } .ok_or(Error::::NotSupportedCurrencyId)?; diff --git a/pallets/slp/src/migrations/mod.rs b/pallets/slp/src/migrations/mod.rs index fea2101e5..906b14e70 100644 --- a/pallets/slp/src/migrations/mod.rs +++ b/pallets/slp/src/migrations/mod.rs @@ -18,3 +18,4 @@ /// Version 2. pub mod v2; +pub mod v3; diff --git a/pallets/slp/src/migrations/v3.rs b/pallets/slp/src/migrations/v3.rs new file mode 100644 index 000000000..6bf3f989c --- /dev/null +++ b/pallets/slp/src/migrations/v3.rs @@ -0,0 +1,103 @@ +// This file is part of Bifrost. + +// Copyright (C) 2019-2022 Liebi Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::*; +use frame_support::traits::OnRuntimeUpgrade; + +const LOG_TARGET: &str = "SLP::migration"; + +pub struct SlpMigration3(sp_std::marker::PhantomData); +impl OnRuntimeUpgrade for SlpMigration3 { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + // Check the storage version + let onchain_version = Pallet::::on_chain_storage_version(); + if onchain_version < 3 { + log::info!(target: LOG_TARGET, "Start to migrate DelegatorLedgers storage..."); + + let mut write_count = 0; + //migrate the value type of DelegatorLedgers + DelegatorLedgers::::translate(|key1, key2, value: Ledger>| { + // Only migrate the Ledger::ParachainStaking + if key1 == MOVR || key1 == GLMR { + write_count = write_count + 1; + // change Ledger::Moonbeam to Ledger::ParachainStaking + if let Ledger::Moonbeam(ledger) = value { + let new_ledger = Ledger::ParachainStaking(ledger); + + log::info!( + target: LOG_TARGET, + "Migrated to Ledger for {:?} - {:?}... into {:?}", + key1, + key2, + new_ledger.clone() + ); + Some(new_ledger) + } else { + Some(value) + } + } else { + Some(value) + } + }); + + // Update the storage version + StorageVersion::new(3).put::>(); + + // Return the consumed weight + let read_count = DelegatorLedgers::::iter().count(); + Weight::from(T::DbWeight::get().reads_writes(read_count as u64, write_count as u64)) + } else { + // We don't do anything here. + Weight::zero() + } + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + let delegator_Ledgers_cnt = DelegatorLedgers::::iter().count(); + // print out the pre-migrate storage count + log::info!( + target: LOG_TARGET, + "DelegatorLedgers pre-migrate storage count: {:?}", + delegator_Ledgers_cnt + ); + + let cnt = (delegator_Ledgers_cnt as u32); + Ok(cnt.encode()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(cnt: Vec) -> Result<(), &'static str> { + let (delegator_Ledgers_old): (u32) = Decode::decode(&mut cnt.as_slice()) + .expect("the state parameter should be something that was generated by pre_upgrade"); + + let delegator_Ledgers_new = DelegatorLedgers::::iter().count(); + // print out the post-migrate storage count + log::info!( + target: LOG_TARGET, + "DelegatorLedgers post-migrate storage count: {:?}", + delegator_Ledgers_new + ); + ensure!( + delegator_Ledgers_new as u32 == delegator_Ledgers_old, + "DelegatorLedgers post-migrate storage count not match" + ); + + Ok(()) + } +} diff --git a/pallets/slp/src/primitives/mod.rs b/pallets/slp/src/primitives/mod.rs index ae97b41fe..e3f2bbc3f 100644 --- a/pallets/slp/src/primitives/mod.rs +++ b/pallets/slp/src/primitives/mod.rs @@ -39,6 +39,7 @@ pub const BASE_WEIGHT: u64 = 1000; pub enum Ledger { Substrate(SubstrateLedger), Moonbeam(OneToManyLedger), + ParachainStaking(OneToManyLedger), Filecoin(FilecoinLedger), Phala(PhalaLedger), } @@ -49,6 +50,7 @@ pub enum LedgerUpdateEntry { /// A type for substrate ledger updating entries Substrate(SubstrateLedgerUpdateEntry), Moonbeam(ParachainStakingLedgerUpdateEntry), + ParachainStaking(ParachainStakingLedgerUpdateEntry), } /// A type for accommodating validators by delegator update entries for different kinds of diff --git a/pallets/slp/src/tests/moonriver_tests.rs b/pallets/slp/src/tests/moonriver_tests.rs index cf781fece..67df601f2 100644 --- a/pallets/slp/src/tests/moonriver_tests.rs +++ b/pallets/slp/src/tests/moonriver_tests.rs @@ -337,7 +337,7 @@ fn moonriver_bond_extra_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -390,7 +390,7 @@ fn moonriver_unbond_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -453,7 +453,7 @@ fn moonriver_rebond_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -507,7 +507,7 @@ fn moonriver_undelegate_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -571,7 +571,7 @@ fn moonriver_liquidize_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -636,7 +636,7 @@ fn moonriver_liquidize_works() { status: OneToManyDelegatorStatus::Leaving(TimeUnit::Round(48)), }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); @@ -706,7 +706,7 @@ fn moonriver_bond_and_bond_extra_confirm_works() { request_briefs: old_request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let movr_ledger = Ledger::>::Moonbeam(old_ledger); + let movr_ledger = Ledger::>::ParachainStaking(old_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, movr_ledger); @@ -714,7 +714,7 @@ fn moonriver_bond_and_bond_extra_confirm_works() { // Bond confirm // setup updateEntry let query_id = 0; - let update_entry = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { + let update_entry = LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { currency_id: MOVR, delegator_id: subaccount_0_location, validator_id: Some(VALIDATOR_0_LOCATION), @@ -754,20 +754,21 @@ fn moonriver_bond_and_bond_extra_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); // BondExtra confirm let query_id = 1; - let update_entry_1 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::Bond, - amount: 5_000_000_000_000_000_000, - unlock_time: None, - }); + let update_entry_1 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::Bond, + amount: 5_000_000_000_000_000_000, + unlock_time: None, + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_1.clone(), 1000)); @@ -800,7 +801,7 @@ fn moonriver_bond_and_bond_extra_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); }); @@ -841,7 +842,7 @@ fn moonriver_unbond_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger.clone()); @@ -850,14 +851,15 @@ fn moonriver_unbond_confirm_works() { // Unbond confirm let query_id = 2; - let update_entry_2 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::BondLess, - amount: 2_000_000_000_000_000_000, - unlock_time: Some(TimeUnit::Round(24)), - }); + let update_entry_2 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::BondLess, + amount: 2_000_000_000_000_000_000, + unlock_time: Some(TimeUnit::Round(24)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_2.clone(), 1000)); @@ -899,20 +901,21 @@ fn moonriver_unbond_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); // Unbond confirm let query_id = 3; - let update_entry_3 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, - amount: 0, - unlock_time: Some(TimeUnit::Round(0)), - }); + let update_entry_3 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, + amount: 0, + unlock_time: Some(TimeUnit::Round(0)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_3.clone(), 1000)); @@ -948,14 +951,15 @@ fn moonriver_unbond_confirm_works() { )); let query_id = 4; - let update_entry_4 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, - amount: 0, - unlock_time: Some(TimeUnit::Round(24)), - }); + let update_entry_4 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, + amount: 0, + unlock_time: Some(TimeUnit::Round(24)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_4.clone(), 1000)); @@ -988,7 +992,7 @@ fn moonriver_unbond_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); }); @@ -1030,21 +1034,22 @@ fn moonriver_unbond_all_confirm_works() { status: OneToManyDelegatorStatus::Leaving(TimeUnit::Round(48)), }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger.clone()); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); let query_id = 5; - let update_entry_5 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: None, - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteLeave, - amount: 0, - unlock_time: Some(TimeUnit::Round(24)), - }); + let update_entry_5 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: None, + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteLeave, + amount: 0, + unlock_time: Some(TimeUnit::Round(24)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_5.clone(), 1000)); @@ -1080,14 +1085,15 @@ fn moonriver_unbond_all_confirm_works() { )); let query_id = 6; - let update_entry_6 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteLeave, - amount: 0, - unlock_time: Some(TimeUnit::Round(48)), - }); + let update_entry_6 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteLeave, + amount: 0, + unlock_time: Some(TimeUnit::Round(48)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_6.clone(), 1000)); @@ -1116,7 +1122,7 @@ fn moonriver_unbond_all_confirm_works() { request_briefs: request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let movr_ledger = Ledger::>::Moonbeam(new_ledger); + let movr_ledger = Ledger::>::ParachainStaking(new_ledger); assert_eq!( DelegatorLedgers::::get(MOVR, subaccount_0_location), @@ -1170,20 +1176,21 @@ fn moonriver_rebond_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger.clone()); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); let query_id = 7; - let update_entry_7 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::CancelRequest, - amount: 0, - unlock_time: Some(TimeUnit::Round(48)), - }); + let update_entry_7 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::CancelRequest, + amount: 0, + unlock_time: Some(TimeUnit::Round(48)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_7.clone(), 1000)); @@ -1216,7 +1223,7 @@ fn moonriver_rebond_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); }); @@ -1258,20 +1265,21 @@ fn moonriver_undelegate_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); let query_id = 8; - let update_entry_8 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::Revoke, - amount: 0, - unlock_time: Some(TimeUnit::Round(24)), - }); + let update_entry_8 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::Revoke, + amount: 0, + unlock_time: Some(TimeUnit::Round(24)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_8.clone(), 1000)); @@ -1316,20 +1324,21 @@ fn moonriver_undelegate_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); // execute revoke confirm let query_id = 9; - let update_entry_9 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, - amount: 0, - unlock_time: Some(TimeUnit::Round(21)), - }); + let update_entry_9 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, + amount: 0, + unlock_time: Some(TimeUnit::Round(21)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_9.clone(), 1000)); @@ -1348,14 +1357,15 @@ fn moonriver_undelegate_confirm_works() { ); let query_id = 10; - let update_entry_10 = LedgerUpdateEntry::Moonbeam(ParachainStakingLedgerUpdateEntry { - currency_id: MOVR, - delegator_id: subaccount_0_location, - validator_id: Some(VALIDATOR_0_LOCATION), - update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, - amount: 0, - unlock_time: Some(TimeUnit::Round(24)), - }); + let update_entry_10 = + LedgerUpdateEntry::ParachainStaking(ParachainStakingLedgerUpdateEntry { + currency_id: MOVR, + delegator_id: subaccount_0_location, + validator_id: Some(VALIDATOR_0_LOCATION), + update_operation: ParachainStakingLedgerUpdateOperation::ExecuteRequest, + amount: 0, + unlock_time: Some(TimeUnit::Round(24)), + }); DelegatorLedgerXcmUpdateQueue::::insert(query_id, (update_entry_10.clone(), 1000)); @@ -1388,7 +1398,7 @@ fn moonriver_undelegate_confirm_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); assert_eq!(DelegatorLedgers::::get(MOVR, subaccount_0_location), Some(ledger)); }); @@ -1647,7 +1657,7 @@ fn charge_host_fee_and_tune_vtoken_exchange_rate_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(moonriver_ledger); + let ledger = Ledger::ParachainStaking(moonriver_ledger); // Set delegator ledger DelegatorLedgers::::insert(MOVR, subaccount_0_location, ledger); diff --git a/pallets/slp/src/tests/parachain_staking_tests.rs b/pallets/slp/src/tests/parachain_staking_tests.rs index 847b3f8ec..9f53f7403 100644 --- a/pallets/slp/src/tests/parachain_staking_tests.rs +++ b/pallets/slp/src/tests/parachain_staking_tests.rs @@ -268,7 +268,7 @@ fn parachain_staking_bond_to_liquidize_works() { request_briefs: request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let ledger2 = Ledger::Moonbeam(parachain_staking_ledger2); + let ledger2 = Ledger::ParachainStaking(parachain_staking_ledger2); DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger2.clone()); System::set_block_number(700_000); @@ -325,7 +325,7 @@ fn parachain_staking_bond_extra_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -373,7 +373,7 @@ fn parachain_staking_unbond_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -421,7 +421,7 @@ fn parachain_staking_unbond_all_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -472,7 +472,7 @@ fn parachain_staking_rebond_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -524,7 +524,7 @@ fn parachain_staking_undelegate_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -580,7 +580,7 @@ fn parachain_staking_redelegate_works() { status: OneToManyDelegatorStatus::Leaving(TimeUnit::Round(24)), }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, Box::new(subaccount_0_location), ledger); @@ -638,7 +638,7 @@ fn parachain_staking_liquidize_works() { status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); @@ -714,7 +714,7 @@ fn parachain_staking_liquidize_works() { request_briefs: request_briefs_set, status: OneToManyDelegatorStatus::Active, }; - let ledger = Ledger::Moonbeam(parachain_staking_ledger); + let ledger = Ledger::ParachainStaking(parachain_staking_ledger); // Set delegator ledger DelegatorLedgers::::insert(BNC, subaccount_0_location, ledger); diff --git a/runtime/bifrost-kusama/src/lib.rs b/runtime/bifrost-kusama/src/lib.rs index b07c38056..2cb858d44 100644 --- a/runtime/bifrost-kusama/src/lib.rs +++ b/runtime/bifrost-kusama/src/lib.rs @@ -1905,8 +1905,10 @@ pub type Migrations = migrations::Unreleased; /// The runtime migrations per release. pub mod migrations { + use super::*; + /// Unreleased migrations. Add new ones here: - pub type Unreleased = (); + pub type Unreleased = bifrost_slp::migrations::v3::SlpMigration3; } /// Executive: handles dispatch to the various modules. diff --git a/runtime/bifrost-polkadot/src/lib.rs b/runtime/bifrost-polkadot/src/lib.rs index b90431d31..31c4e5cc6 100644 --- a/runtime/bifrost-polkadot/src/lib.rs +++ b/runtime/bifrost-polkadot/src/lib.rs @@ -1709,8 +1709,10 @@ pub type Migrations = migrations::Unreleased; /// The runtime migrations per release. pub mod migrations { + use super::*; + /// Unreleased migrations. Add new ones here: - pub type Unreleased = (); + pub type Unreleased = bifrost_slp::migrations::v3::SlpMigration3; } /// Executive: handles dispatch to the various modules.