Glossar / Lightning und Layer 2
Shutdown-Skript
- Was ist ein Shutdown-Skript?
- Ein Shutdown-Skript ist die On-Chain-Adresse, an die Ihr Lightning-Guthaben ausgezahlt wird, wenn ein Kanal kooperativ geschlossen wird, benannt in der Shutdown-Nachricht von BOLT 2 als roher scriptpubkey.
Jede Seite eines schließenden Kanals benennt ihr eigenes Ziel, und die Schließungstransaktion zahlt beide dort aus. BOLT 2 gibt diesem Nachrichtentyp die Nummer 38 und akzeptiert nur Skripte der Witness-Version 0, es sei denn, die Peers haben die Funktionsbits 26 und 27 ausgehandelt. Wer Lightning-Guthaben zurück in die Cold Storage bewegt, sollte dieses Ziel vor dem Schließen prüfen, nicht danach.
So funktioniert es
Ein Shutdown-Skript wird in einer BOLT-2-Nachricht des Typs 38 übertragen, die die Kanal-ID, eine Länge von zwei Bytes und dann die Skript-Bytes selbst enthält.
Jeder der beiden Peers kann diese Nachricht senden, und sobald keine Aktualisierungen mehr ausstehen, muss der andere mit einem eigenen Shutdown antworten. Ab diesem Punkt läuft der Kanal aus: Auf ein Shutdown darf kein update_add_htlc mehr folgen, und ein Node sollte sich weigern, ein danach eintreffendes HTLC weiterzuleiten. Die Nachricht kann vor channel_ready gesendet werden, sodass ein Kanal, dessen Finanzierungstransaktion noch bestätigt wird, früh aufgegeben werden kann.
Die Spezifikation ist eng darin, was das Skript sein darf. Zwei Formen sind immer zulässig: OP_0 und ein Push von 20 Bytes, eine pay to witness public key hash-Ausgabe, oder OP_0 und ein Push von 32 Bytes, pay to witness script hash. Witness-Versionen 1 bis 16, gefolgt von einem Push von 2 bis 40 Bytes, sind nur zulässig, wenn option_shutdown_anysegwit ausgehandelt wurde, die Funktionsbits 26 und 27, eine Taproot-Auszahlung hängt also davon ab, dass Ihr Peer sie unterstützt. Eine dritte Form kam mit option_simple_close, den Bits 60 und 61: OP_RETURN plus ein Push von 6 bis 75 Bytes, oder die Variante OP_PUSHDATA1 für 76 bis 80 Bytes, wobei die Obergrenze darin liegt, dass ein Skript OP_RETURN auf Bitcoin nur bis 83 Bytes standardkonform ist. Sie existiert, wenn Ihr Anteil zu klein ist, um eine Ausgabe zu rechtfertigen, und der Betrag muss dann null sein, er geht also als Gebühr an die Miner.
Ein Node kann sein Ziel auch beim Öffnen des Kanals festlegen, im TLV-Datensatz upfront_shutdown_script, Typ 0, von open_channel und accept_channel, Funktionsbits 4 und 5. Wenn beide Peers dies angekündigt haben und ein Skript mit einer Länge ungleich null angegeben wurde, muss ein späteres Shutdown, das etwas anderes nennt, die Verbindung scheitern lassen. BOLT 2 ist offen darüber, was das bringt: Die Spezifikation nennt die Vorabfestlegung "a weak commitment (a malevolent implementation tends to ignore specifications like this one!)" (eine schwache Festlegung: eine böswillige Implementierung neigt dazu, Spezifikationen wie diese zu ignorieren) und hält sie für eine inkrementelle Verbesserung, weil eine spätere Änderung des Ziels die Mitarbeit Ihres Peers erfordert.
Wo es auftaucht
Shutdown-Skripte gehören demjenigen, dem der Kanal gehört, und das sind nicht immer Sie.
Unter den 41 hier bewerteten Wallets vergleichen Sie Phoenix, bewertet mit 4,0, die einen echten eigenständigen Lightning-Node auf dem Smartphone betreibt, mit Wallet of Satoshi, bewertet mit 2,7 und mit einer Warnung wegen ihres verwahrenden Modus versehen. Bei Phoenix gehören die Kanäle Ihnen, ein kooperativer Abschluss setzt also eine Adresse, die Sie kontrollieren, in die Shutdown-Nachricht. Im verwahrenden Modus von Wallet of Satoshi, zurückgezogen aus den USA und der Europäischen Union, gehören die Kanäle dem Unternehmen, die Skripte nennen dessen Adressen, und was Sie halten, ist ein Anspruch und kein Schlüssel.
Der zweite Ort, an dem es auftaucht, ist ein Abschluss, der still scheitert. Alte Nodes können noch Nicht-SegWit-Shutdown-Skripte senden, und BOLT 2 merkt an, dass eine Schließungstransaktion, deren Nicht-SegWit-Ausgabe unter 546 Satoshis liegt, was möglich ist, wenn dust_limit_satoshis niedriger gesetzt wurde, die Miner wahrscheinlich nie erreichen wird. Es sind keine Guthaben gefährdet, aber der Kanal muss zwangsgeschlossen werden, statt abgerechnet zu werden. Unter option_simple_close ersetzt ein frisches closing_complete das vorherige, Gebühr und Ausgabe-Skript können also beide überarbeitet werden, es sei denn, die Vorab-Variante hat das Ziel beim Öffnen des Kanals eingefroren.
Shutdown-Skript vs. Zwangsschließung
Ein Shutdown-Skript entscheidet nur bei einem kooperativen Abschluss, wo das Geld landet.
Eine Zwangsschließung überspringt die Verhandlung: Sie veröffentlichen die neueste Commitment-Transaktion, und ihre Ausgaben zahlen an Schlüssel, die aus den beim Öffnen des Kanals ausgetauschten Basepoints abgeleitet sind, nicht an eine von Ihnen benannte Adresse. Das sorgfältig gesetzte Skript hat auf den einen Ausgang, der keine Zustimmung Ihres Peers benötigt, keine Wirkung. Legen Sie es für den Abschluss fest, den Sie beabsichtigen, und bewahren Sie ein Kanal-Backup für den auf, den Sie nicht beabsichtigen.