use super::*; pub fn get_unactive_sn_netuids( pool_initial_alpha: AlphaBalance, ) -> (Vec, Weight) { // Loop over all subnets, if the AlphaIssuance is > pool_initial_alpha // but FirstEmissionBlockNumber is None // then this subnet should be reset let mut weight = T::DbWeight::get().reads(1); let unactive_netuids = Pallet::::get_all_subnet_netuids() .iter() .filter(|&netuid| !netuid.is_root()) .filter(|&netuid| { let alpha_issuance = Pallet::::get_alpha_issuance(*netuid); let first_emission_block_number = FirstEmissionBlockNumber::::get(*netuid); alpha_issuance != pool_initial_alpha && first_emission_block_number.is_none() }) .copied() .collect::>(); weight = weight .saturating_add(T::DbWeight::get().reads(unactive_netuids.len().saturating_mul(3) as u64)); (unactive_netuids, weight) } pub fn migrate_reset_unactive_sn() -> Weight { let migration_name = b"migrate_reset_unactive_sn".to_vec(); let mut weight: Weight = T::DbWeight::get().reads(1); // Skip if already executed if HasMigrationRun::::get(&migration_name) { log::info!( target: "runtime", "Migration '{}' already run - skipping.", String::from_utf8_lossy(&migration_name) ); return weight; } log::info!( "Running migration '{}'", String::from_utf8_lossy(&migration_name) ); // From init_new_network let pool_initial_tao: TaoBalance = Pallet::::get_network_min_lock(); let pool_initial_alpha: AlphaBalance = pool_initial_tao.to_u64().into(); let (unactive_netuids, w) = get_unactive_sn_netuids::(pool_initial_alpha); weight = weight.saturating_add(w); for netuid in unactive_netuids.iter() { // Reset the subnet as it shouldn't have any emissions PendingServerEmission::::remove(*netuid); PendingValidatorEmission::::remove(*netuid); PendingRootAlphaDivs::::remove(*netuid); PendingOwnerCut::::remove(*netuid); SubnetTaoInEmission::::remove(*netuid); SubnetAlphaInEmission::::remove(*netuid); SubnetAlphaOutEmission::::remove(*netuid); weight = weight.saturating_add(T::DbWeight::get().writes(7)); } // 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 }