@@ -11,17 +11,27 @@ use {
1111 crossbeam_channel:: { Sender , TrySendError } ,
1212 solana_clock:: Slot ,
1313 solana_pubkey:: Pubkey ,
14- solana_runtime:: epoch_stakes_service:: EpochStakesService ,
14+ solana_runtime:: {
15+ bank:: Bank , epoch_stakes:: BLSPubkeyToRankMap , root_bank_cache:: RootBankCache ,
16+ } ,
1517 solana_streamer:: packet:: PacketBatch ,
1618 solana_votor_messages:: bls_message:: BLSMessage ,
1719 stats:: { BLSSigVerifierStats , StatsUpdater } ,
1820 std:: { collections:: HashMap , sync:: Arc } ,
1921} ;
2022
23+ fn get_key_to_rank_map ( bank : & Bank , slot : Slot ) -> Option < & Arc < BLSPubkeyToRankMap > > {
24+ let stakes = bank. epoch_stakes_map ( ) ;
25+ let epoch = bank. epoch_schedule ( ) . get_epoch ( slot) ;
26+ stakes
27+ . get ( & epoch)
28+ . map ( |stake| stake. bls_pubkey_to_rank_map ( ) )
29+ }
30+
2131pub struct BLSSigVerifier {
2232 verified_votes_sender : VerifiedVoteSender ,
2333 message_sender : Sender < BLSMessage > ,
24- epoch_stakes_service : Arc < EpochStakesService > ,
34+ root_bank_cache : RootBankCache ,
2535 stats : BLSSigVerifierStats ,
2636}
2737
@@ -60,8 +70,8 @@ impl SigVerifier for BLSSigVerifier {
6070 }
6171 } ;
6272
63- let Some ( rank_to_pubkey_map ) = self . epoch_stakes_service . get_key_to_rank_map ( slot )
64- else {
73+ let bank = self . root_bank_cache . root_bank ( ) ;
74+ let Some ( rank_to_pubkey_map ) = get_key_to_rank_map ( & bank , slot ) else {
6575 stats_updater. received_no_epoch_stakes += 1 ;
6676 continue ;
6777 } ;
@@ -102,12 +112,12 @@ impl SigVerifier for BLSSigVerifier {
102112
103113impl BLSSigVerifier {
104114 pub fn new (
105- epoch_stakes_service : Arc < EpochStakesService > ,
115+ root_bank_cache : RootBankCache ,
106116 verified_votes_sender : VerifiedVoteSender ,
107117 message_sender : Sender < BLSMessage > ,
108118 ) -> Self {
109119 Self {
110- epoch_stakes_service ,
120+ root_bank_cache ,
111121 verified_votes_sender,
112122 message_sender,
113123 stats : BLSSigVerifierStats :: new ( ) ,
@@ -137,12 +147,13 @@ mod tests {
137147 use {
138148 super :: * ,
139149 bitvec:: prelude:: * ,
140- crossbeam_channel:: { unbounded , Receiver } ,
150+ crossbeam_channel:: Receiver ,
141151 solana_bls_signatures:: Signature ,
142152 solana_hash:: Hash ,
143153 solana_perf:: packet:: { Packet , PinnedPacketBatch } ,
144154 solana_runtime:: {
145155 bank:: Bank ,
156+ bank_forks:: BankForks ,
146157 genesis_utils:: {
147158 create_genesis_config_with_alpenglow_vote_accounts_no_program,
148159 ValidatorVoteKeypairs ,
@@ -175,13 +186,12 @@ mod tests {
175186 & validator_keypairs,
176187 stakes_vec,
177188 ) ;
178- let bank = Arc :: new ( Bank :: new_for_tests ( & genesis. genesis_config ) ) ;
179- let epoch = bank. epoch ( ) ;
180- let ( _tx, rx) = unbounded ( ) ;
181- let epoch_stakes_service = Arc :: new ( EpochStakesService :: new ( bank, epoch, rx) ) ;
189+ let bank0 = Bank :: new_for_tests ( & genesis. genesis_config ) ;
190+ let bank_forks = BankForks :: new_rw_arc ( bank0) ;
191+ let root_bank_cache = RootBankCache :: new ( bank_forks) ;
182192 (
183193 validator_keypairs,
184- BLSSigVerifier :: new ( epoch_stakes_service , verified_vote_sender, message_sender) ,
194+ BLSSigVerifier :: new ( root_bank_cache , verified_vote_sender, message_sender) ,
185195 )
186196 }
187197
0 commit comments