You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug: a failed send locks out a pre-restore invoice #1896
After a restore, a failed Spark send of a pre-restore invoice locks that invoice out on both rails until it expires.
Restore, then pay a still-valid invoice created before the restore. The operators show no send, so Spark sends it.
The send fails, for example with no route. The operators now report FAILED.
A retry over Spark or over the node reaches refuseUnverifiedRestoredInvoice, which reads FAILED as a send and throws RestoredInvoiceUnverified.
The user sees "Bitkit can't confirm this invoice wasn't paid before you restored your wallet" right after the app's own attempt failed.
The SDK returns FAILED only when every preimage request for the hash was returned. A live or completed request takes priority (send_status in breez/spark-sdk lightning_send_status.rs). So FAILED shows nothing is in flight or paid, which is already how earlierNodeSend reads a failed row.
To do
In SparkRepo.isUnsentPerOperators, count FAILED as unsent, and add a test for the retry after a failed send.
Start the new log line with a verb, for example "Found a '$status' Spark operator send of the pre-restore invoice".
Activity
ovitrif commentedon Nov 12, 2026
Also in scope: the
seedRestoredSendHashesKDoc inSparkRepo.ktstill describes the removed wait for Spark's first listing. From #1893 (review).ovitrif commentedon Nov 12, 2026
Milestone 3.2.0: this issue is a bug in the Spark restore hold (#1858), which ships in 3.2.0.