@@ -5,7 +5,7 @@ mod util;
55
66use crate :: service:: NodeService ;
77
8- use ldk_node:: { Builder , Event } ;
8+ use ldk_node:: { Builder , Event , Node } ;
99
1010use tokio:: net:: TcpListener ;
1111use tokio:: signal:: unix:: SignalKind ;
@@ -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:: ln:: channelmanager:: PaymentId ;
2628use ldk_node:: logger:: LogLevel ;
2729use prost:: Message ;
2830use rand:: Rng ;
@@ -146,7 +148,19 @@ fn main() {
146148 "PAYMENT_RECEIVED: with id {:?}, hash {}, amount_msat {}" ,
147149 payment_id, payment_hash, amount_msat
148150 ) ;
149- event_node. event_handled( ) ;
151+ let payment_id = payment_id. expect( "PaymentId expected for ldk-server >=0.1" ) ;
152+ upsert_payment_details( & event_node, Arc :: clone( & paginated_store) as Arc <dyn PaginatedKVStore >, & payment_id) ;
153+ } ,
154+ Event :: PaymentSuccessful { payment_id, ..} => {
155+ let payment_id = payment_id. expect( "PaymentId expected for ldk-server >=0.1" ) ;
156+ upsert_payment_details( & event_node, Arc :: clone( & paginated_store) as Arc <dyn PaginatedKVStore >, & payment_id) ;
157+ } ,
158+ Event :: PaymentFailed { payment_id, ..} => {
159+ let payment_id = payment_id. expect( "PaymentId expected for ldk-server >=0.1" ) ;
160+ upsert_payment_details( & event_node, Arc :: clone( & paginated_store) as Arc <dyn PaginatedKVStore >, & payment_id) ;
161+ } ,
162+ Event :: PaymentClaimable { payment_id, ..} => {
163+ upsert_payment_details( & event_node, Arc :: clone( & paginated_store) as Arc <dyn PaginatedKVStore >, & payment_id) ;
150164 } ,
151165 Event :: PaymentForwarded {
152166 prev_channel_id,
@@ -234,3 +248,31 @@ fn main() {
234248 node. stop ( ) . expect ( "Shutdown should always succeed." ) ;
235249 println ! ( "Shutdown complete.." ) ;
236250}
251+
252+ fn upsert_payment_details (
253+ event_node : & Node , paginated_store : Arc < dyn PaginatedKVStore > , payment_id : & PaymentId ,
254+ ) {
255+ if let Some ( payment_details) = event_node. payment ( payment_id) {
256+ let payment = payment_to_proto ( payment_details) ;
257+ let time =
258+ SystemTime :: now ( ) . duration_since ( UNIX_EPOCH ) . expect ( "Time must be > 1970" ) . as_secs ( )
259+ as i64 ;
260+
261+ match paginated_store. write (
262+ PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE ,
263+ PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE ,
264+ & payment_id. 0 . to_lower_hex_string ( ) ,
265+ time,
266+ & payment. encode_to_vec ( ) ,
267+ ) {
268+ Ok ( _) => {
269+ event_node. event_handled ( ) ;
270+ } ,
271+ Err ( e) => {
272+ eprintln ! ( "Failed to write payment to persistence: {}" , e) ;
273+ } ,
274+ }
275+ } else {
276+ eprintln ! ( "Unable to find payment with paymentId: {}" , payment_id. 0 . to_lower_hex_string( ) ) ;
277+ }
278+ }
0 commit comments