From a77e274d9f935f832d052be6bdb7262ec279db50 Mon Sep 17 00:00:00 2001 From: Maciej Kula Date: Fri, 18 Jul 2025 16:10:52 +0200 Subject: [PATCH 1/5] Create BIT-0011-Recycle-UID.md --- bits/BIT-0011-Recycle-UID.md | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 bits/BIT-0011-Recycle-UID.md diff --git a/bits/BIT-0011-Recycle-UID.md b/bits/BIT-0011-Recycle-UID.md new file mode 100644 index 0000000..21ef375 --- /dev/null +++ b/bits/BIT-0011-Recycle-UID.md @@ -0,0 +1,73 @@ +# BIT-0011: Recycle UID + +- **BIT Number:** 0011 +- **Title:** Recycle Subnet Owner UID Incentives Instead of Burning +- **Author(s):** Maciej Kula +- **Discussions-to:** https://discord.com/channels/1120750674595024897/1392648789956890636 +- **Status:** Draft +- **Type:** Core +- **Created:** 2025-07-18 +- **Updated:** 2025-07-18 +- **Requires:** None + +## Abstract + +This BIT proposes changing the subnet owner UID implementation from a "burn UID" to a "recycle UID". Currently, mining incentives allocated to the subnet owner hotkey are burned by being skipped during distribution while still being counted in emission total. This proposal would instead recycle these incentives by reducing the `SubnetAlphaOut` variable, making the ALPHA available for future distribution similar to how TAO was recycled pre-DTAO. + +## Motivation + +The current implementation burns ALPHA tokens when the subnet's consensus (through validator weights) decides they should not be distributed immediately. This is inconsistent with how the protocol handled similar situations pre-DTAO, where validators could assign weights to root and TAO would be recycled for later distribution. + +When validators collectively decide certain incentives should not be distributed, this represents a consensus decision about "timing" rather than a desire to permanently remove tokens from circulation. The tokens should remain available for future distribution when conditions change. + +## Specification + +**Current Implementation:** +```rust +// Distribute mining incentives. +for (hotkey, incentive) in incentives { + if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { + if hotkey == owner_hotkey { + continue; // Skip/burn miner-emission for SN owner hotkey. + } + } + // ... other hotkeys +} +``` + +**Proposed Implementation:** +```rust +// Distribute mining incentives. +for (hotkey, incentive) in incentives { + if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { + if hotkey == owner_hotkey { + // Recycle the incentive instead of burning + SubnetAlphaOut::::mutate(netuid, |total| { + *total = total.saturating_sub(incentive); + }); + continue; + } + } + // ... other hotkeys +} +``` + +## Rationale + +The change aligns with the existing recycling pattern used in `do_recycle_alpha` and maintains consistency with pre-DTAO TAO recycling on root. By reducing `SubnetAlphaOut`, the recycled ALPHA becomes available for future distribution rather than being permanently destroyed. + +## Backwards Compatibility + +This BIT introduces no backward incompatibilities. The change modifies only distribution logic. + +## Reference Implementation + +TBD + +## Security Considerations + +TBD + +## Copyright + +This document is licensed under [The Unlicense](https://unlicense.org/). From 089c4aec790ffa598a2c48e65cde67b8411db388 Mon Sep 17 00:00:00 2001 From: Maciej Kula Date: Fri, 18 Jul 2025 16:19:21 +0200 Subject: [PATCH 2/5] Update BIT-0011-Recycle-UID.md --- bits/BIT-0011-Recycle-UID.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bits/BIT-0011-Recycle-UID.md b/bits/BIT-0011-Recycle-UID.md index 21ef375..aa18e0d 100644 --- a/bits/BIT-0011-Recycle-UID.md +++ b/bits/BIT-0011-Recycle-UID.md @@ -12,7 +12,7 @@ ## Abstract -This BIT proposes changing the subnet owner UID implementation from a "burn UID" to a "recycle UID". Currently, mining incentives allocated to the subnet owner hotkey are burned by being skipped during distribution while still being counted in emission total. This proposal would instead recycle these incentives by reducing the `SubnetAlphaOut` variable, making the ALPHA available for future distribution similar to how TAO was recycled pre-DTAO. +This BIT proposes changing the subnet owner UID implementation from a "burn UID" to a "recycle UID". Currently, mining incentives allocated to the subnet owner hotkey are burned by being skipped during distribution while still being counted in emission totals. This proposal would instead recycle these incentives by reducing the `SubnetAlphaOut` variable, making the ALPHA available for future distribution similar to how TAO was recycled pre-DTAO. ## Motivation @@ -54,7 +54,7 @@ for (hotkey, incentive) in incentives { ## Rationale -The change aligns with the existing recycling pattern used in `do_recycle_alpha` and maintains consistency with pre-DTAO TAO recycling on root. By reducing `SubnetAlphaOut`, the recycled ALPHA becomes available for future distribution rather than being permanently destroyed. +The change aligns with the existing recycling pattern used in `do_recycle_alpha` and maintains consistency with pre-DTAO TAO recycling on root. By reducing `SubnetAlphaOut`, the recycled ALPHA becomes available for future distribution rather than being permanently "destroyed". ## Backwards Compatibility From 6cfc7d7ec6f70ad393288c0125fd340eb66024b3 Mon Sep 17 00:00:00 2001 From: Maciej Kula Date: Fri, 18 Jul 2025 16:33:09 +0200 Subject: [PATCH 3/5] Update BIT-0011-Recycle-UID.md --- bits/BIT-0011-Recycle-UID.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bits/BIT-0011-Recycle-UID.md b/bits/BIT-0011-Recycle-UID.md index aa18e0d..cb35601 100644 --- a/bits/BIT-0011-Recycle-UID.md +++ b/bits/BIT-0011-Recycle-UID.md @@ -26,7 +26,7 @@ When validators collectively decide certain incentives should not be distributed ```rust // Distribute mining incentives. for (hotkey, incentive) in incentives { - if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { + if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { if hotkey == owner_hotkey { continue; // Skip/burn miner-emission for SN owner hotkey. } @@ -39,10 +39,10 @@ for (hotkey, incentive) in incentives { ```rust // Distribute mining incentives. for (hotkey, incentive) in incentives { - if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { + if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { if hotkey == owner_hotkey { // Recycle the incentive instead of burning - SubnetAlphaOut::::mutate(netuid, |total| { + SubnetAlphaOut::::mutate(netuid, |total| { *total = total.saturating_sub(incentive); }); continue; From 87f83e320431ff9c2bb85969213e297357abf864 Mon Sep 17 00:00:00 2001 From: Maciej Kula Date: Mon, 13 Apr 2026 04:29:39 +0200 Subject: [PATCH 4/5] Update and rename BIT-0011-Recycle-UID.md to BIT-0005-Recycle-Or-Burn-UID.md --- bits/BIT-0005-Recycle-Or-Burn-UID.md | 69 ++++++++++++++++++++++++++ bits/BIT-0011-Recycle-UID.md | 73 ---------------------------- 2 files changed, 69 insertions(+), 73 deletions(-) create mode 100644 bits/BIT-0005-Recycle-Or-Burn-UID.md delete mode 100644 bits/BIT-0011-Recycle-UID.md diff --git a/bits/BIT-0005-Recycle-Or-Burn-UID.md b/bits/BIT-0005-Recycle-Or-Burn-UID.md new file mode 100644 index 0000000..40b8c44 --- /dev/null +++ b/bits/BIT-0005-Recycle-Or-Burn-UID.md @@ -0,0 +1,69 @@ +# BIT-0005: Recycle UID + +- **BIT Number:** 0005 +- **Title:** Recycle or Burn Subnet Owner UID Incentives +- **Author(s):** Maciej Kula, Vune +- **Discussions-to:** https://discord.com/channels/1120750674595024897/1392648789956890636 +- **Status:** Final +- **Type:** Core +- **Created:** 2025-07-18 +- **Updated:** 2026-04-13 +- **Requires:** None + +## Abstract + +This BIT proposes changing the subnet owner UID implementation from a fixed "burn UID" to a configurable "recycle or burn" per subnet. Currently, mining incentives allocated to the subnet owner hotkey (and associated hotkeys) are skipped during distribution. This proposal adds a per-subnet hyperparameter allowing subnet owners to choose whether these skipped incentives are recycled (by reducing `SubnetAlphaOut`) or burned (no-op, effectively removing them from circulation). + +## Motivation + +The current implementation burns ALPHA tokens when the subnet's consensus (through validator weights) decides they should not be distributed immediately. This is inconsistent with how the protocol handled similar situations pre-DTAO, where validators could assign weights to root and TAO would be recycled for later distribution. + +When validators collectively decide certain incentives should not be distributed, this represents a consensus decision about "timing" rather than a desire to permanently remove tokens from circulation. The tokens should remain available for future distribution when conditions change. + +## Specification + +A per-subnet storage map `RecycleOrBurn` is added with a `RecycleOrBurnEnum` value (Burn or Recycle), defaulting to Burn. + +Subnet owners can set this via `sudo_set_recycle_or_burn` in the admin-utils pallet. + +During incentive distribution, when a hotkey is identified as the subnet owner hotkey or an associated hotkey, the incentive is handled according to the subnet's setting: + +```rust +// Check if we should recycle or burn the incentive +match RecycleOrBurn::::try_get(netuid) { + Ok(RecycleOrBurnEnum::Recycle) => { + Self::recycle_subnet_alpha(netuid, incentive); + } + Ok(RecycleOrBurnEnum::Burn) | Err(_) => { + Self::burn_subnet_alpha(netuid, incentive); + } +} +``` + +Where: +- `recycle_subnet_alpha` reduces `SubnetAlphaOut`, making the ALPHA available for future distribution +- `burn_subnet_alpha` is currently a no-op (the alpha is simply not distributed) + +## Rationale + +The change aligns with the existing recycling pattern and maintains consistency with pre-DTAO TAO recycling on root. By reducing `SubnetAlphaOut`, the recycled ALPHA becomes available for future distribution rather than being permanently removed. Making it a per-subnet choice gives subnet owners flexibility to select the behavior that best fits their tokenomics. + +## Backwards Compatibility + +This BIT introduces no backward incompatibilities. The default behavior remains Burn, preserving existing behavior for all subnets unless explicitly changed by the subnet owner. + +## Reference Implementation + +- **Storage**: `RecycleOrBurn` in `pallets/subtensor/src/lib.rs` +- **Distribution logic**: `distribute_dividends_and_incentives` in `pallets/subtensor/src/coinbase/run_coinbase.rs` +- **Recycle helper**: `recycle_subnet_alpha` in `pallets/subtensor/src/staking/helpers.rs` +- **Setter**: `sudo_set_recycle_or_burn` in `pallets/admin-utils/src/lib.rs` +- **User extrinsics**: `recycle_alpha` and `burn_alpha` in `pallets/subtensor/src/staking/recycle_alpha.rs` + +## Security Considerations + +None + +## Copyright + +This document is licensed under [The Unlicense](https://unlicense.org/). diff --git a/bits/BIT-0011-Recycle-UID.md b/bits/BIT-0011-Recycle-UID.md deleted file mode 100644 index cb35601..0000000 --- a/bits/BIT-0011-Recycle-UID.md +++ /dev/null @@ -1,73 +0,0 @@ -# BIT-0011: Recycle UID - -- **BIT Number:** 0011 -- **Title:** Recycle Subnet Owner UID Incentives Instead of Burning -- **Author(s):** Maciej Kula -- **Discussions-to:** https://discord.com/channels/1120750674595024897/1392648789956890636 -- **Status:** Draft -- **Type:** Core -- **Created:** 2025-07-18 -- **Updated:** 2025-07-18 -- **Requires:** None - -## Abstract - -This BIT proposes changing the subnet owner UID implementation from a "burn UID" to a "recycle UID". Currently, mining incentives allocated to the subnet owner hotkey are burned by being skipped during distribution while still being counted in emission totals. This proposal would instead recycle these incentives by reducing the `SubnetAlphaOut` variable, making the ALPHA available for future distribution similar to how TAO was recycled pre-DTAO. - -## Motivation - -The current implementation burns ALPHA tokens when the subnet's consensus (through validator weights) decides they should not be distributed immediately. This is inconsistent with how the protocol handled similar situations pre-DTAO, where validators could assign weights to root and TAO would be recycled for later distribution. - -When validators collectively decide certain incentives should not be distributed, this represents a consensus decision about "timing" rather than a desire to permanently remove tokens from circulation. The tokens should remain available for future distribution when conditions change. - -## Specification - -**Current Implementation:** -```rust -// Distribute mining incentives. -for (hotkey, incentive) in incentives { - if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { - if hotkey == owner_hotkey { - continue; // Skip/burn miner-emission for SN owner hotkey. - } - } - // ... other hotkeys -} -``` - -**Proposed Implementation:** -```rust -// Distribute mining incentives. -for (hotkey, incentive) in incentives { - if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(netuid) { - if hotkey == owner_hotkey { - // Recycle the incentive instead of burning - SubnetAlphaOut::::mutate(netuid, |total| { - *total = total.saturating_sub(incentive); - }); - continue; - } - } - // ... other hotkeys -} -``` - -## Rationale - -The change aligns with the existing recycling pattern used in `do_recycle_alpha` and maintains consistency with pre-DTAO TAO recycling on root. By reducing `SubnetAlphaOut`, the recycled ALPHA becomes available for future distribution rather than being permanently "destroyed". - -## Backwards Compatibility - -This BIT introduces no backward incompatibilities. The change modifies only distribution logic. - -## Reference Implementation - -TBD - -## Security Considerations - -TBD - -## Copyright - -This document is licensed under [The Unlicense](https://unlicense.org/). From 031bf8a068be016aadff97f524eea66880358181 Mon Sep 17 00:00:00 2001 From: Maciej Kula Date: Mon, 13 Apr 2026 04:43:16 +0200 Subject: [PATCH 5/5] Add BIT-0006 Recycle Or Burn UID document --- ...Recycle-Or-Burn-UID.md => BIT-0006-Recycle-Or-Burn-UID.md} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename bits/{BIT-0005-Recycle-Or-Burn-UID.md => BIT-0006-Recycle-Or-Burn-UID.md} (98%) diff --git a/bits/BIT-0005-Recycle-Or-Burn-UID.md b/bits/BIT-0006-Recycle-Or-Burn-UID.md similarity index 98% rename from bits/BIT-0005-Recycle-Or-Burn-UID.md rename to bits/BIT-0006-Recycle-Or-Burn-UID.md index 40b8c44..34e0521 100644 --- a/bits/BIT-0005-Recycle-Or-Burn-UID.md +++ b/bits/BIT-0006-Recycle-Or-Burn-UID.md @@ -1,6 +1,6 @@ -# BIT-0005: Recycle UID +# BIT-0006: Recycle or Burn UID -- **BIT Number:** 0005 +- **BIT Number:** 0006 - **Title:** Recycle or Burn Subnet Owner UID Incentives - **Author(s):** Maciej Kula, Vune - **Discussions-to:** https://discord.com/channels/1120750674595024897/1392648789956890636