Skip to content

Commit c54c387

Browse files
committed
post-review fixes
1 parent 7814899 commit c54c387

3 files changed

Lines changed: 99 additions & 108 deletions

File tree

src/cli.rs

Lines changed: 49 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::disk;
1+
use crate::disk::{self, INBOUND_PAYMENTS_FNAME, OUTBOUND_PAYMENTS_FNAME};
22
use crate::hex_utils;
33
use crate::{
44
ChannelManager, HTLCStatus, MillisatAmount, NetworkGraph, OnionMessenger, PaymentInfo,
@@ -16,9 +16,11 @@ use lightning::onion_message::{CustomOnionMessageContents, Destination, OnionMes
1616
use lightning::routing::gossip::NodeId;
1717
use lightning::routing::router::{PaymentParameters, RouteParameters};
1818
use lightning::util::config::{ChannelHandshakeConfig, ChannelHandshakeLimits, UserConfig};
19+
use lightning::util::persist::KVStorePersister;
1920
use lightning::util::ser::{Writeable, Writer};
2021
use lightning_invoice::payment::pay_invoice;
2122
use lightning_invoice::{utils, Currency, Invoice};
23+
use lightning_persister::FilesystemPersister;
2224
use std::env;
2325
use std::io;
2426
use std::io::Write;
@@ -62,7 +64,7 @@ pub(crate) async fn poll_for_user_input(
6264
keys_manager: Arc<KeysManager>, network_graph: Arc<NetworkGraph>,
6365
onion_messenger: Arc<OnionMessenger>, inbound_payments: Arc<Mutex<PaymentInfoStorage>>,
6466
outbound_payments: Arc<Mutex<PaymentInfoStorage>>, ldk_data_dir: String, network: Network,
65-
logger: Arc<disk::FilesystemLogger>,
67+
logger: Arc<disk::FilesystemLogger>, persister: Arc<FilesystemPersister>,
6668
) {
6769
println!(
6870
"LDK startup successful. Enter \"help\" to view available commands. Press Ctrl-D to quit."
@@ -156,10 +158,12 @@ pub(crate) async fn poll_for_user_input(
156158
}
157159
};
158160

159-
let mut outbound_payments = outbound_payments.lock().unwrap();
160-
send_payment(&*channel_manager, &invoice, &mut outbound_payments);
161-
disk::persist_outbound_payments(ldk_data_dir.clone(), &outbound_payments)
162-
.unwrap();
161+
send_payment(
162+
&channel_manager,
163+
&invoice,
164+
&mut outbound_payments.lock().unwrap(),
165+
persister.clone(),
166+
);
163167
}
164168
"keysend" => {
165169
let dest_pubkey = match words.next() {
@@ -189,16 +193,14 @@ pub(crate) async fn poll_for_user_input(
189193
continue;
190194
}
191195
};
192-
let mut outbound_payments = outbound_payments.lock().unwrap();
193196
keysend(
194-
&*channel_manager,
197+
&channel_manager,
195198
dest_pubkey,
196199
amt_msat,
197200
&*keys_manager,
198-
&mut outbound_payments,
201+
&mut outbound_payments.lock().unwrap(),
202+
persister.clone(),
199203
);
200-
disk::persist_outbound_payments(ldk_data_dir.clone(), &outbound_payments)
201-
.unwrap();
202204
}
203205
"getinvoice" => {
204206
let amt_str = words.next();
@@ -229,14 +231,13 @@ pub(crate) async fn poll_for_user_input(
229231
get_invoice(
230232
amt_msat.unwrap(),
231233
&mut inbound_payments,
232-
&*channel_manager,
234+
&channel_manager,
233235
Arc::clone(&keys_manager),
234236
network,
235237
expiry_secs.unwrap(),
236238
Arc::clone(&logger),
237239
);
238-
disk::persist_inbound_payments(ldk_data_dir.clone(), &inbound_payments)
239-
.unwrap();
240+
persister.persist(INBOUND_PAYMENTS_FNAME, &*inbound_payments).unwrap();
240241
}
241242
"connectpeer" => {
242243
let peer_pubkey_and_ip_addr = words.next();
@@ -665,40 +666,40 @@ fn open_channel(
665666
}
666667

667668
fn send_payment(
668-
channel_manager: &ChannelManager, invoice: &Invoice, outbound_payments: &mut PaymentInfoStorage,
669+
channel_manager: &ChannelManager, invoice: &Invoice,
670+
outbound_payments: &mut PaymentInfoStorage, persister: Arc<FilesystemPersister>,
669671
) {
670-
let status =
671-
match pay_invoice(invoice, Retry::Timeout(Duration::from_secs(10)), channel_manager) {
672-
Ok(_payment_id) => {
673-
let payee_pubkey = invoice.recover_payee_pub_key();
674-
let amt_msat = invoice.amount_milli_satoshis().unwrap();
675-
println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey);
676-
print!("> ");
677-
HTLCStatus::Pending
678-
}
679-
Err(e) => {
680-
println!("ERROR: failed to send payment: {:?}", e);
681-
print!("> ");
682-
HTLCStatus::Failed
683-
}
684-
};
685-
let payment_hash = PaymentHash(invoice.payment_hash().clone().into_inner());
686-
let payment_secret = Some(invoice.payment_secret().clone());
687-
672+
let payment_hash = PaymentHash((*invoice.payment_hash()).into_inner());
673+
let payment_secret = Some(*invoice.payment_secret());
688674
outbound_payments.payments.insert(
689675
payment_hash,
690676
PaymentInfo {
691677
preimage: None,
692678
secret: payment_secret,
693-
status,
679+
status: HTLCStatus::Pending,
694680
amt_msat: MillisatAmount(invoice.amount_milli_satoshis()),
695681
},
696682
);
683+
persister.persist(OUTBOUND_PAYMENTS_FNAME, &*outbound_payments).unwrap();
684+
match pay_invoice(invoice, Retry::Timeout(Duration::from_secs(10)), channel_manager) {
685+
Ok(_payment_id) => {
686+
let payee_pubkey = invoice.recover_payee_pub_key();
687+
let amt_msat = invoice.amount_milli_satoshis().unwrap();
688+
println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey);
689+
print!("> ");
690+
}
691+
Err(e) => {
692+
println!("ERROR: failed to send payment: {:?}", e);
693+
print!("> ");
694+
outbound_payments.payments.get_mut(&payment_hash).unwrap().status = HTLCStatus::Failed;
695+
persister.persist(OUTBOUND_PAYMENTS_FNAME, &*outbound_payments).unwrap();
696+
}
697+
};
697698
}
698699

699700
fn keysend<E: EntropySource>(
700701
channel_manager: &ChannelManager, payee_pubkey: PublicKey, amt_msat: u64, entropy_source: &E,
701-
outbound_payments: &mut PaymentInfoStorage,
702+
outbound_payments: &mut PaymentInfoStorage, persister: Arc<FilesystemPersister>,
702703
) {
703704
let payment_preimage = PaymentPreimage(entropy_source.get_secure_random_bytes());
704705
let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner());
@@ -707,7 +708,17 @@ fn keysend<E: EntropySource>(
707708
payment_params: PaymentParameters::for_keysend(payee_pubkey, 40),
708709
final_value_msat: amt_msat,
709710
};
710-
let status = match channel_manager.send_spontaneous_payment_with_retry(
711+
outbound_payments.payments.insert(
712+
payment_hash,
713+
PaymentInfo {
714+
preimage: None,
715+
secret: None,
716+
status: HTLCStatus::Pending,
717+
amt_msat: MillisatAmount(Some(amt_msat)),
718+
},
719+
);
720+
persister.persist(OUTBOUND_PAYMENTS_FNAME, &*outbound_payments).unwrap();
721+
match channel_manager.send_spontaneous_payment_with_retry(
711722
Some(payment_preimage),
712723
RecipientOnionFields::spontaneous_empty(),
713724
PaymentId(payment_hash.0),
@@ -717,24 +728,14 @@ fn keysend<E: EntropySource>(
717728
Ok(_payment_hash) => {
718729
println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey);
719730
print!("> ");
720-
HTLCStatus::Pending
721731
}
722732
Err(e) => {
723733
println!("ERROR: failed to send payment: {:?}", e);
724734
print!("> ");
725-
HTLCStatus::Failed
735+
outbound_payments.payments.get_mut(&payment_hash).unwrap().status = HTLCStatus::Failed;
736+
persister.persist(OUTBOUND_PAYMENTS_FNAME, &*outbound_payments).unwrap();
726737
}
727738
};
728-
729-
outbound_payments.payments.insert(
730-
payment_hash,
731-
PaymentInfo {
732-
preimage: None,
733-
secret: None,
734-
status,
735-
amt_msat: MillisatAmount(Some(amt_msat)),
736-
},
737-
);
738739
}
739740

740741
fn get_invoice(

src/disk.rs

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ use bitcoin::Network;
44
use chrono::Utc;
55
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringParameters};
66
use lightning::util::logger::{Logger, Record};
7-
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
7+
use lightning::util::ser::{Readable, ReadableArgs, Writer};
88
use std::collections::HashMap;
99
use std::fs;
1010
use std::fs::File;
11-
use std::io::{BufRead, BufReader, BufWriter};
11+
use std::io::{BufRead, BufReader};
1212
use std::net::SocketAddr;
1313
use std::path::Path;
1414
use std::sync::Arc;
1515

16+
pub(crate) const INBOUND_PAYMENTS_FNAME: &str = "inbound_payments";
17+
pub(crate) const OUTBOUND_PAYMENTS_FNAME: &str = "outbound_payments";
18+
1619
pub(crate) struct FilesystemLogger {
1720
data_dir: String,
1821
}
@@ -52,27 +55,6 @@ pub(crate) fn persist_channel_peer(path: &Path, peer_info: &str) -> std::io::Res
5255
file.write_all(format!("{}\n", peer_info).as_bytes())
5356
}
5457

55-
pub(crate) fn persist_inbound_payments(
56-
ldk_data_dir: String, inbound_payments: &PaymentInfoStorage,
57-
) -> std::io::Result<()> {
58-
persist_payment_info(Path::new(&format!("{}/inbound_payments", ldk_data_dir)), inbound_payments)
59-
}
60-
61-
pub(crate) fn persist_outbound_payments(
62-
ldk_data_dir: String, outbound_payments: &PaymentInfoStorage,
63-
) -> std::io::Result<()> {
64-
persist_payment_info(
65-
Path::new(&format!("{}/outbound_payments", ldk_data_dir)),
66-
outbound_payments,
67-
)
68-
}
69-
70-
fn persist_payment_info(path: &Path, payment_info: &PaymentInfoStorage) -> std::io::Result<()> {
71-
let mut buf = BufWriter::new(fs::File::create(&path)?);
72-
payment_info.write(&mut buf)?;
73-
buf.into_inner()?.sync_all()
74-
}
75-
7658
pub(crate) fn read_channel_peer_data(
7759
path: &Path,
7860
) -> Result<HashMap<PublicKey, SocketAddr>, std::io::Error> {

0 commit comments

Comments
 (0)