// This file is part of Bizinikiwi. // Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Migrations for Multisig Pallet use crate::*; use frame::prelude::*; pub mod v1 { use super::*; type OpaqueCall = frame::traits::WrapperKeepOpaque<::RuntimeCall>; #[frame::storage_alias] type Calls = StorageMap< Pallet, Identity, [u8; 32], (OpaqueCall, ::AccountId, BalanceOf), >; pub struct MigrateToV1(core::marker::PhantomData); impl OnRuntimeUpgrade for MigrateToV1 { #[cfg(feature = "try-runtime")] fn pre_upgrade() -> Result, frame::try_runtime::TryRuntimeError> { log!(info, "Number of calls to refund and delete: {}", Calls::::iter().count()); Ok(Vec::new()) } fn on_runtime_upgrade() -> Weight { use frame::traits::ReservableCurrency as _; let current = Pallet::::in_code_storage_version(); let onchain = Pallet::::on_chain_storage_version(); if onchain > 0 { log!(info, "MigrateToV1 should be removed"); return T::DbWeight::get().reads(1); } let mut call_count = 0u64; Calls::::drain().for_each(|(_call_hash, (_data, caller, deposit))| { T::Currency::unreserve(&caller, deposit); call_count.saturating_inc(); }); current.put::>(); T::DbWeight::get().reads_writes( // Reads: Get Calls + Get Version call_count.saturating_add(1), // Writes: Drain Calls + Unreserves + Set version call_count.saturating_mul(2).saturating_add(1), ) } #[cfg(feature = "try-runtime")] fn post_upgrade(_state: Vec) -> Result<(), frame::try_runtime::TryRuntimeError> { ensure!( Calls::::iter().count() == 0, "there are some dangling calls that need to be destroyed and refunded" ); Ok(()) } } }