Files
solana/src/leader_schedule.rs

36 lines
915 B
Rust
Raw Normal View History

use solana_sdk::pubkey::Pubkey;
use std::ops::Index;
/// Round-robin leader schedule.
pub struct LeaderSchedule {
slot_leaders: Vec<Pubkey>,
}
impl LeaderSchedule {
pub fn new(slot_leaders: Vec<Pubkey>) -> Self {
Self { slot_leaders }
}
}
impl Index<usize> for LeaderSchedule {
type Output = Pubkey;
fn index(&self, index: usize) -> &Pubkey {
&self.slot_leaders[index % self.slot_leaders.len()]
}
}
#[cfg(test)]
mod tests {
use super::*;
use solana_sdk::signature::{Keypair, KeypairUtil};
#[test]
fn test_leader_schedule_index() {
let pubkey0 = Keypair::new().pubkey();
let pubkey1 = Keypair::new().pubkey();
let leader_schedule = LeaderSchedule::new(vec![pubkey0, pubkey1]);
assert_eq!(leader_schedule[0], pubkey0);
assert_eq!(leader_schedule[1], pubkey1);
assert_eq!(leader_schedule[2], pubkey0);
}
}