use super::*; use frame_support::{traits::Get, weights::Weight}; use log; use scale_info::prelude::string::String; pub fn migrate_reset_bonds_moving_average() -> Weight { let migration_name = b"migrate_reset_bonds_moving_average".to_vec(); let mut weight = T::DbWeight::get().reads(1); // ------------------------------ // Step 0: Check if already run // ------------------------------ if HasMigrationRun::::get(&migration_name) { log::info!( "Migration '{:?}' has already run. Skipping.", String::from_utf8_lossy(&migration_name) ); return weight; } log::info!( "Running migration '{}'", String::from_utf8_lossy(&migration_name) ); // ------------------------------ // Step 1: Reset all subnet's BondsMovingAverage to 975000 if the value exceeds 975000 // ------------------------------ let mut reset_entries_count = 0u64; for netuid in BondsMovingAverage::::iter_keys() { BondsMovingAverage::::mutate(netuid, |average| { *average = (*average).min(975000); }); reset_entries_count = reset_entries_count.saturating_add(1); } weight = weight .saturating_add(T::DbWeight::get().reads_writes(reset_entries_count, reset_entries_count)); log::info!("Reset {reset_entries_count} subnets from BondsMovingAverage."); // ------------------------------ // Step 2: Mark Migration as Completed // ------------------------------ HasMigrationRun::::insert(&migration_name, true); weight = weight.saturating_add(T::DbWeight::get().writes(1)); log::info!( "Migration '{:?}' completed successfully.", String::from_utf8_lossy(&migration_name) ); weight }