fix epoch_stakes again (#5396)
This commit is contained in:
@ -214,8 +214,7 @@ impl Tower {
|
||||
}
|
||||
|
||||
pub fn is_recent_epoch(&self, bank: &Bank) -> bool {
|
||||
let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
||||
bank_epoch >= self.epoch_stakes.epoch
|
||||
bank.epoch() >= self.epoch_stakes.epoch
|
||||
}
|
||||
|
||||
pub fn update_epoch(&mut self, bank: &Bank) {
|
||||
@ -224,8 +223,7 @@ impl Tower {
|
||||
bank.slot(),
|
||||
self.epoch_stakes.epoch
|
||||
);
|
||||
let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
||||
if bank_epoch != self.epoch_stakes.epoch {
|
||||
if bank.epoch() != self.epoch_stakes.epoch {
|
||||
assert!(
|
||||
self.is_recent_epoch(bank),
|
||||
"epoch_stakes cannot move backwards"
|
||||
|
@ -150,23 +150,15 @@ pub(crate) mod tests {
|
||||
|
||||
// First epoch has the bootstrap leader
|
||||
expected.insert(voting_keypair.pubkey(), leader_stake.stake(0));
|
||||
assert_eq!(
|
||||
vote_account_stakes_at_epoch(&bank, 0),
|
||||
Some(expected.clone())
|
||||
);
|
||||
|
||||
// henceforth, verify that we have snapshots of stake at epoch 0
|
||||
let expected = Some(expected);
|
||||
assert_eq!(vote_account_stakes_at_epoch(&bank, 0), expected);
|
||||
|
||||
// Second epoch carries same information
|
||||
let bank = new_from_parent(&Arc::new(bank), 1);
|
||||
assert_eq!(
|
||||
vote_account_stakes_at_epoch(&bank, 0),
|
||||
Some(expected.clone())
|
||||
);
|
||||
|
||||
expected.insert(voting_keypair.pubkey(), leader_stake.stake(1));
|
||||
assert_eq!(
|
||||
vote_account_stakes_at_epoch(&bank, 1),
|
||||
Some(expected.clone())
|
||||
);
|
||||
assert_eq!(vote_account_stakes_at_epoch(&bank, 0), expected);
|
||||
assert_eq!(vote_account_stakes_at_epoch(&bank, 1), expected);
|
||||
}
|
||||
|
||||
pub(crate) fn setup_vote_and_stake_accounts(
|
||||
@ -233,7 +225,7 @@ pub(crate) mod tests {
|
||||
..
|
||||
} = create_genesis_block(10_000);
|
||||
|
||||
let mut bank = Bank::new(&genesis_block);
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let vote_pubkey = Pubkey::new_rand();
|
||||
|
||||
// Give the validator some stake but don't setup a staking account
|
||||
@ -252,23 +244,28 @@ pub(crate) mod tests {
|
||||
stake,
|
||||
);
|
||||
|
||||
// simulated stake
|
||||
let other_stake = Stake {
|
||||
stake,
|
||||
activated: bank.get_stakers_epoch(bank.slot()),
|
||||
activated: bank.epoch(),
|
||||
..Stake::default()
|
||||
};
|
||||
|
||||
let epoch = bank.get_stakers_epoch(bank.slot());
|
||||
// find the first slot in the next staker's epoch
|
||||
while bank.epoch() <= epoch {
|
||||
let slot = bank.slot() + 1;
|
||||
bank = new_from_parent(&Arc::new(bank), slot);
|
||||
let mut slot = 1;
|
||||
while bank.get_stakers_epoch(slot) <= epoch {
|
||||
slot += 1;
|
||||
}
|
||||
let bank = new_from_parent(&Arc::new(bank), slot);
|
||||
let epoch = bank.get_stakers_epoch(slot);
|
||||
|
||||
let result: Vec<_> = epoch_stakes_and_lockouts(&bank, 0);
|
||||
assert_eq!(result, vec![(leader_stake.stake(0), None)]);
|
||||
|
||||
let mut result: Vec<_> = epoch_stakes_and_lockouts(&bank, bank.epoch());
|
||||
// epoch stakes and lockouts are saved off for the future epoch, should
|
||||
// match current bank state
|
||||
let mut result: Vec<_> = epoch_stakes_and_lockouts(&bank, epoch);
|
||||
result.sort();
|
||||
let mut expected = vec![
|
||||
(leader_stake.stake(bank.epoch()), None),
|
||||
|
Reference in New Issue
Block a user