NIP-57: Zaps
NIP-57 definieert zaps, een manier om Lightning-betalingen te koppelen aan Nostr-identiteiten en content. De NIP standaardiseert zowel het verzoek om een zap-enabled invoice als het ontvangstbewijs-event dat wallets na betaling publiceren.
Hoe Het Werkt
- De client ontdekt het LNURL-endpoint van de ontvanger via profielmetadata of een
zaptag op het doel-event. - De client stuurt een ondertekend kind
9734zap request naar de LNURL-callback van de ontvanger, niet naar relays. - De gebruiker betaalt de invoice.
- De wallet server van de ontvanger publiceert een kind
9735zap receipt naar de relays die in het zap request staan. - Clients valideren en tonen de zap.
Zap Request (kind 9734)
Het zap request is een ondertekend event dat de betaler en het beoogde doel identificeert. Het bevat meestal:
ptag met de pubkey van de ontvangeretag met het event dat wordt gezapt (optioneel)amounttag in millisatoshisrelaystag met de lijst van relays waar het receipt moet worden gepubliceerd
Addressable content kan een a tag gebruiken in plaats van, of naast, een e tag. De optionele k tag legt het doel-kind vast.
Zap Receipt (kind 9735)
Gepubliceerd door de wallet server van de ontvanger na betalingsbevestiging. Het bevat:
- Het oorspronkelijke zap request in een
descriptiontag bolt11tag met de betaalde invoicepreimagetag die de betaling bewijst
Clients moeten het receipt valideren tegen de LNURL nostrPubkey van de ontvanger, het invoicebedrag en het oorspronkelijke zap request. Een receipt zonder die validatie is alleen een claim.
Trust and Tradeoffs
Private en Anonieme Zaps
Private zaps voegen daarbovenop een vertrouwelijkheidslaag toe. Een afzender kan de content van het zap request voor de ontvanger encrypten en een anon-tag op het outer request opnemen, zodat het relaynetwerk het betalingsdoel ziet maar de meegestuurde notitie niet kan lezen. Een anonieme zap gaat nog een stap verder: de client genereert voor het zap request zelf een nieuw ephemeral keypair, zodat het receipt nog steeds bewijst dat een betaling heeft plaatsgevonden, maar de ontvanger de zap niet aan de langlevende pubkey van de afzender kan koppelen.
Zap Goals en Splits
NIP-57 vormt de basis voor het zap-goalsysteem uit NIP-75. Een goal is een kind 9041-event dat een target amount en een relayset opgeeft waar receipts meetellen, en clients tellen de goal progress op door de gevalideerde bolt11-bedragen van gematchte kind 9735-events te sommeren.
Zap splits, gedefinieerd in een appendix van de NIP, laten een ontvanger een kind 0-profiel publiceren met meerdere gewogen zap-tags zodat een enkele zap-betaling atomair over meerdere pubkeys wordt verdeeld. Amethyst, Damus en noStrudel implementeren split-paying end-to-end.
Zaps zijn nuttig omdat ze betalingen zichtbaar maken binnen de sociale graph, maar het receipt wordt nog steeds gemaakt door de wallet-infrastructuur van de ontvanger. De specificatie zelf merkt op dat een zap receipt geen universeel betalingsbewijs is. Je kunt het het best begrijpen als een door de wallet ondertekende verklaring dat een invoice die aan een zap request was gekoppeld, is betaald.
Primaire bronnen:
Vermeld in:
- Newsletter #1: News
- Newsletter #2: News
- Newsletter #3: Notable Code Changes
- Newsletter #9: NIP Updates
- Newsletter #19: NIP Deep Dive
Zie ook: