Ach du Schreck, Satoshis weg! (Pending HTLCs) đŸ‡©đŸ‡Ș

lcodes

2021/08/20

Categories: Tutorial Tags: lightning,channel,kanal,htlc,satoshis

Vor kurzem bekam ich einen kleinen Schreck, als ich meine KanĂ€le in Thunderhub betrachtete. Ich musste feststellen, dass bei einigen die Gesamtsumme des Kanals nicht mehr stimmte. KanĂ€le die vorher 1M Satoshis hatten, besaßen auf einmal eine lokalen Betrag(Local Balance) von 0.5M Sats und einen entfernen Betrag (Remote Balance) von 0.1M Sats, ein 2M Kanal hatte auf einmal nur noch 1.1M Geldwerte, ein Moment Verwunderung und seichte Panik setzte ein.

Was ist ein Kanal?

Denn im Grunde sollte genau das mit LN ĂŒberhaupt nicht möglich sein, sprich die Verkleinerung eines Kanals. Da, die GrĂ¶ĂŸe des Kanals beim Erstellen(channelopen) festgelegt wird. Dabei werden Fees und RĂŒcklagen fĂŒr das Schließen des Kanals subtrahiert. Das Resultat ist dann die unabĂ€nderliche GrĂ¶ĂŸe eben jener Verbindung, die man auch als eine Art Rohr zum nĂ€chsten Knoten verstehen kann. Stellen wir uns also dieses Rohr vor, in dem sich Wasser befindet und in der Mitte eine Art Membran die nach Links oder Rechts verschoben wird, wenn Wasser (Satoshis) reinkommt oder rausgeht. Ist die Membran ganz Links, haben wir 100% Local Balance, das heißt, wir können keine Zahlungen mehr empfangen, denn weiter als an die Kante des Rohrs geht die Membran nunmal nicht. Ist die Membran ganz Rechts haben wir 100% remote balance (sĂ€mtliche Zahlungsmittel liegen auf der Seite der Partnernode), wir können also keine Zahlungen mehr senden. FĂŒr Routing-Nodes interessant, ist das viel beschworene 5050 VerhĂ€ltnis, sodass Payments in beide Richtungen möglich sind. Da die Menge des Wassers, anhand des Durchmessers und der LĂ€nge des Rohrs bestimmt werden kann, die in ebendiesem fließt, kommen wir zu dem Schluss, dass das Rohr insgesamt ~2M Satoshis hat. Dies ist ĂŒber die Lebensdauer des Kanals, sprich solange dieser nicht geschlossen wird, dessen unverĂ€nderliche GrĂ¶ĂŸe.

Dieses Prinzip verstanden zu haben, beruhigte meine Stimmung direkt. Dennoch blieb die Frage: Aber was ist passiert? Daher begann ich nachzuforschen, was es mit dem Ganzen auf sich hat. Schnell wurde ich, durch die Hilfe von Bekannten in einem Chat darauf hingewiesen, dass es sich um “Pending HTLCs” handeln könnte. Dies war tatsĂ€chlich der Fall.

Was sind HTLCs?

HTLC steht fĂŒr Hash-Time-Lock-Contract und ist ein Smart Contract. Dieser wird im Bitcoin respektive Lightning Netzwerk zur Zahlung von Geldwerten genutzt und besteht aus zwei Komponenten:
* Hash-Lock
* Time-Lock
Vereinfacht gesagt werden die Sats nur ausgezahlt wenn die Gegenseite das richtige Passwort eingibt (Hash-Lock) oder die Werte gehen an den Sender zurĂŒck, falls dies nicht innerhalb eines gewissen Zeitraums (Time-Lock) passiert. Solange keine der beiden Bedingungen, richtiges Passwort eingegeben oder Zeit abgelaufen, erfĂŒllt sind, befinden sich die Werte in einem schwebenden (pending) Zustand. Dies fĂŒhrt dazu, dass Thunderhub die möglichen Sats aus dem Kanal nimmt, da sie zum aktuellen Zeitpunkt nicht fĂŒr eine Zahlung oder Routing verwendet werden können.

Schwebende HTLCs in Thunderhub

Um herauszufinden ob und wie viele Sats genau im schwebenden Zustand sind, ist es notwendig auf den entsprechenden Kanal zu gehen und dort unter Node Public Key und Transaction Id, nach dem Eintrag Pending HTLCS zu suchen:

Pending HTLCS
Total Amount 1
Total Tokens 369992
Outgoing Tokens 369992
Outgoing Amount 1

Daraus lĂ€sst sich ableiten, es gibt eine HTLC mit einer GrĂ¶ĂŸe von ca. 370.000 Satoshis. Als nĂ€chstes ist natĂŒrlich spannend, was fĂŒr eine Transaktion das ist und ob sich vielleicht auch herausfinden lĂ€sst, wohin sie ging oder wann der wartende Zustand beendet wird.

FĂŒr diesen Zweck habe ich mich dem Kommandozeilen-Werkzeug von LND bedient: lncli. Zum einen lĂ€sst sich damit herausfinden, wie viele Sats tatsĂ€chlich gerade in einem Wartezustand sind, wir erhalten also eine GesamtĂŒbersicht zum anderen kann man damit weitere Informationen einsehen.

$ lncli channelbalance
...
{    "unsettled_local_balance": {
        "sat": "0",
        "msat": "0"
    },

    "unsettled_remote_balance": {
        "sat": "2402639",
        "msat": "2402639987"
    },
}
...

Der Befehl gibt mehrere Informationen aus, die obere Ausgabe wurde auf unser Thema beschrĂ€nkt. Unter den Feldern: unsettled_local_balance und unsettled_remote_balance, können wir die Menge des noch offenen Token einsehen. In meinem Fall sind es ungefĂ€hr 2.4M. Wir sehen außerdem, dass es HTLCs gibt die lokal oder remote sein können, also an uns gehen oder von uns versendet werden. In meinem Fall wurden alle HTLCs gesendet.

Wie wir wissen, verteilen sich die oben genannten 2.4M Sats auf verschiedene KanĂ€le. Mit dem Befehl listchannels lassen sich weitere Informationen erlangen. Da wir die Daten jeweils auf entsprechende Nodes beschrĂ€nken wollen, arbeite ich mit der extra Option “peer”. Diese Option erwartet den öffentlichen SchlĂŒssel der Node oder einfach dem: Node Key. In diesem Fall nehme ich den Key von dem System Tatooine:

$ lncli listchannels --peer 03011e480a671ac71dbc3fc3e8fe0db32bb9a10cc4d824663e09557d446ef80679

            "capacity": "2000000",
            "local_balance": "1511698",
            "remote_balance": "116967",
    	    ...
            "unsettled_balance": "369992",
            ...
	    "pending_htlcs": [
                {
                    "incoming": false,
                    "amount": "369992",
                    "hash_lock": "181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b1dd8e5d3b",
                    "expiration_height": 696472,
                    "htlc_index": "5417",
                    "forwarding_channel": "0",
                    "forwarding_htlc_index": "0"
                }
            ]

Wie bereits beschrieben, ist der obere Kanal 2M Sats groß. Dies erkennt man ebenfalls an dem Feld “capacity”. Rechnet man jetzt jedoch die beiden Felder “local_balance” und “remote_balance” zusammen, kommt man lediglich auf 1.628.665 Sats. Es fehlen also ĂŒber 300.000 unserer geliebten WĂ€hrung! Der Wert in “unsettled_balance” scheint ganz die Menge zu sein, rechnen wir sie einmal zusammen: 1.628.665 + 369.992 = 1.998.657. Dies sind nun fast unsere 2M Sats. Der Rest wird vorgehalten fĂŒr die Schließung des Kanals bzw. wurde bereits fĂŒr die Eröffnung abgezogen. Schauen wir etwas weiter. In der Kategorie “pending_htlcs” gibt es tatsĂ€chlich einen Eintrag, dieser hat mehrere interessante Felder. Gehen wir einige durch:

Soweit so spannend. Mit den vorhandenen Informationen lĂ€sst sich jetzt also auch sagen, wie lange es maximal dauert, bis die Satoshis wieder freigegeben werden und der Kanal zu seiner vollen stĂ€rke, wenn auch unterschiedlich auf der lokalen und der Seite der Partner-Node, zurĂŒckkommen wird. Zum Zeitpunkt der Abfrage mit lncli war der Block 696472 im Bitcoin Netzwerk noch nicht gefunden. Bei einer angenommenen Dauer von 10m pro Block und der aktuellen Blockzeit, kam ich auf ca. 720m also 12h Wartezeit, falls der Hash nicht an den Adressaten weitergegeben werden wĂŒrde.

Nach Ablauf der Zeit, kamen alle Satohis zurĂŒck und eine erneute Ausgabe des Kanals mit lncli sah dann so aus:

	    "capacity": "2000000",
            "local_balance": "1882272",
            "remote_balance": "116967",
            ...
	    "unsettled_balance": "0",
            ...
            "pending_htlcs": [
            ],

Wir sehen, dass die lokale und partnerbalance zwar nicht gut ausgeglichen aber Nahe an unseren 2M Sats ist, des weiteren ist die “unsettled_balance” gleich null und wir haben keinen Eintrag in “pending_htlcs”.

Ende

Ich hoffe euch hat der Beitrag gefallen und ihr habt einen besseren Einblick in Bitcoin und Lightning erhalten.

>> Home