difftreelog
feat(app-promo) removed storage used for migration
in: master
1 file changed
pallets/app-promotion/src/lib.rsdiffbeforeafterboth291 }291 }292292293 fn on_runtime_upgrade() -> Weight {293 fn on_runtime_upgrade() -> Weight {294 let mut consumed_weight = Weight::zero();294 <UpgradedToReserves<T>>::kill();295 let mut add_weight = |reads, writes, weight| {295296 consumed_weight += T::DbWeight::get().reads_writes(reads, writes);296 T::DbWeight::get().reads_writes(0, 1)297 consumed_weight += weight;298 };299300 if <UpgradedToReserves<T>>::get() {301 add_weight(1, 0, Weight::zero());302 return consumed_weight;303 } else {304 add_weight(1, 1, Weight::zero());305 <UpgradedToReserves<T>>::set(true);306 }307 <PendingUnstake<T>>::drain().for_each(|(_, v)| {308 add_weight(1, 1, Weight::zero());309 v.into_iter().for_each(|(staker, amount)| {310 <<T as Config>::Currency as ReservableCurrency<T::AccountId>>::unreserve(311 &staker, amount,312 );313 add_weight(1, 1, Weight::zero());314 });315 });316317 consumed_weight318 }297 }319320 #[cfg(feature = "try-runtime")]321 fn pre_upgrade() -> Result<Vec<u8>, &'static str> {322 use sp_std::collections::btree_map::BTreeMap;323 if <UpgradedToReserves<T>>::get() {324 return Ok(Default::default());325 }326 // Staker -> (total amount of reserved balance, reserved by promotion);327 let mut pre_state: BTreeMap<T::AccountId, (BalanceOf<T>, BalanceOf<T>)> =328 BTreeMap::new();329330 <PendingUnstake<T>>::iter().for_each(|(_, v)| {331 v.into_iter().for_each(|(staker, amount)| {332 if let Some((_, reserved_balance)) = pre_state.get_mut(&staker) {333 *reserved_balance += amount;334 } else {335 let total_reserve = <<T as Config>::Currency as ReservableCurrency<336 T::AccountId,337 >>::reserved_balance(&staker);338 pre_state.insert(staker, (total_reserve, amount));339 }340 })341 });342343 Ok(pre_state.encode())344 }345346 #[cfg(feature = "try-runtime")]347 fn post_upgrade(pre_state: Vec<u8>) -> Result<(), &'static str> {348 use sp_std::collections::btree_map::BTreeMap;349350 if <UpgradedToReserves<T>>::get() {351 return Ok(());352 }353354 ensure!(355 <PendingUnstake<T>>::iter().collect::<Vec<_>>().len() == 0,356 "pendingUnstake storage isn't empty"357 );358359 let mut is_ok = true;360361 let pre_state: BTreeMap<T::AccountId, (BalanceOf<T>, BalanceOf<T>)> =362 Decode::decode(&mut &pre_state[..]).map_err(|_| "failed to decode pre_state")?;363 for (staker, (total_reserved, reserved_by_promo)) in pre_state.into_iter() {364 let new_state_reserve = <<T as Config>::Currency as ReservableCurrency<365 T::AccountId,366 >>::reserved_balance(&staker);367 if new_state_reserve != total_reserved - reserved_by_promo {368 is_ok = false;369 log::error!(370 "Incorrect reserved balance for {:?}. New balance: {:?}. Before runtime upgrade: total reserve - {:?}, reserved by promo - {:?}",371 staker, new_state_reserve, total_reserved, reserved_by_promo372 );373 }374 }375376 if is_ok {377 Ok(())378 } else {379 Err("Incorrect balance for some of stakers... See logs")380 }381 }382 }298 }383299384 #[pallet::call]300 #[pallet::call]