};
let (bitcoind_rpc_username, bitcoind_rpc_password) = if bitcoind_rpc_info_parts.len() == 1 {
- get_rpc_auth_from_cookie(None, Some(network), None)
+ get_rpc_auth_from_env_vars()
.or(get_rpc_auth_from_env_file(None))
- .or(get_rpc_auth_from_env_vars())
+ .or(get_rpc_auth_from_cookie(None, Some(network), None))
.or({
println!("ERROR: unable to get bitcoind RPC username and password");
print_rpc_auth_help();
};
let data_dir_path_with_net = match network {
- Some(Network::Testnet) => data_dir_path.join("testnet"),
+ Some(Network::Testnet) => data_dir_path.join("testnet3"),
Some(Network::Regtest) => data_dir_path.join("regtest"),
Some(Network::Signet) => data_dir_path.join("signet"),
_ => data_dir_path,
Some((TEST_DATA_DIR, true)),
Some(Network::Testnet),
None,
- env::home_dir().unwrap().join(TEST_DATA_DIR).join("testnet").join(".cookie"),
+ env::home_dir().unwrap().join(TEST_DATA_DIR).join("testnet3").join(".cookie"),
),
(
Some((TEST_DATA_DIR, false)),
println!("SUCCESS: connected to peer {}", pubkey);
}
}
+ "disconnectpeer" => {
+ let peer_pubkey = words.next();
+ if peer_pubkey.is_none() {
+ println!("ERROR: disconnectpeer requires peer public key: `disconnectpeer <peer_pubkey>`");
+ continue;
+ }
+
+ let peer_pubkey =
+ match bitcoin::secp256k1::PublicKey::from_str(peer_pubkey.unwrap()) {
+ Ok(pubkey) => pubkey,
+ Err(e) => {
+ println!("ERROR: {}", e.to_string());
+ continue;
+ }
+ };
+
+ if do_disconnect_peer(
+ peer_pubkey,
+ peer_manager.clone(),
+ channel_manager.clone(),
+ )
+ .is_ok()
+ {
+ println!("SUCCESS: disconnected from peer {}", peer_pubkey);
+ }
+ }
"listchannels" => list_channels(&channel_manager, &network_graph),
"listpayments" => {
list_payments(inbound_payments.clone(), outbound_payments.clone())
println!(" listchannels");
println!("\n Peers:");
println!(" connectpeer pubkey@host:port");
+ println!(" disconnectpeer <peer_pubkey>");
println!(" listpeers");
println!("\n Payments:");
println!(" sendpayment <invoice>");
}
}
+fn do_disconnect_peer(
+ pubkey: bitcoin::secp256k1::PublicKey, peer_manager: Arc<PeerManager>,
+ channel_manager: Arc<ChannelManager>,
+) -> Result<(), ()> {
+ //check for open channels with peer
+ for channel in channel_manager.list_channels() {
+ if channel.counterparty.node_id == pubkey {
+ println!("Error: Node has an active channel with this peer, close any channels first");
+ return Err(());
+ }
+ }
+
+ //check the pubkey matches a valid connected peer
+ let peers = peer_manager.get_peer_node_ids();
+ if !peers.contains(&pubkey) {
+ println!("Error: Could not find peer {}", pubkey);
+ return Err(());
+ }
+
+ peer_manager.disconnect_by_node_id(pubkey, false);
+ Ok(())
+}
+
fn open_channel(
peer_pubkey: PublicKey, channel_amt_sat: u64, announced_channel: bool,
channel_manager: Arc<ChannelManager>,