solana_vote_program/vote_state/vote_state_versions.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
use {super::*, crate::vote_state::vote_state_0_23_5::VoteState0_23_5};
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
pub enum VoteStateVersions {
V0_23_5(Box<VoteState0_23_5>),
Current(Box<VoteState>),
}
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) => {
let authorized_voters =
AuthorizedVoters::new(state.authorized_voter_epoch, state.authorized_voter);
VoteState {
node_pubkey: state.node_pubkey,
/// the signer for withdrawals
authorized_withdrawer: state.authorized_withdrawer,
/// percentage (0-100) that represents what part of a rewards
/// payout should be given to this VoteAccount
commission: state.commission,
votes: state.votes.clone(),
root_slot: state.root_slot,
/// the signer for vote transactions
authorized_voters,
/// history of prior authorized voters and the epochs for which
/// they were set, the bottom end of the range is inclusive,
/// the top of the range is exclusive
prior_voters: CircBuf::default(),
/// history of how many credits earned by the end of each epoch
/// each tuple is (Epoch, credits, prev_credits)
epoch_credits: state.epoch_credits.clone(),
/// most recent timestamp submitted with a vote
last_timestamp: state.last_timestamp.clone(),
}
}
VoteStateVersions::Current(state) => *state,
}
}
pub fn is_uninitialized(&self) -> bool {
match self {
VoteStateVersions::V0_23_5(vote_state) => {
vote_state.authorized_voter == Pubkey::default()
}
VoteStateVersions::Current(vote_state) => vote_state.authorized_voters.is_empty(),
}
}
}