vote: Add helper for creating current-versioned states
This commit is contained in:
parent
3881ae10fb
commit
5b903318b2
|
@ -118,7 +118,7 @@ mod test {
|
|||
|
||||
let vote_state = VoteState::default();
|
||||
let mut vote_account_data: Vec<u8> = vec![0; VoteState::size_of()];
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::serialize(&versioned, &mut vote_account_data).unwrap();
|
||||
let parsed = parse_account_data(
|
||||
&account_pubkey,
|
||||
|
|
|
@ -128,7 +128,7 @@ mod test {
|
|||
fn test_parse_vote() {
|
||||
let vote_state = VoteState::default();
|
||||
let mut vote_account_data: Vec<u8> = vec![0; VoteState::size_of()];
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::serialize(&versioned, &mut vote_account_data).unwrap();
|
||||
let expected_vote_state = UiVoteState {
|
||||
node_pubkey: Pubkey::default().to_string(),
|
||||
|
|
|
@ -434,26 +434,26 @@ mod tests {
|
|||
let mut vote_state1 = VoteState::from(&vote_account1).unwrap();
|
||||
vote_state1.process_slot_vote_unchecked(3);
|
||||
vote_state1.process_slot_vote_unchecked(5);
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state1));
|
||||
let versioned = VoteStateVersions::new_current(vote_state1);
|
||||
VoteState::to(&versioned, &mut vote_account1).unwrap();
|
||||
bank.store_account(&pk1, &vote_account1);
|
||||
|
||||
let mut vote_state2 = VoteState::from(&vote_account2).unwrap();
|
||||
vote_state2.process_slot_vote_unchecked(9);
|
||||
vote_state2.process_slot_vote_unchecked(10);
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state2));
|
||||
let versioned = VoteStateVersions::new_current(vote_state2);
|
||||
VoteState::to(&versioned, &mut vote_account2).unwrap();
|
||||
bank.store_account(&pk2, &vote_account2);
|
||||
|
||||
let mut vote_state3 = VoteState::from(&vote_account3).unwrap();
|
||||
vote_state3.root_slot = Some(1);
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state3));
|
||||
let versioned = VoteStateVersions::new_current(vote_state3);
|
||||
VoteState::to(&versioned, &mut vote_account3).unwrap();
|
||||
bank.store_account(&pk3, &vote_account3);
|
||||
|
||||
let mut vote_state4 = VoteState::from(&vote_account4).unwrap();
|
||||
vote_state4.root_slot = Some(2);
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state4));
|
||||
let versioned = VoteStateVersions::new_current(vote_state4);
|
||||
VoteState::to(&versioned, &mut vote_account4).unwrap();
|
||||
bank.store_account(&pk4, &vote_account4);
|
||||
|
||||
|
|
|
@ -1583,7 +1583,7 @@ pub mod test {
|
|||
vote_state.process_slot_vote_unchecked(*slot);
|
||||
}
|
||||
VoteState::serialize(
|
||||
&VoteStateVersions::Current(Box::new(vote_state)),
|
||||
&VoteStateVersions::new_current(vote_state),
|
||||
&mut account.data,
|
||||
)
|
||||
.expect("serialize state");
|
||||
|
|
|
@ -2562,7 +2562,7 @@ pub(crate) mod tests {
|
|||
let mut leader_vote_account = bank.get_account(&pubkey).unwrap();
|
||||
let mut vote_state = VoteState::from(&leader_vote_account).unwrap();
|
||||
vote_state.process_slot_vote_unchecked(vote_slot);
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut leader_vote_account).unwrap();
|
||||
bank.store_account(&pubkey, &leader_vote_account);
|
||||
}
|
||||
|
|
|
@ -3217,7 +3217,7 @@ pub mod tests {
|
|||
vote_state.root_slot = Some(root);
|
||||
let mut vote_account =
|
||||
Account::new(1, VoteState::size_of(), &solana_vote_program::id());
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::serialize(&versioned, &mut vote_account.data).unwrap();
|
||||
(
|
||||
solana_sdk::pubkey::new_rand(),
|
||||
|
|
|
@ -311,7 +311,7 @@ pub(crate) mod tests {
|
|||
let vote_accounts = stakes.into_iter().map(|(stake, vote_state)| {
|
||||
let account = Account::new_data(
|
||||
rng.gen(), // lamports
|
||||
&VoteStateVersions::Current(Box::new(vote_state)),
|
||||
&VoteStateVersions::new_current(vote_state),
|
||||
&Pubkey::new_unique(), // owner
|
||||
)
|
||||
.unwrap();
|
||||
|
|
|
@ -1004,7 +1004,7 @@ mod tests {
|
|||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
let vote_state_credits = vote_state.credits();
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
.unwrap();
|
||||
|
||||
let stake_pubkey = solana_sdk::pubkey::new_rand();
|
||||
|
@ -1902,7 +1902,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
stake_keyed_account.delegate(
|
||||
|
@ -1993,7 +1993,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
|
||||
stake_keyed_account
|
||||
|
@ -2235,7 +2235,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
let signers = vec![stake_pubkey].into_iter().collect();
|
||||
assert_eq!(
|
||||
|
@ -2351,7 +2351,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
let signers = vec![stake_pubkey].into_iter().collect();
|
||||
assert_eq!(
|
||||
|
|
|
@ -1641,7 +1641,7 @@ mod tests {
|
|||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
let vote_state_credits = vote_state.credits();
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
.unwrap();
|
||||
|
||||
let stake_pubkey = solana_sdk::pubkey::new_rand();
|
||||
|
@ -2539,7 +2539,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
stake_keyed_account.delegate(
|
||||
|
@ -2630,7 +2630,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
|
||||
stake_keyed_account
|
||||
|
@ -2872,7 +2872,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
let signers = vec![stake_pubkey].into_iter().collect();
|
||||
assert_eq!(
|
||||
|
@ -2988,7 +2988,7 @@ mod tests {
|
|||
));
|
||||
let vote_keyed_account = KeyedAccount::new(&vote_pubkey, false, &vote_account);
|
||||
vote_keyed_account
|
||||
.set_state(&VoteStateVersions::Current(Box::new(VoteState::default())))
|
||||
.set_state(&VoteStateVersions::new_current(VoteState::default()))
|
||||
.unwrap();
|
||||
let signers = vec![stake_pubkey].into_iter().collect();
|
||||
assert_eq!(
|
||||
|
|
|
@ -214,7 +214,7 @@ impl VoteState {
|
|||
pub fn size_of() -> usize {
|
||||
// Upper limit on the size of the Vote State. Equal to
|
||||
// size_of(VoteState) when votes.len() is MAX_LOCKOUT_HISTORY
|
||||
let vote_state = VoteStateVersions::Current(Box::new(Self::get_max_sized_vote_state()));
|
||||
let vote_state = VoteStateVersions::new_current(Self::get_max_sized_vote_state());
|
||||
serialized_size(&vote_state).unwrap() as usize
|
||||
}
|
||||
|
||||
|
@ -592,7 +592,7 @@ pub fn authorize<S: std::hash::BuildHasher>(
|
|||
}
|
||||
}
|
||||
|
||||
vote_account.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
vote_account.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
}
|
||||
|
||||
/// Update the node_pubkey, requires signature of the authorized voter
|
||||
|
@ -612,7 +612,7 @@ pub fn update_validator_identity<S: std::hash::BuildHasher>(
|
|||
|
||||
vote_state.node_pubkey = *node_pubkey;
|
||||
|
||||
vote_account.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
vote_account.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
}
|
||||
|
||||
/// Update the vote account's commission
|
||||
|
@ -629,7 +629,7 @@ pub fn update_commission<S: std::hash::BuildHasher>(
|
|||
|
||||
vote_state.commission = commission;
|
||||
|
||||
vote_account.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
vote_account.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
}
|
||||
|
||||
fn verify_authorized_signer<S: std::hash::BuildHasher>(
|
||||
|
@ -681,9 +681,9 @@ pub fn initialize_account<S: std::hash::BuildHasher>(
|
|||
// node must agree to accept this vote account
|
||||
verify_authorized_signer(&vote_init.node_pubkey, signers)?;
|
||||
|
||||
vote_account.set_state(&VoteStateVersions::Current(Box::new(VoteState::new(
|
||||
vote_account.set_state(&VoteStateVersions::new_current(VoteState::new(
|
||||
vote_init, clock,
|
||||
))))
|
||||
)))
|
||||
}
|
||||
|
||||
pub fn process_vote<S: std::hash::BuildHasher>(
|
||||
|
@ -711,7 +711,7 @@ pub fn process_vote<S: std::hash::BuildHasher>(
|
|||
.ok_or(VoteError::EmptySlots)
|
||||
.and_then(|slot| vote_state.process_timestamp(*slot, timestamp))?;
|
||||
}
|
||||
vote_account.set_state(&VoteStateVersions::Current(Box::new(vote_state)))
|
||||
vote_account.set_state(&VoteStateVersions::new_current(vote_state))
|
||||
}
|
||||
|
||||
pub fn create_account_with_authorized(
|
||||
|
@ -733,7 +733,7 @@ pub fn create_account_with_authorized(
|
|||
&Clock::default(),
|
||||
);
|
||||
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
|
||||
vote_account
|
||||
|
@ -911,11 +911,11 @@ mod tests {
|
|||
vote_state
|
||||
.votes
|
||||
.resize(MAX_LOCKOUT_HISTORY, Lockout::default());
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
assert!(VoteState::serialize(&versioned, &mut buffer[0..4]).is_err());
|
||||
VoteState::serialize(&versioned, &mut buffer).unwrap();
|
||||
assert_eq!(
|
||||
VoteStateVersions::Current(Box::new(VoteState::deserialize(&buffer).unwrap())),
|
||||
VoteStateVersions::new_current(VoteState::deserialize(&buffer).unwrap()),
|
||||
versioned
|
||||
);
|
||||
}
|
||||
|
@ -1985,7 +1985,7 @@ mod tests {
|
|||
)
|
||||
});
|
||||
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state.take().unwrap()));
|
||||
let versioned = VoteStateVersions::new_current(vote_state.take().unwrap());
|
||||
VoteState::serialize(&versioned, &mut max_sized_data).unwrap();
|
||||
vote_state = Some(versioned.convert_to_current());
|
||||
}
|
||||
|
|
|
@ -8,6 +8,10 @@ pub enum VoteStateVersions {
|
|||
}
|
||||
|
||||
impl VoteStateVersions {
|
||||
pub fn new_current(vote_state: VoteState) -> Self {
|
||||
Self::Current(Box::new(vote_state))
|
||||
}
|
||||
|
||||
pub fn convert_to_current(self) -> VoteState {
|
||||
match self {
|
||||
VoteStateVersions::V0_23_5(state) => {
|
||||
|
|
|
@ -10829,7 +10829,7 @@ pub(crate) mod tests {
|
|||
let mut vote_account = bank.get_account(vote_pubkey).unwrap_or_default();
|
||||
let mut vote_state = VoteState::from(&vote_account).unwrap_or_default();
|
||||
vote_state.last_timestamp = timestamp;
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state));
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
bank.store_account(vote_pubkey, &vote_account);
|
||||
}
|
||||
|
|
|
@ -316,7 +316,7 @@ mod tests {
|
|||
let vote_state = VoteState::new(&vote_init, &clock);
|
||||
let account = Account::new_data(
|
||||
rng.gen(), // lamports
|
||||
&VoteStateVersions::Current(Box::new(vote_state.clone())),
|
||||
&VoteStateVersions::new_current(vote_state.clone()),
|
||||
&Pubkey::new_unique(), // owner
|
||||
)
|
||||
.unwrap();
|
||||
|
|
Loading…
Reference in New Issue