@@ -11,31 +11,18 @@ use {
1111    alpenglow_vote:: bls_message:: BLSMessage , 
1212    crossbeam_channel:: { Sender ,  TrySendError } , 
1313    solana_pubkey:: Pubkey , 
14-     solana_runtime:: { bank_forks:: BankForks ,  epoch_stakes:: EpochStakes } , 
15-     solana_sdk:: { 
16-         clock:: { Epoch ,  Slot } , 
17-         epoch_schedule:: EpochSchedule , 
18-     } , 
14+     solana_runtime:: epoch_stakes_service:: EpochStakesService , 
15+     solana_sdk:: clock:: Slot , 
1916    solana_streamer:: packet:: PacketBatch , 
2017    stats:: { BLSSigVerifierStats ,  StatsUpdater } , 
21-     std:: { 
22-         collections:: HashMap , 
23-         sync:: { Arc ,  RwLock } , 
24-         time:: { Duration ,  Instant } , 
25-     } , 
18+     std:: { collections:: HashMap ,  sync:: Arc } , 
2619} ; 
2720
28- const  EPOCH_STAKES_QUERY_INTERVAL :  Duration  = Duration :: from_secs ( 60 ) ; 
29- 
3021pub  struct  BLSSigVerifier  { 
31-     bank_forks :  Arc < RwLock < BankForks > > , 
3222    verified_votes_sender :  VerifiedVoteSender , 
3323    message_sender :  Sender < BLSMessage > , 
24+     epoch_stakes_service :  Arc < EpochStakesService > , 
3425    stats :  BLSSigVerifierStats , 
35-     root_epoch :  Epoch , 
36-     epoch_schedule :  EpochSchedule , 
37-     epoch_stakes_map :  Arc < HashMap < Epoch ,  EpochStakes > > , 
38-     epoch_stakes_queried :  Instant , 
3926} 
4027
4128impl  SigVerifier  for  BLSSigVerifier  { 
@@ -72,10 +59,9 @@ impl SigVerifier for BLSSigVerifier {
7259                    certificate_message. certificate . slot 
7360                } 
7461            } ; 
75-             let  epoch = self . epoch_schedule . get_epoch ( slot) ; 
76-             let  rank_to_pubkey_map = if  let  Some ( epoch_stakes)  = self . epoch_stakes_map . get ( & epoch)  { 
77-                 epoch_stakes. bls_pubkey_to_rank_map ( ) 
78-             }  else  { 
62+ 
63+             let  Some ( rank_to_pubkey_map)  = self . epoch_stakes_service . get_key_to_rank_map ( slot) 
64+             else  { 
7965                stats_updater. received_no_epoch_stakes  += 1 ; 
8066                continue ; 
8167            } ; 
@@ -110,46 +96,21 @@ impl SigVerifier for BLSSigVerifier {
11096        self . send_verified_votes ( verified_votes) ; 
11197        self . stats . update ( stats_updater) ; 
11298        self . stats . maybe_report_stats ( ) ; 
113-         self . update_epoch_stakes_map ( ) ; 
11499        Ok ( ( ) ) 
115100    } 
116101} 
117102
118103impl  BLSSigVerifier  { 
119104    pub  fn  new ( 
120-         bank_forks :  Arc < RwLock < BankForks > > , 
105+         epoch_stakes_service :  Arc < EpochStakesService > , 
121106        verified_votes_sender :  VerifiedVoteSender , 
122107        message_sender :  Sender < BLSMessage > , 
123108    )  -> Self  { 
124-         let   mut  verifier =  Self  { 
125-             bank_forks , 
109+         Self  { 
110+             epoch_stakes_service , 
126111            verified_votes_sender, 
127112            message_sender, 
128113            stats :  BLSSigVerifierStats :: new ( ) , 
129-             epoch_schedule :  EpochSchedule :: default ( ) , 
130-             epoch_stakes_map :  Arc :: new ( HashMap :: new ( ) ) , 
131-             root_epoch :  Epoch :: default ( ) , 
132-             epoch_stakes_queried :  Instant :: now ( )  - EPOCH_STAKES_QUERY_INTERVAL , 
133-         } ; 
134-         verifier. update_epoch_stakes_map ( ) ; 
135-         verifier
136-     } 
137- 
138-     // TODO(wen): We should maybe create a epoch stakes service so all these objects 
139-     // only needing epoch stakes don't need to worry about bank_forks and banks. 
140-     fn  update_epoch_stakes_map ( & mut  self )  { 
141-         if  self . epoch_stakes_queried . elapsed ( )  < EPOCH_STAKES_QUERY_INTERVAL  { 
142-             return ; 
143-         } 
144-         self . epoch_stakes_queried  = Instant :: now ( ) ; 
145-         let  root_bank = self . bank_forks . read ( ) . unwrap ( ) . root_bank ( ) ; 
146-         if  self . epoch_stakes_map . is_empty ( )  { 
147-             self . epoch_schedule  = root_bank. epoch_schedule ( ) . clone ( ) ; 
148-         } 
149-         let  epoch = root_bank. epoch ( ) ; 
150-         if  self . epoch_stakes_map . is_empty ( )  || epoch > self . root_epoch  { 
151-             self . epoch_stakes_map  = Arc :: new ( root_bank. epoch_stakes_map ( ) . clone ( ) ) ; 
152-             self . root_epoch  = epoch; 
153114        } 
154115    } 
155116
@@ -181,20 +142,19 @@ mod tests {
181142            vote:: Vote , 
182143        } , 
183144        bitvec:: prelude:: * , 
184-         crossbeam_channel:: Receiver , 
145+         crossbeam_channel:: { unbounded ,   Receiver } , 
185146        solana_bls_signatures:: Signature , 
186147        solana_perf:: packet:: Packet , 
187148        solana_runtime:: { 
188149            bank:: Bank , 
189-             bank_forks:: BankForks , 
190150            genesis_utils:: { 
191151                create_genesis_config_with_alpenglow_vote_accounts_no_program, 
192152                ValidatorVoteKeypairs , 
193153            } , 
194154        } , 
195155        solana_sdk:: { hash:: Hash ,  signer:: Signer } , 
196156        stats:: STATS_INTERVAL_DURATION , 
197-         std:: time:: Duration , 
157+         std:: time:: { Duration ,   Instant } , 
198158    } ; 
199159
200160    fn  create_keypairs_and_bls_sig_verifier ( 
@@ -213,11 +173,13 @@ mod tests {
213173            & validator_keypairs, 
214174            stakes_vec, 
215175        ) ; 
216-         let  bank0 = Bank :: new_for_tests ( & genesis. genesis_config ) ; 
217-         let  bank_forks = BankForks :: new_rw_arc ( bank0) ; 
176+         let  bank = Arc :: new ( Bank :: new_for_tests ( & genesis. genesis_config ) ) ; 
177+         let  epoch = bank. epoch ( ) ; 
178+         let  ( _tx,  rx)  = unbounded ( ) ; 
179+         let  epoch_stakes_service = Arc :: new ( EpochStakesService :: new ( bank,  epoch,  rx) ) ; 
218180        ( 
219181            validator_keypairs, 
220-             BLSSigVerifier :: new ( bank_forks ,  verified_vote_sender,  message_sender) , 
182+             BLSSigVerifier :: new ( epoch_stakes_service ,  verified_vote_sender,  message_sender) , 
221183        ) 
222184    } 
223185
0 commit comments