nips/83.md
2023-04-12 13:39:33 +01:00

2.1 KiB

NIP-83

Wallet connect/bridge

draft optional author:arcbtc

Useful for clients wanting to intergrate non-custodal wallet features.

Intended for use with bitcoin, but could be used with any invoice payment system that can pay invoices/create invoices/check payment status.

Motivation

We wanted LNbits to have a funding source that could pay invoices/create invoices/check payment status all over nostr DMs. Simple plugins/middleware could be made for funding sources, that any wallet software could use over nostr.

Examples

There are two simple clients sending json over NIP04. These clients could be standalone or built into clients/services.

  1. funding source client: Connected to the funding source.

  2. service client: Built into service/client that wants wallet functions.

Permissions

In funding source client nostr pubkeys used by service client are given and permissions granted (such as read/create_invoice_only/pay_invoices)

Creating an invoice

service client sends create_invoice event:

{
   "create_invoice":{
      "amount":"int",
      "memo":"<Optional[str]>",
      "description_hash":"<Optional[bytes]>"
   }
}

funding source client checks the pubkey has permission and sends generated_invoice event:

{
   "generated_invoice":{
      "payment_hash":"<string>",
      "payment_request":"<string>"
   }
}

Paying an invoice

service client sends pay_invoice event:

{
   "pay_invoice":{
      "invoice":"<string>",
      "note":"<Optional[str]>"
   }
}

funding source client checks the pubkey has permission and attempts to pay the invoice.

Checking a payment in/out

service client sends check_payment event:

{
   "check_payment":{
      "payment_hash":"<string>"
   }
}

funding source client checks the pubkey has permission, checks the payment status and sends payment_status event:

{
   "payment_status":{
      "paid":"<bool>"
   }
}