replace tuple with `VoteReward` struct (#31408)

This commit is contained in:
Jeff Washington (jwash) 2023-05-01 12:42:05 -05:00 committed by GitHub
parent 8eebf64464
commit 58ce19446f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 31 additions and 9 deletions

View File

@ -1081,7 +1081,14 @@ struct LoadVoteAndStakeAccountsResult {
vote_accounts_cache_miss_count: usize, vote_accounts_cache_miss_count: usize,
} }
type VoteRewards = DashMap<Pubkey, (AccountSharedData, u8, u64, bool)>; struct VoteReward {
vote_account: AccountSharedData,
commission: u8,
vote_rewards: u64,
vote_needs_store: bool,
}
type VoteRewards = DashMap<Pubkey, VoteReward>;
type StakeRewards = Vec<StakeReward>; type StakeRewards = Vec<StakeReward>;
#[derive(Debug, Default)] #[derive(Debug, Default)]
@ -2920,8 +2927,15 @@ impl Bank {
delegations, delegations,
}, },
)| { )| {
vote_account_rewards vote_account_rewards.insert(
.insert(vote_pubkey, (vote_account, vote_state.commission, 0, false)); vote_pubkey,
VoteReward {
vote_account,
commission: vote_state.commission,
vote_rewards: 0,
vote_needs_store: false,
},
);
delegations delegations
.into_par_iter() .into_par_iter()
.map(move |delegation| (vote_pubkey, Arc::clone(&vote_state), delegation)) .map(move |delegation| (vote_pubkey, Arc::clone(&vote_state), delegation))
@ -2952,12 +2966,12 @@ impl Bank {
); );
if let Ok((stakers_reward, voters_reward)) = redeemed { if let Ok((stakers_reward, voters_reward)) = redeemed {
// track voter rewards // track voter rewards
if let Some(( if let Some(VoteReward {
_vote_account, vote_account: _,
_commission, commission: _,
vote_rewards_sum, vote_rewards: vote_rewards_sum,
vote_needs_store, vote_needs_store,
)) = vote_account_rewards.get_mut(&vote_pubkey).as_deref_mut() }) = vote_account_rewards.get_mut(&vote_pubkey).as_deref_mut()
{ {
*vote_needs_store = true; *vote_needs_store = true;
*vote_rewards_sum = vote_rewards_sum.saturating_add(voters_reward); *vote_rewards_sum = vote_rewards_sum.saturating_add(voters_reward);
@ -3007,7 +3021,15 @@ impl Bank {
let (vote_rewards, measure) = measure!(vote_account_rewards let (vote_rewards, measure) = measure!(vote_account_rewards
.into_iter() .into_iter()
.filter_map( .filter_map(
|(vote_pubkey, (mut vote_account, commission, vote_rewards, vote_needs_store))| { |(
vote_pubkey,
VoteReward {
mut vote_account,
commission,
vote_rewards,
vote_needs_store,
},
)| {
if let Err(err) = vote_account.checked_add_lamports(vote_rewards) { if let Err(err) = vote_account.checked_add_lamports(vote_rewards) {
debug!("reward redemption failed for {}: {:?}", vote_pubkey, err); debug!("reward redemption failed for {}: {:?}", vote_pubkey, err);
return None; return None;