git.delta.rocks / unique-network / refs/commits / 59a9de8ca347

difftreelog

Merge pull request #883 from UniqueNetwork/feature/appPromoRemoveMigrationStorage

Yaroslav Bolyukin2023-02-15parents: #91c34ac #f48b2b1.patch.diff
in: master
feat(app-promo): removed storage used for migration

1 file changed

modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
293 }293 }
294294
295 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| {297
298 consumed_weight += T::DbWeight::get().reads_writes(reads, writes);298 T::DbWeight::get().reads_writes(0, 1)
299 consumed_weight += weight;
300 };
301
302 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 });
318
319 consumed_weight
320 }299 }
321
322 #[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();
331
332 <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 });
344
345 Ok(pre_state.encode())
346 }
347
348 #[cfg(feature = "try-runtime")]
349 fn post_upgrade(pre_state: Vec<u8>) -> Result<(), &'static str> {
350 use sp_std::collections::btree_map::BTreeMap;
351
352 if <UpgradedToReserves<T>>::get() {
353 return Ok(());
354 }
355
356 ensure!(
357 <PendingUnstake<T>>::iter().collect::<Vec<_>>().len() == 0,
358 "pendingUnstake storage isn't empty"
359 );
360
361 let mut is_ok = true;
362
363 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_promo
374 );
375 }
376 }
377
378 if is_ok {
379 Ok(())
380 } else {
381 Err("Incorrect balance for some of stakers... See logs")
382 }
383 }
384 }300 }
385301
386 #[pallet::call]302 #[pallet::call]