Skip to content

Commit b02a0d6

Browse files
committed
Fix syncing spark payments
1 parent cdc8352 commit b02a0d6

1 file changed

Lines changed: 20 additions & 7 deletions

File tree

orange-sdk/src/trusted_wallet/spark.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use ldk_node::bitcoin::hashes::sha256::Hash as Sha256;
1111
use ldk_node::lightning::util::logger::Logger as _;
1212
use ldk_node::lightning::util::persist::KVStore;
1313
use 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};
1515
use ldk_node::lightning_invoice::Bolt11Invoice;
1616
use ldk_node::lightning_types::payment::{PaymentHash, PaymentPreimage};
1717
use 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 {
703716
impl 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

Comments
 (0)