use bitcoin::network::constants::Network;
use bitcoin::secp256k1::key::PublicKey;
use lightning::chain;
-use lightning::chain::keysinterface::KeysManager;
+use lightning::chain::keysinterface::{KeysInterface, KeysManager};
use lightning::ln::features::InvoiceFeatures;
use lightning::ln::msgs::NetAddress;
use lightning::ln::{PaymentHash, PaymentSecret};
return Err(());
}
let bitcoind_rpc_info = env::args().skip(1).next().unwrap();
- let bitcoind_rpc_info_parts: Vec<&str> = bitcoind_rpc_info.split("@").collect();
+ let bitcoind_rpc_info_parts: Vec<&str> = bitcoind_rpc_info.rsplitn(2, "@").collect();
if bitcoind_rpc_info_parts.len() != 2 {
println!("ERROR: bad bitcoind RPC URL provided");
return Err(());
}
- let rpc_user_and_password: Vec<&str> = bitcoind_rpc_info_parts[0].split(":").collect();
+ let rpc_user_and_password: Vec<&str> = bitcoind_rpc_info_parts[1].split(":").collect();
if rpc_user_and_password.len() != 2 {
println!("ERROR: bad bitcoind RPC username/password combo provided");
return Err(());
}
let bitcoind_rpc_username = rpc_user_and_password[0].to_string();
let bitcoind_rpc_password = rpc_user_and_password[1].to_string();
- let bitcoind_rpc_path: Vec<&str> = bitcoind_rpc_info_parts[1].split(":").collect();
+ let bitcoind_rpc_path: Vec<&str> = bitcoind_rpc_info_parts[0].split(":").collect();
if bitcoind_rpc_path.len() != 2 {
println!("ERROR: bad bitcoind RPC path provided");
return Err(());
}
"nodeinfo" => node_info(channel_manager.clone(), peer_manager.clone()),
"listpeers" => list_peers(peer_manager.clone()),
+ "signmessage" => {
+ const MSG_STARTPOS: usize = "signmsg".len() + 1;
+ if line.as_bytes().len() <= MSG_STARTPOS {
+ println!("ERROR: signmsg requires a message");
+ print!("> ");
+ io::stdout().flush().unwrap();
+ continue;
+ }
+ println!(
+ "{:?}",
+ lightning::util::message_signing::sign(
+ &line.as_bytes()[MSG_STARTPOS..],
+ &keys_manager.get_node_secret()
+ )
+ );
+ print!("> ");
+ io::stdout().flush().unwrap();
+ }
_ => println!("Unknown command. See `\"help\" for available commands."),
}
}
println!("forceclosechannel <channel_id>");
println!("nodeinfo");
println!("listpeers");
+ println!("signmessage <message>");
}
fn node_info(channel_manager: Arc<ChannelManager>, peer_manager: Arc<PeerManager>) {