Nostr Wallet Connect (NWC) je soubor společných pravidel popsaných v dokumentu NIP-47. Umožňuje aplikaci posílat požadavky Lightning peněžence přes síť Nostr. Přenosový server, zvaný relay, nese šifrované pokyny a odpovědi, nikoli samotné bitcoiny. Oprávnění i provedení plateb má na starosti služba peněženky.
Anna poslouchá podcast a chce autorovi poslat drobnou částku přes Lightning Network. S NWC může přehrávač požádat její peněženku o platbu přímo. Peněženka nejprve ověří oprávnění spojení a teprve potom provede povolený požadavek. NWC samo neurčuje, kdo drží bitcoinové klíče: na druhém konci může být její vlastní uzel i služba spravující prostředky za ni. Stejné tlačítko „Připojit peněženku“ proto neznamená stejnou míru kontroly nad penězi. A podle udělených práv může aplikace jednat i bez nového potvrzení každé jednotlivé platby. [1] [2]
Peněženka obvykle nabídne QR kód nebo textový spojovací údaj, technicky URI. Obsahuje veřejný klíč služby, adresu relay a secret, tedy soukromý klíč tohoto klientského spojení. Není to seed, výchozí tajná hodnota peněženky, ani její Seed Phrase, obnovovací slova. Přesto nejde o neškodný veřejný odkaz: kdo použitelnou kopii získá, může se službě prokazovat stejným oprávněním. Rozsah škody pak závisí na povolených funkcích a limitech. Pro různé aplikace je vhodné vytvářet oddělená spojení, aby šlo přístup rozlišit a jednotlivě zrušit; současně se tím omezuje jejich vzájemné propojení. [1]
Aplikace může chtít pouze zjistit zůstatek, nebo také posílat peníze. Tyto možnosti nejsou zaměnitelné. Veřejná zpráva info oznamuje, co služba podporuje; get_info vrací metody dostupné konkrétnímu spojení. Metoda je pojmenovaný příkaz: pay_invoice žádá o zaplacení, make_invoice vytvoří platební požadavek, lookup_invoice zjišťuje jeho stav a get_balance čte zůstatek. Patří sem i samotné get_info. Historie, keysend neboli platba bez předem vytvořené faktury a notifikace jsou volitelná rozšíření. Ani podpora nějakého příkazu na serveru tedy neznamená, že jej smí provést každá připojená aplikace. [1] [3] [5]
Anna může chtít dát přehrávači jen omezený rozpočet. Pokud služba nabízí limity částky, povolených metod či doby platnosti, musí je vynucovat ona sama. Číslo zobrazené pouze v přehrávači není ochrana proti aplikaci, která pošle jiný požadavek. Ověřte také, zda limit platí jednorázově nebo se obnovuje a jak služba započítává poplatky. Když Anna přestane aplikaci používat, má zrušit její oprávnění na straně peněženky. Pouhé smazání aplikace nebo spojení v jejím nastavení nestačí jako důkaz odvolání přístupu. Odvolání brání budoucím požadavkům, ale nevrací již dokončenou platbu. [1]
Lightning faktura je platební požadavek, například ve formátu BOLT11, ne potvrzení, že někdo zaplatil. NIP-47 vyjadřuje částky a poplatky v msat, tisícinách satoshi: 1000 msat = 1 sat. Záměna jednotek tak mění částku tisíckrát. Příkaz make_invoice pouze vytvoří požadavek. Úspěšné pay_invoice vrací preimage. Z této hodnoty se spočítá hash, krátký kontrolní údaj. Ten musí odpovídat platebnímu hashi ve faktuře; vrácená preimage tak slouží jako doklad dokončené platby. Chybová odpověď používá error. Stav lze dohledat pomocí lookup_invoice. Aplikace musí zpracovat skutečný výsledek, ne jen zobrazit úspěch po odeslání zprávy. [1]
Anna klepne na zaplacení, ale aplikace se nedočká odpovědi. Timeout, tedy vypršení čekání, ještě neříká, co se stalo s penězi. NWC používá pro požadavky a odpovědi pomíjivé události; odpojený relay nebo nedostupná služba mohou způsobit ztrátu zprávy. Mohla se však ztratit jen odpověď po už dokončené platbě. Proto nejprve ověřte stav přes lookup_invoice nebo přímo v peněžence. Ticho není potvrzením neúspěchu. Nový požadavek nelze považovat za automaticky bezpečné opakování původní akce; nejdřív je třeba zjistit její výsledek. [1]
Aplikace a peněženka si předávají šifrované zprávy. Současné vyjednání upřednostňuje nip44_v2, zatímco zastaralé nip04 zůstává kvůli kompatibilitě; chybějící značka encryption znamená starší režim. NIP-44 ale neposkytuje forward secrecy, ochranu dřívější komunikace při pozdějším úniku dlouhodobého klíče. Relay navíc může vidět druhy událostí, značky, veřejné klíče spojení i časování. Proto se pro NWC nemá používat hlavní identitní klíč, pod kterým člověk publikuje na Nostr. Oddělené klíče pomáhají omezit spojování plateb s veřejným profilem, nikoli zaručit úplnou anonymitu. [1] [4]
Pro běžné používání není nutné znát čísla zpráv, při vývoji integrace jsou ale důležitá. Info má kind 13194, požadavek 23194 a odpověď 23195. kind označuje druh události. Značka p určuje protistranu a značka e v odpovědi odkazuje na původní požadavek. Klient ověřuje podpis, očekávaný klíč služby, tuto vazbu a result_type, název příkazu, ke kterému výsledek patří. Nestačí vzít libovolnou zprávu z relay jako potvrzení. Jinak by se za výsledek platby mohla vydávat cizí odpověď nebo odpověď na jinou akci. [1]
Pro nejúplnější obraz čtěte toto heslo společně s Nostr, Lightning Network, BOLT 11, Peněženka, Private Key, Satoshi. Opačným směrem na něj odkazují také Nostr, BOLT 11.