LNURL-Pay verstehen: Vom Tip-Button zum Bolt11
Was ist LNURL-Pay?
LNURL-Pay ist ein Protokoll, das die Interaktion zwischen Lightning-Netzwerk-Wallets vereinfacht. Statt manuell eine Rechnung (Bolt11) zu generieren und zu teilen, ermöglicht LNURL-Pay dynamische Zahlungslinks. Auf sgit.space nutzen wir es für Tip-Buttons und direkte Zahlungen. Der Vorteil: Der Empfänger muss keine Rechnung vorab erstellen, der Sender scannt einfach einen QR-Code oder klickt einen Link.
Wie funktioniert der Tip-Button?
Ein LNURL-Pay-Tip-Button auf unserer Plattform ist ein vorbereiteter Endpunkt, der eine Zahlungsanfrage dynamisch generiert. Wenn ein Nutzer den Button klickt, wird eine GET-Anfrage an unseren Server gesendet. Dieser antwortet mit Metadaten wie Betrag, Beschreibung und einer Callback-URL. Die Wallet des Senders nutzt diese Daten, um eine Zahlung auszulösen – ohne manuelle Eingabe.
Vom LNURL zur Bolt11-Rechnung
Hinter den Kulissen wird aus dem LNURL-Link eine Bolt11-Rechnung erzeugt. Der Prozess läuft so ab: Die Wallet decodiert den LNURL, fragt unsere Callback-URL an und erhält eine signierte Bolt11-Rechnung zurück. Diese wird dann direkt bezahlt. Auf sgit.space verwenden wir dafür LND oder Core Lightning, um die Rechnungen zu generieren.
Self-Hosted Implementierung
Wir hosten den LNURL-Pay-Service selbst. Dafür läuft ein minimaler HTTP-Server, der LNURL-Anfragen verarbeitet und Bolt11-Rechnungen ausgibt. Die Integration erfolgt über unsere bestehende Lightning-Node-Infrastruktur. Wichtig ist, dass der Endpunkt öffentlich erreichbar ist und HTTPS verwendet, da Wallets keine unsicheren Verbindungen akzeptieren.
Sicherheitsaspekte
LNURL-Pay reduziert das Risiko von Phishing, da die Zahlungsdetails erst beim Callback generiert werden. Trotzdem müssen wir sicherstellen, dass unsere Callback-URLs gegen Missbrauch geschützt sind. Wir validieren jede Anfrage und begrenzen die Rate, um DoS-Angriffe zu verhindern. Zudem werden alle Bolt11-Rechnungen server-seitig signiert.
Praktische Anwendung auf sgit.space
Bei uns wird LNURL-Pay für zwei Hauptzwecke genutzt: Tip-Buttons unter Blog-Artikeln und direkte Spendenlinks. Die Nutzererfahrung ist deutlich smoother als bei manuellen Bolt11-Rechnungen. Technisch setzen wir auf ein schlankes Python-Skript, das LNURLs generiert und mit unserer Lightning-Node-API kommuniziert. Der Code ist open-source und auf unserem Git-Server einsehbar.
```