From 29c38095a7a57da9b1430d2c168c1431a4a26049 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Fri, 17 Mar 2023 18:07:29 -0400 Subject: [PATCH 1/3] Change estimate calc to use tempo --- pallets/subtensor/src/delegate_info.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pallets/subtensor/src/delegate_info.rs b/pallets/subtensor/src/delegate_info.rs index c2fd8bc4e5..644b0fd2ee 100644 --- a/pallets/subtensor/src/delegate_info.rs +++ b/pallets/subtensor/src/delegate_info.rs @@ -29,7 +29,7 @@ impl Pallet { let registrations = Self::get_registered_networks_for_hotkey( &delegate.clone() ); let mut validator_permits = Vec::>::new(); - let mut emissions: u128 = 0; + let mut emissions_per_day: u128 = 0; for netuid in registrations.iter() { let _uid = Self::get_uid_for_net_and_hotkey( *netuid, &delegate.clone()); @@ -43,7 +43,9 @@ impl Pallet { } let emission = Self::get_emission_for_uid( *netuid, uid) as u128; - emissions += emission; + let tempo = Self::get_tempo( *netuid ); + let epochs_per_day = 7200 / tempo; + emissions_per_day += emission * epochs_per_day as u128; } } @@ -52,7 +54,6 @@ impl Pallet { let total_stake = Self::get_total_stake_for_hotkey( &delegate.clone() ); - let emissions_per_day = emissions * 72; let return_per_1000 = emissions_per_day / (total_stake as u128 / 1000); return DelegateInfo { From 01a5dcb2e0b5dc81b94b2eb0f16f10262d4604dd Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Fri, 17 Mar 2023 18:13:14 -0400 Subject: [PATCH 2/3] remove delegate take --- pallets/subtensor/src/delegate_info.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/delegate_info.rs b/pallets/subtensor/src/delegate_info.rs index 644b0fd2ee..2b5435941c 100644 --- a/pallets/subtensor/src/delegate_info.rs +++ b/pallets/subtensor/src/delegate_info.rs @@ -54,8 +54,8 @@ impl Pallet { let total_stake = Self::get_total_stake_for_hotkey( &delegate.clone() ); - let return_per_1000 = emissions_per_day / (total_stake as u128 / 1000); - + let return_per_1000 = ( emissions_per_day as f64 * 0.82) / (total_stake as f64 / 1000.0); + return DelegateInfo { delegate_ss58: delegate.clone(), take, From 369f492deb9cd83e853306e087abcd12f715b635 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Fri, 17 Mar 2023 18:22:33 -0400 Subject: [PATCH 3/3] use safe-math --- pallets/subtensor/src/delegate_info.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pallets/subtensor/src/delegate_info.rs b/pallets/subtensor/src/delegate_info.rs index 2b5435941c..7d23c0545d 100644 --- a/pallets/subtensor/src/delegate_info.rs +++ b/pallets/subtensor/src/delegate_info.rs @@ -1,4 +1,5 @@ use super::*; +use substrate_fixed::types::{U64F64}; use frame_support::IterableStorageDoubleMap; use frame_support::storage::IterableStorageMap; use frame_support::pallet_prelude::{Decode, Encode}; @@ -16,7 +17,8 @@ pub struct DelegateInfo { owner_ss58: T::AccountId, registrations: Vec>, // Vec of netuid this delegate is registered on validator_permits: Vec>, // Vec of netuid this delegate has validator permit on - return_per_1000: Compact, // Delegators current daily return per 1000 TAO staked + return_per_1000: Compact, // Delegators current daily return per 1000 TAO staked minus take fee + total_daily_return: Compact, // Delegators current daily return } impl Pallet { @@ -29,7 +31,7 @@ impl Pallet { let registrations = Self::get_registered_networks_for_hotkey( &delegate.clone() ); let mut validator_permits = Vec::>::new(); - let mut emissions_per_day: u128 = 0; + let mut emissions_per_day: U64F64 = U64F64::from_num(0); for netuid in registrations.iter() { let _uid = Self::get_uid_for_net_and_hotkey( *netuid, &delegate.clone()); @@ -42,19 +44,19 @@ impl Pallet { validator_permits.push( (*netuid).into() ); } - let emission = Self::get_emission_for_uid( *netuid, uid) as u128; - let tempo = Self::get_tempo( *netuid ); - let epochs_per_day = 7200 / tempo; - emissions_per_day += emission * epochs_per_day as u128; + let emission: U64F64 = Self::get_emission_for_uid( *netuid, uid).into(); + let tempo: U64F64 = Self::get_tempo( *netuid ).into(); + let epochs_per_day: U64F64 = U64F64::from_num(7200) / tempo; + emissions_per_day += emission * epochs_per_day; } } let owner = Self::get_owning_coldkey_for_hotkey( &delegate.clone() ); let take: Compact = >::get( delegate.clone() ).into(); - let total_stake = Self::get_total_stake_for_hotkey( &delegate.clone() ); + let total_stake: U64F64 = Self::get_total_stake_for_hotkey( &delegate.clone() ).into(); - let return_per_1000 = ( emissions_per_day as f64 * 0.82) / (total_stake as f64 / 1000.0); + let return_per_1000: U64F64 = ( emissions_per_day * U64F64::from_num(0.82)) / (total_stake / U64F64::from_num(1000)); return DelegateInfo { delegate_ss58: delegate.clone(), @@ -63,7 +65,8 @@ impl Pallet { owner_ss58: owner.clone(), registrations: registrations.iter().map(|x| x.into()).collect(), validator_permits, - return_per_1000: (return_per_1000 as u64).into(), + return_per_1000: U64F64::to_num::(return_per_1000).into(), + total_daily_return: U64F64::to_num::(emissions_per_day).into(), }; }