@@ -40,7 +40,6 @@ impl<T: Config> Pallet<T> {
4040 let mut tao_in: BTreeMap < NetUid , U96F32 > = BTreeMap :: new ( ) ;
4141 let mut alpha_in: BTreeMap < NetUid , U96F32 > = BTreeMap :: new ( ) ;
4242 let mut alpha_out: BTreeMap < NetUid , U96F32 > = BTreeMap :: new ( ) ;
43- let mut is_subsidized: BTreeMap < NetUid , bool > = BTreeMap :: new ( ) ;
4443 let mut tao_to_stake = U96F32 :: saturating_from_num ( 0.0 ) ;
4544
4645 // Only calculate for subnets that we are emitting to.
@@ -68,8 +67,9 @@ impl<T: Config> Pallet<T> {
6867
6968 let mut alpha_in_i: U96F32 ;
7069 let mut tao_in_i: U96F32 ;
71- if default_alpha_in_i > alpha_emission_i {
72- alpha_in_i = alpha_emission_i;
70+ let min_alpha_emission = alpha_emission_i. min ( block_emission) ;
71+ if default_alpha_in_i > min_alpha_emission {
72+ alpha_in_i = min_alpha_emission;
7373 tao_in_i = alpha_in_i. saturating_mul ( price_i) ;
7474 let difference_tao: U96F32 = default_tao_in_i. saturating_sub ( tao_in_i) ;
7575 tao_to_stake = tao_to_stake. saturating_add ( difference_tao) ;
@@ -101,20 +101,21 @@ impl<T: Config> Pallet<T> {
101101 U96F32 :: saturating_from_num ( 0.0 ) ,
102102 ) ;
103103
104- for netuid_i in subnets_to_emit_to. iter ( ) {
105- let buy_swap_result = Self :: swap_tao_for_alpha (
106- * netuid_i,
107- tou64 ! ( amount_per_subnet) . into ( ) ,
108- T :: SwapInterface :: max_price ( ) . into ( ) ,
109- true ,
110- ) ;
111- if let Ok ( buy_swap_result_ok) = buy_swap_result {
112- let bought_alpha = AlphaCurrency :: from ( buy_swap_result_ok. amount_paid_out ) ;
113- SubnetAlphaOut :: < T > :: mutate ( * netuid_i, |total| {
114- * total = total. saturating_sub ( bought_alpha) ;
115- } ) ;
104+ if amount_per_subnet > asfloat ! ( 0.0 ) {
105+ for netuid_i in subnets_to_emit_to. iter ( ) {
106+ let buy_swap_result = Self :: swap_tao_for_alpha (
107+ * netuid_i,
108+ tou64 ! ( amount_per_subnet) . into ( ) ,
109+ T :: SwapInterface :: max_price ( ) . into ( ) ,
110+ true ,
111+ ) ;
112+ if let Ok ( buy_swap_result_ok) = buy_swap_result {
113+ let bought_alpha = AlphaCurrency :: from ( buy_swap_result_ok. amount_paid_out ) ;
114+ SubnetAlphaOut :: < T > :: mutate ( * netuid_i, |total| {
115+ * total = total. saturating_sub ( bought_alpha) ;
116+ } ) ;
117+ }
116118 }
117- is_subsidized. insert ( * netuid_i, true ) ;
118119 }
119120
120121 log:: debug!( "tao_to_stake: {tao_to_stake:?}" ) ;
@@ -146,12 +147,10 @@ impl<T: Config> Pallet<T> {
146147 SubnetTaoInEmission :: < T > :: insert ( * netuid_i, TaoCurrency :: from ( tao_in_i) ) ;
147148 SubnetTAO :: < T > :: mutate ( * netuid_i, |total| {
148149 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
149- * total = total. saturating_add ( tou64 ! ( amount_per_subnet) . into ( ) ) ;
150150 } ) ;
151151
152152 TotalStake :: < T > :: mutate ( |total| {
153153 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
154- * total = total. saturating_add ( tou64 ! ( amount_per_subnet) . into ( ) ) ;
155154 } ) ;
156155 TotalIssuance :: < T > :: mutate ( |total| {
157156 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
@@ -214,21 +213,18 @@ impl<T: Config> Pallet<T> {
214213 let pending_alpha: U96F32 = alpha_out_i. saturating_sub ( root_alpha) ;
215214 log:: debug!( "pending_alpha: {pending_alpha:?}" ) ;
216215 // Sell root emission through the pool (do not pay fees)
217- let subsidized: bool = * is_subsidized. get ( netuid_i) . unwrap_or ( & false ) ;
218- if !subsidized {
219- let swap_result = Self :: swap_alpha_for_tao (
220- * netuid_i,
221- tou64 ! ( root_alpha) . into ( ) ,
222- T :: SwapInterface :: min_price ( ) ,
223- true ,
224- ) ;
225- if let Ok ( ok_result) = swap_result {
226- let root_tao = ok_result. amount_paid_out ;
227- // Accumulate root divs for subnet.
228- PendingRootDivs :: < T > :: mutate ( * netuid_i, |total| {
229- * total = total. saturating_add ( root_tao) ;
230- } ) ;
231- }
216+ let swap_result = Self :: swap_alpha_for_tao (
217+ * netuid_i,
218+ tou64 ! ( root_alpha) . into ( ) ,
219+ T :: SwapInterface :: min_price ( ) . into ( ) ,
220+ true ,
221+ ) ;
222+ if let Ok ( ok_result) = swap_result {
223+ let root_tao: u64 = ok_result. amount_paid_out ;
224+ // Accumulate root divs for subnet.
225+ PendingRootDivs :: < T > :: mutate ( * netuid_i, |total| {
226+ * total = total. saturating_add ( root_tao. into ( ) ) ;
227+ } ) ;
232228 }
233229 // Accumulate alpha emission in pending.
234230 PendingAlphaSwapped :: < T > :: mutate ( * netuid_i, |total| {
0 commit comments