From 264f502ed784cd9becec19c48f0b8d701be4fede Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Sat, 23 Feb 2019 14:43:34 -0700 Subject: [PATCH] Query the bank for the current slot leader --- src/leader_schedule.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/leader_schedule.rs b/src/leader_schedule.rs index 468aa65e4..8ee8a7913 100644 --- a/src/leader_schedule.rs +++ b/src/leader_schedule.rs @@ -55,6 +55,9 @@ impl Index for LeaderSchedule { pub trait LeaderScheduleUtil { /// Return the leader schedule for the current epoch. fn leader_schedule(&self) -> LeaderSchedule; + + /// Return the leader id for the current slot. + fn slot_leader(&self) -> Pubkey; } impl LeaderScheduleUtil for Bank { @@ -64,6 +67,10 @@ impl LeaderScheduleUtil for Bank { Some(bank) => LeaderSchedule::new_with_bank(&bank), } } + + fn slot_leader(&self) -> Pubkey { + self.leader_schedule()[self.slot_index() as usize] + } } #[cfg(test)] @@ -114,4 +121,11 @@ mod tests { assert_eq!(leader_schedule.slot_leaders, expected); assert_eq!(bank.leader_schedule().slot_leaders, expected); // Same thing, but with the trait } + + #[test] + fn test_leader_schedule_slot_leader_basic() { + let pubkey = Keypair::new().pubkey(); + let bank = Bank::new(&GenesisBlock::new_with_leader(2, pubkey, 2).0); + assert_eq!(bank.slot_leader(), pubkey); + } }