62 lines
1.7 KiB
Rust
62 lines
1.7 KiB
Rust
#![allow(clippy::integer_arithmetic)]
|
|
use super::*;
|
|
|
|
const MAX_ITEMS: usize = 32;
|
|
|
|
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
|
pub struct VoteState0_23_5 {
|
|
/// the node that votes in this account
|
|
pub node_pubkey: Pubkey,
|
|
|
|
/// the signer for vote transactions
|
|
pub authorized_voter: Pubkey,
|
|
/// when the authorized voter was set/initialized
|
|
pub authorized_voter_epoch: Epoch,
|
|
|
|
/// history of prior authorized voters and the epoch ranges for which
|
|
/// they were set
|
|
pub prior_voters: CircBuf<(Pubkey, Epoch, Epoch, Slot)>,
|
|
|
|
/// the signer for withdrawals
|
|
pub authorized_withdrawer: Pubkey,
|
|
/// percentage (0-100) that represents what part of a rewards
|
|
/// payout should be given to this VoteAccount
|
|
pub commission: u8,
|
|
|
|
pub votes: VecDeque<Lockout>,
|
|
pub root_slot: Option<u64>,
|
|
|
|
/// history of how many credits earned by the end of each epoch
|
|
/// each tuple is (Epoch, credits, prev_credits)
|
|
pub epoch_credits: Vec<(Epoch, u64, u64)>,
|
|
|
|
/// most recent timestamp submitted with a vote
|
|
pub last_timestamp: BlockTimestamp,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
|
pub struct CircBuf<I> {
|
|
pub buf: [I; MAX_ITEMS],
|
|
/// next pointer
|
|
pub idx: usize,
|
|
}
|
|
|
|
impl<I: Default + Copy> Default for CircBuf<I> {
|
|
fn default() -> Self {
|
|
Self {
|
|
buf: [I::default(); MAX_ITEMS],
|
|
idx: MAX_ITEMS - 1,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<I> CircBuf<I> {
|
|
pub fn append(&mut self, item: I) {
|
|
// remember prior delegate and when we switched, to support later slashing
|
|
self.idx += 1;
|
|
self.idx %= MAX_ITEMS;
|
|
|
|
self.buf[self.idx] = item;
|
|
}
|
|
}
|