Zum Inhalt springen
buybitcoinsmart

Glossar / Lightning und Layer 2

LNURL

Was ist LNURL?
LNURL ist eine Familie kleiner Webprotokolle, mit denen eine Lightning-Wallet über einen einzigen kodierten Link eine frische Rechnung, eine Auszahlung oder eine Anmeldeaufforderung von einem Server abrufen kann.

Lightning-Rechnungen laufen ab und können nur einmal bezahlt werden, was sie zum Ausdrucken oder Veröffentlichen unhandlich macht. LNURL löst das, indem es eine HTTPS-Anfrage vor die Rechnung setzt: Ihre Wallet fragt einen Server in dem Moment nach der Zahlungsanforderung, in dem Sie zahlen wollen. Die Spezifikationen stehen außerhalb der BOLTs und sind ab LUD-01 aufwärts nummeriert.

So funktioniert es

LNURL macht aus einem statischen Link eine laufende Unterhaltung zwischen einer Wallet und einem Server.

Der Link selbst ist der ganze Trick. In seiner ursprünglichen Form, LUD-01, wird eine HTTPS-URL mit dem Präfix lnurl in bech32 kodiert, was einen Block ergibt, der es übersteht, als QR-Code gedruckt oder in ein Chat-Fenster getippt zu werden. Die neuere Form LUD-17 verzichtet auf die Kodierung und verwendet einfache Schema-Präfixe wie lnurlp: vor einer gewöhnlichen URL, was kürzer und leichter zu prüfen ist. So oder so dekodiert die Wallet den Link, führt eine GET-Anfrage aus und erhält JSON, das ihr sagt, um welche Art von Interaktion es sich handelt.

Das Feld tag in diesem JSON entscheidet alles Weitere. LUD-06 definiert payRequest, den Zahlungsablauf: Der Server gibt eine Callback-URL sowie minSendable und maxSendable zurück, beide in Millisatoshi, und dazu einen Metadaten-String, den die Wallet anzeigt. Sie wählen einen Betrag, die Wallet ruft die Callback-URL mit diesem Betrag auf, und der Server gibt eine frisch erzeugte BOLT11-Rechnung über genau diese Summe zurück. LUD-03 definiert withdrawRequest, der in die andere Richtung läuft: Der Server bietet Geld an und die Wallet liefert eine Rechnung, um es zu empfangen. LUD-02 fordert einen Kanal von einem Peer an. LUD-04 definiert auth, wobei die Wallet eine Aufforderung mit einem pro Domain abgeleiteten Schlüssel signiert, was einige Lightning-Seiten für die Anmeldung ohne Passwort nutzen.

Die Sicherheitseigenschaft, die es zu verstehen lohnt, ist eng begrenzt. LNURL garantiert, dass die Rechnung von der Domain im Link stammt und dass ihr Betrag dem entspricht, was Sie bestätigt haben, weil die Wallet die zurückgegebene Rechnung vor der Zahlung prüft. Über die Frage, wer diese Domain steuert, garantiert es nichts. Wer an einem Marktstand einen LNURL-Code scannt, der über einen echten geklebt wurde, zahlt an den Server des Angreifers, und die Zahlung gelingt genau wie vorgesehen.

Wo Sie es sehen

Die meisten Menschen begegnen LNURL, ohne das Wort je zu sehen.

Trinkgeld- und Spenden-Seiten nutzen LNURL-pay hinter einem QR-Code, weshalb derselbe gedruckte Code für hundert verschiedene Kunden mit hundert verschiedenen Beträgen funktioniert. Werbegeschenke auf Bitcoin-Konferenzen und Faucet-Karten nutzen LNURL-withdraw: Sie scannen, Ihre Wallet erzeugt still eine Rechnung, und die Sats kommen ganz ohne sichtbare Rechnung an. Einige Lightning-Wallets und Webdienste nutzen LNURL-auth als ihr gesamtes Anmeldesystem.

Die größte Verbreitung ist indirekt. Eine Lightning-Adresse, die Form user@domain, ist in LUD-16 definiert und baut direkt auf LNURL-pay auf: Die Adresse wird in einen bekannten HTTPS-Pfad übersetzt, und von dort ist der Ablauf ein gewöhnliches LUD-06. Wenn Ihre Wallet Lightning-Adressen unterstützt, spricht sie bereits LNURL.

Die wichtigste Einschränkung ist die Verfügbarkeit. Weil ein Webserver dazwischensteht, ist ein LNURL-Code nur so zuverlässig wie dieser Server und sein TLS-Zertifikat. Eine BOLT11-Rechnung kann, einmal erzeugt, auch dann bezahlt werden, wenn der Server offline ist; ein LNURL-Link nicht.

LNURL vs. BOLT11-Rechnung

LNURL ist ein Weg, eine Zahlungsanforderung zu erhalten; eine BOLT11-Rechnung ist die Zahlungsanforderung. Dieser eine Unterschied erklärt ihre Eigenschaften. Eine Rechnung ist in sich geschlossen, vom Empfänger-Node signiert, eine festgelegte Zeit gültig und einmal bezahlbar. Ein LNURL-Link enthält keinen Betrag, keinen Payment-Hash und keine Signatur, bleibt unbegrenzt gültig und funktioniert für beliebig viele Zahler, weil jeder eine neue Rechnung auslöst. Drucken Sie eine Rechnung, und sie stirbt innerhalb einer Stunde. Drucken Sie einen LNURL-Code, und er funktioniert weiter, bis die Domain es nicht mehr tut.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Ist LNURL Teil der Lightning-Spezifikation?

Nein. Die BOLTs definieren das Lightning-Protokoll selbst, während LNURL eine separate Sammlung von Dokumenten ist, die ab LUD-01 aufwärts nummeriert und in einem eigenen Repository gepflegt wird. Die Unterstützung in Wallets ist freiwillig und unterschiedlich.

Ist das Scannen eines LNURL-Codes sicher?

Es ist sicher vor Manipulation, nicht vor Austausch. Ihre Wallet prüft, dass die Rechnung von der Domain im Link stammt und dem Betrag entspricht, den Sie bestätigt haben, aber ein physisch gegen den eines Angreifers getauschter Code zahlt an den Angreifer, genau wie vorgesehen.

Verwandte Begriffe

Mehr zum Thema Lightning und Layer 2

Diese Seite auf Englisch lesen