Glossar / Lightning und Layer 2
Channel-Ankündigung
- Was ist eine Channel-Ankündigung?
- Eine Channel-Ankündigung ist die signierte Gossip-Nachricht, die dem Lightning-Netzwerk mitteilt, dass ein öffentlicher Kanal existiert, und mit vier Signaturen den Besitz des Finanzierungs-Outputs nachweist.
Jeder öffentliche Lightning-Kanal tritt über eine dieser Nachrichten in den Routing-Graphen ein, und pro Kanal kann nur eine gültige Ankündigung existieren. Sie kann nicht gesendet werden, bis die Finanzierungstransaktion sechs Bestätigungen hat, und die Peers vergessen den Kanal 72 Blöcke, nachdem der Output ausgegeben wurde. Das Ankündigen kostet Privatsphäre, weil die Nachricht den On-Chain-Output veröffentlicht, der Ihren Kanal finanziert, und ihn mit Ihrem Node-Schlüssel verknüpft.
So funktioniert es
Eine Channel-Ankündigung zu fälschen ist teuer, und genau das ist der Zweck des Designs.
Gossip zu versenden kostet nichts, ein Node könnte das Netzwerk also sonst mit erfundenen Kanälen überfluten. BOLT 7 verhindert das, indem jede Behauptung gegen die Blockchain überprüfbar wird. Die Nachricht, Typ 256, benennt eine short_channel_id, die auf einen bestimmten Output zeigt: drei Bytes Blockhöhe, drei Transaktionsindex, zwei Output-Index. Ein empfangender Node sucht diesen Output nach und verwirft die Ankündigung, sofern es sich nicht um einen nicht ausgegebenen P2WSH handelt, der an die beiden genannten Bitcoin-Schlüssel zahlt.
Vier Signaturen stehen am Anfang. Zwei stammen von den Node-Identitätsschlüsseln, zwei von den Finanzierungsschlüsseln, die den On-Chain-Output kontrollieren, bitcoin_key_1 und bitcoin_key_2. Alle vier signieren denselben doppelten SHA256-Hash, berechnet vom Byte-Offset 256 bis zum Ende der Nachricht. Die Zuordnung der Node-Schlüssel zu den Bitcoin-Schlüsseln beweist, dass die beiden Nodes, die den Kanal ankündigen, die beiden Parteien sind, die ihn finanziert haben, und nicht Fremde, die auf den Output von jemand anderem zeigen. node_id_1 muss außerdem der lexikografisch kleinere der beiden komprimierten Schlüssel sein, und ein empfangender Node muss jede Ankündigung ignorieren, die diese Reihenfolge falsch angibt.
Das Ankündigen ist optional und wird durch das Bit announce_channel beim Öffnen des Kanals festgelegt. Ist es gesetzt, tauschen die Peers announcement_signatures (Typ 259) aus, sobald die Finanzierungstransaktion tief genug ist, und danach kann jede der beiden Seiten das Ergebnis verbreiten. Ein Splice erzeugt eine neue Ankündigung für die neue Transaktion, weshalb Nodes 72 Blöcke warten, nachdem ein Finanzierungs-Output ausgegeben wurde, bevor sie den Kanal vergessen: Die Ausgabe könnte eine Größenänderung und nicht eine Schließung sein.
Wo Sie sie sehen
Channel-Ankündigungen sind das, was ein Lightning-Explorer liest, wenn er den Netzwerkgraphen zeichnet.
Der neben jedem Kanal angezeigte Bezeichner stammt direkt aus der Nachricht. Eine als 539268x845x1 geschriebene short_channel_id bedeutet Output 1 der Transaktion mit Index 845 in Block 539268, sodass jeder diesen Output on-chain prüfen kann. Die Ankündigung enthält nichts, was einem Eintrag ähnelt: keine Gebühr, keine Kapazität, keinen Betreibernamen. Ein Kanal ist erst nutzbar, wenn mindestens eine Seite eine channel_update mit ihren Gebühren und ihrem Ablauf-Delta sendet, und der Node-Name kommt separat in einer node_announcement.
Diese Trennung erklärt, warum Kanäle aus Explorern verschwinden, obwohl es sie noch gibt. Ist die neueste channel_update in einer der beiden Richtungen älter als zwei Wochen (1209600 Sekunden), kann ein Node den Kanal aus seiner Ansicht entfernen. Eine Ankündigung wird nie von selbst erneuert, ein Kanal bleibt also nur so lange auf der Karte, wie ein Betreiber seine Bedingungen weiter neu signiert.
Auf der Wallet-Seite begegnen Ihnen Channel-Ankündigungen vor allem durch ihre Abwesenheit. Ein Kanal muss nur angekündigt werden, wenn Fremde Zahlungen über ihn weiterleiten sollen, und eine Wallet auf dem Smartphone existiert, um auszugeben und zu empfangen, nicht um ein Zwischenschritt zu sein. Deshalb sind die praktischen Fragen in unseren Bewertungen von Phoenix und Muun die veröffentlichte Gebührentabelle und die Backup-Datei, nicht eine Position im öffentlichen Graphen.
Channel-Ankündigung vs. Kanalkapazität
Eine Channel-Ankündigung beweist, dass ein Kanal existiert, während die Kanalkapazität die Anzahl der Satoshis darin ist, und die Nachricht nennt überhaupt keinen Betrag. Ihre Felder sind vier Signaturen, ein Feature-Vektor, ein Chain-Hash, die kurze Kanal-ID und vier öffentliche Schlüssel. Wer eine Kapazitätsangabe nennt, hat die Ankündigung mit Chain-Daten verknüpft und den Wert des Outputs gelesen, auf den der Bezeichner zeigt. Deshalb hat ein nicht angekündigter Kanal eine Kapazität, aber keine öffentliche Angabe: Nichts teilt dem Netzwerk mit, welchen Output es lesen soll.