From 92a16b39ec57a9c97b7ad85f797f24aa0bc0a7d9 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Tue, 31 Mar 2026 09:45:43 -0400 Subject: [PATCH] fix: don't delete transfer records on empty wallet-rpc response If wallet-rpc returns an empty response (transient network issue, daemon temporarily unavailable), seen_txids is empty and ALL stored InvoiceTransfer records for that invoice are deleted. When wallet-rpc recovers, transfers are re-created with new DB IDs. This guard only prunes transfers when we actually got data back. --- api/app/reconciler.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/api/app/reconciler.py b/api/app/reconciler.py index 320110f..b21eb3d 100644 --- a/api/app/reconciler.py +++ b/api/app/reconciler.py @@ -271,10 +271,13 @@ def _sync_invoice_transfers( stored.timestamp = transfer.timestamp stored.address = transfer.address changed = True - for stored in existing: - if stored.txid not in seen_txids: - db.delete(stored) - changed = True + # Only prune transfers if we actually got data back from wallet-rpc. + # An empty response (transient RPC glitch) should not wipe confirmed records. + if transfers: + for stored in existing: + if stored.txid not in seen_txids: + db.delete(stored) + changed = True return changed