nips/83.md
2023-04-12 14:08:16 +01:00

2.0 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 could be easily made for nodes.

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