@@ -55,6 +55,8 @@ impl<T: Config> Pallet<T> {
5555 let mut alpha_in: BTreeMap < NetUid , U96F32 > = BTreeMap :: new ( ) ;
5656 let mut alpha_out: BTreeMap < NetUid , U96F32 > = BTreeMap :: new ( ) ;
5757 let mut is_subsidized: BTreeMap < NetUid , bool > = BTreeMap :: new ( ) ;
58+ let mut tao_to_stake = U96F32 :: saturating_from_num ( 0.0 ) ;
59+
5860 // Only calculate for subnets that we are emitting to.
5961 for netuid_i in subnets_to_emit_to. iter ( ) {
6062 // Get subnet price.
@@ -69,43 +71,30 @@ impl<T: Config> Pallet<T> {
6971 . checked_div ( total_moving_prices)
7072 . unwrap_or ( asfloat ! ( 0.0 ) ) ;
7173 log:: debug!( "default_tao_in_i: {default_tao_in_i:?}" ) ;
74+
75+ let default_alpha_in_i: U96F32 =
76+ default_tao_in_i. safe_div_or ( price_i, U96F32 :: saturating_from_num ( 0.0 ) ) ;
77+ log:: debug!( "default_alpha_in_i: {default_alpha_in_i:?}" ) ;
78+
7279 // Get alpha_emission total
7380 let alpha_emission_i: U96F32 = asfloat ! (
7481 Self :: get_block_emission_for_issuance( Self :: get_alpha_issuance( * netuid_i) . into( ) )
7582 . unwrap_or( 0 )
7683 ) ;
7784 log:: debug!( "alpha_emission_i: {alpha_emission_i:?}" ) ;
7885
79- // Get initial alpha_in
8086 let mut alpha_in_i: U96F32 ;
8187 let mut tao_in_i: U96F32 ;
82- let tao_in_ratio: U96F32 = default_tao_in_i. safe_div_or (
83- U96F32 :: saturating_from_num ( block_emission) ,
84- U96F32 :: saturating_from_num ( 0.0 ) ,
85- ) ;
86- if price_i < tao_in_ratio {
87- tao_in_i = price_i. saturating_mul ( U96F32 :: saturating_from_num ( block_emission) ) ;
88- alpha_in_i = block_emission;
88+ if default_alpha_in_i > alpha_emission_i {
89+ alpha_in_i = alpha_emission_i;
90+ tao_in_i = alpha_in_i. saturating_mul ( price_i) ;
8991 let difference_tao: U96F32 = default_tao_in_i. saturating_sub ( tao_in_i) ;
90- // Difference becomes buy.
91- let buy_swap_result = Self :: swap_tao_for_alpha (
92- * netuid_i,
93- tou64 ! ( difference_tao) . into ( ) ,
94- T :: SwapInterface :: max_price ( ) ,
95- true ,
96- ) ;
97- if let Ok ( buy_swap_result_ok) = buy_swap_result {
98- let bought_alpha = AlphaCurrency :: from ( buy_swap_result_ok. amount_paid_out ) ;
99- SubnetAlphaOut :: < T > :: mutate ( * netuid_i, |total| {
100- * total = total. saturating_sub ( bought_alpha) ;
101- } ) ;
102- }
103- is_subsidized. insert ( * netuid_i, true ) ;
92+ tao_to_stake = tao_to_stake. saturating_add ( difference_tao) ;
10493 } else {
94+ alpha_in_i = default_alpha_in_i;
10595 tao_in_i = default_tao_in_i;
106- alpha_in_i = tao_in_i. safe_div_or ( price_i, alpha_emission_i) ;
107- is_subsidized. insert ( * netuid_i, false ) ;
10896 }
97+ log:: debug!( "tao_in_i: {tao_in_i:?}" ) ;
10998 log:: debug!( "alpha_in_i: {alpha_in_i:?}" ) ;
11099
111100 // Get alpha_out.
@@ -123,6 +112,29 @@ impl<T: Config> Pallet<T> {
123112 alpha_in. insert ( * netuid_i, alpha_in_i) ;
124113 alpha_out. insert ( * netuid_i, alpha_out_i) ;
125114 }
115+
116+ let amount_per_subnet: U96F32 = tao_to_stake. safe_div_or (
117+ U96F32 :: saturating_from_num ( subnets_to_emit_to. len ( ) ) ,
118+ U96F32 :: saturating_from_num ( 0.0 ) ,
119+ ) ;
120+
121+ for netuid_i in subnets_to_emit_to. iter ( ) {
122+ let buy_swap_result = Self :: swap_tao_for_alpha (
123+ * netuid_i,
124+ tou64 ! ( amount_per_subnet) . into ( ) ,
125+ T :: SwapInterface :: max_price ( ) . into ( ) ,
126+ true ,
127+ ) ;
128+ if let Ok ( buy_swap_result_ok) = buy_swap_result {
129+ let bought_alpha = AlphaCurrency :: from ( buy_swap_result_ok. amount_paid_out ) ;
130+ SubnetAlphaOut :: < T > :: mutate ( * netuid_i, |total| {
131+ * total = total. saturating_sub ( bought_alpha) ;
132+ } ) ;
133+ }
134+ is_subsidized. insert ( * netuid_i, true ) ;
135+ }
136+
137+ log:: debug!( "tao_to_stake: {tao_to_stake:?}" ) ;
126138 log:: debug!( "tao_in: {tao_in:?}" ) ;
127139 log:: debug!( "alpha_in: {alpha_in:?}" ) ;
128140 log:: debug!( "alpha_out: {alpha_out:?}" ) ;
@@ -151,12 +163,16 @@ impl<T: Config> Pallet<T> {
151163 SubnetTaoInEmission :: < T > :: insert ( * netuid_i, TaoCurrency :: from ( tao_in_i) ) ;
152164 SubnetTAO :: < T > :: mutate ( * netuid_i, |total| {
153165 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
166+ * total = total. saturating_add ( amount_per_subnet. into ( ) ) ;
154167 } ) ;
168+
155169 TotalStake :: < T > :: mutate ( |total| {
156170 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
171+ * total = total. saturating_add ( amount_per_subnet. into ( ) ) ;
157172 } ) ;
158173 TotalIssuance :: < T > :: mutate ( |total| {
159174 * total = total. saturating_add ( tao_in_i. into ( ) ) ;
175+ * total = total. saturating_add ( amount_per_subnet. into ( ) ) ;
160176 } ) ;
161177 // Adjust protocol liquidity based on new reserves
162178 T :: SwapInterface :: adjust_protocol_liquidity ( * netuid_i, tao_in_i, alpha_in_i) ;
0 commit comments