difftreelog
Merge pull request #883 from UniqueNetwork/feature/appPromoRemoveMigrationStorage
in: master
feat(app-promo): removed storage used for migration
1 file changed
pallets/app-promotion/src/lib.rsdiffbeforeafterboth293 }293 }294294295 fn on_runtime_upgrade() -> Weight {295 fn on_runtime_upgrade() -> Weight {296 let mut consumed_weight = Weight::zero();296 <UpgradedToReserves<T>>::kill();297 let mut add_weight = |reads, writes, weight| {297298 consumed_weight += T::DbWeight::get().reads_writes(reads, writes);298 T::DbWeight::get().reads_writes(0, 1)299 consumed_weight += weight;300 };301302 if <UpgradedToReserves<T>>::get() {303 add_weight(1, 0, Weight::zero());304 return consumed_weight;305 } else {306 add_weight(1, 1, Weight::zero());307 <UpgradedToReserves<T>>::set(true);308 }309 <PendingUnstake<T>>::drain().for_each(|(_, v)| {310 add_weight(1, 1, Weight::zero());311 v.into_iter().for_each(|(staker, amount)| {312 <<T as Config>::Currency as ReservableCurrency<T::AccountId>>::unreserve(313 &staker, amount,314 );315 add_weight(1, 1, Weight::zero());316 });317 });318319 consumed_weight320 }299 }321322 #[cfg(feature = "try-runtime")]323 fn pre_upgrade() -> Result<Vec<u8>, &'static str> {324 use sp_std::collections::btree_map::BTreeMap;325 if <UpgradedToReserves<T>>::get() {326 return Ok(Default::default());327 }328 // Staker -> (total amount of reserved balance, reserved by promotion);329 let mut pre_state: BTreeMap<T::AccountId, (BalanceOf<T>, BalanceOf<T>)> =330 BTreeMap::new();331332 <PendingUnstake<T>>::iter().for_each(|(_, v)| {333 v.into_iter().for_each(|(staker, amount)| {334 if let Some((_, reserved_balance)) = pre_state.get_mut(&staker) {335 *reserved_balance += amount;336 } else {337 let total_reserve = <<T as Config>::Currency as ReservableCurrency<338 T::AccountId,339 >>::reserved_balance(&staker);340 pre_state.insert(staker, (total_reserve, amount));341 }342 })343 });344345 Ok(pre_state.encode())346 }347348 #[cfg(feature = "try-runtime")]349 fn post_upgrade(pre_state: Vec<u8>) -> Result<(), &'static str> {350 use sp_std::collections::btree_map::BTreeMap;351352 if <UpgradedToReserves<T>>::get() {353 return Ok(());354 }355356 ensure!(357 <PendingUnstake<T>>::iter().collect::<Vec<_>>().len() == 0,358 "pendingUnstake storage isn't empty"359 );360361 let mut is_ok = true;362363 let pre_state: BTreeMap<T::AccountId, (BalanceOf<T>, BalanceOf<T>)> =364 Decode::decode(&mut &pre_state[..]).map_err(|_| "failed to decode pre_state")?;365 for (staker, (total_reserved, reserved_by_promo)) in pre_state.into_iter() {366 let new_state_reserve = <<T as Config>::Currency as ReservableCurrency<367 T::AccountId,368 >>::reserved_balance(&staker);369 if new_state_reserve != total_reserved - reserved_by_promo {370 is_ok = false;371 log::error!(372 "Incorrect reserved balance for {:?}. New balance: {:?}. Before runtime upgrade: total reserve - {:?}, reserved by promo - {:?}",373 staker, new_state_reserve, total_reserved, reserved_by_promo374 );375 }376 }377378 if is_ok {379 Ok(())380 } else {381 Err("Incorrect balance for some of stakers... See logs")382 }383 }384 }300 }385301386 #[pallet::call]302 #[pallet::call]