@@ -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,17 @@ 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+ // do nothing / wait
541+ log_trace!( logger, "Polling payment still pending, status: {:?}, preimage: {:?}" , p. status, p. payment_preimage) ;
542+ }
539543 TxStatus :: Completed => {
540544 // wait for preimage
541- if p. payment_preimage. is_some( ) {
545+ if p. payment_preimage. is_some( ) || i == MAX_POLL_ATTEMPTS - 1 {
542546 log_info!( logger, "Polling payment preimage found" ) ;
543- let preimage: [ u8 ; 32 ] = FromHex :: from_hex( & p . payment_preimage . unwrap( ) ) . unwrap ( ) ;
547+ let preimage: [ u8 ; 32 ] = p . payment_preimage . as_ref ( ) . map ( |p| FromHex :: from_hex( p ) . unwrap( ) ) . unwrap_or ( [ 0 ; 32 ] ) ;
544548 event_queue
545549 . add_event( Event :: PaymentSuccessful {
546550 payment_id: PaymentId :: Trusted ( payment_id) ,
@@ -549,7 +553,15 @@ impl Spark {
549553 fee_paid_msat: Some ( p. fee_sat * 1_000 ) , // convert to msats
550554 } )
551555 . unwrap( ) ;
556+
557+ if let Err ( e) = Self :: sync_payments_to_storage( spark_wallet. as_ref( ) , & store, logger. as_ref( ) ) . await {
558+ log_error!( logger, "Failed to sync payments to storage: {e:?}" ) ;
559+ } else {
560+ log_info!( logger, "Payments synced to storage" ) ;
561+ }
552562 return ;
563+ } else {
564+ log_debug!( logger, "Polling payment completed but no preimage yet" ) ;
553565 }
554566 }
555567 TxStatus :: Failed => {
@@ -564,6 +576,8 @@ impl Spark {
564576 return ;
565577 }
566578 }
579+ } else {
580+ log_debug!( logger, "Polling payment not found yet" ) ;
567581 }
568582 let sleep_time = if i < 5 { Duration :: from_secs( 1 ) } else { Duration :: from_secs( i) } ;
569583 tokio:: time:: sleep( sleep_time) . await ;
@@ -703,15 +717,15 @@ impl From<TransferStatus> for TxStatus {
703717impl From < LightningSendStatus > for TxStatus {
704718 fn from ( o : LightningSendStatus ) -> TxStatus {
705719 match o {
706- LightningSendStatus :: LightningPaymentSucceeded => TxStatus :: Completed ,
720+ LightningSendStatus :: LightningPaymentSucceeded
721+ | LightningSendStatus :: TransferCompleted => TxStatus :: Completed ,
707722 LightningSendStatus :: TransferFailed
708723 | LightningSendStatus :: LightningPaymentFailed
709724 | LightningSendStatus :: UserSwapReturnFailed
710725 | LightningSendStatus :: PreimageProvidingFailed => TxStatus :: Failed ,
711726 LightningSendStatus :: Unknown
712727 | LightningSendStatus :: UserSwapReturned
713728 | LightningSendStatus :: PendingUserSwapReturn
714- | LightningSendStatus :: TransferCompleted
715729 | LightningSendStatus :: Created
716730 | LightningSendStatus :: RequestValidated
717731 | LightningSendStatus :: LightningPaymentInitiated
0 commit comments