Glossar / Lightning und Layer 2
Route Hint
- Was ist ein Route Hint?
- Ein Route Hint ist ein Eintrag in einer Lightning-Rechnung, der einen öffentlichen Node, einen Kanal und dessen Gebühren benennt, damit ein Zahler einen Empfänger erreichen kann, dessen eigene Kanäle nicht angekündigt sind.
Ein privater Kanal erscheint nie im öffentlichen Gossip-Graphen, deshalb muss die Rechnung das letzte Teilstück der Route selbst mitführen. BOLT 11 macht einen Hint verpflichtend, wenn der Zahlungsempfänger keinen öffentlichen Kanal hat, und jeder Hop kostet 51 Byte: Node-ID, Kanal-ID, Grundgebühr, proportionale Gebühr, CLTV-Delta. Eine Auszahlung an eine Wallet auf dem Smartphone ohne angekündigten Kanal funktioniert nur, weil diese Bytes vorhanden sind.
Wie es funktioniert
Ein Route Hint reist im getaggten Feld von BOLT 11, das mit dem Zeichen r geschrieben wird und eine Liste statt eines einzelnen Werts enthält.
Jeder Eintrag besteht aus fünf aneinandergereihten Werten: einem 264-Bit-pubkey, einem 64-Bit-short_channel_id, einem 32-Bit-fee_base_msat, einem 32-Bit-fee_proportional_millionths und einem 16-Bit-cltv_expiry_delta. Das sind 408 Bit, genau 51 Byte pro Hop. Die Einträge bilden eine Vorwärtsroute von einem öffentlichen Node zum Zahlungsempfänger, und jeder pubkey benennt den Node am Anfang seines Kanals, nicht am Ende.
Die letzten drei Werte sind die, die ein öffentlicher Node in channel_update nach BOLT 7 verbreiten würde. Ein privater Kanal verbreitet nichts, deshalb ist die Rechnung die einzige Stelle, an der ein Zahler erfährt, was dieser Hop verlangt.
Die Regel für den Aussteller ist eng gefasst: Ist kein öffentlicher Kanal mit dem Schlüssel des Zahlungsempfängers verbunden, muss die Rechnung mindestens ein r-Feld enthalten. Ein Aussteller kann mehrere davon aufnehmen, um alternative Routen anzubieten, die bevorzugte zuerst. Die Obergrenze ist das getaggte Feld selbst, dessen Daten höchstens 1023 Gruppen von 5 Bit, also 639 Byte, umfassen dürfen, was Platz für höchstens zwölf Hops in einem Feld lässt.
Hints sind ein Hinweis und keine Anweisung: Der Zahler kann die angegebene Abfolge von Kanälen verwenden, und die Spezifikation nennt das Feld "limited routing assistance". Das Route Blinding in BOLT 4 ist die spätere Antwort auf dasselbe Problem. Statt einer offenen Node-ID und Kanal-ID übergibt der Empfänger dem Absender einen Einstiegspunkt sowie angepasste Node-IDs und Datenblöcke, die für jeden Hop verschlüsselt sind, sodass der Absender einen nutzbaren Pfad erhält, ohne zu erfahren, wer darauf liegt.
Wo sie auftauchen
Route Hints sind das, was ein Rechnungsdecoder als zusätzliche Routing-Informationen für eine private Route anzeigt.
Der Mainnet-Testvektor der Spezifikation selbst ist eine Rechnung über 20 Milli-Bitcoin, die über zwei per Hint angegebene Hops geleitet wird: Kanal 66051x263430x1800 mit einer Grundgebühr von 1 Millisatoshi, 20 Teilen pro Million und einem CLTV-Delta von 3 Blöcken, danach 197637x395016x2314 mit 2 Millisatoshi, 30 Teilen pro Million und 4 Blöcken. Diese beiden Hops belegen 164 der Bech32-Zeichen der Rechnung, mehr als der Zahlungs-Hash und das Zahlungsgeheimnis zusammen.
Dieselbe Struktur tritt in der Praxis auf. Phoenix, eine der 41 Wallets, die diese Website bewertet, hält seine Kanäle mit ACINQ statt mit dem offenen Graphen, und wo diese Kanäle nicht angekündigt werden, verpflichtet die obige Regel jede Rechnung, den Node von ACINQ zu benennen. Die eigenen FAQ von ACINQ, zitiert in dieser Bewertung, räumen bereits ein, dass ACINQ Ziel und Betrag Ihrer Zahlungen kennt; ein Hint dehnt diese Offenlegung nach außen aus, denn wer Ihnen zahlt, erfährt, bei welchem Anbieter Sie Ihr Guthaben halten. Lassen Sie sich per Lightning von einer Börse wie Strike auszahlen, so ist es die Börse als Zahler, die die Grund- und die proportionale Gebühr des per Hint angegebenen Hops trägt, so wie sie in der Rechnung Ihrer Wallet steht.
Route Hint vs. eingehende Liquidität
Ein Route Hint sagt einem Zahler, wie er Sie findet; die eingehende Liquidität entscheidet, ob die Zahlung hineinpasst, wenn sie ankommt.
Die beiden scheitern auf Weisen, die von außen identisch aussehen, und nur eine lässt sich durch Bearbeiten einer Rechnung beheben. Ein Hint kann einwandfrei gebildet sein und die richtigen Gebühren nennen, und die Zahlung scheitert trotzdem am letzten Hop, weil Ihre Seite dieses Kanals keinen Platz hat. Phoenix veröffentlicht den Preis dafür, das zu beheben: Der Empfang ist kostenlos, wenn Sie bereits eingehende Liquidität haben, und kostet 1 % plus Mining-Gebühren, wenn die Wallet on chain gehen muss, um Platz zu schaffen. Scheitert eine Zahlung, während der Absender darauf besteht, die Route sei gefunden worden, prüfen Sie die Kapazität, bevor Sie die Rechnung verantwortlich machen.