@@ -17,12 +17,14 @@ use crate::io::paginated_kv_store::PaginatedKVStore;
1717use crate :: io:: sqlite_store:: SqliteStore ;
1818use 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} ;
2223use 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 } ;
2425use hex:: DisplayHex ;
2526use ldk_node:: config:: Config ;
27+ use ldk_node:: lightning:: util:: persist:: KVStore ;
2628use ldk_node:: logger:: LogLevel ;
2729use prost:: Message ;
2830use rand:: Rng ;
@@ -33,6 +35,38 @@ use std::time::{SystemTime, UNIX_EPOCH};
3335
3436const 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+
3670fn 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