- // Step 15: Handle LDK Events
- let channel_manager_event_listener = channel_manager.clone();
- let keys_manager_listener = keys_manager.clone();
- // TODO: persist payment info to disk
- let inbound_payments: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
- let outbound_payments: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
- let inbound_pmts_for_events = inbound_payments.clone();
- let outbound_pmts_for_events = outbound_payments.clone();
+ let inbound_payments = Arc::new(Mutex::new(disk::read_payment_info(Path::new(&format!(
+ "{}/{}",
+ ldk_data_dir, INBOUND_PAYMENTS_FNAME
+ )))));
+ let outbound_payments = Arc::new(Mutex::new(disk::read_payment_info(Path::new(&format!(
+ "{}/{}",
+ ldk_data_dir, OUTBOUND_PAYMENTS_FNAME
+ )))));
+ let recent_payments_payment_hashes = channel_manager
+ .list_recent_payments()
+ .into_iter()
+ .filter_map(|p| match p {
+ RecentPaymentDetails::Pending { payment_hash, .. } => Some(payment_hash),
+ RecentPaymentDetails::Fulfilled { payment_hash, .. } => payment_hash,
+ RecentPaymentDetails::Abandoned { payment_hash, .. } => Some(payment_hash),
+ RecentPaymentDetails::AwaitingInvoice { payment_id: _ } => todo!(),
+ })
+ .collect::<Vec<PaymentHash>>();
+ for (payment_hash, payment_info) in outbound_payments
+ .lock()
+ .unwrap()
+ .payments
+ .iter_mut()
+ .filter(|(_, i)| matches!(i.status, HTLCStatus::Pending))
+ {
+ if !recent_payments_payment_hashes.contains(payment_hash) {
+ payment_info.status = HTLCStatus::Failed;
+ }
+ }
+ fs_store
+ .write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.lock().unwrap().encode())
+ .unwrap();
+
+ // Step 18: Handle LDK Events
+ let channel_manager_event_listener = Arc::clone(&channel_manager);
+ let bitcoind_client_event_listener = Arc::clone(&bitcoind_client);
+ let network_graph_event_listener = Arc::clone(&network_graph);
+ let keys_manager_event_listener = Arc::clone(&keys_manager);
+ let inbound_payments_event_listener = Arc::clone(&inbound_payments);
+ let outbound_payments_event_listener = Arc::clone(&outbound_payments);
+ let fs_store_event_listener = Arc::clone(&fs_store);