diff --git a/account-decoder/src/parse_account_data.rs b/account-decoder/src/parse_account_data.rs index 2f013d76b3..a677e89b50 100644 --- a/account-decoder/src/parse_account_data.rs +++ b/account-decoder/src/parse_account_data.rs @@ -118,7 +118,7 @@ mod test { let vote_state = VoteState::default(); let mut vote_account_data: Vec = 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, diff --git a/account-decoder/src/parse_vote.rs b/account-decoder/src/parse_vote.rs index a14ad70558..a1aca278ee 100644 --- a/account-decoder/src/parse_vote.rs +++ b/account-decoder/src/parse_vote.rs @@ -128,7 +128,7 @@ mod test { fn test_parse_vote() { let vote_state = VoteState::default(); let mut vote_account_data: Vec = 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(), diff --git a/core/src/commitment_service.rs b/core/src/commitment_service.rs index d73f769181..43592889ca 100644 --- a/core/src/commitment_service.rs +++ b/core/src/commitment_service.rs @@ -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); diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 229b503fc3..aaf316c030 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -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"); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 4730de90f7..ef4b6b8473 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -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); } diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index bde0c59164..1734f926bd 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -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(), diff --git a/ledger/src/staking_utils.rs b/ledger/src/staking_utils.rs index c407a7cdf0..29a9cfe23c 100644 --- a/ledger/src/staking_utils.rs +++ b/ledger/src/staking_utils.rs @@ -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(); diff --git a/programs/stake/src/legacy_stake_state.rs b/programs/stake/src/legacy_stake_state.rs index 6eb4d628af..c8fe272396 100644 --- a/programs/stake/src/legacy_stake_state.rs +++ b/programs/stake/src/legacy_stake_state.rs @@ -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!( diff --git a/programs/stake/src/stake_state.rs b/programs/stake/src/stake_state.rs index 64f52cb4d3..6da143faf9 100644 --- a/programs/stake/src/stake_state.rs +++ b/programs/stake/src/stake_state.rs @@ -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!( diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index 6614aca627..d44039cca8 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -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( } } - 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( 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( 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( @@ -681,9 +681,9 @@ pub fn initialize_account( // 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( @@ -711,7 +711,7 @@ pub fn process_vote( .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()); } diff --git a/programs/vote/src/vote_state/vote_state_versions.rs b/programs/vote/src/vote_state/vote_state_versions.rs index b80d83ee4a..f00cc65354 100644 --- a/programs/vote/src/vote_state/vote_state_versions.rs +++ b/programs/vote/src/vote_state/vote_state_versions.rs @@ -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) => { diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 68a2fe6ea8..9e0d923a54 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -10826,7 +10826,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); } diff --git a/runtime/src/vote_account.rs b/runtime/src/vote_account.rs index c0dd52a9f2..09fd86ae13 100644 --- a/runtime/src/vote_account.rs +++ b/runtime/src/vote_account.rs @@ -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();