Glossar / Lightning und Layer 2
BOLT11-Rechnung
Auch bekannt als Lightning-Rechnung, BOLT 11.
- Was ist eine BOLT11-Rechnung?
- Eine BOLT11-Rechnung ist die lange Zeichenkette, die mit lnbc beginnt und die eine Lightning-Wallet erzeugt, um eine Zahlung anzufordern; sie kodiert den Betrag, einen Zahlungs-Hash, eine Ablauffrist und eine Signatur.
Jede Lightning-Zahlung beginnt mit einer dieser Rechnungen. Die Rechnung legt einen Zahlungs-Hash von 256 Bit fest, den nur der Empfänger entsperren kann, und sie läuft nach einer Stunde ab, sofern der Aussteller nichts anderes angibt. Deshalb ist ein Screenshot eines alten QR-Codes nutzlos. Eine solche Rechnung zu bezahlen ist insofern sicher, als das Geld entweder den genannten Node erreicht oder zu Ihnen zurückkommt.
So funktioniert es
Eine BOLT11-Rechnung ist eine bech32-Zeichenkette mit einem Präfix, das das Netzwerk benennt, und einem Rumpf aus getaggten Feldern.
Das Präfix, der sogenannte für Menschen lesbare Teil, ist lnbc im Mainnet, lntb im Testnet, lntbs im Signet und lnbcrt im Regtest. Unmittelbar danach folgt der Betrag, geschrieben als Zahl plus Multiplikatorbuchstabe: m für Tausendstel eines Bitcoin, u für Millionstel, n für Milliardstel und p für Billionstel. So verlangt lnbc2500u 0,0025 Bitcoin. Lässt man den Betrag ganz weg, entsteht eine offene Rechnung, die der Zahler ausfüllt.
Der Rumpf ist eine Folge getaggter Felder, jedes mit einem einzelnen Zeichen als Tag, einer Länge und einem Wert. Zwei sind Pflicht: der Zahlungs-Hash, Tag p, 256 Bit geschrieben als 52 bech32-Zeichen, und das Zahlungsgeheimnis, Tag s, weitere 52 Zeichen, die der Zahler in der letzten Onion-Nutzlast zurückmelden muss. BOLT 11 weist den Aussteller an, genau eines von jedem aufzunehmen, und den Leser, die Zahlung sofort scheitern zu lassen, wenn kein gültiges s-Feld vorhanden ist. Danach kommen die optionalen: eine Beschreibung oder, für lange Beschreibungen, ein Hash der Beschreibung; ein Ablauf, standardmäßig 3600 Sekunden; ein Mindest-Delta für den finalen CLTV-Ablauf, standardmäßig 18 Blöcke, also der Sicherheitsabstand, den der Empfänger auf dem letzten Sprung möchte; eine Node-ID des Zahlungsempfängers; eine alternative On-Chain-Adresse; und Routing-Hinweise, die dem Zahler sagen, wie er einen Node erreicht, dessen Kanäle nicht angekündigt sind.
Das Ganze ist signiert. Die Signatur umfasst 520 Bit, einen Wert von 64 Byte plus einem Wiederherstellungs-Byte, und das ermöglicht einer Wallet, das Zahlungsziel aus der Rechnung abzuleiten, auch wenn kein Node-ID-Feld vorhanden ist. Am Ende steht eine sechs Zeichen lange bech32-Prüfsumme, sodass ein falsch getipptes Zeichen erkannt wird, statt Geld ins Nichts zu senden.
Der Zahlungs-Hash ist der Mechanismus, der eine Rechnung zu mehr als einer Textdatei macht. Der Empfänger erzeugt ein zufälliges Preimage, hasht es und setzt den Hash in die Rechnung. Jeder Sprung auf der Route bindet den weitergeleiteten Betrag an denselben Hash, und erst die Offenlegung des Preimages gibt das Geld frei. Eine abgewickelte Zahlung hinterlässt beim Zahler daher ein Preimage, dessen Hash zur Rechnung passt, ein kryptografischer Beleg, den kein Händler glaubhaft abstreiten kann.
Warum das beim Bitcoin-Kauf wichtig ist
Bei einer Rechnung passieren mehrere vermeidbare Fehler, wenn Sie von einer Börse auszahlen.
Der erste ist der Ablauf. Auszahlungsvorgänge bei Börsen können Minuten dauern, und eine Rechnung, die am Anfang eines langsamen Vorgangs erzeugt wurde, kann bei der Zahlung bereits abgelaufen sein. Scheitert eine Lightning-Auszahlung ohne erkennbaren Grund, erzeugen Sie die Rechnung in Ihrer Wallet neu, bevor Sie annehmen, die Börse sei defekt. Der Standardwert ist eine Stunde, aber Wallets, die schnelle Zahlungen erwarten, setzen ihn oft auf zehn oder fünfzehn Minuten.
Der zweite ist der Betrag. Eine Rechnung mit Betrag kann nur über diesen Betrag bezahlt werden, was genau Ihrem Wunsch entspricht, denn es schließt die Möglichkeit aus, eine zusätzliche Null zu tippen. Eine Rechnung ohne Betrag, manchmal offene Rechnung oder Rechnung mit Nullbetrag genannt, ist bequem für Spenden und gefährlich in einem Auszahlungsvorgang. Bevorzugen Sie die Version mit der fest eingebauten Zahl.
Der dritte ist die Wiederverwendung. Eine BOLT11-Rechnung ist konstruktionsbedingt für eine einmalige Nutzung gedacht. Veröffentlicht man eine auf einer Spendenseite, scheitert die Zahlung des zweiten Spenders entweder oder zahlt bei einem schlecht gebauten Empfänger erneut den Hash des ersten Spenders. Genau dieses Problem sollten BOLT12-Angebote lösen, weshalb diese Spezifikation im September 2024 in den Lightning-Standard aufgenommen wurde, der erste neue BOLT seit 2017. Solange Ihre Wallet und Ihr Gegenüber Angebote nicht beide unterstützen, ist eine Lightning-Adresse die praktische Möglichkeit, ein wiederverwendbares Ziel zu veröffentlichen.
Prüfen Sie schließlich, ob die Börse Lightning tatsächlich unterstützt, bevor Sie damit planen. Strike, die diese Website bewertet, unterstützt Auszahlungen sowohl über Lightning als auch On-Chain. Viele der Plattformen in unserem Börsenvergleich tun das nicht, und dort ist die günstigste Art, kleine Beträge zu bewegen, sie nicht oft zu bewegen.
Eine Rechnung Feld für Feld lesen
Zerlegt man eine kurze Rechnung, sieht sie nicht mehr wie Rauschen aus.
Eine Zeichenkette, die mit lnbc1500n beginnt, sagt Ihnen zwei Dinge, bevor Sie irgendetwas dekodieren: Es ist eine Mainnet-Rechnung, und sie verlangt 1500 Nanobitcoin, also 0,0000015 Bitcoin oder 150 Satoshi. Danach folgt ein Zeitstempel, dann die getaggten Felder. Ein d-Feld trägt eine kurze Beschreibung wie "table 4"; ein x-Feld von 600 würde den Ablauf auf zehn Minuten statt der standardmäßigen Stunde setzen; ein c-Feld würde das finale CLTV-Delta von 18 Blöcken überschreiben, wenn der Empfänger einen größeren Sicherheitsabstand möchte.
Hat der Node des Empfängers keine öffentlichen Kanäle, trägt ein r-Feld einen Routing-Hinweis: die Node-ID eines gut vernetzten Peers, die zu verwendende kurze Kanal-ID sowie Gebühr und Delta dieses Peers. Ohne ihn würde Ihre Wallet den öffentlichen Graphen prüfen, keinen Pfad sehen und aufgeben. Deshalb sind Rechnungen aus mobilen Wallets oft deutlich länger als Rechnungen von großen öffentlichen Nodes.
BOLT11-Rechnung vs. Bitcoin-URI
Eine BOLT11-Rechnung ist eine Lightning-Zahlungsanforderung; ein Bitcoin-URI ist eine On-Chain-Zahlungsanforderung. Die URI-Form, bitcoin: gefolgt von einer Adresse und optionalen Parametern, zeigt auf die Blockchain und kann von jeder Wallet, beliebig oft und über jeden Betrag bezahlt werden. Eine Rechnung zeigt auf einen Node, läuft ab und ist für eine einmalige Zahlung gedacht. Wallets zeigen zunehmend einen einheitlichen QR-Code, der beides enthält, sodass der Zahler wählen kann, doch die beiden Nutzlasten sind getrennte Standards mit getrennten Fehlerarten.
BOLT11-Rechnung vs. Lightning-Adresse
Eine BOLT11-Rechnung ist die Zahlungsanforderung selbst; eine Lightning-Adresse ist eine Möglichkeit, eine abzuholen. Tippt man eine Adresse wie you@example.com in eine Wallet, löst das eine HTTPS-Anfrage an diese Domain aus, die mit einer frisch erzeugten BOLT11-Rechnung über den von Ihnen gewählten Betrag antwortet. Die Adresse ist wiederverwendbar und für Menschen lesbar, weil sie überhaupt keine Zahlungsanforderung ist: Sie ist ein Verweis auf einen Server, der eine auf Anfrage erzeugt.