Glossar / Lightning und Layer 2
Gossip-Protokoll
- Was ist das Gossip-Protokoll?
- Das Gossip-Protokoll ist die Art und Weise, wie Lightning-Nodes signierte Kanal- und Node-Ankündigungen untereinander verbreiten, sodass jeder Node seine eigene Karte des Netzwerks aufbauen kann, ohne einen Server zu fragen.
Lightning hat kein Verzeichnis, daher teilen die Nodes einander mit, was existiert, und jeder Node führt seine eigene Kopie. BOLT 7 definiert dafür drei Nachrichten, und ein empfangender Node sollte einen Kanal ignorieren, dessen Finanzierungs-Output weniger als 6 Bestätigungen hat. Ihre Wallet findet eine Route, weil sie oder ein Node, dem sie vertraut, zuvor dieses Geplauder mitgehört hat.
So funktioniert es
Das Gossip-Protokoll transportiert drei Nachrichtentypen, und jeder muss etwas on-chain oder per Signatur beweisen, bevor ein Peer ihn weiterleitet.
channel_announcement (Typ 256) behauptet, dass ein Kanal existiert. Ein empfangender Node sucht den Finanzierungs-Output in der Blockchain: Eine Nachricht, deren Output nicht das erwartete P2WSH-Skript ist oder bereits ausgegeben wurde, muss ignoriert werden, und eine, deren Output weniger als 6 Bestätigungen hat, sollte ignoriert werden, es sei denn, sie ist so nah dran, dass der Node einfach bei den Blöcken im Rückstand sein könnte. Einen Kanal anzukündigen kostet daher eine echte On-Chain-Transaktion, und das ist das ganze Anti-Spam-Design: Niemand kann tausend Kanäle kostenlos erfinden.
node_announcement (Typ 257) trägt die eigenen Angaben des Betreibers. Nodes, die keinem bereits bekannten Kanal zugeordnet sind, werden ignoriert, "to avoid trivial denial of service attacks", sodass ein Betreiber ohne Einsatz nie auf die Karte von jemandem gelangt.
channel_update (Typ 258) trägt die Preise, einen pro Richtung, und es ist die Nachricht, die sich tatsächlich ändert. Gebühren und das Ablauf-Delta stehen hier, und wenn ein Betreiber eine Gebühr erhöht, empfiehlt die Spezifikation, dass derselbe Betreiber die alten Parameter noch mindestens 10 Minuten lang akzeptiert, weil die neue erst reisen muss.
Die Verbreitung ist bewusst gemächlich. Ein Node speichert, was er empfängt, ersetzt ältere Aktualisierungen derselben Quelle und sendet den Stapel einmal alle 60 Sekunden aus; die Spezifikation nennt das eine gestaffelte Rundsendung, und sie verhindert, dass ein einzelner ausgelasteter Betreiber die Bandbreite aller füllt.
Auch das Vergessen ist spezifiziert. Sobald der Finanzierungs-Output eines Kanals ausgegeben ist, wartet ein Node 72 Blockbestätigungen ab, bevor er den Kanal verwirft, damit ein Splice Zeit hat, sich anzukündigen, statt wie eine Schließung auszusehen. Wenn außerdem die neueste channel_update in einer der beiden Richtungen älter als zwei Wochen ist (1.209.600 Sekunden), kann ein Node den Kanal ohne Weiteres entfernen.
Wo Sie es sehen
Das Gossip ist der Grund, warum ein frisch gestarteter Lightning-Node eine Weile nutzlos ist und dann plötzlich nicht mehr.
Beim Verbinden fragt ein Node nach dem, was ihm fehlt: query_channel_range (Typ 263), um zu erfahren, welche Kanäle über eine Spanne von Blöcken hinweg existieren, query_short_channel_ids (261), um die konkreten zu holen, die er noch nie gesehen hat, und gossip_timestamp_filter (265), um ein Zeitfenster für alles danach Gesendete zu setzen. Diese letzte Nachricht ist ein Schalter und keine Präferenz: Solange Sie sie nicht senden, leitet ein Peer Ihnen nichts weiter, was er nicht selbst erzeugt hat, und so bleibt ein kleines Gerät klein.
Die Folgen erreichen Ihre Wallet in Form von Gebühren. Ein Routenangebot wird aus den channel_update-Nachrichten zusammengesetzt, die Ihre Wallet gerade hält, sodass eine veraltete Ansicht zu fehlgeschlagenen Versuchen und Preisen führt, die nicht dem entsprechen, was Ihnen angezeigt wurde. Smartphone-Wallets stützen sich auf die Karte von jemand anderem: Phoenix betreibt auf dem Smartphone einen echten selbstverwahrenden Node, verbindet sich aber über die eigenen Nodes von ACINQ, zu dem Preis, den unsere Bewertung festhält: ACINQ kennt das Ziel und den Betrag Ihrer Zahlungen. Ein verwahrendes Konto überspringt das Gossip vollständig, weil das Unternehmen für Sie weiterleitet.
Gossip-Protokoll vs. P2P-Nachrichten
Das Gossip-Protokoll läuft zwischen Lightning-Nodes; die P2P-Nachrichten von Bitcoin laufen zwischen Bitcoin-Nodes, und die beiden teilen nichts außer der Gewohnheit des Flutens.
Ein Bitcoin-Node leitet Transaktionen und Blöcke mit Befehlen wie inv, getdata und tx weiter und weiß nichts über die Kanäle von irgendjemandem. Lightning-Gossip ist ein separates Gespräch, das die Nachrichtentypen 256 bis 265 trägt, und es greift nur auf die Blockchain zurück, um zu prüfen, dass ein angekündigter Finanzierungs-Output echt und nicht ausgegeben ist. Keine Zahlung wird je per Gossip verbreitet: Beträge und Ziele reisen in Zwiebelpaketen, die Zwischen-Nodes nicht lesen können, sodass die öffentliche Karte sagt, wo Kanäle sind, nie, was durch sie geflossen ist.