Skip to content

Commit 81bbcd0

Browse files
committed
Start storing payments using PaginatedKVStore.
1 parent b70ab5b commit 81bbcd0

2 files changed

Lines changed: 53 additions & 3 deletions

File tree

ldk-server/src/io/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ pub(crate) mod utils;
55
/// The forwarded payments will be persisted under this prefix.
66
pub(crate) const FORWARDED_PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE: &str = "forwarded_payments";
77
pub(crate) const FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE: &str = "";
8+
9+
/// The payments will be persisted under this prefix.
10+
pub(crate) const PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE: &str = "payments";
11+
pub(crate) const PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE: &str = "";

ldk-server/src/main.rs

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ use crate::io::paginated_kv_store::PaginatedKVStore;
1717
use crate::io::sqlite_store::SqliteStore;
1818
use crate::io::{
1919
FORWARDED_PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
20-
FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
20+
FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE, PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
21+
PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
2122
};
2223
use crate::util::config::load_config;
23-
use crate::util::proto_adapter::forwarded_payment_to_proto;
24+
use crate::util::proto_adapter::{forwarded_payment_to_proto, payment_to_proto};
2425
use hex::DisplayHex;
2526
use ldk_node::config::Config;
27+
use ldk_node::lightning::util::persist::KVStore;
2628
use ldk_node::logger::LogLevel;
2729
use prost::Message;
2830
use rand::Rng;
@@ -33,6 +35,38 @@ use std::time::{SystemTime, UNIX_EPOCH};
3335

3436
const USAGE_GUIDE: &str = "Usage: ldk-server <config_path>";
3537

38+
macro_rules! upsert_payment_details {
39+
($event_node:expr, $paginated_store:expr, $payment_id:expr) => {{
40+
if let Some(payment_details) = $event_node.payment($payment_id) {
41+
let payment = payment_to_proto(payment_details);
42+
let time = SystemTime::now()
43+
.duration_since(UNIX_EPOCH)
44+
.expect("Time must be > 1970")
45+
.as_secs() as i64;
46+
47+
match $paginated_store.write(
48+
PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
49+
PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
50+
&$payment_id.0.to_lower_hex_string(),
51+
time,
52+
&payment.encode_to_vec(),
53+
) {
54+
Ok(_) => {
55+
$event_node.event_handled();
56+
},
57+
Err(e) => {
58+
eprintln!("Failed to write payment to persistence: {}", e);
59+
},
60+
}
61+
} else {
62+
eprintln!(
63+
"Unable to find payment with paymentId: {}",
64+
$payment_id.0.to_lower_hex_string()
65+
);
66+
}
67+
}};
68+
}
69+
3670
fn main() {
3771
let args: Vec<String> = std::env::args().collect();
3872

@@ -146,7 +180,19 @@ fn main() {
146180
"PAYMENT_RECEIVED: with id {:?}, hash {}, amount_msat {}",
147181
payment_id, payment_hash, amount_msat
148182
);
149-
event_node.event_handled();
183+
let payment_id = payment_id.expect("PaymentId expected for ldk-server >=0.1");
184+
upsert_payment_details!(event_node, &paginated_store, &payment_id);
185+
},
186+
Event::PaymentSuccessful {payment_id, ..} => {
187+
let payment_id = payment_id.expect("PaymentId expected for ldk-server >=0.1");
188+
upsert_payment_details!(event_node, &paginated_store, &payment_id);
189+
},
190+
Event::PaymentFailed {payment_id, ..} => {
191+
let payment_id = payment_id.expect("PaymentId expected for ldk-server >=0.1");
192+
upsert_payment_details!(event_node, &paginated_store, &payment_id);
193+
},
194+
Event::PaymentClaimable {payment_id, ..} => {
195+
upsert_payment_details!(event_node, &paginated_store, &payment_id);
150196
},
151197
Event::PaymentForwarded {
152198
prev_channel_id,

0 commit comments

Comments
 (0)