Zum Inhalt springen
buybitcoinsmart

Glossar / Lightning und Layer 2

Kurze Kanal-ID

Auch bekannt als scid.

Was ist eine kurze Kanal-ID?
Eine kurze Kanal-ID ist der 8 Byte große Zeiger, mit dem Lightning einen Kanal benennt und der die Blockhöhe der Finanzierungstransaktion, deren Index in diesem Block und den Index des Outputs packt.

Lightning benennt einen öffentlichen Kanal danach, wo sein Finanzierungs-Output in der Blockchain liegt, nicht nach einem beliebigen Label. Drei Bytes tragen die Blockhöhe, drei den Transaktionsindex und zwei den Output-Index, insgesamt also 64 Bit, für Menschen geschrieben als 539268x845x1. Diese Koordinate ist es, die es Ihnen erlaubt, einen Kanal, durch den Ihre Wallet routet, gegen die Chain zu prüfen, ohne irgendeinem Dashboard zu vertrauen.

Wie es funktioniert

Die drei Bestandteile einer kurzen Kanal-ID werden mit dem höchstwertigen zuerst aneinandergehängt: die Blockhöhe der Finanzierungstransaktion, der Index dieser Transaktion innerhalb des Blocks und der Index des Outputs, der den Kanal bezahlt. Die festen Breiten begrenzen die Höhe und den Transaktionsindex auf 16.777.215 und den Output-Index auf 65.535.

Für eine Person geschrieben werden die Zahlen dezimal gedruckt und mit einem kleinen Buchstaben x verbunden, sodass ein Kanal am Output 1 der Transaktion mit Index 845 im Block der Höhe 539.268 539268x845x1 ist. Die Gründe der Spezifikation: Ein kleines x ist in den meisten Schriftarten sichtbar kleiner als eine Ziffer, sodass das Auge die Teile trennt, und ein Doppelklick markiert die ganze Kennung.

Gepackt ist sie eine einfache Zahl von 64 Bit, und der Testvektor von BOLT 11 führt sie vor: Der Route Hint 66051x263430x1800 ist die Bytefolge 01 02 03 04 05 06 07 08 in dieser Reihenfolge, denn 66051 ist 0x010203, 263430 ist 0x040506 und 1800 ist 0x0708.

Da sie eine Position und kein Hash ist, stimmt eine kurze Kanal-ID nicht mehr, wenn sich der Block ändert, den sie benennt. Deshalb wird ein Kanal erst angekündigt, wenn seine Finanzierungstransaktion mindestens 6 Bestätigungen hat, und deshalb sollte ein Node eine Ankündigung ignorieren, deren Output weniger hat. Splicing verschiebt die Kennung ebenfalls: Ein gespliceter Kanal wird erneut unter der kurzen Kanal-ID der Splice-Transaktion angekündigt, während Nodes Zahlungen weiterleiten, die noch die ältere verwenden.

Ein Kanal, den niemand angekündigt hat, hat keine öffentliche Kennung, daher geben sich die Peers gegenseitig einen Alias; eine Aktualisierung, die einen trägt, muss ihr dont_forward-Flag setzen und darf aus Gründen der Privatsphäre niemals weitergegeben werden.

Wo Sie sie sehen

Kurze Kanal-IDs sind die Adressierungsschicht des Lightning-Gossip, und sie erscheinen in jeder Nachricht über einen bestimmten Kanal.

Der Nachrichtentyp 259, announcement_signatures, trägt eine, wenn zwei Peers sich darauf einigen, ihren Kanal zu veröffentlichen. Typ 256, channel_announcement, trägt die, mit der jeder andere Node den Finanzierungs-Output auf der Chain findet. Typ 258, channel_update, wiederholt sie bei jeder Änderung von Gebühr oder Ablauf, einmal pro Richtung. Typ 261, query_short_channel_ids, fragt einen Peer nach den Ankündigungen hinter einer Liste von ihnen, gesendet als aufsteigendes Array unter dem Kodierungsbyte 0; das Kodierungsbyte 1 bedeutete einst zlib-Kompression und ist jetzt gänzlich verboten. Ein Node darf jeden Kanal ausmustern, dessen neueste Aktualisierung in einer der beiden Richtungen älter als zwei Wochen ist, 1.209.600 Sekunden.

Die eine Stelle, an der ein gewöhnlicher Nutzer auf eine trifft, ist eine Zahlungsanforderung: Das Feld r einer BOLT 11-Rechnung trägt Route Hints, und jeder Hop ist ein öffentlicher Node-Schlüssel, eine kurze Kanal-ID von 64 Bit, zwei Gebührenzahlen und ein Ablauf-Delta. Das durchgerechnete Beispiel der Spezifikation zeigt auf 589390x3312x1.

Kurze Kanal-ID vs. Outpoint

Eine kurze Kanal-ID und ein Outpoint benennen beide einen Transaktions-Output, und sie tun es aus entgegengesetzten Richtungen. Ein Outpoint ist 36 Byte groß, eine Transaktions-ID von 32 Byte gefolgt von einem Index von 4 Byte, und benennt den Output über die Transaktion, die ihn erzeugt hat; eine kurze Kanal-ID ist 8 Byte groß und benennt denselben Output danach, wo er gelandet ist.

Es ist eine Abwägung zwischen Größe und Stabilität. Ein Outpoint ist gültig, sobald eine Transaktion existiert, auch unbestätigt, und ändert sich nie. Eine kurze Kanal-ID existiert erst, wenn die Transaktion in einem Block ist, und eine Reorganisation, die sie an einer anderen Höhe oder Position erneut mint, ergibt eine andere Kennung für denselben Kanal. Lightning akzeptiert das, weil die Koordinate zugleich die Anweisung ist, den Output zu finden, und 8 Byte pro Kanal per Gossip weit günstiger zu verbreiten sind als 36.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Kann ich einen Lightning-Kanal anhand seiner kurzen Kanal-ID in einem Block-Explorer nachschlagen?

Ja. Teilen Sie die Kennung bei jedem Buchstaben x: Die erste Zahl ist die Blockhöhe, die zweite ist der Index der Transaktion innerhalb dieses Blocks und die dritte ist der Index des Outputs, der den Kanal finanziert. Diese drei Zahlen bringen Sie in jedem Explorer, der die Transaktionen eines Blocks der Reihe nach auflistet, zur Finanzierungstransaktion.

Warum hat sich die kurze Kanal-ID eines Kanals geändert?

Fast immer, weil der Kanal gespliced wurde. Ein Splice gibt den alten Finanzierungs-Output in einen neuen aus, und der Kanal wird erneut unter der kurzen Kanal-ID der Splice-Transaktion angekündigt, während Nodes Zahlungen weiterleiten, die noch die ältere Kennung verwenden. Auch eine Reorganisation der Blockchain, die die Finanzierungstransaktion anderswo erneut mint, würde sie ändern.

Ist eine kurze Kanal-ID dasselbe wie eine Kanal-ID?

Nein. Es sind zwei getrennte Felder, und die Nachricht announcement_signatures in BOLT 7 führt beide nebeneinander. Nur die kurze Kanal-ID ist eine Koordinate in der Blockchain.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Lightning und Layer 2

Diese Seite auf Englisch lesen