Skip to content

Commit 46f0295

Browse files
committed
Avoid using from_num
1 parent 33c6af0 commit 46f0295

File tree

15 files changed

+377
-310
lines changed

15 files changed

+377
-310
lines changed

pallets/subtensor/src/coinbase/block_emission.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ impl<T: Config> Pallet<T> {
3131
alpha_block_emission: u64,
3232
) -> (u64, u64, u64) {
3333
// Init terms.
34-
let mut tao_in_emission: I96F32 = I96F32::from_num(tao_emission);
35-
let float_alpha_block_emission: I96F32 = I96F32::from_num(alpha_block_emission);
34+
let mut tao_in_emission: I96F32 = I96F32::saturating_from_num(tao_emission);
35+
let float_alpha_block_emission: I96F32 = I96F32::saturating_from_num(alpha_block_emission);
3636

3737
// Get alpha price for subnet.
3838
let alpha_price: I96F32 = Self::get_alpha_price(netuid);
3939
log::debug!("{:?} - alpha_price: {:?}", netuid, alpha_price);
4040

4141
// Get initial alpha_in
42-
let mut alpha_in_emission: I96F32 = I96F32::from_num(tao_emission)
42+
let mut alpha_in_emission: I96F32 = I96F32::saturating_from_num(tao_emission)
4343
.checked_div(alpha_price)
4444
.unwrap_or(float_alpha_block_emission);
4545

@@ -60,13 +60,15 @@ impl<T: Config> Pallet<T> {
6060
}
6161

6262
// Avoid rounding errors.
63-
if tao_in_emission < I96F32::from_num(1) || alpha_in_emission < I96F32::from_num(1) {
64-
alpha_in_emission = I96F32::from_num(0);
65-
tao_in_emission = I96F32::from_num(0);
63+
if tao_in_emission < I96F32::saturating_from_num(1)
64+
|| alpha_in_emission < I96F32::saturating_from_num(1)
65+
{
66+
alpha_in_emission = I96F32::saturating_from_num(0);
67+
tao_in_emission = I96F32::saturating_from_num(0);
6668
}
6769

6870
// Set Alpha in emission.
69-
let alpha_out_emission = I96F32::from_num(2)
71+
let alpha_out_emission = I96F32::saturating_from_num(2)
7072
.saturating_mul(float_alpha_block_emission)
7173
.saturating_sub(alpha_in_emission);
7274

@@ -106,23 +108,22 @@ impl<T: Config> Pallet<T> {
106108
/// Returns the block emission for an issuance value.
107109
pub fn get_block_emission_for_issuance(issuance: u64) -> Result<u64, &'static str> {
108110
// Convert issuance to a float for calculations below.
109-
let total_issuance: I96F32 = I96F32::from_num(issuance);
111+
let total_issuance: I96F32 = I96F32::saturating_from_num(issuance);
110112
// Check to prevent division by zero when the total supply is reached
111113
// and creating an issuance greater than the total supply.
112-
if total_issuance >= I96F32::from_num(TotalSupply::<T>::get()) {
114+
if total_issuance >= I96F32::saturating_from_num(TotalSupply::<T>::get()) {
113115
return Ok(0);
114116
}
115117
// Calculate the logarithmic residual of the issuance against half the total supply.
116118
let residual: I96F32 = log2(
117-
I96F32::from_num(1.0)
119+
I96F32::saturating_from_num(1.0)
118120
.checked_div(
119-
I96F32::from_num(1.0)
121+
I96F32::saturating_from_num(1.0)
120122
.checked_sub(
121123
total_issuance
122-
.checked_div(
123-
I96F32::from_num(2.0)
124-
.saturating_mul(I96F32::from_num(10_500_000_000_000_000.0)),
125-
)
124+
.checked_div(I96F32::saturating_from_num(2.0).saturating_mul(
125+
I96F32::saturating_from_num(10_500_000_000_000_000.0),
126+
))
126127
.ok_or("Logarithm calculation failed")?,
127128
)
128129
.ok_or("Logarithm calculation failed")?,
@@ -136,14 +137,15 @@ impl<T: Config> Pallet<T> {
136137
// Convert floored_residual to an integer
137138
let floored_residual_int: u64 = floored_residual.saturating_to_num::<u64>();
138139
// Multiply 2.0 by itself floored_residual times to calculate the power of 2.
139-
let mut multiplier: I96F32 = I96F32::from_num(1.0);
140+
let mut multiplier: I96F32 = I96F32::saturating_from_num(1.0);
140141
for _ in 0..floored_residual_int {
141-
multiplier = multiplier.saturating_mul(I96F32::from_num(2.0));
142+
multiplier = multiplier.saturating_mul(I96F32::saturating_from_num(2.0));
142143
}
143-
let block_emission_percentage: I96F32 = I96F32::from_num(1.0).safe_div(multiplier);
144+
let block_emission_percentage: I96F32 =
145+
I96F32::saturating_from_num(1.0).safe_div(multiplier);
144146
// Calculate the actual emission based on the emission rate
145147
let block_emission: I96F32 = block_emission_percentage
146-
.saturating_mul(I96F32::from_num(DefaultBlockEmission::<T>::get()));
148+
.saturating_mul(I96F32::saturating_from_num(DefaultBlockEmission::<T>::get()));
147149
// Convert to u64
148150
let block_emission_u64: u64 = block_emission.saturating_to_num::<u64>();
149151
if BlockEmission::<T>::get() != block_emission_u64 {

pallets/subtensor/src/coinbase/block_step.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ impl<T: Config + pallet_drand::Config> Pallet<T> {
1111
// --- 1. Adjust difficulties.
1212
Self::adjust_registration_terms_for_networks();
1313
// --- 2. Get the current coinbase emission.
14-
let block_emission: I96F32 = I96F32::from_num(Self::get_block_emission().unwrap_or(0));
14+
let block_emission: I96F32 =
15+
I96F32::saturating_from_num(Self::get_block_emission().unwrap_or(0));
1516
log::debug!("Block emission: {:?}", block_emission);
1617
// --- 3. Run emission through network.
1718
Self::run_coinbase(block_emission);
@@ -199,25 +200,25 @@ impl<T: Config + pallet_drand::Config> Pallet<T> {
199200
registrations_this_interval: u16,
200201
target_registrations_per_interval: u16,
201202
) -> u64 {
202-
let updated_difficulty: I110F18 = I110F18::from_num(current_difficulty)
203-
.saturating_mul(I110F18::from_num(
203+
let updated_difficulty: I110F18 = I110F18::saturating_from_num(current_difficulty)
204+
.saturating_mul(I110F18::saturating_from_num(
204205
registrations_this_interval.saturating_add(target_registrations_per_interval),
205206
))
206-
.safe_div(I110F18::from_num(
207+
.safe_div(I110F18::saturating_from_num(
207208
target_registrations_per_interval.saturating_add(target_registrations_per_interval),
208209
));
209-
let alpha: I110F18 = I110F18::from_num(Self::get_adjustment_alpha(netuid))
210-
.safe_div(I110F18::from_num(u64::MAX));
210+
let alpha: I110F18 = I110F18::saturating_from_num(Self::get_adjustment_alpha(netuid))
211+
.safe_div(I110F18::saturating_from_num(u64::MAX));
211212
let next_value: I110F18 = alpha
212-
.saturating_mul(I110F18::from_num(current_difficulty))
213+
.saturating_mul(I110F18::saturating_from_num(current_difficulty))
213214
.saturating_add(
214-
I110F18::from_num(1.0)
215+
I110F18::saturating_from_num(1.0)
215216
.saturating_sub(alpha)
216217
.saturating_mul(updated_difficulty),
217218
);
218-
if next_value >= I110F18::from_num(Self::get_max_difficulty(netuid)) {
219+
if next_value >= I110F18::saturating_from_num(Self::get_max_difficulty(netuid)) {
219220
Self::get_max_difficulty(netuid)
220-
} else if next_value <= I110F18::from_num(Self::get_min_difficulty(netuid)) {
221+
} else if next_value <= I110F18::saturating_from_num(Self::get_min_difficulty(netuid)) {
221222
return Self::get_min_difficulty(netuid);
222223
} else {
223224
return next_value.saturating_to_num::<u64>();
@@ -233,25 +234,25 @@ impl<T: Config + pallet_drand::Config> Pallet<T> {
233234
registrations_this_interval: u16,
234235
target_registrations_per_interval: u16,
235236
) -> u64 {
236-
let updated_burn: I110F18 = I110F18::from_num(current_burn)
237-
.saturating_mul(I110F18::from_num(
237+
let updated_burn: I110F18 = I110F18::saturating_from_num(current_burn)
238+
.saturating_mul(I110F18::saturating_from_num(
238239
registrations_this_interval.saturating_add(target_registrations_per_interval),
239240
))
240-
.safe_div(I110F18::from_num(
241+
.safe_div(I110F18::saturating_from_num(
241242
target_registrations_per_interval.saturating_add(target_registrations_per_interval),
242243
));
243-
let alpha: I110F18 = I110F18::from_num(Self::get_adjustment_alpha(netuid))
244-
.safe_div(I110F18::from_num(u64::MAX));
244+
let alpha: I110F18 = I110F18::saturating_from_num(Self::get_adjustment_alpha(netuid))
245+
.safe_div(I110F18::saturating_from_num(u64::MAX));
245246
let next_value: I110F18 = alpha
246-
.saturating_mul(I110F18::from_num(current_burn))
247+
.saturating_mul(I110F18::saturating_from_num(current_burn))
247248
.saturating_add(
248-
I110F18::from_num(1.0)
249+
I110F18::saturating_from_num(1.0)
249250
.saturating_sub(alpha)
250251
.saturating_mul(updated_burn),
251252
);
252-
if next_value >= I110F18::from_num(Self::get_max_burn_as_u64(netuid)) {
253+
if next_value >= I110F18::saturating_from_num(Self::get_max_burn_as_u64(netuid)) {
253254
Self::get_max_burn_as_u64(netuid)
254-
} else if next_value <= I110F18::from_num(Self::get_min_burn_as_u64(netuid)) {
255+
} else if next_value <= I110F18::saturating_from_num(Self::get_min_burn_as_u64(netuid)) {
255256
return Self::get_min_burn_as_u64(netuid);
256257
} else {
257258
return next_value.saturating_to_num::<u64>();

pallets/subtensor/src/coinbase/root.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl<T: Config> Pallet<T> {
113113

114114
// --- 2. Initialize a 2D vector with zeros to store the weights. The dimensions are determined
115115
// by `n` (number of validators) and `k` (total number of subnets).
116-
let mut weights: Vec<Vec<I64F64>> = vec![vec![I64F64::from_num(0.0); k]; n];
116+
let mut weights: Vec<Vec<I64F64>> = vec![vec![I64F64::saturating_from_num(0.0); k]; n];
117117
log::debug!("weights:\n{:?}\n", weights);
118118

119119
let subnet_list = Self::get_all_subnet_netuids();
@@ -135,7 +135,7 @@ impl<T: Config> Pallet<T> {
135135
.zip(&subnet_list)
136136
.find(|(_, subnet)| *subnet == netuid)
137137
{
138-
*w = I64F64::from_num(*weight_ij);
138+
*w = I64F64::saturating_from_num(*weight_ij);
139139
}
140140
}
141141
}

0 commit comments

Comments
 (0)