Skip to content

Commit 5cafe0a

Browse files
committed
burn alpha not sold by root
1 parent e9c9424 commit 5cafe0a

File tree

4 files changed

+73
-23
lines changed

4 files changed

+73
-23
lines changed

pallets/subtensor/src/benchmarks.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,7 @@ mod pallet_benchmarks {
16191619
netuid,
16201620
AlphaCurrency::ZERO,
16211621
pending_root_alpha.into(),
1622+
pending_root_alpha.into(),
16221623
AlphaCurrency::ZERO,
16231624
);
16241625

pallets/subtensor/src/coinbase/run_coinbase.rs

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -195,29 +195,27 @@ impl<T: Config> Pallet<T> {
195195
let alpha_out_i: U96F32 = *alpha_out.get(netuid_i).unwrap_or(&asfloat!(0.0));
196196
log::debug!("alpha_out_i: {alpha_out_i:?}");
197197

198-
// Get root proportion of alpha_out dividends.
199-
let mut root_alpha: U96F32 = asfloat!(0.0);
198+
// Get ALPHA issuance.
199+
let alpha_issuance: U96F32 = asfloat!(Self::get_alpha_issuance(*netuid_i));
200+
log::debug!("alpha_issuance: {alpha_issuance:?}");
201+
202+
// Get root proportional dividends.
203+
let root_proportion: U96F32 = tao_weight
204+
.checked_div(tao_weight.saturating_add(alpha_issuance))
205+
.unwrap_or(asfloat!(0.0));
206+
log::debug!("root_proportion: {root_proportion:?}");
207+
208+
// Get root alpha from root prop.
209+
let root_alpha: U96F32 = root_proportion
210+
.saturating_mul(alpha_out_i) // Total alpha emission per block remaining.
211+
.saturating_mul(asfloat!(0.5)); // 50% to validators.
212+
log::debug!("root_alpha: {root_alpha:?}");
213+
200214
if root_sell_flag {
201-
// Get ALPHA issuance.
202-
let alpha_issuance: U96F32 = asfloat!(Self::get_alpha_issuance(*netuid_i));
203-
log::debug!("alpha_issuance: {alpha_issuance:?}");
204-
205-
// Get root proportional dividends.
206-
let root_proportion: U96F32 = tao_weight
207-
.checked_div(tao_weight.saturating_add(alpha_issuance))
208-
.unwrap_or(asfloat!(0.0));
209-
log::debug!("root_proportion: {root_proportion:?}");
210-
211-
// Get root alpha from root prop.
212-
root_alpha = root_proportion
213-
.saturating_mul(alpha_out_i) // Total alpha emission per block remaining.
214-
.saturating_mul(asfloat!(0.5)); // 50% to validators.
215215
PendingRootAlphaDivs::<T>::mutate(*netuid_i, |total| {
216216
*total = total.saturating_add(tou64!(root_alpha).into());
217217
});
218218
}
219-
// Remove root alpha from alpha_out.
220-
log::debug!("root_alpha: {root_alpha:?}");
221219

222220
// Get pending alpha as original alpha_out - root_alpha.
223221
let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha);
@@ -227,6 +225,10 @@ impl<T: Config> Pallet<T> {
227225
PendingEmission::<T>::mutate(*netuid_i, |total| {
228226
*total = total.saturating_add(tou64!(pending_alpha).into());
229227
});
228+
// Accumulate total alpha emission, including burned alpha from root prop.
229+
TotalEmission::<T>::mutate(*netuid_i, |total| {
230+
*total = total.saturating_add(tou64!(alpha_out_i).into());
231+
});
230232
}
231233

232234
// --- 8. Update moving prices after using them in the emission calculation.
@@ -263,8 +265,18 @@ impl<T: Config> Pallet<T> {
263265
let owner_cut = PendingOwnerCut::<T>::get(netuid);
264266
PendingOwnerCut::<T>::insert(netuid, AlphaCurrency::ZERO);
265267

268+
// Get total emission and drain.
269+
let total_emission = TotalEmission::<T>::get(netuid);
270+
TotalEmission::<T>::insert(netuid, AlphaCurrency::ZERO);
271+
266272
// Distribute the emission.
267-
Self::distribute_emission(netuid, pending_alpha, pending_root_alpha, owner_cut);
273+
Self::distribute_emission(
274+
netuid,
275+
pending_alpha,
276+
pending_root_alpha,
277+
total_emission,
278+
owner_cut,
279+
);
268280
} else {
269281
// Increment
270282
BlocksSinceLastStep::<T>::mutate(netuid, |total| *total = total.saturating_add(1));
@@ -635,14 +647,14 @@ impl<T: Config> Pallet<T> {
635647
netuid: NetUid,
636648
pending_alpha: AlphaCurrency,
637649
pending_root_alpha: AlphaCurrency,
650+
total_alpha: AlphaCurrency,
638651
owner_cut: AlphaCurrency,
639652
) {
640653
log::debug!(
641654
"Draining pending alpha emission for netuid {netuid:?}, pending_alpha: {pending_alpha:?}, pending_root_alpha: {pending_root_alpha:?}, owner_cut: {owner_cut:?}"
642655
);
643656

644657
let tao_weight = Self::get_tao_weight();
645-
let total_alpha = pending_alpha.saturating_add(pending_root_alpha);
646658

647659
// Run the epoch.
648660
let hotkey_emission: Vec<(T::AccountId, AlphaCurrency, AlphaCurrency)> =

pallets/subtensor/src/tests/claim_root.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ fn test_claim_root_with_drain_emissions() {
7676
netuid,
7777
AlphaCurrency::ZERO,
7878
pending_root_alpha.into(),
79+
pending_root_alpha.into(),
7980
AlphaCurrency::ZERO,
8081
);
8182

@@ -144,6 +145,7 @@ fn test_claim_root_with_drain_emissions() {
144145
netuid,
145146
AlphaCurrency::ZERO,
146147
pending_root_alpha.into(),
148+
pending_root_alpha.into(),
147149
AlphaCurrency::ZERO,
148150
);
149151

@@ -245,6 +247,7 @@ fn test_claim_root_adding_stake_proportionally_for_two_stakers() {
245247
netuid,
246248
AlphaCurrency::ZERO,
247249
pending_root_alpha.into(),
250+
pending_root_alpha.into(),
248251
AlphaCurrency::ZERO,
249252
);
250253

@@ -346,6 +349,7 @@ fn test_claim_root_adding_stake_disproportionally_for_two_stakers() {
346349
netuid,
347350
AlphaCurrency::ZERO,
348351
pending_root_alpha.into(),
352+
pending_root_alpha.into(),
349353
AlphaCurrency::ZERO,
350354
);
351355

@@ -437,6 +441,7 @@ fn test_claim_root_with_changed_stake() {
437441
netuid,
438442
AlphaCurrency::ZERO,
439443
pending_root_alpha.into(),
444+
pending_root_alpha.into(),
440445
AlphaCurrency::ZERO,
441446
);
442447

@@ -489,6 +494,7 @@ fn test_claim_root_with_changed_stake() {
489494
netuid,
490495
AlphaCurrency::ZERO,
491496
pending_root_alpha.into(),
497+
pending_root_alpha.into(),
492498
AlphaCurrency::ZERO,
493499
);
494500

@@ -542,6 +548,7 @@ fn test_claim_root_with_changed_stake() {
542548
netuid,
543549
AlphaCurrency::ZERO,
544550
pending_root_alpha.into(),
551+
pending_root_alpha.into(),
545552
AlphaCurrency::ZERO,
546553
);
547554

@@ -634,6 +641,7 @@ fn test_claim_root_with_drain_emissions_and_swap_claim_type() {
634641
netuid,
635642
AlphaCurrency::ZERO,
636643
pending_root_alpha.into(),
644+
pending_root_alpha.into(),
637645
AlphaCurrency::ZERO,
638646
);
639647

@@ -678,6 +686,7 @@ fn test_claim_root_with_drain_emissions_and_swap_claim_type() {
678686
netuid,
679687
AlphaCurrency::ZERO,
680688
pending_root_alpha.into(),
689+
pending_root_alpha.into(),
681690
AlphaCurrency::ZERO,
682691
);
683692

@@ -714,6 +723,7 @@ fn test_claim_root_with_drain_emissions_and_swap_claim_type() {
714723
netuid,
715724
AlphaCurrency::ZERO,
716725
pending_root_alpha.into(),
726+
pending_root_alpha.into(),
717727
AlphaCurrency::ZERO,
718728
);
719729

@@ -1139,6 +1149,7 @@ fn test_claim_root_with_swap_coldkey() {
11391149
netuid,
11401150
AlphaCurrency::ZERO,
11411151
pending_root_alpha.into(),
1152+
pending_root_alpha.into(),
11421153
AlphaCurrency::ZERO,
11431154
);
11441155

@@ -1229,6 +1240,7 @@ fn test_claim_root_with_swap_hotkey() {
12291240
netuid,
12301241
AlphaCurrency::ZERO,
12311242
pending_root_alpha.into(),
1243+
pending_root_alpha.into(),
12321244
AlphaCurrency::ZERO,
12331245
);
12341246

@@ -1345,6 +1357,7 @@ fn test_claim_root_on_network_deregistration() {
13451357
netuid,
13461358
AlphaCurrency::ZERO,
13471359
pending_root_alpha.into(),
1360+
pending_root_alpha.into(),
13481361
AlphaCurrency::ZERO,
13491362
);
13501363

@@ -1485,6 +1498,7 @@ fn test_claim_root_with_unrelated_subnets() {
14851498
netuid,
14861499
AlphaCurrency::ZERO,
14871500
pending_root_alpha.into(),
1501+
pending_root_alpha.into(),
14881502
AlphaCurrency::ZERO,
14891503
);
14901504

pallets/subtensor/src/tests/coinbase.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ fn test_drain_base() {
708708
AlphaCurrency::ZERO,
709709
AlphaCurrency::ZERO,
710710
AlphaCurrency::ZERO,
711+
AlphaCurrency::ZERO,
711712
)
712713
});
713714
}
@@ -723,6 +724,7 @@ fn test_drain_base_with_subnet() {
723724
AlphaCurrency::ZERO,
724725
AlphaCurrency::ZERO,
725726
AlphaCurrency::ZERO,
727+
AlphaCurrency::ZERO,
726728
)
727729
});
728730
}
@@ -747,6 +749,7 @@ fn test_drain_base_with_subnet_with_single_staker_not_registered() {
747749
netuid,
748750
pending_alpha.into(),
749751
AlphaCurrency::ZERO,
752+
pending_alpha.into(),
750753
AlphaCurrency::ZERO,
751754
);
752755
let stake_after =
@@ -776,6 +779,7 @@ fn test_drain_base_with_subnet_with_single_staker_registered() {
776779
netuid,
777780
pending_alpha,
778781
AlphaCurrency::ZERO,
782+
pending_alpha,
779783
AlphaCurrency::ZERO,
780784
);
781785
let stake_after =
@@ -820,6 +824,7 @@ fn test_drain_base_with_subnet_with_single_staker_registered_root_weight() {
820824
netuid,
821825
pending_alpha,
822826
pending_root_alpha,
827+
pending_alpha.saturating_add(pending_root_alpha),
823828
AlphaCurrency::ZERO,
824829
);
825830
let stake_after =
@@ -867,6 +872,7 @@ fn test_drain_base_with_subnet_with_two_stakers_registered() {
867872
netuid,
868873
pending_alpha,
869874
AlphaCurrency::ZERO,
875+
pending_alpha,
870876
AlphaCurrency::ZERO,
871877
);
872878
let stake_after1 =
@@ -932,6 +938,7 @@ fn test_drain_base_with_subnet_with_two_stakers_registered_and_root() {
932938
netuid,
933939
pending_alpha,
934940
AlphaCurrency::ZERO,
941+
pending_alpha,
935942
AlphaCurrency::ZERO,
936943
);
937944
let stake_after1 =
@@ -1003,7 +1010,13 @@ fn test_drain_base_with_subnet_with_two_stakers_registered_and_root_different_am
10031010
let pending_tao = TaoCurrency::from(1_000_000_000);
10041011
let pending_alpha = AlphaCurrency::from(1_000_000_000);
10051012
assert_eq!(SubnetTAO::<Test>::get(NetUid::ROOT), TaoCurrency::ZERO);
1006-
SubtensorModule::distribute_emission(netuid, pending_alpha, AlphaCurrency::ZERO, 0.into());
1013+
SubtensorModule::distribute_emission(
1014+
netuid,
1015+
pending_alpha,
1016+
AlphaCurrency::ZERO,
1017+
pending_alpha,
1018+
0.into(),
1019+
);
10071020
let stake_after1 =
10081021
SubtensorModule::get_stake_for_hotkey_and_coldkey_on_subnet(&hotkey1, &coldkey, netuid);
10091022
let root_after1 = SubtensorModule::get_stake_for_hotkey_and_coldkey_on_subnet(
@@ -1082,6 +1095,7 @@ fn test_drain_base_with_subnet_with_two_stakers_registered_and_root_different_am
10821095
netuid,
10831096
pending_alpha,
10841097
AlphaCurrency::ZERO,
1098+
pending_alpha,
10851099
AlphaCurrency::ZERO,
10861100
);
10871101
let stake_after1 =
@@ -1143,6 +1157,7 @@ fn test_drain_alpha_childkey_parentkey() {
11431157
netuid,
11441158
pending_alpha,
11451159
AlphaCurrency::ZERO,
1160+
pending_alpha,
11461161
AlphaCurrency::ZERO,
11471162
);
11481163
let parent_stake_after = SubtensorModule::get_stake_for_hotkey_on_subnet(&parent, netuid);
@@ -1368,6 +1383,7 @@ fn test_get_root_children_drain() {
13681383
alpha,
13691384
pending_alpha,
13701385
AlphaCurrency::ZERO,
1386+
pending_alpha,
13711387
AlphaCurrency::ZERO,
13721388
);
13731389

@@ -1390,8 +1406,8 @@ fn test_get_root_children_drain() {
13901406
SubtensorModule::distribute_emission(
13911407
alpha,
13921408
pending_alpha,
1393-
// pending_root1,
13941409
AlphaCurrency::ZERO,
1410+
pending_alpha,
13951411
AlphaCurrency::ZERO,
13961412
);
13971413

@@ -1415,6 +1431,7 @@ fn test_get_root_children_drain() {
14151431
alpha,
14161432
pending_alpha,
14171433
AlphaCurrency::ZERO,
1434+
pending_alpha,
14181435
AlphaCurrency::ZERO,
14191436
);
14201437

@@ -1503,6 +1520,7 @@ fn test_get_root_children_drain_half_proportion() {
15031520
alpha,
15041521
pending_alpha,
15051522
AlphaCurrency::ZERO,
1523+
pending_alpha,
15061524
AlphaCurrency::ZERO,
15071525
);
15081526

@@ -1589,6 +1607,7 @@ fn test_get_root_children_drain_with_take() {
15891607
alpha,
15901608
pending_alpha,
15911609
AlphaCurrency::ZERO,
1610+
pending_alpha,
15921611
AlphaCurrency::ZERO,
15931612
);
15941613

@@ -1676,6 +1695,7 @@ fn test_get_root_children_drain_with_half_take() {
16761695
alpha,
16771696
pending_alpha,
16781697
AlphaCurrency::ZERO,
1698+
pending_alpha,
16791699
AlphaCurrency::ZERO,
16801700
);
16811701

@@ -2391,6 +2411,7 @@ fn test_distribute_emission_no_miners_all_drained() {
23912411
netuid,
23922412
emission,
23932413
AlphaCurrency::ZERO,
2414+
emission,
23942415
AlphaCurrency::ZERO,
23952416
);
23962417

@@ -2461,7 +2482,8 @@ fn test_distribute_emission_zero_emission() {
24612482
// Set the emission to be ZERO.
24622483
SubtensorModule::distribute_emission(
24632484
netuid,
2464-
0.into(),
2485+
AlphaCurrency::ZERO,
2486+
AlphaCurrency::ZERO,
24652487
AlphaCurrency::ZERO,
24662488
AlphaCurrency::ZERO,
24672489
);
@@ -2756,6 +2778,7 @@ fn test_drain_alpha_childkey_parentkey_with_burn() {
27562778
netuid,
27572779
pending_alpha,
27582780
AlphaCurrency::ZERO,
2781+
pending_alpha,
27592782
AlphaCurrency::ZERO,
27602783
);
27612784
let parent_stake_after = SubtensorModule::get_stake_for_hotkey_on_subnet(&parent, netuid);

0 commit comments

Comments
 (0)