Skip to content

Commit e395a4a

Browse files
akhi3030bw-solana
authored andcommitted
refactor: rip out the epoch stakes service. (#350)
1 parent 07606e7 commit e395a4a

File tree

4 files changed

+24
-43
lines changed

4 files changed

+24
-43
lines changed

core/src/sigverifier/bls_sigverifier.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
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,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

core/src/tpu.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ use {
5353
},
5454
solana_runtime::{
5555
bank_forks::BankForks,
56-
epoch_stakes_service::EpochStakesService,
5756
prioritization_fee_cache::PrioritizationFeeCache,
5857
root_bank_cache::RootBankCache,
5958
vote_sender_types::{BLSVerifiedMessageSender, ReplayVoteReceiver, ReplayVoteSender},
@@ -325,13 +324,9 @@ impl Tpu {
325324
};
326325

327326
let alpenglow_sigverify_stage = {
328-
let (tx, rx) = unbounded();
329-
bank_forks.write().unwrap().register_new_bank_subscriber(tx);
330-
let bank = bank_forks.read().unwrap().root_bank();
331-
let epoch = bank.epoch();
332-
let epoch_stakes_service = Arc::new(EpochStakesService::new(bank, epoch, rx));
327+
let root_bank_cache = RootBankCache::new(bank_forks.clone());
333328
let verifier = BLSSigVerifier::new(
334-
epoch_stakes_service,
329+
root_bank_cache,
335330
verified_vote_sender.clone(),
336331
bls_verified_message_sender,
337332
);

runtime/src/bank_forks.rs

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use {
99
},
1010
snapshot_controller::SnapshotController,
1111
},
12-
crossbeam_channel::{SendError, Sender},
1312
log::*,
1413
solana_clock::{BankId, Slot},
1514
solana_hash::Hash,
@@ -74,8 +73,6 @@ pub struct BankForks {
7473
highest_slot_at_startup: Slot,
7574
scheduler_pool: Option<InstalledSchedulerPoolArc>,
7675
dumped_slot_subscribers: Vec<DumpedSlotSubscription>,
77-
/// Tracks subscribers interested in hearing about new `Bank`s.
78-
new_bank_subscribers: Vec<Sender<Arc<Bank>>>,
7976
}
8077

8178
impl Index<u64> for BankForks {
@@ -124,7 +121,6 @@ impl BankForks {
124121
highest_slot_at_startup: 0,
125122
scheduler_pool: None,
126123
dumped_slot_subscribers: vec![],
127-
new_bank_subscribers: vec![],
128124
}));
129125

130126
root_bank.set_fork_graph_in_program_cache(Arc::downgrade(&bank_forks));
@@ -323,24 +319,6 @@ impl BankForks {
323319
self.dumped_slot_subscribers.push(notifier);
324320
}
325321

326-
/// Register a new subscriber interested in hearing about new `Bank`s.
327-
pub fn register_new_bank_subscriber(&mut self, tx: Sender<Arc<Bank>>) {
328-
self.new_bank_subscribers.push(tx);
329-
}
330-
331-
/// Call to notify subscribers of new `Bank`s.
332-
fn notify_new_bank_subscribers(&mut self, root_bank: &Arc<Bank>) {
333-
let mut channels_to_drop = vec![];
334-
for (ind, tx) in self.new_bank_subscribers.iter().enumerate() {
335-
if let Err(SendError(_)) = tx.send(root_bank.clone()) {
336-
channels_to_drop.push(ind);
337-
}
338-
}
339-
for ind in channels_to_drop {
340-
self.new_bank_subscribers.remove(ind);
341-
}
342-
}
343-
344322
/// Clears associated banks from BankForks and notifies subscribers that a dump has occured.
345323
pub fn dump_slots<'a, I>(&mut self, slots: I) -> (Vec<(Slot, BankId)>, Vec<BankWithScheduler>)
346324
where
@@ -403,7 +381,6 @@ impl BankForks {
403381
"Clearing epoch rewards cache for epoch {old_epoch} after setting root to slot {root}"
404382
);
405383
root_bank.clear_epoch_rewards_cache();
406-
self.notify_new_bank_subscribers(root_bank);
407384
}
408385
let root_tx_count = root_bank
409386
.parents()

runtime/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ pub mod bank_utils;
1111
pub mod commitment;
1212
pub mod dependency_tracker;
1313
pub mod epoch_stakes;
14-
pub mod epoch_stakes_service;
1514
pub mod genesis_utils;
1615
pub mod inflation_rewards;
1716
pub mod installed_scheduler_pool;

0 commit comments

Comments
 (0)