diff --git a/src/fullnode.rs b/src/fullnode.rs index d7d5e1a30..b13697d01 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -14,7 +14,6 @@ use crate::service::Service; use crate::storage_stage::StorageState; use crate::tpu::Tpu; use crate::tvu::{Sockets, Tvu, TvuRotationInfo, TvuRotationReceiver}; -use crate::voting_keypair::VotingKeypair; use log::Level; use solana_metrics::counter::Counter; use solana_sdk::genesis_block::GenesisBlock; @@ -106,14 +105,17 @@ pub struct Fullnode { } impl Fullnode { - pub fn new( + pub fn new( mut node: Node, keypair: &Arc, ledger_path: &str, - voting_keypair: VotingKeypair, + voting_keypair: T, entrypoint_info_option: Option<&NodeInfo>, config: &FullnodeConfig, - ) -> Self { + ) -> Self + where + T: 'static + KeypairUtil + Sync + Send, + { info!("creating bank..."); let id = keypair.pubkey(); @@ -438,7 +440,7 @@ mod tests { validator_node, &Arc::new(validator_keypair), &validator_ledger_path, - VotingKeypair::new(), + Keypair::new(), Some(&leader_node.info), &FullnodeConfig::default(), ); @@ -476,7 +478,7 @@ mod tests { validator_node, &Arc::new(validator_keypair), &validator_ledger_path, - VotingKeypair::new(), + Keypair::new(), Some(&leader_node.info), &FullnodeConfig::default(), ) @@ -513,8 +515,7 @@ mod tests { let leader_scheduler_config = LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots); - let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair); - let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair); + let voting_keypair = Keypair::new(); let mut fullnode_config = FullnodeConfig::default(); fullnode_config.leader_scheduler_config = leader_scheduler_config; @@ -537,7 +538,7 @@ mod tests { // Start the bootstrap leader let bootstrap_leader = Fullnode::new( bootstrap_leader_node, - &bootstrap_leader_keypair, + &Arc::new(bootstrap_leader_keypair), &bootstrap_leader_ledger_path, voting_keypair, None, @@ -604,7 +605,7 @@ mod tests { bootstrap_leader_node, &bootstrap_leader_keypair, &bootstrap_leader_ledger_path, - VotingKeypair::new(), + Keypair::new(), Some(&bootstrap_leader_info), &fullnode_config, ); @@ -620,7 +621,7 @@ mod tests { validator_node, &validator_keypair, &validator_ledger_path, - VotingKeypair::new(), + Keypair::new(), Some(&bootstrap_leader_info), &fullnode_config, ); @@ -671,7 +672,7 @@ mod tests { info!("leader: {:?}", leader_id); info!("validator: {:?}", validator_info.id); - let voting_keypair = VotingKeypair::new_local(&validator_keypair); + let voting_keypair = Keypair::new(); // Start the validator let validator = Fullnode::new( diff --git a/src/replay_stage.rs b/src/replay_stage.rs index d639757c3..0c543f126 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -11,13 +11,13 @@ use crate::result::{Error, Result}; use crate::rpc_subscriptions::RpcSubscriptions; use crate::service::Service; use crate::tvu::{TvuRotationInfo, TvuRotationSender}; -use crate::voting_keypair::VotingKeypair; use log::Level; use solana_metrics::counter::Counter; use solana_metrics::{influxdb, submit}; use solana_runtime::bank::Bank; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; +use solana_sdk::signature::KeypairUtil; use solana_sdk::timing::duration_as_ms; use solana_sdk::vote_transaction::VoteTransaction; use std::sync::atomic::{AtomicBool, Ordering}; @@ -56,11 +56,11 @@ pub struct ReplayStage { impl ReplayStage { /// Process entry blobs, already in order #[allow(clippy::too_many_arguments)] - fn process_entries( + fn process_entries( mut entries: Vec, bank: &Arc, cluster_info: &Arc>, - voting_keypair: Option<&Arc>, + voting_keypair: &Option>, ledger_entry_sender: &EntrySender, current_blob_index: &mut u64, last_entry_id: &Arc>, @@ -169,9 +169,9 @@ impl ReplayStage { } #[allow(clippy::new_ret_no_self, clippy::too_many_arguments)] - pub fn new( + pub fn new( my_id: Pubkey, - voting_keypair: Option>, + voting_keypair: Option>, blocktree: Arc, bank_forks: &Arc>, bank_forks_info: &[BankForksInfo], @@ -181,7 +181,10 @@ impl ReplayStage { ledger_signal_receiver: Receiver, leader_scheduler: &Arc>, subscriptions: &Arc, - ) -> (Self, EntryReceiver) { + ) -> (Self, EntryReceiver) + where + T: 'static + KeypairUtil + Send + Sync, + { let (ledger_entry_sender, ledger_entry_receiver) = channel(); let exit_ = exit.clone(); let leader_scheduler_ = leader_scheduler.clone(); @@ -299,7 +302,7 @@ impl ReplayStage { entries, &bank, &cluster_info, - voting_keypair.as_ref(), + &voting_keypair, &ledger_entry_sender, &mut current_blob_index, &last_entry_id, @@ -389,7 +392,6 @@ mod test { make_active_set_entries, LeaderScheduler, LeaderSchedulerConfig, }; use crate::replay_stage::ReplayStage; - use crate::voting_keypair::VotingKeypair; use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::hash::Hash; use solana_sdk::signature::{Keypair, KeypairUtil}; @@ -569,8 +571,7 @@ mod test { // Set up the replay stage let exit = Arc::new(AtomicBool::new(false)); - let my_keypair = Arc::new(my_keypair); - let voting_keypair = Arc::new(VotingKeypair::new_local(&my_keypair)); + let voting_keypair = Arc::new(Keypair::new()); let (to_leader_sender, _to_leader_receiver) = channel(); { let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::default())); @@ -792,17 +793,16 @@ mod test { } let genesis_block = GenesisBlock::new(10_000).0; - let my_keypair = Arc::new(my_keypair); - let voting_keypair = Arc::new(VotingKeypair::new_local(&my_keypair)); let bank = Arc::new(Bank::new(&genesis_block)); let leader_scheduler_config = LeaderSchedulerConfig::default(); let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank); let leader_scheduler = Arc::new(RwLock::new(leader_scheduler)); + let voting_keypair = Some(Arc::new(Keypair::new())); let res = ReplayStage::process_entries( entries.clone(), &bank, &cluster_info_me, - Some(&voting_keypair), + &voting_keypair, &ledger_entry_sender, &mut current_blob_index, &Arc::new(RwLock::new(last_entry_id)), @@ -828,7 +828,7 @@ mod test { entries.clone(), &bank, &cluster_info_me, - Some(&voting_keypair), + &voting_keypair, &ledger_entry_sender, &mut current_blob_index, &Arc::new(RwLock::new(last_entry_id)), diff --git a/src/tvu.rs b/src/tvu.rs index c383ac279..97916786e 100644 --- a/src/tvu.rs +++ b/src/tvu.rs @@ -24,7 +24,6 @@ use crate::retransmit_stage::RetransmitStage; use crate::rpc_subscriptions::RpcSubscriptions; use crate::service::Service; use crate::storage_stage::{StorageStage, StorageState}; -use crate::voting_keypair::VotingKeypair; use solana_runtime::bank::Bank; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; @@ -67,8 +66,8 @@ impl Tvu { /// * `sockets` - fetch, repair, and retransmit sockets /// * `blocktree` - the ledger itself #[allow(clippy::new_ret_no_self, clippy::too_many_arguments)] - pub fn new( - voting_keypair: Option>, + pub fn new( + voting_keypair: Option>, bank_forks: &Arc>, bank_forks_info: &[BankForksInfo], cluster_info: &Arc>, @@ -81,7 +80,10 @@ impl Tvu { ledger_signal_receiver: Receiver, leader_scheduler: Arc>, subscriptions: &Arc, - ) -> Self { + ) -> Self + where + T: 'static + KeypairUtil + Sync + Send, + { let exit = Arc::new(AtomicBool::new(false)); let keypair: Arc = cluster_info .read() @@ -240,11 +242,9 @@ pub mod tests { let blocktree_path = get_tmp_ledger_path("test_tvu_exit"); let (blocktree, l_receiver) = Blocktree::open_with_signal(&blocktree_path) .expect("Expected to successfully open ledger"); - let vote_account_keypair = Arc::new(Keypair::new()); - let voting_keypair = VotingKeypair::new_local(&vote_account_keypair); let (sender, _receiver) = channel(); let tvu = Tvu::new( - Some(Arc::new(voting_keypair)), + Some(Arc::new(Keypair::new())), &Arc::new(RwLock::new(bank_forks)), &bank_forks_info, &cref1,