diff --git a/fullnode/src/main.rs b/fullnode/src/main.rs index fc9600ccf5..2b3d6a1595 100644 --- a/fullnode/src/main.rs +++ b/fullnode/src/main.rs @@ -187,9 +187,16 @@ fn main() { .takes_value(true) .help("Create this file, if it doesn't already exist, once node initialization is complete"), ) + .arg( + Arg::with_name("no_signer") + .long("no-signer") + .takes_value(false) + .help("Launch node without vote signer"), + ) .get_matches(); let no_sigverify = matches.is_present("nosigverify"); + let no_signer = matches.is_present("no_signer"); let use_only_bootstrap_leader = matches.is_present("no-leader-rotation"); let (keypair, gossip) = parse_identity(&matches); let ledger_path = matches.value_of("ledger").unwrap(); @@ -228,25 +235,33 @@ fn main() { let mut leader_scheduler = LeaderScheduler::default(); leader_scheduler.use_only_bootstrap_leader = use_only_bootstrap_leader; - let vote_signer = VoteSignerProxy::new(&keypair, Box::new(RemoteVoteSigner::new(signer_addr))); - let vote_account = vote_signer.vote_account; - info!("Node ID: {}", node.info.id); - info!("Signer service address: {:?}", signer_addr); - info!("New vote account ID is {:?}", vote_account); + + let vote_account; + let signer_option = if !no_signer { + let vote_signer = + VoteSignerProxy::new(&keypair, Box::new(RemoteVoteSigner::new(signer_addr))); + vote_account = vote_signer.vote_account; + info!("Signer service address: {:?}", signer_addr); + info!("New vote account ID is {:?}", vote_account); + Some(Arc::new(vote_signer)) + } else { + vote_account = Pubkey::default(); + None + }; let mut fullnode = Fullnode::new( node, ledger_path, keypair.clone(), - Arc::new(vote_signer), + signer_option, cluster_entrypoint, no_sigverify, leader_scheduler, Some(rpc_port), ); - { + if !no_signer { let leader_node_info = loop { info!("Looking for leader..."); match poll_gossip_for_leader(node_info.gossip, Some(10)) { diff --git a/multinode-demo/fullnode.sh b/multinode-demo/fullnode.sh index d9618411b5..02f005b788 100755 --- a/multinode-demo/fullnode.sh +++ b/multinode-demo/fullnode.sh @@ -21,7 +21,7 @@ usage() { echo fi cat <, broadcast_socket: UdpSocket, db_ledger: Arc, - vote_signer: Arc, + vote_signer: Option>, } impl Fullnode { @@ -113,7 +113,7 @@ impl Fullnode { node: Node, ledger_path: &str, keypair: Arc, - vote_signer: Arc, + vote_signer: Option>, entrypoint_addr: Option, sigverify_disabled: bool, leader_scheduler: LeaderScheduler, @@ -140,7 +140,7 @@ impl Fullnode { node: Node, ledger_path: &str, keypair: Arc, - vote_signer: Arc, + vote_signer: Option>, entrypoint_addr: Option, sigverify_disabled: bool, leader_scheduler: LeaderScheduler, @@ -189,7 +189,7 @@ impl Fullnode { #[allow(clippy::too_many_arguments)] pub fn new_with_bank( keypair: Arc, - vote_signer: Arc, + vote_signer: Option>, bank: Bank, db_ledger: Option>, entry_height: u64, @@ -680,7 +680,7 @@ mod tests { let signer = VoteSignerProxy::new(&keypair, Box::new(LocalVoteSigner::default())); let v = Fullnode::new_with_bank( keypair, - Arc::new(signer), + Some(Arc::new(signer)), bank, None, entry_height, @@ -724,7 +724,7 @@ mod tests { let signer = VoteSignerProxy::new(&keypair, Box::new(LocalVoteSigner::default())); Fullnode::new_with_bank( keypair, - Arc::new(signer), + Some(Arc::new(signer)), bank, None, entry_height, @@ -804,7 +804,7 @@ mod tests { bootstrap_leader_node, &bootstrap_leader_ledger_path, bootstrap_leader_keypair, - Arc::new(signer), + Some(Arc::new(signer)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -916,7 +916,7 @@ mod tests { bootstrap_leader_node, &bootstrap_leader_ledger_path, bootstrap_leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -935,7 +935,7 @@ mod tests { validator_node, &validator_ledger_path, validator_keypair, - Arc::new(validator_vote_account_id), + Some(Arc::new(validator_vote_account_id)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1037,7 +1037,7 @@ mod tests { validator_node, &validator_ledger_path, validator_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), Some(leader_gossip), false, LeaderScheduler::new(&leader_scheduler_config), diff --git a/src/replay_stage.rs b/src/replay_stage.rs index 26c21051f9..ef62756dc8 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -64,7 +64,7 @@ impl ReplayStage { cluster_info: &Arc>, window_receiver: &EntryReceiver, keypair: &Arc, - vote_signer: &Arc, + vote_signer: Option<&Arc>, vote_blob_sender: Option<&BlobSender>, ledger_entry_sender: &EntrySender, entry_height: &mut u64, @@ -137,10 +137,12 @@ impl ReplayStage { } if 0 == num_ticks_to_next_vote { - if let Some(sender) = vote_blob_sender { - vote_signer - .send_validator_vote(bank, &cluster_info, sender) - .unwrap(); + if let Some(signer) = vote_signer { + if let Some(sender) = vote_blob_sender { + signer + .send_validator_vote(bank, &cluster_info, sender) + .unwrap(); + } } } let (scheduled_leader, _) = bank @@ -194,7 +196,7 @@ impl ReplayStage { #[allow(clippy::new_ret_no_self)] pub fn new( keypair: Arc, - vote_signer: Arc, + vote_signer: Option>, bank: Arc, cluster_info: Arc>, window_receiver: EntryReceiver, @@ -240,7 +242,7 @@ impl ReplayStage { &cluster_info, &window_receiver, &keypair, - &vote_signer, + vote_signer.as_ref(), Some(&vote_blob_sender), &ledger_entry_sender, &mut entry_height_, @@ -379,7 +381,7 @@ mod test { let exit = Arc::new(AtomicBool::new(false)); let (replay_stage, ledger_writer_recv) = ReplayStage::new( my_keypair, - Arc::new(vote_account_id), + Some(Arc::new(vote_account_id)), Arc::new(bank), Arc::new(RwLock::new(cluster_info_me)), entry_receiver, @@ -475,7 +477,7 @@ mod test { )); let (replay_stage, ledger_writer_recv) = ReplayStage::new( my_keypair.clone(), - vote_signer.clone(), + Some(vote_signer.clone()), bank.clone(), cluster_info_me.clone(), entry_receiver, @@ -591,7 +593,7 @@ mod test { let exit = Arc::new(AtomicBool::new(false)); let (replay_stage, ledger_writer_recv) = ReplayStage::new( my_keypair.clone(), - signer_proxy.clone(), + Some(signer_proxy.clone()), bank.clone(), cluster_info_me.clone(), entry_receiver, @@ -682,7 +684,7 @@ mod test { &cluster_info_me, &entry_receiver, &my_keypair, - &vote_signer, + Some(&vote_signer), None, &ledger_entry_sender, &mut entry_height, @@ -708,7 +710,7 @@ mod test { &cluster_info_me, &entry_receiver, &Arc::new(Keypair::new()), - &vote_signer, + Some(&vote_signer), None, &ledger_entry_sender, &mut entry_height, diff --git a/src/thin_client.rs b/src/thin_client.rs index e09b05a9cc..e7ae5081fd 100644 --- a/src/thin_client.rs +++ b/src/thin_client.rs @@ -474,7 +474,7 @@ mod tests { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, @@ -531,7 +531,7 @@ mod tests { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, 0, @@ -593,7 +593,7 @@ mod tests { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, @@ -644,7 +644,7 @@ mod tests { ); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, @@ -741,7 +741,7 @@ mod tests { let entry_height = alice.create_entries().len() as u64; let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, diff --git a/src/tvu.rs b/src/tvu.rs index 7f85801636..75b52963a7 100644 --- a/src/tvu.rs +++ b/src/tvu.rs @@ -58,7 +58,7 @@ impl Tvu { /// * `sockets` - My fetch, repair, and restransmit sockets /// * `db_ledger` - the ledger itself pub fn new( - vote_signer: &Arc, + vote_signer: &Option>, bank: &Arc, entry_height: u64, last_entry_id: Hash, @@ -275,7 +275,7 @@ pub mod tests { let vote_signer = VoteSignerProxy::new(&vote_account_keypair, Box::new(LocalVoteSigner::default())); let tvu = Tvu::new( - &Arc::new(vote_signer), + &Some(Arc::new(vote_signer)), &bank, 0, cur_hash, diff --git a/tests/multinode.rs b/tests/multinode.rs index 704fa6300f..c739216c3c 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -162,7 +162,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> { leader, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -180,7 +180,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> { validator, &zero_ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -262,7 +262,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> { leader, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -294,7 +294,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> { validator, &ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -355,7 +355,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> { validator, &zero_ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -443,7 +443,7 @@ fn test_multi_node_basic() { leader, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -471,7 +471,7 @@ fn test_multi_node_basic() { validator, &ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -549,7 +549,7 @@ fn test_boot_validator_from_file() -> result::Result<()> { leader, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -572,7 +572,7 @@ fn test_boot_validator_from_file() -> result::Result<()> { validator, &ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -603,7 +603,7 @@ fn create_leader( leader, &ledger_path, leader_keypair, - signer, + Some(signer), None, false, LeaderScheduler::from_bootstrap_leader(leader_data.id), @@ -681,7 +681,7 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> { validator, &stale_ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_data.id), @@ -748,7 +748,7 @@ fn test_multi_node_dynamic_network() { leader, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, true, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -819,7 +819,7 @@ fn test_multi_node_dynamic_network() { validator, &ledger_path, keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_data.gossip), true, LeaderScheduler::from_bootstrap_leader(leader_pubkey), @@ -1004,7 +1004,7 @@ fn test_leader_to_validator_transition() { leader_node, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1154,7 +1154,7 @@ fn test_leader_validator_basic() { validator_node, &validator_ledger_path, validator_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1167,7 +1167,7 @@ fn test_leader_validator_basic() { leader_node, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1356,7 +1356,7 @@ fn test_dropped_handoff_recovery() { bootstrap_leader_node, &bootstrap_leader_ledger_path, bootstrap_leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1379,7 +1379,7 @@ fn test_dropped_handoff_recovery() { validator_node, &validator_ledger_path, kp, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1407,7 +1407,7 @@ fn test_dropped_handoff_recovery() { next_leader_node, &next_leader_ledger_path, next_leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1554,7 +1554,7 @@ fn test_full_leader_validator_network() { validator_node, &validator_ledger_path, kp.clone(), - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1571,7 +1571,7 @@ fn test_full_leader_validator_network() { bootstrap_leader_node, &bootstrap_leader_ledger_path, leader_keypair.clone(), - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), @@ -1763,7 +1763,7 @@ fn test_broadcast_last_tick() { bootstrap_leader_node, &bootstrap_leader_ledger_path, bootstrap_leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(bootstrap_leader_info.gossip), false, LeaderScheduler::new(&leader_scheduler_config), diff --git a/tests/replicator.rs b/tests/replicator.rs index 5e589b5d14..4bb1881c39 100644 --- a/tests/replicator.rs +++ b/tests/replicator.rs @@ -55,7 +55,7 @@ fn test_replicator_startup() { leader_node, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_info.id.clone()), @@ -84,7 +84,7 @@ fn test_replicator_startup() { validator_node, &validator_ledger_path, validator_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_info.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_info.id), @@ -283,7 +283,7 @@ fn test_replicator_startup_ledger_hang() { leader_node, &leader_ledger_path, leader_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), None, false, LeaderScheduler::from_bootstrap_leader(leader_info.id.clone()), @@ -299,7 +299,7 @@ fn test_replicator_startup_ledger_hang() { validator_node, &validator_ledger_path, validator_keypair, - Arc::new(signer_proxy), + Some(Arc::new(signer_proxy)), Some(leader_info.gossip), false, LeaderScheduler::from_bootstrap_leader(leader_info.id), diff --git a/tests/rpc.rs b/tests/rpc.rs index 25e81e2f52..07a986eedf 100644 --- a/tests/rpc.rs +++ b/tests/rpc.rs @@ -47,7 +47,7 @@ fn test_rpc_send_tx() { let entry_height = alice.create_entries().len() as u64; let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, diff --git a/wallet/tests/deploy.rs b/wallet/tests/deploy.rs index 2d517698e9..bce90b4014 100644 --- a/wallet/tests/deploy.rs +++ b/wallet/tests/deploy.rs @@ -46,7 +46,7 @@ fn test_wallet_deploy_program() { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, diff --git a/wallet/tests/pay.rs b/wallet/tests/pay.rs index a4528ce346..03a4418a91 100644 --- a/wallet/tests/pay.rs +++ b/wallet/tests/pay.rs @@ -51,7 +51,7 @@ fn test_wallet_timestamp_tx() { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, @@ -148,7 +148,7 @@ fn test_wallet_witness_tx() { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, @@ -241,7 +241,7 @@ fn test_wallet_cancel_tx() { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height, diff --git a/wallet/tests/request_airdrop.rs b/wallet/tests/request_airdrop.rs index 42f5ff66e3..8e6db8238b 100644 --- a/wallet/tests/request_airdrop.rs +++ b/wallet/tests/request_airdrop.rs @@ -37,7 +37,7 @@ fn test_wallet_request_airdrop() { let last_id = bank.last_id(); let server = Fullnode::new_with_bank( leader_keypair, - Arc::new(vote_signer), + Some(Arc::new(vote_signer)), bank, None, entry_height,