@@ -11,7 +11,7 @@ use ldk_node::bitcoin::hashes::sha256::Hash as Sha256;
1111use ldk_node:: lightning:: util:: logger:: Logger as _;
1212use ldk_node:: lightning:: util:: persist:: KVStore ;
1313use ldk_node:: lightning:: util:: ser:: { Readable , Writeable } ;
14- use ldk_node:: lightning:: { log_debug, log_error, log_info} ;
14+ use ldk_node:: lightning:: { log_debug, log_error, log_info, log_trace } ;
1515use ldk_node:: lightning_invoice:: Bolt11Invoice ;
1616use ldk_node:: lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
1717use ldk_node:: payment:: ConfirmationStatus ;
@@ -522,6 +522,7 @@ impl Spark {
522522 let mut shutdown = self . shutdown_receiver . clone ( ) ;
523523 let spark_wallet = Arc :: clone ( & self . spark_wallet ) ;
524524 let event_queue = Arc :: clone ( & self . event_queue ) ;
525+ let store = Arc :: clone ( & self . store ) ;
525526 let logger = Arc :: clone ( & self . logger ) ;
526527 self . runtime . spawn ( async move {
527528 for i in 0 ..MAX_POLL_ATTEMPTS {
@@ -533,14 +534,16 @@ impl Spark {
533534 } ,
534535 p = spark_wallet. fetch_lightning_send_payment( & spark_id) => {
535536 if let Ok ( Some ( p) ) = p {
536- let status: TxStatus = p. status. into( ) ;
537+ let status: TxStatus = p. status. clone ( ) . into( ) ;
537538 match status {
538- TxStatus :: Pending => { } // do nothing / wait
539+ TxStatus :: Pending => {
540+ log_trace!( logger, "Polling payment still pending, status: {:?}, preimage: {:?}" , p. status, p. payment_preimage) ;
541+ } // do nothing / wait
539542 TxStatus :: Completed => {
540543 // wait for preimage
541- if p. payment_preimage. is_some( ) {
544+ if p. payment_preimage. is_some( ) || i == MAX_POLL_ATTEMPTS - 1 {
542545 log_info!( logger, "Polling payment preimage found" ) ;
543- let preimage: [ u8 ; 32 ] = FromHex :: from_hex( & p . payment_preimage . unwrap( ) ) . unwrap ( ) ;
546+ let preimage: [ u8 ; 32 ] = p . payment_preimage . as_ref ( ) . map ( |p| FromHex :: from_hex( p ) . unwrap( ) ) . unwrap_or ( [ 0 ; 32 ] ) ;
544547 event_queue
545548 . add_event( Event :: PaymentSuccessful {
546549 payment_id: PaymentId :: Trusted ( payment_id) ,
@@ -549,7 +552,15 @@ impl Spark {
549552 fee_paid_msat: Some ( p. fee_sat * 1_000 ) , // convert to msats
550553 } )
551554 . unwrap( ) ;
555+
556+ if let Err ( e) = Self :: sync_payments_to_storage( spark_wallet. as_ref( ) , & store, logger. as_ref( ) ) . await {
557+ log_error!( logger, "Failed to sync payments to storage: {e:?}" ) ;
558+ } else {
559+ log_info!( logger, "Payments synced to storage" ) ;
560+ }
552561 return ;
562+ } else {
563+ log_debug!( logger, "Polling payment completed but no preimage yet" ) ;
553564 }
554565 }
555566 TxStatus :: Failed => {
@@ -564,6 +575,8 @@ impl Spark {
564575 return ;
565576 }
566577 }
578+ } else {
579+ log_debug!( logger, "Polling payment not found yet" ) ;
567580 }
568581 let sleep_time = if i < 5 { Duration :: from_secs( 1 ) } else { Duration :: from_secs( i) } ;
569582 tokio:: time:: sleep( sleep_time) . await ;
@@ -703,15 +716,15 @@ impl From<TransferStatus> for TxStatus {
703716impl From < LightningSendStatus > for TxStatus {
704717 fn from ( o : LightningSendStatus ) -> TxStatus {
705718 match o {
706- LightningSendStatus :: LightningPaymentSucceeded => TxStatus :: Completed ,
719+ LightningSendStatus :: LightningPaymentSucceeded
720+ | LightningSendStatus :: TransferCompleted => TxStatus :: Completed ,
707721 LightningSendStatus :: TransferFailed
708722 | LightningSendStatus :: LightningPaymentFailed
709723 | LightningSendStatus :: UserSwapReturnFailed
710724 | LightningSendStatus :: PreimageProvidingFailed => TxStatus :: Failed ,
711725 LightningSendStatus :: Unknown
712726 | LightningSendStatus :: UserSwapReturned
713727 | LightningSendStatus :: PendingUserSwapReturn
714- | LightningSendStatus :: TransferCompleted
715728 | LightningSendStatus :: Created
716729 | LightningSendStatus :: RequestValidated
717730 | LightningSendStatus :: LightningPaymentInitiated
0 commit comments