From e1f7897e97259a87c144a38a03b3b15b540180c5 Mon Sep 17 00:00:00 2001 From: 0xcacti <0xcacti@gmail.com> Date: Thu, 11 Sep 2025 23:52:34 -0400 Subject: [PATCH 1/4] emissions fix --- pallets/subtensor/src/coinbase/run_coinbase.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pallets/subtensor/src/coinbase/run_coinbase.rs b/pallets/subtensor/src/coinbase/run_coinbase.rs index c11ed56584..1a01e7ea43 100644 --- a/pallets/subtensor/src/coinbase/run_coinbase.rs +++ b/pallets/subtensor/src/coinbase/run_coinbase.rs @@ -70,10 +70,10 @@ impl Pallet { .unwrap_or(asfloat!(0.0)); log::debug!("default_tao_in_i: {default_tao_in_i:?}"); // Get alpha_emission total - let alpha_emission_i: U96F32 = asfloat!( - Self::get_block_emission_for_issuance(Self::get_alpha_issuance(*netuid_i).into()) - .unwrap_or(0) - ); + let alpha_emission_i: U96F32 = asfloat!(Self::get_block_emission_for_issuance( + Self::get_alpha_issuance(*netuid_i).into() + ) + .unwrap_or(0)); log::debug!("alpha_emission_i: {alpha_emission_i:?}"); // Get initial alpha_in @@ -85,7 +85,7 @@ impl Pallet { ); if price_i < tao_in_ratio { tao_in_i = price_i.saturating_mul(U96F32::saturating_from_num(block_emission)); - alpha_in_i = alpha_emission_i; + alpha_in_i = block_emission; let difference_tao: U96F32 = default_tao_in_i.saturating_sub(tao_in_i); // Difference becomes buy. let buy_swap_result = Self::swap_tao_for_alpha( @@ -103,7 +103,7 @@ impl Pallet { is_subsidized.insert(*netuid_i, true); } else { tao_in_i = default_tao_in_i; - alpha_in_i = tao_in_i.safe_div_or(price_i, alpha_emission_i); + alpha_in_i = tao_in_i.safe_div_or(price_i, tao_in.safe_div(moving_price_i)); is_subsidized.insert(*netuid_i, false); } log::debug!("alpha_in_i: {alpha_in_i:?}"); @@ -209,7 +209,7 @@ impl Pallet { let root_alpha: U96F32 = root_proportion .saturating_mul(alpha_out_i) // Total alpha emission per block remaining. .saturating_mul(asfloat!(0.5)); // 50% to validators. - // Remove root alpha from alpha_out. + // Remove root alpha from alpha_out. log::debug!("root_alpha: {root_alpha:?}"); // Get pending alpha as original alpha_out - root_alpha. let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha); From 4b1ad57001bf66ed6ac384829515a71299f4388f Mon Sep 17 00:00:00 2001 From: 0xcacti <0xcacti@gmail.com> Date: Thu, 11 Sep 2025 23:54:15 -0400 Subject: [PATCH 2/4] handle panic --- pallets/subtensor/src/coinbase/run_coinbase.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pallets/subtensor/src/coinbase/run_coinbase.rs b/pallets/subtensor/src/coinbase/run_coinbase.rs index 1a01e7ea43..b2872f998a 100644 --- a/pallets/subtensor/src/coinbase/run_coinbase.rs +++ b/pallets/subtensor/src/coinbase/run_coinbase.rs @@ -70,10 +70,10 @@ impl Pallet { .unwrap_or(asfloat!(0.0)); log::debug!("default_tao_in_i: {default_tao_in_i:?}"); // Get alpha_emission total - let alpha_emission_i: U96F32 = asfloat!(Self::get_block_emission_for_issuance( - Self::get_alpha_issuance(*netuid_i).into() - ) - .unwrap_or(0)); + let alpha_emission_i: U96F32 = asfloat!( + Self::get_block_emission_for_issuance(Self::get_alpha_issuance(*netuid_i).into()) + .unwrap_or(0) + ); log::debug!("alpha_emission_i: {alpha_emission_i:?}"); // Get initial alpha_in @@ -103,7 +103,7 @@ impl Pallet { is_subsidized.insert(*netuid_i, true); } else { tao_in_i = default_tao_in_i; - alpha_in_i = tao_in_i.safe_div_or(price_i, tao_in.safe_div(moving_price_i)); + alpha_in_i = tao_in_i.safe_div(price_i); // Must panic if price_i is 0. is_subsidized.insert(*netuid_i, false); } log::debug!("alpha_in_i: {alpha_in_i:?}"); @@ -209,7 +209,7 @@ impl Pallet { let root_alpha: U96F32 = root_proportion .saturating_mul(alpha_out_i) // Total alpha emission per block remaining. .saturating_mul(asfloat!(0.5)); // 50% to validators. - // Remove root alpha from alpha_out. + // Remove root alpha from alpha_out. log::debug!("root_alpha: {root_alpha:?}"); // Get pending alpha as original alpha_out - root_alpha. let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha); From a3fbfec9a7728e173892a540919d24fb82aea0b6 Mon Sep 17 00:00:00 2001 From: 0xcacti <0xcacti@gmail.com> Date: Fri, 12 Sep 2025 11:02:58 -0400 Subject: [PATCH 3/4] move back to safe_div_or --- pallets/subtensor/src/coinbase/run_coinbase.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pallets/subtensor/src/coinbase/run_coinbase.rs b/pallets/subtensor/src/coinbase/run_coinbase.rs index b2872f998a..4bf2ae5e34 100644 --- a/pallets/subtensor/src/coinbase/run_coinbase.rs +++ b/pallets/subtensor/src/coinbase/run_coinbase.rs @@ -70,10 +70,10 @@ impl Pallet { .unwrap_or(asfloat!(0.0)); log::debug!("default_tao_in_i: {default_tao_in_i:?}"); // Get alpha_emission total - let alpha_emission_i: U96F32 = asfloat!( - Self::get_block_emission_for_issuance(Self::get_alpha_issuance(*netuid_i).into()) - .unwrap_or(0) - ); + let alpha_emission_i: U96F32 = asfloat!(Self::get_block_emission_for_issuance( + Self::get_alpha_issuance(*netuid_i).into() + ) + .unwrap_or(0)); log::debug!("alpha_emission_i: {alpha_emission_i:?}"); // Get initial alpha_in @@ -103,7 +103,7 @@ impl Pallet { is_subsidized.insert(*netuid_i, true); } else { tao_in_i = default_tao_in_i; - alpha_in_i = tao_in_i.safe_div(price_i); // Must panic if price_i is 0. + alpha_in_i = tao_in_i.safe_div_or(price_i, alpha_emission_i); is_subsidized.insert(*netuid_i, false); } log::debug!("alpha_in_i: {alpha_in_i:?}"); @@ -209,7 +209,7 @@ impl Pallet { let root_alpha: U96F32 = root_proportion .saturating_mul(alpha_out_i) // Total alpha emission per block remaining. .saturating_mul(asfloat!(0.5)); // 50% to validators. - // Remove root alpha from alpha_out. + // Remove root alpha from alpha_out. log::debug!("root_alpha: {root_alpha:?}"); // Get pending alpha as original alpha_out - root_alpha. let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha); From 12dcb9129c342ca3461f9fef01847eb22920698b Mon Sep 17 00:00:00 2001 From: 0xcacti <0xcacti@gmail.com> Date: Fri, 12 Sep 2025 12:09:53 -0400 Subject: [PATCH 4/4] fmt --- pallets/subtensor/src/coinbase/run_coinbase.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pallets/subtensor/src/coinbase/run_coinbase.rs b/pallets/subtensor/src/coinbase/run_coinbase.rs index 4bf2ae5e34..d284f33eda 100644 --- a/pallets/subtensor/src/coinbase/run_coinbase.rs +++ b/pallets/subtensor/src/coinbase/run_coinbase.rs @@ -70,10 +70,10 @@ impl Pallet { .unwrap_or(asfloat!(0.0)); log::debug!("default_tao_in_i: {default_tao_in_i:?}"); // Get alpha_emission total - let alpha_emission_i: U96F32 = asfloat!(Self::get_block_emission_for_issuance( - Self::get_alpha_issuance(*netuid_i).into() - ) - .unwrap_or(0)); + let alpha_emission_i: U96F32 = asfloat!( + Self::get_block_emission_for_issuance(Self::get_alpha_issuance(*netuid_i).into()) + .unwrap_or(0) + ); log::debug!("alpha_emission_i: {alpha_emission_i:?}"); // Get initial alpha_in @@ -209,7 +209,7 @@ impl Pallet { let root_alpha: U96F32 = root_proportion .saturating_mul(alpha_out_i) // Total alpha emission per block remaining. .saturating_mul(asfloat!(0.5)); // 50% to validators. - // Remove root alpha from alpha_out. + // Remove root alpha from alpha_out. log::debug!("root_alpha: {root_alpha:?}"); // Get pending alpha as original alpha_out - root_alpha. let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha);