Test `EpochRewards` sysvar creation, distribution, and burning. (#32339)
* Test `EpochRewards` sysvar creation, distribution, and burning. * Update runtime/src/bank/tests.rs Co-authored-by: Brooks <brooks@prumo.org> --------- Co-authored-by: HaoranYi <haoran.yi@solana.com> Co-authored-by: Brooks <brooks@prumo.org>
This commit is contained in:
parent
43a5ed3139
commit
9b405b21ff
|
@ -12823,6 +12823,49 @@ fn test_rewards_computation() {
|
||||||
assert_eq!(stake_rewards.stake_rewards.len(), expected_num_delegations);
|
assert_eq!(stake_rewards.stake_rewards.len(), expected_num_delegations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test `EpochRewards` sysvar creation, distribution, and burning.
|
||||||
|
/// This test covers the following epoch_rewards_sysvar bank member functions, i.e.
|
||||||
|
/// `create_epoch_rewards_sysvar`, `update_epoch_rewards_sysvar`, `burn_and_purge_account`.
|
||||||
|
#[test]
|
||||||
|
fn test_epoch_rewards_sysvar() {
|
||||||
|
let (mut genesis_config, _mint_keypair) = create_genesis_config(1_000_000 * LAMPORTS_PER_SOL);
|
||||||
|
genesis_config.epoch_schedule = EpochSchedule::custom(432000, 432000, false);
|
||||||
|
let mut bank = Bank::new_for_tests(&genesis_config);
|
||||||
|
bank.activate_feature(&feature_set::enable_partitioned_epoch_reward::id());
|
||||||
|
|
||||||
|
let total_rewards = 1_000_000_000; // a large rewards so that the sysvar account is rent-exempted.
|
||||||
|
|
||||||
|
// create epoch rewards sysvar
|
||||||
|
let expected_epoch_rewards = sysvar::epoch_rewards::EpochRewards {
|
||||||
|
total_rewards,
|
||||||
|
distributed_rewards: 10,
|
||||||
|
distribution_complete_block_height: 42,
|
||||||
|
};
|
||||||
|
|
||||||
|
bank.create_epoch_rewards_sysvar(total_rewards, 10, 42);
|
||||||
|
let account = bank.get_account(&sysvar::epoch_rewards::id()).unwrap();
|
||||||
|
assert_eq!(account.lamports(), total_rewards - 10);
|
||||||
|
let epoch_rewards: sysvar::epoch_rewards::EpochRewards = from_account(&account).unwrap();
|
||||||
|
assert_eq!(epoch_rewards, expected_epoch_rewards);
|
||||||
|
|
||||||
|
// make a distribution from epoch rewards sysvar
|
||||||
|
bank.update_epoch_rewards_sysvar(10);
|
||||||
|
let account = bank.get_account(&sysvar::epoch_rewards::id()).unwrap();
|
||||||
|
assert_eq!(account.lamports(), total_rewards - 20);
|
||||||
|
let epoch_rewards: sysvar::epoch_rewards::EpochRewards = from_account(&account).unwrap();
|
||||||
|
let expected_epoch_rewards = sysvar::epoch_rewards::EpochRewards {
|
||||||
|
total_rewards,
|
||||||
|
distributed_rewards: 20,
|
||||||
|
distribution_complete_block_height: 42,
|
||||||
|
};
|
||||||
|
assert_eq!(epoch_rewards, expected_epoch_rewards);
|
||||||
|
|
||||||
|
// burn epoch rewards sysvar
|
||||||
|
bank.burn_and_purge_account(&sysvar::epoch_rewards::id(), account);
|
||||||
|
let account = bank.get_account(&sysvar::epoch_rewards::id());
|
||||||
|
assert!(account.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
/// Test rewards compuation and partitioned rewards distribution at the epoch boundary
|
/// Test rewards compuation and partitioned rewards distribution at the epoch boundary
|
||||||
#[test]
|
#[test]
|
||||||
fn test_store_stake_accounts_in_partition() {
|
fn test_store_stake_accounts_in_partition() {
|
||||||
|
|
Loading…
Reference in New Issue