Skip to content

Commit 58ed552

Browse files
committed
Fix syncing spark payments
1 parent cdc8352 commit 58ed552

1 file changed

Lines changed: 21 additions & 7 deletions

File tree

orange-sdk/src/trusted_wallet/spark.rs

Lines changed: 21 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,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 {
703717
impl 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

Comments
 (0)