Skip to content

Commit 94d093b

Browse files
committed
use migration to clear the old pending em map
1 parent 264d9c3 commit 94d093b

File tree

6 files changed

+77
-23
lines changed

6 files changed

+77
-23
lines changed

pallets/subtensor/src/coinbase/root.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,6 @@ impl<T: Config> Pallet<T> {
314314

315315
// --- 15. Mechanism step / emissions bookkeeping.
316316
FirstEmissionBlockNumber::<T>::remove(netuid);
317-
PendingEmission::<T>::remove(netuid);
318317
PendingValidatorEmission::<T>::remove(netuid);
319318
PendingServerEmission::<T>::remove(netuid);
320319
PendingRootAlphaDivs::<T>::remove(netuid);

pallets/subtensor/src/coinbase/run_coinbase.rs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -262,23 +262,6 @@ impl<T: Config> Pallet<T> {
262262
BlocksSinceLastStep::<T>::insert(netuid, 0);
263263
LastMechansimStepBlock::<T>::insert(netuid, current_block);
264264

265-
// Get and drain the PendingEmission.
266-
// deprecated
267-
let pending_emission = PendingEmission::<T>::get(netuid);
268-
PendingEmission::<T>::insert(netuid, AlphaCurrency::ZERO);
269-
// If pending_emission is not zero, we split it between the server emission and the validator emission.
270-
if !pending_emission.is_zero() {
271-
let server_alpha = pending_emission.saturating_div(2.into());
272-
let validator_alpha = pending_emission.saturating_sub(server_alpha);
273-
274-
PendingServerEmission::<T>::mutate(netuid, |total| {
275-
*total = total.saturating_add(server_alpha)
276-
});
277-
PendingValidatorEmission::<T>::mutate(netuid, |total| {
278-
*total = total.saturating_add(validator_alpha)
279-
});
280-
}
281-
282265
// Get and drain the subnet pending emission.
283266
let pending_server_alpha = PendingServerEmission::<T>::get(netuid);
284267
PendingServerEmission::<T>::insert(netuid, AlphaCurrency::ZERO);

pallets/subtensor/src/lib.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,10 +1430,6 @@ pub mod pallet {
14301430
pub type NetworkRegisteredAt<T: Config> =
14311431
StorageMap<_, Identity, NetUid, u64, ValueQuery, DefaultNetworkRegisteredAt<T>>;
14321432
#[pallet::storage]
1433-
/// --- MAP ( netuid ) --> pending_emission
1434-
pub type PendingEmission<T> =
1435-
StorageMap<_, Identity, NetUid, AlphaCurrency, ValueQuery, DefaultPendingEmission<T>>;
1436-
#[pallet::storage]
14371433
/// --- MAP ( netuid ) --> pending_server_emission
14381434
pub type PendingServerEmission<T> =
14391435
StorageMap<_, Identity, NetUid, AlphaCurrency, ValueQuery, DefaultZeroAlpha<T>>;

pallets/subtensor/src/macros/hooks.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ mod hooks {
161161
// Remove obsolete map entries
162162
.saturating_add(migrations::migrate_remove_tao_dividends::migrate_remove_tao_dividends::<T>())
163163
// Re-init tao flows
164-
.saturating_add(migrations::migrate_init_tao_flow::migrate_init_tao_flow::<T>());
164+
.saturating_add(migrations::migrate_init_tao_flow::migrate_init_tao_flow::<T>())
165+
// Migrate pending emissions
166+
.saturating_add(migrations::migrate_pending_emissions::migrate_pending_emissions::<T>());
165167
weight
166168
}
167169

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
use super::*;
2+
use frame_support::{storage_alias, traits::Get, weights::Weight};
3+
use substrate_fixed::types::U96F32;
4+
5+
pub mod deprecated_pending_emission_format {
6+
use super::*;
7+
8+
#[storage_alias]
9+
pub(super) type PendingEmission<T: Config> =
10+
StorageMap<Pallet<T>, Identity, NetUid, AlphaCurrency, ValueQuery>;
11+
}
12+
13+
pub fn migrate_pending_emissions<T: Config>() -> Weight {
14+
let migration_name = b"migrate_pending_emissions".to_vec();
15+
let mut weight: Weight = T::DbWeight::get().reads(1);
16+
17+
// Skip if already executed
18+
if HasMigrationRun::<T>::get(&migration_name) {
19+
log::info!(
20+
target: "runtime",
21+
"Migration '{}' already run - skipping.",
22+
String::from_utf8_lossy(&migration_name)
23+
);
24+
return weight;
25+
}
26+
log::info!(
27+
"Running migration '{}'",
28+
String::from_utf8_lossy(&migration_name)
29+
);
30+
31+
// Pull from PendingEmission and distribute to PendingValidatorEmission and PendingServerEmission
32+
for (netuid, pending_emission) in
33+
deprecated_pending_emission_format::PendingEmission::<T>::iter()
34+
{
35+
// Split up the pending emission into server and validator emission
36+
// Server emission is pending+root_alpha times the 50% miner cut.
37+
let root_alpha: U96F32 =
38+
U96F32::saturating_from_num(PendingRootAlphaDivs::<T>::get(netuid).to_u64());
39+
let server_emission_float: U96F32 = U96F32::saturating_from_num(pending_emission.to_u64())
40+
.saturating_add(root_alpha)
41+
.saturating_div(U96F32::saturating_from_num(2));
42+
let server_emission: AlphaCurrency =
43+
server_emission_float.saturating_to_num::<u64>().into();
44+
let validator_emission = pending_emission.saturating_sub(server_emission);
45+
46+
PendingValidatorEmission::<T>::mutate(netuid, |total| {
47+
*total = total.saturating_add(validator_emission)
48+
});
49+
PendingServerEmission::<T>::mutate(netuid, |total| {
50+
*total = total.saturating_add(server_emission)
51+
});
52+
53+
weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 2));
54+
}
55+
56+
// Kill the map
57+
let removal_result =
58+
deprecated_pending_emission_format::PendingEmission::<T>::clear(u32::MAX, None);
59+
weight = weight.saturating_add(
60+
T::DbWeight::get().reads_writes(removal_result.loops as u64, removal_result.backend as u64),
61+
);
62+
63+
// Mark Migration as Completed
64+
HasMigrationRun::<T>::insert(&migration_name, true);
65+
weight = weight.saturating_add(T::DbWeight::get().writes(1));
66+
67+
log::info!(
68+
"Migration '{:?}' completed successfully.",
69+
String::from_utf8_lossy(&migration_name)
70+
);
71+
72+
weight
73+
}

pallets/subtensor/src/migrations/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ pub mod migrate_network_immunity_period;
2727
pub mod migrate_network_lock_cost_2500;
2828
pub mod migrate_network_lock_reduction_interval;
2929
pub mod migrate_orphaned_storage_items;
30+
pub mod migrate_pending_emissions;
3031
pub mod migrate_populate_owned_hotkeys;
3132
pub mod migrate_rao;
3233
pub mod migrate_rate_limit_keys;

0 commit comments

Comments
 (0)