+fn keysend(
+ payee_pubkey: PublicKey, amt_msat: u64, network_graph: Arc<NetworkGraph>,
+ channel_manager: Arc<ChannelManager>, payment_storage: PaymentInfoStorage,
+ logger: Arc<FilesystemLogger>,
+) {
+ let first_hops = channel_manager.list_usable_channels();
+ let payer_pubkey = channel_manager.get_our_node_id();
+
+ let payee = Payee::for_keysend(payee_pubkey);
+ let params = RouteParameters { payee, final_value_msat: amt_msat, final_cltv_expiry_delta: 40 };
+
+ let route = match router::find_route(
+ &payer_pubkey,
+ ¶ms,
+ &network_graph,
+ Some(&first_hops.iter().collect::<Vec<_>>()),
+ logger,
+ &Scorer::default(),
+ ) {
+ Ok(r) => r,
+ Err(e) => {
+ println!("ERROR: failed to find route: {}", e.err);
+ return;
+ }
+ };
+
+ let mut payments = payment_storage.lock().unwrap();
+ let payment_hash = channel_manager.send_spontaneous_payment(&route, None).unwrap().0;
+ payments.insert(
+ payment_hash,
+ PaymentInfo {
+ preimage: None,
+ secret: None,
+ status: HTLCStatus::Pending,
+ amt_msat: MillisatAmount(Some(amt_msat)),
+ },
+ );
+}
+