git.delta.rocks / unique-network / refs/commits / f48b2b13637b

difftreelog

feat(app-promo) removed storage used for migration

PraetorP2023-02-15parent: #9f4fc06.patch.diff
in: master

1 file changed

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