Glossar / Lightning und Layer 2
HTLC
Auch bekannt als Hash-Zeitsperrvertrag, Hash Time-Locked Contract.
- Was ist ein HTLC?
- Ein HTLC ist eine Zahlung, die nur gegen ein Geheimnis ausgezahlt wird und dem Absender das Geld zurückerstattet, wenn dieses Geheimnis nie vor einer Blockhöhe eintrifft, auf die sich beide Seiten geeinigt haben.
Hash-Zeitsperrverträge (Hash Time-Locked Contracts) sind der Grund, warum eine Lightning-Zahlung über mehrere Sprünge sicher weitergeleitet werden kann. Jeder Sprung sperrt sein Geld an denselben SHA-256-Hash, und ein Kanal kann höchstens 483 davon in jede Richtung gleichzeitig führen. Für Sie ist das der Grund, warum eine Lightning-Zahlung entweder vollständig abgewickelt wird oder vollständig scheitert und nie Geld mitten auf der Route liegen bleibt.
So funktioniert es
Zwei Bedingungen sichern das Geld in einem HTLC, und genau eine von ihnen wird schließlich eintreten.
Der Empfänger erfindet ein zufälliges Geheimnis von 32 Bytes, Preimage genannt, berechnet dessen Hash mit SHA-256 und setzt das Ergebnis in die Rechnung. Jeder Node entlang der Route bietet dann dem nächsten Node einen Output an, der auf zwei Weisen ausgegeben werden kann: sofort von jedem, der das Preimage vorweisen kann, oder nach einer vereinbarten Blockhöhe von dem Node, der ihn angeboten hat. Da alle Sprünge denselben Hash teilen, erfährt in dem Moment, in dem der Empfänger sein Geld durch Offenlegung des Preimages beansprucht, jeder frühere Sprung davon und beansprucht seines. Niemand bleibt je darauf sitzen, vorausbezahlt zu haben, ohne zurückbezahlt zu werden, und auf dieser Eigenschaft ist Lightning aufgebaut.
Die Blockhöhen nehmen entlang der Route stufenweise ab. Jeder Kanal gibt ein cltv_expiry_delta an, und der Zahler staffelt diese Deltas so, dass der dem Empfänger am nächsten liegende Sprung zuerst abläuft und jeder vorgelagerte Sprung einen Sicherheitsabstand hat. BOLT 11 schreibt einem Zahler vor, für den letzten Sprung mindestens 18 Blöcke einzuräumen, wenn die Rechnung nichts anderes sagt. Diese aufgelaufene Verzögerung sind die eigentlichen Kosten eines HTLC: Klemmt eine Zahlung, ist das Geld nicht verloren, kann aber stundenlang eingefroren sein, während die Zeitlimits ablaufen.
On-Chain werden diese Verträge zu echten Transaktionen. In einem Anchor-Kanal wiegt eine HTLC-Timeout-Transaktion 666 Gewichtseinheiten und eine HTLC-Success-Transaktion 706, und ein erzwungenes Schließen mit mehreren unterwegs befindlichen Zahlungen bedeutet, für jede von ihnen eine davon zu senden. Beträge, die zu klein sind, um einen Output zu rechtfertigen, erhalten gar keinen; sie werden stattdessen der Mining-Gebühr zugeschlagen, weshalb eine winzige Zahlung in den Gebühren verschwinden kann, wenn ein Kanal im falschen Moment geschlossen wird.
Wo Sie es sehen
Sie sehen HTLCs in den Sekunden zwischen dem Antippen von Bezahlen und dem Grünwerden der Rechnung, und Sie sehen sie erneut in der Gebührenberechnung eines On-Chain-Tauschs.
Lightning-zentrierte Dienste wie Strike bewegen Geld bei jeder Zahlung auf diese Weise, und Lightning-Routing-Nodes führen die Zahl der ausstehenden HTLCs als Betriebskennzahl auf, denn ein mit feststeckenden Verträgen vollgestopfter Kanal kann nichts weiterleiten. Dieselbe Konstruktion funktioniert außerhalb von Lightning: Ein Submarine Swap tauscht einen On-Chain-HTLC gegen eine Lightning-Zahlung, die an denselben Hash gebunden ist, und ein kettenübergreifender Atomic Swap macht dasselbe zwischen zwei Ledgern. In jedem Fall ist der Hash der gemeinsame Schiedsrichter und das Zeitlimit die Rückerstattung.
Die Obergrenze ist wichtiger, als sie aussieht. Eine Commitment-Transaktion muss eine gültige Bitcoin-Transaktion bleiben, deshalb verbietet BOLT 2 mehr als 483 angenommene Verträge pro Richtung, mit einem Rückgang auf 114 beim neueren Commitment-Format ohne Gebühr. Große Routing-Kanäle stoßen in Stoßzeiten an diese Decke, und das ist ein ehrlicher Grund, warum eine Zahlung manchmal scheitert und dreißig Sekunden später gelingt.
HTLC vs. PTLC
Ein HTLC verwendet einen Hash für die gesamte Route, während ein PTLC jedem Sprung eine andere Sperre gibt, die aus einem Punkt der elliptischen Kurve abgeleitet ist. Dieser eine Unterschied ist ein Datenschutzloch: Zwei Routing-Nodes desselben Betreibers an verschiedenen Punkten Ihrer Route können denselben Hash zweimal sehen und Ihre Zahlung zusammenfügen. Das Netzwerk läuft tatsächlich mit HTLCs. PTLCs sind der spezifizierte Ersatz, und bis sie eingeführt sind, gehen Sie davon aus, dass jeder große Routing-Betreiber die von ihm weitergeleiteten Sprünge korrelieren kann.