3
3
epoch_rewards_hasher:: hash_rewards_into_partitions, Bank ,
4
4
CalculateRewardsAndDistributeVoteRewardsResult , CalculateValidatorRewardsResult ,
5
5
EpochRewardCalculateParamInfo , PartitionedRewardsCalculation , PartitionedStakeReward ,
6
- PartitionedStakeRewards , StakeRewardCalculation , StakeRewardCalculationPartitioned ,
7
- VoteRewardsAccounts , REWARD_CALCULATION_NUM_BLOCKS ,
6
+ PartitionedStakeRewards , StakeRewardCalculation , VoteRewardsAccounts ,
7
+ REWARD_CALCULATION_NUM_BLOCKS ,
8
8
} ,
9
9
crate :: {
10
10
bank:: {
@@ -50,7 +50,7 @@ impl Bank {
50
50
let CalculateRewardsAndDistributeVoteRewardsResult {
51
51
distributed_rewards,
52
52
point_value,
53
- stake_rewards_by_partition ,
53
+ stake_rewards ,
54
54
} = self . calculate_rewards_and_distribute_vote_rewards (
55
55
parent_epoch,
56
56
reward_calc_tracer,
@@ -62,12 +62,9 @@ impl Bank {
62
62
let distribution_starting_block_height =
63
63
self . block_height ( ) + REWARD_CALCULATION_NUM_BLOCKS ;
64
64
65
- let num_partitions = stake_rewards_by_partition . len ( ) as u64 ;
65
+ let num_partitions = self . get_reward_distribution_num_blocks ( & stake_rewards ) ;
66
66
67
- self . set_epoch_reward_status_active (
68
- distribution_starting_block_height,
69
- stake_rewards_by_partition,
70
- ) ;
67
+ self . set_epoch_reward_status_calculated ( distribution_starting_block_height, stake_rewards) ;
71
68
72
69
self . create_epoch_rewards_sysvar (
73
70
distributed_rewards,
@@ -96,7 +93,7 @@ impl Bank {
96
93
) -> CalculateRewardsAndDistributeVoteRewardsResult {
97
94
let PartitionedRewardsCalculation {
98
95
vote_account_rewards,
99
- stake_rewards_by_partition ,
96
+ stake_rewards ,
100
97
validator_rate,
101
98
foundation_rate,
102
99
prev_epoch_duration_in_years,
@@ -114,10 +111,10 @@ impl Bank {
114
111
// update reward history of JUST vote_rewards, stake_rewards is vec![] here
115
112
self . update_reward_history ( vec ! [ ] , vote_rewards) ;
116
113
117
- let StakeRewardCalculationPartitioned {
118
- stake_rewards_by_partition ,
114
+ let StakeRewardCalculation {
115
+ stake_rewards ,
119
116
total_stake_rewards_lamports,
120
- } = stake_rewards_by_partition ;
117
+ } = stake_rewards ;
121
118
122
119
// verify that we didn't pay any more than we expected to
123
120
assert ! ( point_value. rewards >= total_vote_rewards + total_stake_rewards_lamports) ;
@@ -161,7 +158,7 @@ impl Bank {
161
158
CalculateRewardsAndDistributeVoteRewardsResult {
162
159
distributed_rewards : total_vote_rewards,
163
160
point_value,
164
- stake_rewards_by_partition ,
161
+ stake_rewards ,
165
162
}
166
163
}
167
164
@@ -211,22 +208,10 @@ impl Bank {
211
208
)
212
209
. unwrap_or_default ( ) ;
213
210
214
- let num_partitions = self . get_reward_distribution_num_blocks ( & stake_rewards. stake_rewards ) ;
215
- let parent_blockhash = self
216
- . parent ( )
217
- . expect ( "Partitioned rewards calculation must still have access to parent Bank." )
218
- . last_blockhash ( ) ;
219
- let ( stake_rewards_by_partition, hash_us) = measure_us ! ( hash_rewards_into_partitions(
220
- std:: mem:: take( & mut stake_rewards. stake_rewards) ,
221
- & parent_blockhash,
222
- num_partitions as usize ,
223
- ) ) ;
224
- metrics. hash_partition_rewards_us += hash_us;
225
-
226
211
PartitionedRewardsCalculation {
227
212
vote_account_rewards,
228
- stake_rewards_by_partition : StakeRewardCalculationPartitioned {
229
- stake_rewards_by_partition ,
213
+ stake_rewards : StakeRewardCalculation {
214
+ stake_rewards : std :: mem :: take ( & mut stake_rewards . stake_rewards ) ,
230
215
total_stake_rewards_lamports : stake_rewards. total_stake_rewards_lamports ,
231
216
} ,
232
217
validator_rate,
@@ -488,7 +473,7 @@ impl Bank {
488
473
reward_calc_tracer,
489
474
thread_pool,
490
475
) ;
491
- self . set_epoch_reward_status_active (
476
+ self . set_epoch_reward_status_partitioned (
492
477
epoch_rewards_sysvar. distribution_starting_block_height ,
493
478
stake_rewards_by_partition,
494
479
) ;
@@ -551,7 +536,7 @@ mod tests {
551
536
create_default_reward_bank, create_reward_bank,
552
537
create_reward_bank_with_specific_stakes, RewardBank , SLOTS_PER_EPOCH ,
553
538
} ,
554
- EpochRewardStatus , StartBlockHeightAndRewards ,
539
+ EpochRewardStatus , StartBlockHeightAndPartitionedRewards ,
555
540
} ,
556
541
tests:: create_genesis_config,
557
542
VoteReward ,
@@ -849,9 +834,9 @@ mod tests {
849
834
let thread_pool = ThreadPoolBuilder :: new ( ) . num_threads ( 1 ) . build ( ) . unwrap ( ) ;
850
835
let mut rewards_metrics = RewardsMetrics :: default ( ) ;
851
836
let PartitionedRewardsCalculation {
852
- stake_rewards_by_partition :
853
- StakeRewardCalculationPartitioned {
854
- stake_rewards_by_partition : expected_stake_rewards,
837
+ stake_rewards :
838
+ StakeRewardCalculation {
839
+ stake_rewards : expected_stake_rewards,
855
840
..
856
841
} ,
857
842
..
@@ -865,8 +850,18 @@ mod tests {
865
850
let epoch_rewards_sysvar = bank. get_epoch_rewards_sysvar ( ) ;
866
851
let recalculated_rewards =
867
852
bank. recalculate_stake_rewards ( & epoch_rewards_sysvar, null_tracer ( ) , & thread_pool) ;
868
- assert_eq ! ( expected_stake_rewards. len( ) , recalculated_rewards. len( ) ) ;
869
- compare_stake_rewards ( & expected_stake_rewards, & recalculated_rewards) ;
853
+
854
+ let expected_stake_rewards_partitioned = hash_rewards_into_partitions (
855
+ expected_stake_rewards,
856
+ & epoch_rewards_sysvar. parent_blockhash ,
857
+ epoch_rewards_sysvar. num_partitions as usize ,
858
+ ) ;
859
+
860
+ assert_eq ! (
861
+ expected_stake_rewards_partitioned. len( ) ,
862
+ recalculated_rewards. len( )
863
+ ) ;
864
+ compare_stake_rewards ( & expected_stake_rewards_partitioned, & recalculated_rewards) ;
870
865
871
866
// Advance to first distribution block, ie. child block of the epoch
872
867
// boundary; slot is advanced 2 to demonstrate that distribution works
@@ -877,15 +872,18 @@ mod tests {
877
872
let epoch_rewards_sysvar = bank. get_epoch_rewards_sysvar ( ) ;
878
873
let recalculated_rewards =
879
874
bank. recalculate_stake_rewards ( & epoch_rewards_sysvar, null_tracer ( ) , & thread_pool) ;
880
- assert_eq ! ( expected_stake_rewards. len( ) , recalculated_rewards. len( ) ) ;
875
+ assert_eq ! (
876
+ expected_stake_rewards_partitioned. len( ) ,
877
+ recalculated_rewards. len( )
878
+ ) ;
881
879
// First partition has already been distributed, so recalculation
882
880
// returns 0 rewards
883
881
assert_eq ! ( recalculated_rewards[ 0 ] . len( ) , 0 ) ;
884
882
let starting_index = ( bank. block_height ( ) + 1
885
883
- epoch_rewards_sysvar. distribution_starting_block_height )
886
884
as usize ;
887
885
compare_stake_rewards (
888
- & expected_stake_rewards [ starting_index..] ,
886
+ & expected_stake_rewards_partitioned [ starting_index..] ,
889
887
& recalculated_rewards[ starting_index..] ,
890
888
) ;
891
889
@@ -914,9 +912,9 @@ mod tests {
914
912
let thread_pool = ThreadPoolBuilder :: new ( ) . num_threads ( 1 ) . build ( ) . unwrap ( ) ;
915
913
let mut rewards_metrics = RewardsMetrics :: default ( ) ;
916
914
let PartitionedRewardsCalculation {
917
- stake_rewards_by_partition :
918
- StakeRewardCalculationPartitioned {
919
- stake_rewards_by_partition : expected_stake_rewards,
915
+ stake_rewards :
916
+ StakeRewardCalculation {
917
+ stake_rewards : expected_stake_rewards,
920
918
..
921
919
} ,
922
920
..
@@ -928,6 +926,12 @@ mod tests {
928
926
) ;
929
927
930
928
let epoch_rewards_sysvar = bank. get_epoch_rewards_sysvar ( ) ;
929
+ let expected_stake_rewards = hash_rewards_into_partitions (
930
+ expected_stake_rewards,
931
+ & epoch_rewards_sysvar. parent_blockhash ,
932
+ epoch_rewards_sysvar. num_partitions as usize ,
933
+ ) ;
934
+
931
935
let recalculated_rewards =
932
936
bank. recalculate_stake_rewards ( & epoch_rewards_sysvar, null_tracer ( ) , & thread_pool) ;
933
937
assert_eq ! ( expected_stake_rewards. len( ) , recalculated_rewards. len( ) ) ;
@@ -968,9 +972,9 @@ mod tests {
968
972
let thread_pool = ThreadPoolBuilder :: new ( ) . num_threads ( 1 ) . build ( ) . unwrap ( ) ;
969
973
let mut rewards_metrics = RewardsMetrics :: default ( ) ;
970
974
let PartitionedRewardsCalculation {
971
- stake_rewards_by_partition :
972
- StakeRewardCalculationPartitioned {
973
- stake_rewards_by_partition : expected_stake_rewards,
975
+ stake_rewards :
976
+ StakeRewardCalculation {
977
+ stake_rewards : expected_stake_rewards,
974
978
..
975
979
} ,
976
980
point_value,
@@ -983,7 +987,7 @@ mod tests {
983
987
) ;
984
988
985
989
bank. recalculate_partitioned_rewards ( null_tracer ( ) , & thread_pool) ;
986
- let EpochRewardStatus :: Active ( StartBlockHeightAndRewards {
990
+ let EpochRewardStatus :: Partitioned ( StartBlockHeightAndPartitionedRewards {
987
991
distribution_starting_block_height,
988
992
stake_rewards_by_partition : ref recalculated_rewards,
989
993
} ) = bank. epoch_reward_status
@@ -994,6 +998,14 @@ mod tests {
994
998
expected_starting_block_height,
995
999
distribution_starting_block_height
996
1000
) ;
1001
+
1002
+ let epoch_rewards_sysvar = bank. get_epoch_rewards_sysvar ( ) ;
1003
+ let expected_stake_rewards = hash_rewards_into_partitions (
1004
+ expected_stake_rewards,
1005
+ & epoch_rewards_sysvar. parent_blockhash ,
1006
+ epoch_rewards_sysvar. num_partitions as usize ,
1007
+ ) ;
1008
+
997
1009
assert_eq ! ( expected_stake_rewards. len( ) , recalculated_rewards. len( ) ) ;
998
1010
compare_stake_rewards ( & expected_stake_rewards, recalculated_rewards) ;
999
1011
@@ -1005,7 +1017,7 @@ mod tests {
1005
1017
Bank :: new_from_parent ( Arc :: new ( bank) , & Pubkey :: default ( ) , SLOTS_PER_EPOCH + 1 ) ;
1006
1018
1007
1019
bank. recalculate_partitioned_rewards ( null_tracer ( ) , & thread_pool) ;
1008
- let EpochRewardStatus :: Active ( StartBlockHeightAndRewards {
1020
+ let EpochRewardStatus :: Partitioned ( StartBlockHeightAndPartitionedRewards {
1009
1021
distribution_starting_block_height,
1010
1022
stake_rewards_by_partition : ref recalculated_rewards,
1011
1023
} ) = bank. epoch_reward_status
0 commit comments