nips/83.md

84 lines
1.8 KiB
Markdown
Raw Normal View History

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
2023-04-12 08:33:02 -04:00
We wanted [LNbits](https://github.com/lnbits/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
2023-04-12 08:33:02 -04:00
There are two simple clients sending json over [NIP04](https://github.com/nostr-protocol/nips/blob/master/04.md). THese clients could be standalone or built into clients/services.
1. `funding source client`: Attached to the funding source, the other built into another service/client.
2. `service client`: Built into a service.
### Creating an invoice
`service client` sends `create_invoice` event:
```json
2023-04-12 08:27:24 -04:00
{
"create_invoice":{
"amount":"int",
"memo":"<Optional[str]>",
"description_hash":"<Optional[bytes]>"
}
}
```
`funding source client` checks the pubkey has permission and sends `generated_invoice` event:
```json
2023-04-12 08:27:24 -04:00
{
"generated_invoice":{
"payment_hash":"<string>",
"payment_request":"<string>"
}
}
```
### Paying an invoice
`service client` sends `pay_invoice` event:
```json
2023-04-12 08:27:24 -04:00
{
"pay_invoice":{
"invoice":"<string>",
"note":"<Optional[str]>"
}
}
```
### Checking a payment in/out
`service client` sends `check_payment` event:
```json
2023-04-12 08:27:24 -04:00
{
"check_payment":{
"payment_hash":"<string>"
}
}
```
`funding source client` checks the pubkey has permission, checks the payment status and sends `payment_status` event:
```json
2023-04-12 08:27:24 -04:00
{
"payment_status":{
"paid":"<bool>"
}
}
```