@@ -242,8 +242,9 @@ pub mod pallet {
242
242
pub type EpochLength < T : Config > =
243
243
StorageValue < _ , T :: BlockNumber , ValueQuery , EpochLengthDefault < T > > ;
244
244
245
- /// Information about the current staking reward era.
245
+ /// Information about the current staking reward era. Checked every block.
246
246
#[ pallet:: storage]
247
+ #[ pallet:: whitelist_storage]
247
248
#[ pallet:: getter( fn get_current_era) ]
248
249
pub type CurrentEraInfo < T : Config > =
249
250
StorageValue < _ , RewardEraInfo < T :: RewardEra , T :: BlockNumber > , ValueQuery > ;
@@ -767,26 +768,26 @@ impl<T: Config> Pallet<T> {
767
768
768
769
fn start_new_reward_era_if_needed ( current_block : T :: BlockNumber ) -> Weight {
769
770
let current_era_info: RewardEraInfo < T :: RewardEra , T :: BlockNumber > = Self :: get_current_era ( ) ; // 1r
771
+
770
772
if current_block. saturating_sub ( current_era_info. started_at ) >= T :: EraLength :: get ( ) . into ( ) {
771
- // 1r
772
773
let new_era_info = RewardEraInfo {
773
774
era_index : current_era_info. era_index . saturating_add ( One :: one ( ) ) ,
774
775
started_at : current_block,
775
776
} ;
776
777
777
778
let current_reward_pool_info =
778
779
Self :: get_reward_pool_for_era ( current_era_info. era_index ) . unwrap_or_default ( ) ; // 1r
780
+
779
781
let past_eras_max = T :: StakingRewardsPastErasMax :: get ( ) ;
780
- let entries: u32 = StakingRewardPool :: < T > :: count ( ) ;
782
+ let entries: u32 = StakingRewardPool :: < T > :: count ( ) ; // 1r
783
+
781
784
if past_eras_max. eq ( & entries. into ( ) ) {
782
- // 2r
783
- let current_era = Self :: get_current_era ( ) . era_index ;
784
- let earliest_era = current_era. saturating_sub ( past_eras_max) . add ( One :: one ( ) ) ;
785
+ let earliest_era =
786
+ current_era_info. era_index . saturating_sub ( past_eras_max) . add ( One :: one ( ) ) ;
785
787
StakingRewardPool :: < T > :: remove ( earliest_era) ; // 1w
786
788
}
787
789
CurrentEraInfo :: < T > :: set ( new_era_info) ; // 1w
788
790
789
- // let msa_handle = T::HandleProvider::get_handle_for_msa(msa_id);
790
791
let total_reward_pool =
791
792
T :: RewardsProvider :: reward_pool_size ( current_reward_pool_info. total_staked_token ) ;
792
793
let new_reward_pool = RewardPoolInfo {
@@ -797,10 +798,10 @@ impl<T: Config> Pallet<T> {
797
798
StakingRewardPool :: < T > :: insert ( new_era_info. era_index , new_reward_pool) ; // 1w
798
799
799
800
T :: WeightInfo :: on_initialize ( )
800
- . saturating_add ( T :: DbWeight :: get ( ) . reads ( 5 ) )
801
+ . saturating_add ( T :: DbWeight :: get ( ) . reads ( 3 ) )
801
802
. saturating_add ( T :: DbWeight :: get ( ) . writes ( 3 ) )
802
803
} else {
803
- T :: DbWeight :: get ( ) . reads ( 2 )
804
+ T :: DbWeight :: get ( ) . reads ( 1 )
804
805
}
805
806
}
806
807
@@ -821,8 +822,7 @@ impl<T: Config> Pallet<T> {
821
822
Self :: get_staking_account_for ( staker) . ok_or ( Error :: < T > :: NotAStakingAccount ) ?;
822
823
823
824
let current_era: T :: RewardEra = Self :: get_current_era ( ) . era_index ;
824
- let thaw_eras = T :: ChangeStakingTargetThawEras :: get ( ) ;
825
- let thaw_at = current_era. saturating_add ( thaw_eras) ;
825
+ let thaw_at = current_era. saturating_add ( T :: ChangeStakingTargetThawEras :: get ( ) ) ;
826
826
staking_account_details. update_stake_change_unlocking ( amount, & thaw_at, & current_era) ?;
827
827
Self :: set_staking_account ( staker, & staking_account_details) ;
828
828
Ok ( ( ) )
@@ -842,8 +842,11 @@ impl<T: Config> Pallet<T> {
842
842
let mut to_msa_target = Self :: get_target_for ( staker, to_msa) . unwrap_or_default ( ) ;
843
843
844
844
if to_msa_target. amount . is_zero ( ) {
845
+ // it's a new StakingTargetDetails record.
845
846
to_msa_target. staking_type = staking_type. clone ( ) ;
846
847
} else {
848
+ // make sure they are not retargeting to a StakingTargetDetails with a different staking
849
+ // type, otherwise it could interfere with staking rewards.
847
850
ensure ! (
848
851
to_msa_target. staking_type. eq( staking_type) ,
849
852
Error :: <T >:: CannotChangeStakingType
0 commit comments