diff --git a/chain-extensions/src/mock.rs b/chain-extensions/src/mock.rs index db25a9df68..8fd2b62bde 100644 --- a/chain-extensions/src/mock.rs +++ b/chain-extensions/src/mock.rs @@ -313,16 +313,15 @@ parameter_types! { pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = pallet_subtensor::MIN_TEMPO; - pub const MaxTempo: u16 = pallet_subtensor::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = pallet_subtensor::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = pallet_subtensor::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: u64 = 0; pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -380,7 +379,6 @@ impl pallet_subtensor::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/eco-tests/src/mock.rs b/eco-tests/src/mock.rs index 5ce8bc9b6b..4c63600ea7 100644 --- a/eco-tests/src/mock.rs +++ b/eco-tests/src/mock.rs @@ -206,18 +206,15 @@ parameter_types! { pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = pallet_subtensor::MIN_TEMPO; - pub const MaxTempo: u16 = pallet_subtensor::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = - pallet_subtensor::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = - pallet_subtensor::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: u64 = 0; pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -275,7 +272,6 @@ impl pallet_subtensor::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/eco-tests/src/tests_taocom_indexer.rs b/eco-tests/src/tests_taocom_indexer.rs index d79e05f9b2..010cfec232 100644 --- a/eco-tests/src/tests_taocom_indexer.rs +++ b/eco-tests/src/tests_taocom_indexer.rs @@ -131,7 +131,7 @@ fn indexer_subnet_hyperparams() { let _: u64 = WeightsVersionKey::::get(netuid); let _: u64 = WeightsSetRateLimit::::get(netuid); let _: u16 = AdjustmentInterval::::get(netuid); - let _: u16 = ActivityCutoff::::get(netuid); + let _: u32 = ActivityCutoffFactorMilli::::get(netuid); let _: bool = NetworkRegistrationAllowed::::get(netuid); let _: u16 = TargetRegistrationsPerInterval::::get(netuid); let _: TaoBalance = MinBurn::::get(netuid); diff --git a/pallets/admin-utils/src/benchmarking.rs b/pallets/admin-utils/src/benchmarking.rs index d1a373d791..d48f223c54 100644 --- a/pallets/admin-utils/src/benchmarking.rs +++ b/pallets/admin-utils/src/benchmarking.rs @@ -204,19 +204,6 @@ mod benchmarks { _(RawOrigin::Root, 1u16.into()/*netuid*/, 300u16/*target_registrations*/)/*sudo_set_target_registrations_per_interval*/; } - #[benchmark] - fn sudo_set_activity_cutoff() { - // disable admin freeze window - pallet_subtensor::Pallet::::set_admin_freeze_window(0); - pallet_subtensor::Pallet::::init_new_network( - 1u16.into(), /*netuid*/ - 1u16, /*tempo*/ - ); - - #[extrinsic_call] - _(RawOrigin::Root, 1u16.into()/*netuid*/, 361u16/*activity_cutoff*/)/*sudo_set_activity_cutoff*/; - } - #[benchmark] fn sudo_set_rho() { // disable admin freeze window diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs index 0e63a1f05a..1085a29c13 100644 --- a/pallets/admin-utils/src/lib.rs +++ b/pallets/admin-utils/src/lib.rs @@ -608,48 +608,6 @@ pub mod pallet { Ok(()) } - /// The extrinsic sets the activity cutoff for a subnet. - /// It is only callable by the root account or subnet owner. - /// The extrinsic will call the Subtensor pallet to set the activity cutoff. - // #[deprecated( - // note = "Please use set_activity_cutoff_factor instead. This extrinsic will be removed soon." - // )] - #[pallet::call_index(18)] - #[pallet::weight(::WeightInfo::sudo_set_activity_cutoff())] - pub fn sudo_set_activity_cutoff( - origin: OriginFor, - netuid: NetUid, - activity_cutoff: u16, - ) -> DispatchResult { - let maybe_owner = pallet_subtensor::Pallet::::ensure_sn_owner_or_root_with_limits( - origin, - netuid, - &[Hyperparameter::ActivityCutoff.into()], - )?; - pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; - - ensure!( - pallet_subtensor::Pallet::::if_subnet_exist(netuid), - Error::::SubnetDoesNotExist - ); - - ensure!( - activity_cutoff >= pallet_subtensor::MinActivityCutoff::::get(), - pallet_subtensor::Error::::ActivityCutoffTooLow - ); - - pallet_subtensor::Pallet::::set_activity_cutoff(netuid, activity_cutoff); - log::debug!( - "ActivityCutoffSet( netuid: {netuid:?} activity_cutoff: {activity_cutoff:?} ) " - ); - pallet_subtensor::Pallet::::record_owner_rl( - maybe_owner, - netuid, - &[Hyperparameter::ActivityCutoff.into()], - ); - Ok(()) - } - /// The extrinsic sets the network registration allowed for a subnet. /// It is only callable by the root account or subnet owner. /// The extrinsic will call the Subtensor pallet to set the network registration allowed. diff --git a/pallets/admin-utils/src/tests/mock.rs b/pallets/admin-utils/src/tests/mock.rs index e3b658a0a8..67c99f7eb6 100644 --- a/pallets/admin-utils/src/tests/mock.rs +++ b/pallets/admin-utils/src/tests/mock.rs @@ -123,16 +123,15 @@ parameter_types! { pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = pallet_subtensor::MIN_TEMPO; - pub const MaxTempo: u16 = pallet_subtensor::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = pallet_subtensor::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = pallet_subtensor::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: TaoBalance = TaoBalance::new(0); pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -189,7 +188,6 @@ impl pallet_subtensor::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/pallets/admin-utils/src/tests/mod.rs b/pallets/admin-utils/src/tests/mod.rs index 735e784ad8..57886a647b 100644 --- a/pallets/admin-utils/src/tests/mod.rs +++ b/pallets/admin-utils/src/tests/mod.rs @@ -648,39 +648,6 @@ fn test_sudo_set_rho() { }); } -#[test] -fn test_sudo_set_activity_cutoff() { - new_test_ext().execute_with(|| { - let netuid = NetUid::from(1); - let to_be_set: u16 = pallet_subtensor::MinActivityCutoff::::get(); - add_network(netuid, 10); - let init_value: u16 = SubtensorModule::get_activity_cutoff(netuid); - assert_eq!( - AdminUtils::sudo_set_activity_cutoff( - <::RuntimeOrigin>::signed(U256::from(1)), - netuid, - to_be_set - ), - Err(DispatchError::BadOrigin) - ); - assert_eq!( - AdminUtils::sudo_set_activity_cutoff( - <::RuntimeOrigin>::root(), - netuid.next(), - to_be_set - ), - Err(Error::::SubnetDoesNotExist.into()) - ); - assert_eq!(SubtensorModule::get_activity_cutoff(netuid), init_value); - assert_ok!(AdminUtils::sudo_set_activity_cutoff( - <::RuntimeOrigin>::root(), - netuid, - to_be_set - )); - assert_eq!(SubtensorModule::get_activity_cutoff(netuid), to_be_set); - }); -} - #[test] fn test_sudo_set_target_registrations_per_interval() { new_test_ext().execute_with(|| { diff --git a/pallets/admin-utils/src/weights.rs b/pallets/admin-utils/src/weights.rs index 26b4a52fe0..46a038d928 100644 --- a/pallets/admin-utils/src/weights.rs +++ b/pallets/admin-utils/src/weights.rs @@ -50,7 +50,6 @@ pub trait WeightInfo { fn sudo_set_difficulty() -> Weight; fn sudo_set_adjustment_interval() -> Weight; fn sudo_set_target_registrations_per_interval() -> Weight; - fn sudo_set_activity_cutoff() -> Weight; fn sudo_set_rho() -> Weight; fn sudo_set_kappa() -> Weight; fn sudo_set_min_allowed_uids() -> Weight; @@ -361,29 +360,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::AdminFreezeWindow` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::MinActivityCutoff` (r:1 w:0) - /// Proof: `SubtensorModule::MinActivityCutoff` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::ActivityCutoff` (r:0 w:1) - /// Proof: `SubtensorModule::ActivityCutoff` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn sudo_set_activity_cutoff() -> Weight { - // Proof Size summary in bytes: - // Measured: `918` - // Estimated: `4383` - // Minimum execution time: 34_023_000 picoseconds. - Weight::from_parts(35_165_000, 4383) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `SubtensorModule::Tempo` (r:1 w:0) - /// Proof: `SubtensorModule::Tempo` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::PendingEpochAt` (r:1 w:0) - /// Proof: `SubtensorModule::PendingEpochAt` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastEpochBlock` (r:1 w:0) - /// Proof: `SubtensorModule::LastEpochBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AdminFreezeWindow` (r:1 w:0) - /// Proof: `SubtensorModule::AdminFreezeWindow` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) - /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Rho` (r:0 w:1) /// Proof: `SubtensorModule::Rho` (`max_values`: None, `max_size`: None, mode: `Measured`) fn sudo_set_rho() -> Weight { @@ -1327,29 +1303,6 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::AdminFreezeWindow` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::MinActivityCutoff` (r:1 w:0) - /// Proof: `SubtensorModule::MinActivityCutoff` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::ActivityCutoff` (r:0 w:1) - /// Proof: `SubtensorModule::ActivityCutoff` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn sudo_set_activity_cutoff() -> Weight { - // Proof Size summary in bytes: - // Measured: `918` - // Estimated: `4383` - // Minimum execution time: 34_023_000 picoseconds. - Weight::from_parts(35_165_000, 4383) - .saturating_add(RocksDbWeight::get().reads(6_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `SubtensorModule::Tempo` (r:1 w:0) - /// Proof: `SubtensorModule::Tempo` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::PendingEpochAt` (r:1 w:0) - /// Proof: `SubtensorModule::PendingEpochAt` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastEpochBlock` (r:1 w:0) - /// Proof: `SubtensorModule::LastEpochBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AdminFreezeWindow` (r:1 w:0) - /// Proof: `SubtensorModule::AdminFreezeWindow` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) - /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Rho` (r:0 w:1) /// Proof: `SubtensorModule::Rho` (`max_values`: None, `max_size`: None, mode: `Measured`) fn sudo_set_rho() -> Weight { diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index b4db388621..fe17231150 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -281,7 +281,6 @@ impl Pallet { Difficulty::::remove(netuid); MaxAllowedUids::::remove(netuid); ImmunityPeriod::::remove(netuid); - ActivityCutoff::::remove(netuid); ActivityCutoffFactorMilli::::remove(netuid); LastEpochBlock::::remove(netuid); PendingEpochAt::::remove(netuid); diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index b1afef3401..bd6919f9ff 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -800,12 +800,6 @@ pub mod pallet { T::InitialImmunityPeriod::get() } - /// Default activity cutoff. - #[pallet::type_value] - pub fn DefaultActivityCutoff() -> u16 { - T::InitialActivityCutoff::get() - } - /// Default weights version key. #[pallet::type_value] pub fn DefaultWeightsVersionKey() -> u64 { @@ -1058,12 +1052,6 @@ pub mod pallet { U64F64::saturating_from_num(0) } - /// Default value for minimum activity cutoff - #[pallet::type_value] - pub fn DefaultMinActivityCutoff() -> u16 { - 360 - } - /// Default value for setting subnet owner hotkey rate limit #[pallet::type_value] pub fn DefaultSetSNOwnerHotkeyRateLimit() -> u64 { @@ -1112,10 +1100,6 @@ pub mod pallet { true } - #[pallet::storage] - pub type MinActivityCutoff = - StorageValue<_, u16, ValueQuery, DefaultMinActivityCutoff>; - /// Global window (in blocks) at the end of each tempo where admin ops are disallowed #[pallet::storage] pub type AdminFreezeWindow = @@ -2021,11 +2005,6 @@ pub mod pallet { pub type ImmunityPeriod = StorageMap<_, Identity, NetUid, u16, ValueQuery, DefaultImmunityPeriod>; - /// --- MAP ( netuid ) --> activity_cutoff - // #[deprecated(note = "Replaced by `ActivityCutoffFactorMilli` (per-mille of `Tempo`).")] - #[pallet::storage] - pub type ActivityCutoff = - StorageMap<_, Identity, NetUid, u16, ValueQuery, DefaultActivityCutoff>; #[pallet::type_value] /// Default maximum weights limit. pub fn DefaultMaxWeightsLimit() -> u16 { diff --git a/pallets/subtensor/src/macros/config.rs b/pallets/subtensor/src/macros/config.rs index ad372d1e0e..efa5853494 100644 --- a/pallets/subtensor/src/macros/config.rs +++ b/pallets/subtensor/src/macros/config.rs @@ -171,9 +171,6 @@ mod config { /// Immunity Period Constant. #[pallet::constant] type InitialImmunityPeriod: Get; - /// Activity constant. - #[pallet::constant] - type InitialActivityCutoff: Get; /// Initial max registrations per block. #[pallet::constant] type InitialMaxRegistrationsPerBlock: Get; diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index 6401b5846d..6b93243eb8 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -193,8 +193,6 @@ mod errors { SlippageTooHigh, /// Subnet disallows transfer. TransferDisallowed, - /// Activity cutoff is being set too low. - ActivityCutoffTooLow, /// Call is disabled CallDisabled, /// FirstEmissionBlockNumber is already set. diff --git a/pallets/subtensor/src/macros/events.rs b/pallets/subtensor/src/macros/events.rs index 7bc9bf450a..29209208de 100644 --- a/pallets/subtensor/src/macros/events.rs +++ b/pallets/subtensor/src/macros/events.rs @@ -61,8 +61,6 @@ mod events { RegistrationPerIntervalSet(NetUid, u16), /// we set max registrations per block. MaxRegistrationsPerBlockSet(NetUid, u16), - /// an activity cutoff is set for a subnet. - ActivityCutoffSet(NetUid, u16), /// Rho value is set. RhoSet(NetUid, u16), /// steepness of the sigmoid used to compute alpha values. diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 6371f30e46..33c690d370 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -172,6 +172,8 @@ mod hooks { .saturating_add(migrations::migrate_reset_tnet_conviction_locks::migrate_reset_tnet_conviction_locks::()) // Seed LastEpochBlock for dynamic-tempo / owner-triggered-epochs feature .saturating_add(migrations::migrate_dynamic_tempo::migrate_dynamic_tempo::()) + // Remove the legacy ActivityCutoff / MinActivityCutoff storage now converted to ActivityCutoffFactorMilli + .saturating_add(migrations::migrate_remove_activity_cutoff::migrate_remove_activity_cutoff::()) // Populate locking reverse map. .saturating_add(migrations::migrate_populate_locking_coldkeys::migrate_populate_locking_coldkeys::()) // Capture the runtime-upgrade block for TAO-in refund cutover. diff --git a/pallets/subtensor/src/migrations/migrate_delete_subnet_21.rs b/pallets/subtensor/src/migrations/migrate_delete_subnet_21.rs index d5dadfc576..c3f9067cf0 100644 --- a/pallets/subtensor/src/migrations/migrate_delete_subnet_21.rs +++ b/pallets/subtensor/src/migrations/migrate_delete_subnet_21.rs @@ -96,7 +96,6 @@ pub fn migrate_delete_subnet_21() -> Weight { Difficulty::::remove(netuid); MaxAllowedUids::::remove(netuid); ImmunityPeriod::::remove(netuid); - ActivityCutoff::::remove(netuid); MinAllowedWeights::::remove(netuid); RegistrationsThisInterval::::remove(netuid); POWRegistrationsThisInterval::::remove(netuid); diff --git a/pallets/subtensor/src/migrations/migrate_delete_subnet_3.rs b/pallets/subtensor/src/migrations/migrate_delete_subnet_3.rs index 600bce38a9..6c13a414e3 100644 --- a/pallets/subtensor/src/migrations/migrate_delete_subnet_3.rs +++ b/pallets/subtensor/src/migrations/migrate_delete_subnet_3.rs @@ -98,7 +98,6 @@ pub fn migrate_delete_subnet_3() -> Weight { Difficulty::::remove(netuid); MaxAllowedUids::::remove(netuid); ImmunityPeriod::::remove(netuid); - ActivityCutoff::::remove(netuid); MinAllowedWeights::::remove(netuid); RegistrationsThisInterval::::remove(netuid); POWRegistrationsThisInterval::::remove(netuid); diff --git a/pallets/subtensor/src/migrations/migrate_dynamic_tempo.rs b/pallets/subtensor/src/migrations/migrate_dynamic_tempo.rs index c359b96c2f..2e57cea01f 100644 --- a/pallets/subtensor/src/migrations/migrate_dynamic_tempo.rs +++ b/pallets/subtensor/src/migrations/migrate_dynamic_tempo.rs @@ -5,6 +5,24 @@ use scale_info::prelude::string::String; use sp_core::H256; use sp_std::collections::vec_deque::VecDeque; +/// Storage alias for the legacy `ActivityCutoff` map (absolute block count). +/// +/// The typed `ActivityCutoff` storage was removed from the pallet once this +/// migration converted its values into `ActivityCutoffFactorMilli`. This migration +/// still needs to read the raw on-chain entries, so it keeps a self-contained +/// alias instead of depending on the pallet definition. `OptionQuery` is used so +/// the alias needs no custom default; the migration substitutes the historical +/// production default (`5_000`) for any subnet missing an entry — in practice +/// every existing subnet had an explicit value materialised on creation. +pub mod legacy { + use super::*; + use frame_support::pallet_prelude::{Identity, OptionQuery}; + use frame_support::storage_alias; + + #[storage_alias] + pub type ActivityCutoff = StorageMap, Identity, NetUid, u16, OptionQuery>; +} + /// One-shot migration for the dynamic-tempo / owner-triggered-epochs feature. /// /// 1. Back-fills `LastEpochBlock[netuid]` for every existing subnet so the first @@ -100,8 +118,9 @@ pub fn migrate_dynamic_tempo() -> Weight { epoch_index_seeded = epoch_index_seeded.saturating_add(1); writes = writes.saturating_add(1); - // Convert legacy absolute `ActivityCutoff` into per-mille `ActivityCutoffFactorMilli` - let old_cutoff = ActivityCutoff::::get(netuid) as u64; + // Convert legacy absolute `ActivityCutoff` into per-mille `ActivityCutoffFactorMilli`. + // Missing entries fall back to the historical production default (5_000 blocks). + let old_cutoff = legacy::ActivityCutoff::::get(netuid).unwrap_or(5_000) as u64; reads = reads.saturating_add(1); let tempo_u64 = tempo as u64; let raw_factor = old_cutoff diff --git a/pallets/subtensor/src/migrations/migrate_remove_activity_cutoff.rs b/pallets/subtensor/src/migrations/migrate_remove_activity_cutoff.rs new file mode 100644 index 0000000000..eb950715aa --- /dev/null +++ b/pallets/subtensor/src/migrations/migrate_remove_activity_cutoff.rs @@ -0,0 +1,15 @@ +use super::*; +use frame_support::weights::Weight; + +pub fn migrate_remove_activity_cutoff() -> Weight { + migrate_storage::( + "migrate_remove_activity_cutoff", + "SubtensorModule", + "ActivityCutoff", + ) + .saturating_add(migrate_storage::( + "migrate_remove_min_activity_cutoff", + "SubtensorModule", + "MinActivityCutoff", + )) +} diff --git a/pallets/subtensor/src/migrations/mod.rs b/pallets/subtensor/src/migrations/mod.rs index e846d325dc..4d8a9743c4 100644 --- a/pallets/subtensor/src/migrations/mod.rs +++ b/pallets/subtensor/src/migrations/mod.rs @@ -40,6 +40,7 @@ pub mod migrate_populate_owned_hotkeys; pub mod migrate_rao; pub mod migrate_rate_limit_keys; pub mod migrate_rate_limiting_last_blocks; +pub mod migrate_remove_activity_cutoff; pub mod migrate_remove_add_stake_burn_rate_limit; pub mod migrate_remove_commitments_rate_limit; pub mod migrate_remove_deprecated_conviction_maps; diff --git a/pallets/subtensor/src/subnets/subnet.rs b/pallets/subtensor/src/subnets/subnet.rs index f304c3d836..e48a5a100d 100644 --- a/pallets/subtensor/src/subnets/subnet.rs +++ b/pallets/subtensor/src/subnets/subnet.rs @@ -336,8 +336,11 @@ impl Pallet { if !ImmunityPeriod::::contains_key(netuid) { ImmunityPeriod::::insert(netuid, ImmunityPeriod::::get(netuid)); } - if !ActivityCutoff::::contains_key(netuid) { - ActivityCutoff::::insert(netuid, ActivityCutoff::::get(netuid)); + if !ActivityCutoffFactorMilli::::contains_key(netuid) { + ActivityCutoffFactorMilli::::insert( + netuid, + ActivityCutoffFactorMilli::::get(netuid), + ); } if !MinAllowedWeights::::contains_key(netuid) { MinAllowedWeights::::insert(netuid, MinAllowedWeights::::get(netuid)); diff --git a/pallets/subtensor/src/tests/children.rs b/pallets/subtensor/src/tests/children.rs index 922fd2c894..00b72b6bd0 100644 --- a/pallets/subtensor/src/tests/children.rs +++ b/pallets/subtensor/src/tests/children.rs @@ -2961,7 +2961,7 @@ fn test_childkey_take_drain() { BlockAtRegistration::::set(netuid, 2, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2, 2, 2]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); // makes all stake active + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); // makes all stake active ValidatorPermit::::insert(netuid, vec![true, true, false]); // Run run_coinbase to hit subnet epoch diff --git a/pallets/subtensor/src/tests/coinbase.rs b/pallets/subtensor/src/tests/coinbase.rs index 0e3e8038ff..3f696d94b7 100644 --- a/pallets/subtensor/src/tests/coinbase.rs +++ b/pallets/subtensor/src/tests/coinbase.rs @@ -3170,7 +3170,7 @@ fn test_mining_emission_distribution_with_no_root_sell() { BlockAtRegistration::::set(netuid, 2, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2, 2, 2]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); // makes all stake active + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); // makes all stake active ValidatorPermit::::insert(netuid, vec![true, true, false]); // Run run_coinbase until emissions are drained @@ -3367,7 +3367,7 @@ fn test_mining_emission_distribution_with_root_sell() { BlockAtRegistration::::set(netuid, 2, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2, 2, 2]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); // makes all stake active + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); // makes all stake active ValidatorPermit::::insert(netuid, vec![true, true, false]); // Run run_coinbase until emissions are drained @@ -4043,7 +4043,7 @@ fn test_disabling_owner_cut_sends_subnet_emission_to_miners_and_validators() { BlockAtRegistration::::set(netuid, miner_uid, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2; uid_count]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); let mut validator_permit = vec![false; uid_count]; validator_permit[validator_uid as usize] = true; ValidatorPermit::::insert(netuid, validator_permit); diff --git a/pallets/subtensor/src/tests/epoch.rs b/pallets/subtensor/src/tests/epoch.rs index b0383521a8..55f8666ce1 100644 --- a/pallets/subtensor/src/tests/epoch.rs +++ b/pallets/subtensor/src/tests/epoch.rs @@ -1442,7 +1442,11 @@ fn test_active_stake() { assert_eq!(*i, I32F32::from_num(65_535)); // floor(0.5*(2^16-1))/(2^16-1), then max-upscale to 65_535 } } - let activity_cutoff: u64 = SubtensorModule::get_activity_cutoff(netuid) as u64; + SubtensorModule::set_activity_cutoff_factor_milli( + netuid, + 5_000u32.saturating_mul(1_000) / tempo as u32, + ); + let activity_cutoff: u64 = SubtensorModule::get_activity_cutoff_blocks(netuid); run_to_block_no_epoch(netuid, activity_cutoff + 2); // run to block where validator (uid 0, 1) weights become outdated // === Update uid 0 weights diff --git a/pallets/subtensor/src/tests/epoch_logs.rs b/pallets/subtensor/src/tests/epoch_logs.rs index 265add2802..6e8554e674 100644 --- a/pallets/subtensor/src/tests/epoch_logs.rs +++ b/pallets/subtensor/src/tests/epoch_logs.rs @@ -60,7 +60,10 @@ fn setup_epoch(neurons: Vec, mechanism_count: u8) { NetworksAdded::::insert(netuid, true); let network_n = neurons.len() as u16; SubnetworkN::::insert(netuid, network_n); - ActivityCutoff::::insert(netuid, ACTIVITY_CUTOFF); + ActivityCutoffFactorMilli::::insert( + netuid, + (ACTIVITY_CUTOFF as u32).saturating_mul(1_000) / TEMPO as u32, + ); Tempo::::insert(netuid, TEMPO); SubtensorModule::set_weights_set_rate_limit(netuid, 0); MechanismCountCurrent::::insert(netuid, MechId::from(mechanism_count)); diff --git a/pallets/subtensor/src/tests/locks.rs b/pallets/subtensor/src/tests/locks.rs index 91b48b7881..23311bd8dd 100644 --- a/pallets/subtensor/src/tests/locks.rs +++ b/pallets/subtensor/src/tests/locks.rs @@ -4249,7 +4249,7 @@ fn test_epoch_distribution_auto_locks_owner_cut() { BlockAtRegistration::::set(netuid, miner_uid, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2; uid_count]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); let mut validator_permit = vec![false; uid_count]; validator_permit[validator_uid as usize] = true; ValidatorPermit::::insert(netuid, validator_permit); diff --git a/pallets/subtensor/src/tests/mechanism.rs b/pallets/subtensor/src/tests/mechanism.rs index ef51c7e8d5..324bc5a277 100644 --- a/pallets/subtensor/src/tests/mechanism.rs +++ b/pallets/subtensor/src/tests/mechanism.rs @@ -454,7 +454,7 @@ pub fn mock_epoch_state(netuid: NetUid, ck0: U256, hk0: U256, ck1: U256, hk1: U2 // Make both ACTIVE: recent updates & old registrations. Tempo::::insert(netuid, 1u16); - ActivityCutoff::::insert(netuid, u16::MAX); // large cutoff keeps them active + ActivityCutoffFactorMilli::::insert(netuid, u32::MAX); // large cutoff keeps them active LastUpdate::::insert(idx0, vec![2, 2]); LastUpdate::::insert(idx1, vec![2, 2]); BlockAtRegistration::::insert(netuid, 0, 1u64); // registered long ago @@ -1512,7 +1512,7 @@ fn epoch_mechanism_emergency_mode_distributes_by_stake() { // active + recent updates so they're all active let now = SubtensorModule::get_current_block_as_u64(); - ActivityCutoff::::insert(netuid, 1_000u16); + ActivityCutoffFactorMilli::::insert(netuid, u32::MAX); LastUpdate::::insert(idx, vec![now, now, now, now]); // All staking validators permitted => active_stake = stake diff --git a/pallets/subtensor/src/tests/migration.rs b/pallets/subtensor/src/tests/migration.rs index ec24697522..dda3f88db4 100644 --- a/pallets/subtensor/src/tests/migration.rs +++ b/pallets/subtensor/src/tests/migration.rs @@ -4896,7 +4896,9 @@ fn test_migrate_dynamic_tempo_activity_cutoff_round_trips_production_values() { for (i, &(cutoff, tempo)) in cases.iter().enumerate() { let netuid = NetUid::from((i + 1) as u16); add_network(netuid, tempo, 0); - ActivityCutoff::::insert(netuid, cutoff); + crate::migrations::migrate_dynamic_tempo::legacy::ActivityCutoff::::insert( + netuid, cutoff, + ); } crate::migrations::migrate_dynamic_tempo::migrate_dynamic_tempo::(); @@ -4934,3 +4936,45 @@ fn test_migrate_dynamic_tempo_idempotent() { ); }); } + +#[test] +fn test_migrate_remove_activity_cutoff_wipes_legacy_storage() { + use crate::migrations::migrate_dynamic_tempo::legacy; + new_test_ext(1).execute_with(|| { + // Seed legacy ActivityCutoff entries that linger after dynamic-tempo conversion. + for i in 1u16..=3 { + let netuid = NetUid::from(i); + add_network(netuid, 360, 0); + legacy::ActivityCutoff::::insert(netuid, 5_000u16 + i); + assert!(legacy::ActivityCutoff::::contains_key(netuid)); + } + + crate::migrations::migrate_remove_activity_cutoff::migrate_remove_activity_cutoff::(); + + // Every legacy entry is gone. + for i in 1u16..=3 { + let netuid = NetUid::from(i); + assert!(!legacy::ActivityCutoff::::contains_key(netuid)); + } + // Both sub-migrations are flagged as run. + assert!(HasMigrationRun::::get( + b"migrate_remove_activity_cutoff".to_vec() + )); + assert!(HasMigrationRun::::get( + b"migrate_remove_min_activity_cutoff".to_vec() + )); + }); +} + +#[test] +fn test_migrate_remove_activity_cutoff_idempotent() { + new_test_ext(1).execute_with(|| { + // Running with no legacy data present must not panic and must flag completion. + crate::migrations::migrate_remove_activity_cutoff::migrate_remove_activity_cutoff::(); + assert!(HasMigrationRun::::get( + b"migrate_remove_activity_cutoff".to_vec() + )); + // Second run is a no-op. + crate::migrations::migrate_remove_activity_cutoff::migrate_remove_activity_cutoff::(); + }); +} diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 0e3347ec89..5ea4f39b0d 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -221,16 +221,15 @@ parameter_types! { pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = crate::MIN_TEMPO; - pub const MaxTempo: u16 = crate::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = crate::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = crate::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: u64 = 0; pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -288,7 +287,6 @@ impl crate::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/pallets/subtensor/src/tests/mock_high_ed.rs b/pallets/subtensor/src/tests/mock_high_ed.rs index 6f5c69a89c..286650403d 100644 --- a/pallets/subtensor/src/tests/mock_high_ed.rs +++ b/pallets/subtensor/src/tests/mock_high_ed.rs @@ -181,16 +181,15 @@ parameter_types! { pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = crate::MIN_TEMPO; - pub const MaxTempo: u16 = crate::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = crate::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = crate::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: u64 = 0; pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -248,7 +247,6 @@ impl crate::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index a967761ef5..62a9994110 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -357,7 +357,7 @@ fn dissolve_clears_all_per_subnet_storages() { MaxAllowedUids::::insert(net, 1u16); ImmunityPeriod::::insert(net, 1u16); - ActivityCutoff::::insert(net, 1u16); + ActivityCutoffFactorMilli::::insert(net, 1_000u32); MinAllowedWeights::::insert(net, 1u16); RegistrationsThisInterval::::insert(net, 1u16); @@ -509,7 +509,7 @@ fn dissolve_clears_all_per_subnet_storages() { assert!(!MaxAllowedUids::::contains_key(net)); assert!(!ImmunityPeriod::::contains_key(net)); - assert!(!ActivityCutoff::::contains_key(net)); + assert!(!ActivityCutoffFactorMilli::::contains_key(net)); assert!(!MinAllowedWeights::::contains_key(net)); assert!(!RegistrationsThisInterval::::contains_key(net)); diff --git a/pallets/subtensor/src/tests/staking.rs b/pallets/subtensor/src/tests/staking.rs index 660b6957d7..1e0a6431e6 100644 --- a/pallets/subtensor/src/tests/staking.rs +++ b/pallets/subtensor/src/tests/staking.rs @@ -2466,7 +2466,7 @@ fn test_mining_emission_distribution_validator_valiminer_miner() { BlockAtRegistration::::set(netuid, 2, 1); LastUpdate::::set(NetUidStorageIndex::from(netuid), vec![2, 2, 2]); Kappa::::set(netuid, u16::MAX / 5); - ActivityCutoff::::set(netuid, u16::MAX); // makes all stake active + ActivityCutoffFactorMilli::::set(netuid, u32::MAX); // makes all stake active ValidatorPermit::::insert(netuid, vec![true, true, false]); // Run run_coinbase until emissions are drained diff --git a/pallets/subtensor/src/utils/misc.rs b/pallets/subtensor/src/utils/misc.rs index 7e62e4c7ec..f4030ad752 100644 --- a/pallets/subtensor/src/utils/misc.rs +++ b/pallets/subtensor/src/utils/misc.rs @@ -601,14 +601,6 @@ impl Pallet { Rho::::insert(netuid, rho); } - pub fn get_activity_cutoff(netuid: NetUid) -> u16 { - ActivityCutoff::::get(netuid) - } - pub fn set_activity_cutoff(netuid: NetUid, activity_cutoff: u16) { - ActivityCutoff::::insert(netuid, activity_cutoff); - Self::deposit_event(Event::ActivityCutoffSet(netuid, activity_cutoff)); - } - /// Effective activity cutoff in blocks, derived from `ActivityCutoffFactorMilli` and `Tempo`. /// `cutoff_blocks = (factor × tempo) / 1000`, clamped to ≥ 1. pub fn get_activity_cutoff_blocks(netuid: NetUid) -> u64 { diff --git a/pallets/transaction-fee/src/tests/mock.rs b/pallets/transaction-fee/src/tests/mock.rs index 7d8508c5c0..e6fac5a131 100644 --- a/pallets/transaction-fee/src/tests/mock.rs +++ b/pallets/transaction-fee/src/tests/mock.rs @@ -193,16 +193,15 @@ parameter_types! { pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const MinTempo: u16 = pallet_subtensor::MIN_TEMPO; - pub const MaxTempo: u16 = pallet_subtensor::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = pallet_subtensor::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = pallet_subtensor::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: TaoBalance = TaoBalance::new(0); pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -259,7 +258,6 @@ impl pallet_subtensor::Config for Test { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/precompiles/src/mock.rs b/precompiles/src/mock.rs index 2cd917b43c..1ccd17e4a2 100644 --- a/precompiles/src/mock.rs +++ b/precompiles/src/mock.rs @@ -116,16 +116,15 @@ parameter_types! { pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); - pub const MinTempo: u16 = pallet_subtensor::MIN_TEMPO; - pub const MaxTempo: u16 = pallet_subtensor::MAX_TEMPO; - pub const MinActivityCutoffFactorMilli: u32 = pallet_subtensor::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; - pub const MaxActivityCutoffFactorMilli: u32 = pallet_subtensor::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MinTempo: u16 = 360; + pub const MaxTempo: u16 = 50_400; + pub const MinActivityCutoffFactorMilli: u32 = 1_000; + pub const MaxActivityCutoffFactorMilli: u32 = 50_000; pub const InitialValidatorPruneLen: u64 = 0; pub const InitialScalingLawPower: u16 = 50; pub const InitialMaxAllowedValidators: u16 = 100; pub const InitialIssuance: TaoBalance = TaoBalance::new(0); pub const InitialDifficulty: u64 = 10_000; - pub const InitialActivityCutoff: u16 = 5_000; pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; pub const InitialMaxRegistrationsPerBlock: u16 = 3; @@ -431,7 +430,6 @@ impl pallet_subtensor::Config for Runtime { type InitialValidatorPruneLen = InitialValidatorPruneLen; type InitialScalingLawPower = InitialScalingLawPower; type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; type InitialPruningScore = InitialPruningScore; type InitialBondsMovingAverage = InitialBondsMovingAverage; diff --git a/precompiles/src/solidity/subnet.abi b/precompiles/src/solidity/subnet.abi index 60e8b49906..961a824804 100644 --- a/precompiles/src/solidity/subnet.abi +++ b/precompiles/src/solidity/subnet.abi @@ -1,23 +1,4 @@ [ - { - "inputs": [ - { - "internalType": "uint16", - "name": "netuid", - "type": "uint16" - } - ], - "name": "getActivityCutoff", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -593,24 +574,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "netuid", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "activityCutoff", - "type": "uint16" - } - ], - "name": "setActivityCutoff", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, { "inputs": [ { diff --git a/precompiles/src/solidity/subnet.sol b/precompiles/src/solidity/subnet.sol index c454781cb5..c2dc56ea47 100644 --- a/precompiles/src/solidity/subnet.sol +++ b/precompiles/src/solidity/subnet.sol @@ -106,13 +106,6 @@ interface ISubnet { int16 steepness ) external payable; - function getActivityCutoff(uint16 netuid) external view returns (uint16); - - function setActivityCutoff( - uint16 netuid, - uint16 activityCutoff - ) external payable; - function getActivityCutoffFactor( uint16 netuid ) external view returns (uint32); diff --git a/precompiles/src/subnet.rs b/precompiles/src/subnet.rs index 9992bd1cf3..4c1b886bd4 100644 --- a/precompiles/src/subnet.rs +++ b/precompiles/src/subnet.rs @@ -463,33 +463,6 @@ where ) } - #[precompile::public("getActivityCutoff(uint16)")] - #[precompile::view] - fn get_activity_cutoff(handle: &mut impl PrecompileHandle, netuid: u16) -> EvmResult { - handle.record_db_reads::(1)?; - Ok(pallet_subtensor::ActivityCutoff::::get(NetUid::from( - netuid, - ))) - } - - #[precompile::public("setActivityCutoff(uint16,uint16)")] - #[precompile::payable] - fn set_activity_cutoff( - handle: &mut impl PrecompileHandle, - netuid: u16, - activity_cutoff: u16, - ) -> EvmResult<()> { - let call = pallet_admin_utils::Call::::sudo_set_activity_cutoff { - netuid: netuid.into(), - activity_cutoff, - }; - - handle.try_dispatch_runtime_call::( - call, - RawOrigin::Signed(handle.caller_account_id::()), - ) - } - #[precompile::public("getActivityCutoffFactor(uint16)")] #[precompile::view] fn get_activity_cutoff_factor(_: &mut impl PrecompileHandle, netuid: u16) -> EvmResult { @@ -1156,32 +1129,6 @@ mod tests { U256::from(110_u64), ); - let activity_cutoff = pallet_subtensor::MinActivityCutoff::::get() + 1; - precompiles - .prepare_test( - caller, - precompile_addr, - encode_with_selector( - selector_u32("setActivityCutoff(uint16,uint16)"), - (TEST_NETUID_U16, activity_cutoff), - ), - ) - .execute_returns(()); - assert_eq!( - pallet_subtensor::ActivityCutoff::::get(netuid), - activity_cutoff - ); - assert_static_call( - &precompiles, - caller, - precompile_addr, - encode_with_selector( - selector_u32("getActivityCutoff(uint16)"), - (TEST_NETUID_U16,), - ), - U256::from(activity_cutoff), - ); - let factor_milli: u32 = 1_500; precompiles .prepare_test( diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index a39c473880..c3aacab445 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -234,7 +234,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 423, + spec_version: 424, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -734,7 +734,7 @@ subtensor_macros::define_proxy_filters! { AdminUtils::sudo_set_min_allowed_weights, AdminUtils::sudo_set_kappa, AdminUtils::sudo_set_rho, - AdminUtils::sudo_set_activity_cutoff, + SubtensorModule::set_activity_cutoff_factor, AdminUtils::sudo_set_network_registration_allowed, AdminUtils::sudo_set_network_pow_registration_allowed, AdminUtils::sudo_set_max_burn, @@ -982,7 +982,6 @@ parameter_types! { pub const SubtensorInitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const SubtensorInitialTargetRegistrationsPerInterval: u16 = 2; pub const SubtensorInitialImmunityPeriod: u16 = 4096; - pub const SubtensorInitialActivityCutoff: u16 = 5000; pub const SubtensorInitialMaxRegistrationsPerBlock: u16 = 1; pub const SubtensorInitialPruningScore : u16 = u16::MAX; pub const SubtensorInitialBondsMovingAverage: u64 = 900_000; @@ -1066,7 +1065,6 @@ impl pallet_subtensor::Config for Runtime { type InitialAdjustmentAlpha = SubtensorInitialAdjustmentAlpha; type InitialTargetRegistrationsPerInterval = SubtensorInitialTargetRegistrationsPerInterval; type InitialImmunityPeriod = SubtensorInitialImmunityPeriod; - type InitialActivityCutoff = SubtensorInitialActivityCutoff; type InitialMaxRegistrationsPerBlock = SubtensorInitialMaxRegistrationsPerBlock; type InitialPruningScore = SubtensorInitialPruningScore; type InitialMaxAllowedValidators = SubtensorInitialMaxAllowedValidators;