@@ -21,6 +21,34 @@ pub struct DelegateInfo<T: Config> {
21
21
}
22
22
23
23
impl < T : Config > Pallet < T > {
24
+ fn return_per_1000_tao (
25
+ take : Compact < u16 > ,
26
+ total_stake : U64F64 ,
27
+ emissions_per_day : U64F64 ,
28
+ ) -> U64F64 {
29
+ // Get the take as a percentage and subtract it from 1 for remainder.
30
+ let without_take: U64F64 = U64F64 :: from_num ( 1 )
31
+ . saturating_sub ( U64F64 :: from_num ( take. 0 ) . saturating_div ( u16:: MAX . into ( ) ) ) ;
32
+
33
+ if total_stake > U64F64 :: from_num ( 0 ) {
34
+ emissions_per_day
35
+ . saturating_mul ( without_take)
36
+ // Divide by 1000 TAO for return per 1k
37
+ . saturating_div ( total_stake. saturating_div ( U64F64 :: from_num ( 1000.0 * 1e9 ) ) )
38
+ } else {
39
+ U64F64 :: from_num ( 0 )
40
+ }
41
+ }
42
+
43
+ #[ cfg( test) ]
44
+ pub fn return_per_1000_tao_test (
45
+ take : Compact < u16 > ,
46
+ total_stake : U64F64 ,
47
+ emissions_per_day : U64F64 ,
48
+ ) -> U64F64 {
49
+ Self :: return_per_1000_tao ( take, total_stake, emissions_per_day)
50
+ }
51
+
24
52
fn get_delegate_by_existing_account ( delegate : AccountIdOf < T > ) -> DelegateInfo < T > {
25
53
let mut nominators = Vec :: < ( T :: AccountId , Compact < u64 > ) > :: new ( ) ;
26
54
@@ -63,14 +91,8 @@ impl<T: Config> Pallet<T> {
63
91
let total_stake: U64F64 =
64
92
Self :: get_stake_for_hotkey_on_subnet ( & delegate. clone ( ) , Self :: get_root_netuid ( ) ) . into ( ) ;
65
93
66
- let return_per_1000: U64F64 = if total_stake > U64F64 :: from_num ( 0 ) {
67
- emissions_per_day
68
- . saturating_mul ( u16:: MAX . saturating_sub ( take. 0 ) . into ( ) )
69
- . saturating_div ( u16:: MAX . into ( ) )
70
- . saturating_div ( total_stake. saturating_div ( U64F64 :: from_num ( 1000 ) ) )
71
- } else {
72
- U64F64 :: from_num ( 0 )
73
- } ;
94
+ let return_per_1000: U64F64 =
95
+ Self :: return_per_1000_tao ( take, total_stake, emissions_per_day) ;
74
96
75
97
DelegateInfo {
76
98
delegate_ss58 : delegate. clone ( ) ,
0 commit comments