Skip to content

Commit 9a7fdba

Browse files
Split payments hashmap into inbound and outbound
To prevent clashes between payment hashes
1 parent 83bec87 commit 9a7fdba

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

src/cli.rs

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::disk;
22
use crate::hex_utils;
33
use crate::{
4-
ChannelManager, FilesystemLogger, HTLCStatus, MillisatAmount, PaymentInfo,
5-
PaymentInfoStorage, PeerManager,
4+
ChannelManager, FilesystemLogger, HTLCStatus, MillisatAmount, PaymentInfo, PaymentInfoStorage,
5+
PeerManager,
66
};
77
use bitcoin::hashes::sha256::Hash as Sha256Hash;
88
use bitcoin::hashes::Hash;
@@ -101,8 +101,9 @@ pub(crate) fn parse_startup_args() -> Result<LdkUserInfo, ()> {
101101
pub(crate) async fn poll_for_user_input(
102102
peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
103103
router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access>, Arc<FilesystemLogger>>>,
104-
payment_storage: PaymentInfoStorage, node_privkey: SecretKey, event_notifier: mpsc::Sender<()>,
105-
ldk_data_dir: String, logger: Arc<FilesystemLogger>, network: Network,
104+
inbound_payments: PaymentInfoStorage, outbound_payments: PaymentInfoStorage,
105+
node_privkey: SecretKey, event_notifier: mpsc::Sender<()>, ldk_data_dir: String,
106+
logger: Arc<FilesystemLogger>, network: Network,
106107
) {
107108
println!("LDK startup successful. To view available commands: \"help\".\nLDK logs are available at <your-supplied-ldk-data-dir-path>/.ldk/logs");
108109
let stdin = io::stdin();
@@ -278,7 +279,7 @@ pub(crate) async fn poll_for_user_input(
278279
route_hints,
279280
router.clone(),
280281
channel_manager.clone(),
281-
payment_storage.clone(),
282+
outbound_payments.clone(),
282283
logger.clone(),
283284
);
284285
}
@@ -300,7 +301,7 @@ pub(crate) async fn poll_for_user_input(
300301
}
301302
get_invoice(
302303
amt_msat.unwrap(),
303-
payment_storage.clone(),
304+
inbound_payments.clone(),
304305
node_privkey.clone(),
305306
channel_manager.clone(),
306307
network,
@@ -336,7 +337,9 @@ pub(crate) async fn poll_for_user_input(
336337
}
337338
}
338339
"listchannels" => list_channels(channel_manager.clone()),
339-
"listpayments" => list_payments(payment_storage.clone()),
340+
"listpayments" => {
341+
list_payments(inbound_payments.clone(), outbound_payments.clone())
342+
}
340343
"closechannel" => {
341344
let channel_id_str = words.next();
342345
if channel_id_str.is_none() {
@@ -419,15 +422,34 @@ fn list_channels(channel_manager: Arc<ChannelManager>) {
419422
println!("]");
420423
}
421424

422-
fn list_payments(payment_storage: PaymentInfoStorage) {
423-
let payments = payment_storage.lock().unwrap();
425+
fn list_payments(inbound_payments: PaymentInfoStorage, outbound_payments: PaymentInfoStorage) {
426+
let inbound = inbound_payments.lock().unwrap();
427+
let outbound = outbound_payments.lock().unwrap();
424428
print!("[");
425-
for (payment_hash, payment_info) in payments.deref() {
429+
for (payment_hash, payment_info) in inbound.deref() {
430+
println!("");
431+
println!("\t{{");
432+
println!("\t\tamount_millisatoshis: {},", payment_info.amt_msat);
433+
println!("\t\tpayment_hash: {},", hex_utils::hex_str(&payment_hash.0));
434+
println!("\t\thtlc_direction: inbound,");
435+
println!(
436+
"\t\thtlc_status: {},",
437+
match payment_info.status {
438+
HTLCStatus::Pending => "pending",
439+
HTLCStatus::Succeeded => "succeeded",
440+
HTLCStatus::Failed => "failed",
441+
}
442+
);
443+
444+
println!("\t}},");
445+
}
446+
447+
for (payment_hash, payment_info) in outbound.deref() {
426448
println!("");
427449
println!("\t{{");
428450
println!("\t\tamount_millisatoshis: {},", payment_info.amt_msat);
429451
println!("\t\tpayment_hash: {},", hex_utils::hex_str(&payment_hash.0));
430-
// println!("\t\thtlc_direction: {},", direction_str);
452+
println!("\t\thtlc_direction: outbound,");
431453
println!(
432454
"\t\thtlc_status: {},",
433455
match payment_info.status {

src/main.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub(crate) type ChannelManager =
101101
async fn handle_ldk_events(
102102
channel_manager: Arc<ChannelManager>, chain_monitor: Arc<ChainMonitor>,
103103
bitcoind_client: Arc<BitcoindClient>, keys_manager: Arc<KeysManager>,
104-
payment_storage: PaymentInfoStorage, network: Network,
104+
inbound_payments: PaymentInfoStorage, outbound_payments: PaymentInfoStorage, network: Network,
105105
) {
106106
loop {
107107
let loop_channel_manager = channel_manager.clone();
@@ -150,7 +150,7 @@ async fn handle_ldk_events(
150150
.unwrap();
151151
}
152152
Event::PaymentReceived { payment_hash, .. } => {
153-
let mut payments = payment_storage.lock().unwrap();
153+
let mut payments = inbound_payments.lock().unwrap();
154154
if let Some(payment) = payments.get_mut(&payment_hash) {
155155
assert!(loop_channel_manager.claim_funds(
156156
payment.preimage.unwrap().clone(),
@@ -183,7 +183,7 @@ async fn handle_ldk_events(
183183
}
184184
Event::PaymentSent { payment_preimage } => {
185185
let hashed = PaymentHash(Sha256::hash(&payment_preimage.0).into_inner());
186-
let mut payments = payment_storage.lock().unwrap();
186+
let mut payments = outbound_payments.lock().unwrap();
187187
for (payment_hash, payment) in payments.iter_mut() {
188188
if *payment_hash == hashed {
189189
payment.preimage = Some(payment_preimage);
@@ -213,7 +213,7 @@ async fn handle_ldk_events(
213213
print!("> ");
214214
io::stdout().flush().unwrap();
215215

216-
let mut payments = payment_storage.lock().unwrap();
216+
let mut payments = outbound_payments.lock().unwrap();
217217
if payments.contains_key(&payment_hash) {
218218
let payment = payments.get_mut(&payment_hash).unwrap();
219219
payment.status = HTLCStatus::Failed;
@@ -497,8 +497,10 @@ async fn start_ldk() {
497497
let chain_monitor_event_listener = chain_monitor.clone();
498498
let keys_manager_listener = keys_manager.clone();
499499
// TODO: persist payment info to disk
500-
let payment_info: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
501-
let payment_info_for_events = payment_info.clone();
500+
let inbound_payments: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
501+
let outbound_payments: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
502+
let inbound_pmts_for_events = inbound_payments.clone();
503+
let outbound_pmts_for_events = outbound_payments.clone();
502504
let network = args.network;
503505
let bitcoind_rpc = bitcoind_client.clone();
504506
tokio::spawn(async move {
@@ -507,7 +509,8 @@ async fn start_ldk() {
507509
chain_monitor_event_listener,
508510
bitcoind_rpc,
509511
keys_manager_listener,
510-
payment_info_for_events,
512+
inbound_pmts_for_events,
513+
outbound_pmts_for_events,
511514
network,
512515
)
513516
.await;
@@ -538,7 +541,8 @@ async fn start_ldk() {
538541
peer_manager.clone(),
539542
channel_manager.clone(),
540543
router.clone(),
541-
payment_info,
544+
inbound_payments,
545+
outbound_payments,
542546
keys_manager.get_node_secret(),
543547
event_ntfn_sender,
544548
ldk_data_dir.clone(),

0 commit comments

Comments
 (0)