Skip to content

NIP-47 Add Hold Invoice Support #1913

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

frnandu
Copy link

@frnandu frnandu commented May 7, 2025

Rendered

This PR introduces support for hold invoices in the Nostr Wallet Connect (NIP-47) protocol.

Hold invoices enable more advanced payment workflows where the receiver must explicitly settle or cancel the invoice using the preimage. This allows for enhanced control and coordination in payment flows, such as conditional payments or escrow-like behavior.

Summary of Changes:

  • New RPC methods:

    • make_hold_invoice: Create a hold invoice using a pre-generated preimage and its payment hash.
    • settle_hold_invoice: Settle a hold invoice by providing the original preimage.
    • cancel_hold_invoice: Cancel a hold invoice using its payment hash.
  • New notification:

    • hold_invoice_accepted: Emitted when a payer accepts a hold invoice (i.e., locks in payment).
  • Extended example flow: A new section documents the end-to-end process for using hold invoices, including invoice creation, settlement, and cancellation.

Motivation:

Hold invoices are a key feature in Lightning-based applications that require more complex transaction logic, such as:

  • Pay-to-unlock content
  • Marketplace escrow systems
  • Payment gating and tokenized actions

This addition expands the versatility and usability of NWC while maintaining backward compatibility with existing methods.

Implementations and usages:

Copy link
Contributor

@Semisol Semisol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see review

@rolznz
Copy link
Contributor

rolznz commented May 8, 2025

Implemented in Alby JS SDK: getAlby/js-sdk#382

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants