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

2.1 KiB

NIP-83

Wallet connect/bridge

draft optional author:arcbtc author:blackcoffeexbt

Useful for clients wanting to intergrate wallet features, could be custodial or non-custodial or both.

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

Motivation

All bitcoin lightning wallet clients connected to nodes use http, they should also be able to use nostr.

Simple plugins/middleware/libraries could be easily made for existing nodes and lightning wallet software.

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>"
   }
}