Skip to content

Commit dd9b75a

Browse files
committed
fix: make alpha_in halve with block_emission, fix subsidy condition
1 parent 4a67e16 commit dd9b75a

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

pallets/subtensor/src/coinbase/run_coinbase.rs

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)