use super::*; use frame_support::{ pallet_prelude::{Identity, OptionQuery}, storage_alias, traits::{GetStorageVersion, StorageVersion}, weights::Weight, }; use log::{error, info}; use sp_core::Get; use sp_std::vec::Vec; use subtensor_runtime_common::NetUid; /// Constant for logging purposes const LOG_TARGET: &str = "migrate_transfer_ownership"; /// Module containing deprecated storage format pub mod deprecated_loaded_emission_format { use super::*; #[storage_alias] pub(super) type LoadedEmission = StorageMap, Identity, u16, Vec<(AccountIdOf, u64)>, OptionQuery>; } /// Migrates subnet ownership to the foundation and updates related storage /// /// # Arguments /// /// * `coldkey` - 32-byte array representing the foundation's coldkey /// /// # Returns /// /// * `Weight` - The computational weight of this operation /// /// # Example /// /// ```ignore /// let foundation_coldkey = [0u8; 32]; // Replace with actual foundation coldkey /// let weight = migrate_transfer_ownership_to_foundation::(foundation_coldkey); /// ``` pub fn migrate_transfer_ownership_to_foundation(coldkey: [u8; 32]) -> Weight { let new_storage_version = 3; // Start with one read (on-chain storage version). let mut weight = T::DbWeight::get().reads(1); // Get current on-chain storage version let onchain_version = Pallet::::on_chain_storage_version(); // Only proceed if current version is less than the new version if onchain_version < new_storage_version { info!( target: LOG_TARGET, "Migrating subnet 1 and 11 to foundation control. Current version: {onchain_version:?}" ); // Decode the foundation's coldkey into an AccountId — if it fails, log and abort migration. let Ok(coldkey_account) = T::AccountId::decode(&mut &coldkey[..]) else { error!( target: LOG_TARGET, "migration error: failed to decode foundation coldkey from 32 bytes" ); return weight; }; info!(target: LOG_TARGET, "Foundation coldkey: {coldkey_account:?}"); // Get the current block number let current_block = Pallet::::get_current_block_as_u64(); weight.saturating_accrue(T::DbWeight::get().reads(1)); // Transfer ownership of subnets 1 and 11 to the foundation SubnetOwner::::insert(NetUid::from(1), coldkey_account.clone()); SubnetOwner::::insert(NetUid::from(11), coldkey_account); // Set the registration time for subnet 1 to extend immunity period NetworkRegisteredAt::::insert(NetUid::from(1), current_block.saturating_add(13 * 7200)); // Set the registration time for subnet 11 to the current block NetworkRegisteredAt::::insert(NetUid::from(11), current_block); weight.saturating_accrue(T::DbWeight::get().writes(4)); // Update the storage version to prevent re-running this migration StorageVersion::new(new_storage_version).put::>(); weight.saturating_accrue(T::DbWeight::get().writes(1)); weight } else { info!(target: LOG_TARGET, "Migration to v3 already completed"); Weight::zero() } }