@@ -109,6 +109,16 @@ pub mod pallet {
109109        BalanceOf < T > , 
110110    > ; 
111111
112+     #[ pallet:: storage]  
113+     #[ pallet:: getter( fn  mpower_of_account_for_date) ]  
114+     pub ( super )  type  MPowerForAccountForDate < T :  Config >  = StorageMap < _ ,  Blake2_128Concat , 
115+         ( 
116+             Date , 
117+             T :: AccountId , 
118+         ) , 
119+         u128 , 
120+     > ; 
121+ 
112122    #[ pallet:: storage]  
113123    #[ pallet:: getter( fn  rewards_allowance_dhx_for_date_remaining) ]  
114124    pub ( super )  type  RewardsAllowanceDHXForDateRemaining < T :  Config >  = StorageMap < _ ,  Blake2_128Concat , 
@@ -395,6 +405,10 @@ pub mod pallet {
395405         /// \[date, amount_dhx_bonded, account_dhx_bonded\] 
396406         SetBondedDHXOfAccountForDateStored ( Date ,  BalanceOf < T > ,  T :: AccountId ) , 
397407
408+         /// Storage of the mPower of an account on a specific date. 
409+          /// \[date, amount_mpower, account\] 
410+          SetMPowerOfAccountForDateStored ( Date ,  u128 ,  T :: AccountId ) , 
411+ 
398412        /// Storage of the default daily reward allowance in DHX by an origin account. 
399413         /// \[amount_dhx, sender\] 
400414         SetRewardsAllowanceDHXDailyStored ( BalanceOf < T > ,  T :: AccountId ) , 
@@ -985,12 +999,26 @@ pub mod pallet {
985999                } 
9861000                // println!("min_mpower_daily_u128 {:#?}", min_mpower_daily_u128); 
9871001
988-                 // TODO - move this into off-chain workers function 
1002+                 // TODO - integrate this with functionality of off-chain workers function where we 
1003+                 // fetch the mpower from off-chain and store it with `set_mpower_of_account_for_date` 
9891004                // TODO - fetch the mPower of the miner currently being iterated to check if it's greater than the min. 
9901005                // mPower that is required 
991-                 let  mpower_miner_u128:  u128  = 5u128 ; 
1006+                 let  mut  mpower_current_u128:  u128  = 0u128 ; 
1007+                 let  _mpower_current_u128 = <MPowerForAccountForDate < T > >:: get ( ( start_of_requested_date_millis. clone ( ) ,  miner. clone ( ) ) ) ; 
1008+                 match  _mpower_current_u128 { 
1009+                     None  => { 
1010+                         log:: error!( "Unable to get_mpower_of_account_for_date {:?}" ,  start_of_requested_date_millis. clone( ) ) ; 
1011+                         println ! ( "Unable to get_mpower_of_account_for_date {:?}" ,  start_of_requested_date_millis. clone( ) ) ; 
1012+                     } , 
1013+                     Some ( x)  => { 
1014+                         mpower_current_u128 = x; 
1015+                     } 
1016+                 } 
1017+                 log:: info!( "mpower_current_u128 {:#?}, {:?}" ,  mpower_current_u128,  start_of_requested_date_millis. clone( ) ) ; 
1018+                 // println!("mpower_current_u128 {:#?}, {:?}", mpower_current_u128, start_of_requested_date_millis.clone()); 
1019+ 
9921020                let  mut  has_min_mpower_daily = false ; 
993-                 if  mpower_miner_u128  >= min_mpower_daily_u128 { 
1021+                 if  mpower_current_u128  >= min_mpower_daily_u128 { 
9941022                    has_min_mpower_daily = true ; 
9951023                } 
9961024                log:: info!( "has_min_mpower_daily: {:?} {:?}" ,  has_min_mpower_daily. clone( ) ,  miner. clone( ) ) ; 
@@ -1995,16 +2023,28 @@ pub mod pallet {
19952023
19962024        fn  convert_u64_in_milliseconds_to_start_of_date ( date_as_u64_millis :  u64 )  -> Result < Date ,  DispatchError >  { 
19972025            let  date_as_u64_secs = date_as_u64_millis. clone ( )  / 1000u64 ; 
2026+             log:: info!( "convert_u64_in_milliseconds_to_start_of_date - date_as_u64_secs: {:?}" ,  date_as_u64_secs. clone( ) ) ; 
19982027            // https://docs.rs/chrono/0.4.6/chrono/naive/struct.NaiveDateTime.html#method.from_timestamp 
19992028            let  date = NaiveDateTime :: from_timestamp ( i64:: try_from ( date_as_u64_secs) . unwrap ( ) ,  0 ) . date ( ) ; 
2000-             log:: info!( "convert_u64_in_milliseconds_to_start_of_date - date_as_u64_secs: {:?}" ,  date_as_u64_secs. clone( ) ) ; 
20012029
20022030            let  date_start_millis = date. and_hms ( 0 ,  0 ,  0 ) . timestamp ( )  *  1000 ; 
20032031            log:: info!( "convert_u64_in_milliseconds_to_start_of_date - date_start_millis: {:?}" ,  date_start_millis. clone( ) ) ; 
20042032            log:: info!( "convert_u64_in_milliseconds_to_start_of_date - Timestamp requested Date: {:?}" ,  date) ; 
20052033            return  Ok ( date_start_millis) ; 
20062034        } 
20072035
2036+         fn  convert_i64_in_milliseconds_to_start_of_date ( date_as_i64_millis :  i64 )  -> Result < Date ,  DispatchError >  { 
2037+             let  date_as_i64_secs = date_as_i64_millis. clone ( )  / 1000i64 ; 
2038+             log:: info!( "convert_i64_in_milliseconds_to_start_of_date - date_as_i64_secs: {:?}" ,  date_as_i64_secs. clone( ) ) ; 
2039+             // https://docs.rs/chrono/0.4.6/chrono/naive/struct.NaiveDateTime.html#method.from_timestamp 
2040+             let  date = NaiveDateTime :: from_timestamp ( i64:: try_from ( date_as_i64_secs) . unwrap ( ) ,  0 ) . date ( ) ; 
2041+ 
2042+             let  date_start_millis = date. and_hms ( 0 ,  0 ,  0 ) . timestamp ( )  *  1000 ; 
2043+             log:: info!( "convert_i64_in_milliseconds_to_start_of_date - date_start_millis: {:?}" ,  date_start_millis. clone( ) ) ; 
2044+             log:: info!( "convert_i64_in_milliseconds_to_start_of_date - Timestamp requested Date: {:?}" ,  date) ; 
2045+             return  Ok ( date_start_millis) ; 
2046+         } 
2047+ 
20082048        fn  convert_balance_to_u128 ( balance :  BalanceOf < T > )  -> Result < u128 ,  DispatchError >  { 
20092049            let  balance_as_u128; 
20102050
@@ -2101,6 +2141,42 @@ pub mod pallet {
21012141            Ok ( bonded_dhx_current_u128. clone ( ) ) 
21022142        } 
21032143
2144+         // we need to set the mPower for the next start date so it's available from off-chain in time 
2145+         pub  fn  set_mpower_of_account_for_date ( account_id :  T :: AccountId ,  mpower :  u128 ,  next_start_date :  Date )  -> Result < u128 ,  DispatchError >  { 
2146+             // // Note: we DO need the following as we're using the current timestamp, rather than a function parameter. 
2147+             // let timestamp: <T as pallet_timestamp::Config>::Moment = <pallet_timestamp::Pallet<T>>::get(); 
2148+             // let requested_date_as_u64 = Self::convert_moment_to_u64_in_milliseconds(timestamp.clone())?; 
2149+             // log::info!("set_mpower_of_account_for_date - requested_date_as_u64: {:?}", requested_date_as_u64.clone()); 
2150+ 
2151+             // convert the requested date/time to the start of that day date/time to signify that date for lookup 
2152+             // i.e. 21 Apr @ 1420 -> 21 Apr @ 0000 
2153+             let  start_of_next_start_date_millis = Self :: convert_i64_in_milliseconds_to_start_of_date ( next_start_date. clone ( ) ) ?; 
2154+ 
2155+             let  mpower_current_u128 = mpower. clone ( ) ; 
2156+ 
2157+             // Update storage. Override the default that may have been set in on_initialize 
2158+             <MPowerForAccountForDate < T > >:: insert ( 
2159+                 ( 
2160+                     start_of_next_start_date_millis. clone ( ) , 
2161+                     account_id. clone ( ) , 
2162+                 ) , 
2163+                 mpower_current_u128. clone ( ) , 
2164+             ) ; 
2165+             log:: info!( "set_mpower_of_account_for_date - start_of_next_start_date_millis: {:?}" ,  & start_of_next_start_date_millis) ; 
2166+             log:: info!( "set_mpower_of_account_for_date - account_id: {:?}" ,  & account_id) ; 
2167+             log:: info!( "set_mpower_of_account_for_date - mpower_current: {:?}" ,  & mpower_current_u128) ; 
2168+ 
2169+             // Emit an event. 
2170+             Self :: deposit_event ( Event :: SetMPowerOfAccountForDateStored ( 
2171+                 start_of_next_start_date_millis. clone ( ) , 
2172+                 mpower_current_u128. clone ( ) , 
2173+                 account_id. clone ( ) , 
2174+             ) ) ; 
2175+ 
2176+             // Return a successful DispatchResultWithPostInfo 
2177+             Ok ( mpower_current_u128. clone ( ) ) 
2178+         } 
2179+ 
21042180        fn  get_min_bonded_dhx_daily ( )  -> Result < ( BalanceOf < T > ,  u128 ) ,  DispatchError >  { 
21052181            let  mut  min_bonded_dhx_daily:  BalanceOf < T >  = 10u32 . into ( ) ;  // initialize 
21062182            let  mut  min_bonded_dhx_daily_u128:  u128  = TEN ; 
0 commit comments