Skip to content

bug: restore hold ends on a wallet-only spark sync #1868

Closed

Description

@ovitrif

What happens

A restored wallet's hold on pre-restore invoices ends at Spark's first Synced event after the restore. Breez SDK 0.28.0 emits Synced and sets lastSyncedAt once the wallet sync succeeds, but payment history syncs separately. If that history sync is still incomplete, the seeded list of earlier sends can miss a send that another device made. The hold then ends, and the node can pay that invoice again.

Why the app can't close it now

GetInfoResponse has no payment-history sync state, so the app can't tell a wallet-only sync from a full one. Master's earlierLightningSend (SparkRepo.kt) already trusts the same signal.

What's needed

The SDK has to report when payment-history sync completes. The restore hold then ends on that signal instead of Synced.

Raised on #1858 (comment). The iOS app trusts the same signal (LightningService.swift, restore hold).

Activity

  1. added this to the 3.2.0 milestone on Nov 11, 2026
  2. ovitrif commented on Nov 11, 2026

    @ovitrif
    CollaboratorAuthor

    Fixed in a0e995a on #1858: for 7 days after a restore the node refuses a still-valid invoice from before the restore unless Spark's list shows it pending or paid, so a Synced that fired before the payment history synced no longer releases the hold.

  3. ovitrif commented on Nov 11, 2026

    @ovitrif
    CollaboratorAuthor

    Reopened: the fix (a0e995a) is on #1858, which is still open; this issue closes when that PR merges.

  4. self-assigned this
    on Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions