add update_reward_history_in_partition (#32062)
* add update_reward_history_in_partition * remove explicit type * remove spurrious comment
This commit is contained in:
parent
b81a060898
commit
26f4c405b2
|
@ -3184,6 +3184,20 @@ impl Bank {
|
||||||
.for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info)));
|
.for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
/// insert non-zero stake rewards to self.rewards
|
||||||
|
/// Return the number of rewards inserted
|
||||||
|
fn update_reward_history_in_partition(&self, stake_rewards: &[StakeReward]) -> usize {
|
||||||
|
let mut rewards = self.rewards.write().unwrap();
|
||||||
|
rewards.reserve(stake_rewards.len());
|
||||||
|
let initial_len = rewards.len();
|
||||||
|
stake_rewards
|
||||||
|
.iter()
|
||||||
|
.filter(|x| x.get_stake_reward() > 0)
|
||||||
|
.for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info)));
|
||||||
|
rewards.len().saturating_sub(initial_len)
|
||||||
|
}
|
||||||
|
|
||||||
fn update_recent_blockhashes_locked(&self, locked_blockhash_queue: &BlockhashQueue) {
|
fn update_recent_blockhashes_locked(&self, locked_blockhash_queue: &BlockhashQueue) {
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
self.update_sysvar_account(&sysvar::recent_blockhashes::id(), |account| {
|
self.update_sysvar_account(&sysvar::recent_blockhashes::id(), |account| {
|
||||||
|
|
|
@ -12606,6 +12606,63 @@ fn test_store_stake_accounts_in_partition_empty() {
|
||||||
assert_eq!(expected_total, total_rewards_in_lamports);
|
assert_eq!(expected_total, total_rewards_in_lamports);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_update_reward_history_in_partition() {
|
||||||
|
for zero_reward in [false, true] {
|
||||||
|
let (genesis_config, _mint_keypair) = create_genesis_config(1_000_000 * LAMPORTS_PER_SOL);
|
||||||
|
let bank = Bank::new_for_tests(&genesis_config);
|
||||||
|
|
||||||
|
let mut expected_num = 100;
|
||||||
|
|
||||||
|
let mut stake_rewards = (0..expected_num)
|
||||||
|
.map(|_| StakeReward::new_random())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
let i_zero = rng.gen_range(0, expected_num);
|
||||||
|
if zero_reward {
|
||||||
|
// pick one entry to have zero rewards so it gets ignored
|
||||||
|
stake_rewards[i_zero].stake_reward_info.lamports = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let num_in_history = bank.update_reward_history_in_partition(&stake_rewards);
|
||||||
|
|
||||||
|
if zero_reward {
|
||||||
|
stake_rewards.remove(i_zero);
|
||||||
|
// -1 because one of them had zero rewards and was ignored
|
||||||
|
expected_num -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bank.rewards
|
||||||
|
.read()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.zip(stake_rewards.iter())
|
||||||
|
.for_each(|((k, reward_info), expected_stake_reward)| {
|
||||||
|
assert_eq!(
|
||||||
|
(
|
||||||
|
&expected_stake_reward.stake_pubkey,
|
||||||
|
&expected_stake_reward.stake_reward_info
|
||||||
|
),
|
||||||
|
(k, reward_info)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert_eq!(num_in_history, expected_num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_update_reward_history_in_partition_empty() {
|
||||||
|
let (genesis_config, _mint_keypair) = create_genesis_config(1_000_000 * LAMPORTS_PER_SOL);
|
||||||
|
let bank = Bank::new_for_tests(&genesis_config);
|
||||||
|
|
||||||
|
let stake_rewards = vec![];
|
||||||
|
|
||||||
|
let num_in_history = bank.update_reward_history_in_partition(&stake_rewards);
|
||||||
|
assert_eq!(num_in_history, 0);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_system_instruction_allocate() {
|
fn test_system_instruction_allocate() {
|
||||||
let (genesis_config, mint_keypair) = create_genesis_config(sol_to_lamports(1.0));
|
let (genesis_config, mint_keypair) = create_genesis_config(sol_to_lamports(1.0));
|
||||||
|
|
Loading…
Reference in New Issue