Skip to content

Commit 095df8c

Browse files
authored
refactor: rip out the epoch stakes service. (#350)
1 parent a71800d commit 095df8c

File tree

5 files changed

+25
-111
lines changed

5 files changed

+25
-111
lines changed

core/src/sigverifier/bls_sigverifier.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,28 @@ use {
1010
},
1111
crossbeam_channel::{Sender, TrySendError},
1212
solana_pubkey::Pubkey,
13-
solana_runtime::epoch_stakes_service::EpochStakesService,
13+
solana_runtime::{
14+
bank::Bank, epoch_stakes::BLSPubkeyToRankMap, root_bank_cache::RootBankCache,
15+
},
1416
solana_sdk::clock::Slot,
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+
2131
pub 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

103113
impl 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,11 +147,12 @@ 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_perf::packet::Packet,
143153
solana_runtime::{
144154
bank::Bank,
155+
bank_forks::BankForks,
145156
genesis_utils::{
146157
create_genesis_config_with_alpenglow_vote_accounts_no_program,
147158
ValidatorVoteKeypairs,
@@ -174,13 +185,12 @@ mod tests {
174185
&validator_keypairs,
175186
stakes_vec,
176187
);
177-
let bank = Arc::new(Bank::new_for_tests(&genesis.genesis_config));
178-
let epoch = bank.epoch();
179-
let (_tx, rx) = unbounded();
180-
let epoch_stakes_service = Arc::new(EpochStakesService::new(bank, epoch, rx));
188+
let bank0 = Bank::new_for_tests(&genesis.genesis_config);
189+
let bank_forks = BankForks::new_rw_arc(bank0);
190+
let root_bank_cache = RootBankCache::new(bank_forks);
181191
(
182192
validator_keypairs,
183-
BLSSigVerifier::new(epoch_stakes_service, verified_vote_sender, message_sender),
193+
BLSSigVerifier::new(root_bank_cache, verified_vote_sender, message_sender),
184194
)
185195
}
186196

core/src/tpu.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ use {
4242
},
4343
solana_runtime::{
4444
bank_forks::BankForks,
45-
epoch_stakes_service::EpochStakesService,
4645
prioritization_fee_cache::PrioritizationFeeCache,
4746
root_bank_cache::RootBankCache,
4847
vote_sender_types::{BLSVerifiedMessageSender, ReplayVoteReceiver, ReplayVoteSender},
@@ -261,13 +260,9 @@ impl Tpu {
261260
};
262261

263262
let alpenglow_sigverify_stage = {
264-
let (tx, rx) = unbounded();
265-
bank_forks.write().unwrap().register_new_bank_subscriber(tx);
266-
let bank = bank_forks.read().unwrap().root_bank();
267-
let epoch = bank.epoch();
268-
let epoch_stakes_service = Arc::new(EpochStakesService::new(bank, epoch, rx));
263+
let root_bank_cache = RootBankCache::new(bank_forks.clone());
269264
let verifier = BLSSigVerifier::new(
270-
epoch_stakes_service,
265+
root_bank_cache,
271266
verified_vote_sender.clone(),
272267
bls_verified_message_sender,
273268
);

runtime/src/bank_forks.rs

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use {
1010
},
1111
snapshot_config::SnapshotConfig,
1212
},
13-
crossbeam_channel::{SendError, Sender},
13+
crossbeam_channel::SendError,
1414
log::*,
1515
solana_measure::measure::Measure,
1616
solana_program_runtime::loaded_programs::{BlockRelation, ForkGraph},
@@ -86,8 +86,6 @@ pub struct BankForks {
8686
scheduler_pool: Option<InstalledSchedulerPoolArc>,
8787

8888
dumped_slot_subscribers: Vec<DumpedSlotSubscription>,
89-
/// Tracks subscribers interested in hearing about new `Bank`s.
90-
new_bank_subscribers: Vec<Sender<Arc<Bank>>>,
9189
}
9290

9391
impl Index<u64> for BankForks {
@@ -139,7 +137,6 @@ impl BankForks {
139137
highest_slot_at_startup: 0,
140138
scheduler_pool: None,
141139
dumped_slot_subscribers: vec![],
142-
new_bank_subscribers: vec![],
143140
}));
144141

145142
root_bank.set_fork_graph_in_program_cache(Arc::downgrade(&bank_forks));
@@ -332,24 +329,6 @@ impl BankForks {
332329
self.dumped_slot_subscribers.push(notifier);
333330
}
334331

335-
/// Register a new subscriber interested in hearing about new `Bank`s.
336-
pub fn register_new_bank_subscriber(&mut self, tx: Sender<Arc<Bank>>) {
337-
self.new_bank_subscribers.push(tx);
338-
}
339-
340-
/// Call to notify subscribers of new `Bank`s.
341-
fn notify_new_bank_subscribers(&mut self, root_bank: &Arc<Bank>) {
342-
let mut channels_to_drop = vec![];
343-
for (ind, tx) in self.new_bank_subscribers.iter().enumerate() {
344-
if let Err(SendError(_)) = tx.send(root_bank.clone()) {
345-
channels_to_drop.push(ind);
346-
}
347-
}
348-
for ind in channels_to_drop {
349-
self.new_bank_subscribers.remove(ind);
350-
}
351-
}
352-
353332
/// Clears associated banks from BankForks and notifies subscribers that a dump has occured.
354333
pub fn dump_slots<'a, I>(&mut self, slots: I) -> (Vec<(Slot, BankId)>, Vec<BankWithScheduler>)
355334
where
@@ -465,7 +444,6 @@ impl BankForks {
465444
.unwrap()
466445
.node_id_to_vote_accounts()
467446
);
468-
self.notify_new_bank_subscribers(root_bank);
469447
}
470448
let root_tx_count = root_bank
471449
.parents()

runtime/src/epoch_stakes_service.rs

Lines changed: 0 additions & 68 deletions
This file was deleted.

runtime/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ pub mod bank_hash_cache;
1313
pub mod bank_utils;
1414
pub mod commitment;
1515
pub mod epoch_stakes;
16-
pub mod epoch_stakes_service;
1716
pub mod genesis_utils;
1817
pub mod inflation_rewards;
1918
pub mod installed_scheduler_pool;

0 commit comments

Comments
 (0)