Was tun wenn euer Lightning Kanal nicht geschlossen werden kann und ewig im "Pending" Status bleibt?

Beitrag geupdated am 29. Oktober 2022
aufgenommen: Anchor Channels, Umbrel 5 und höher

Hallo an die Community,

ich bin vor einigen Tagen auf einen wirklich lästigen Bug gestoßen, welcher bereits bekannt ist. Zumindest bin ich bei meiner Recherche auf zahlreiche Threads gestoßen, in denen Lightning Nutzer das gleiche Problem hatten wie ich, leider oft ohne einen Lösungsvorschlag.

Vorab: ich bin kein Super-Lightning-Experte und falls ich hier etwas nicht richtig wiedergebe, bei meinem Lösungsweg potenzielle und mir nicht bekannte Risiken unerwähnt bleiben oder ich einen zu umständlichen Weg gegangen bin und dieser Bug hätte möglicherweise viel einfacher behoben werden können; dann gebt mir bitte Bescheid. Jedenfalls hat mir dieser Weg geholfen das Problem aus der Welt zu schaffen.

Nun zum Thema: ich wollte gestern einen kleinen Channel mit einer capacity von 100,000 Sats schließen, den ich in der Vergangenheit zu meinem Peer geöffnet hatte, da wir beide keinen Schimmer von Lightning hatten. Dieser Kanal eignete sich also gut dafür um einen Fuß in der Lightning Welt zu fassen und ein Gefühl dafür zu bekommen. Wir hatten also Payments durchgeführt, Invoices erstellt und sogar Zahlungen geroutet, soll heißen: der Channel war stets aktiv und in Nutzung. Der Kanal war aber mittlerweile zu klein geworden um einen Nutzen zu bieten und so wollte ich den Kanal nun über einen cooperative close über RTL schließen um anschließend einen größeren Kanal zu eröffnen. Mein Peer und ich waren online und die Sats, die ich mitgegeben habe, waren im Hinblick auf den Mempool mehr als ausreichend. Ich war schon skeptisch, als sich der Kanal Stunden später noch immer im „Pending“ Status befand. Als sich der Kanal am nächsten Tag immer noch in diesem Status befand, wusste ich, dass irgendetwas schief gegangen ist.

Hinweis: ich nutze eine Umbrel Node, auf dem die Lightning Implementierung LND läuft. Die Befehle könnten bei anderen Lightning Implementierungen wie C-Lightning oder Eclair anders sein. Damit kenne ich mich nicht aus.

Also habe ich Termius (Ihr könnt auch Putty oder andere SSH Clients nutzen) gestartet und mich auf die Node eingeloggt. Um den Lightning Client zu nutzen, führt folgenden Befehl aus:

docker exec -it lnd sh

Ab Umbrel 5 könnt Ihr auf den Lightning Client wie folgt zugreifen:

~/umbrel/scripts/app compose lightning exec lnd sh

(Beim Raspiblitz sind die beiden oberen Schritte überflüssig und Ihr könnt sie überspringen und mit dem Tutorial fortfahren)

Anschließend lasst Ihr euch mit

lncli pendingchannels

eure Pending Channels anzeigen. Das sah in meinem Fall so aus:

Die local_txid ist die closing-transaction. Das Kuriosum hierbei war, dass ich diese TX im Mempool nicht finden konnte. So hätte die Transaktion also auch nie verarbeitet werden können. Daher startete ich die Node neu um u.a. auch den LND-Client neu zu starten, in der Hoffnung, dass die Transaktion dann möglicherweise erneut übertragen werden würde. Leider war dem bei mir nicht so!

Was hier nur noch geholfen hat, war ein Force-Close. Leider kann man aber über Apps wie RTL einen Kanal, der sich im Pending Status befindet, nicht mehr ansprechen. Der Weg ging hier also wieder direkt über den LND Client.

Auf dem oben geposteten Screenshot seht Ihr die Zeile channel_point. Der Channel Point ist die Funding Transaction mit einer :0 oder :1 dahinter. Die Zahlen zeigen euch lediglich an, ob Output 0 oder Output 1 den Kanal gefundet hat. Das könnt Ihr an dieser Stelle bei Seite lassen. Relevant ist der Wert des Channel Points ohne der 0 oder 1. Wenn der Channelpoint bspw. 123456789:0 ist, gebt Ihr folgendes ein:

lncli closechannel 123456789 --force

Mittlerweile etabliert sich zunehmend der Commitment Type ANCHOR CHANNELS statt STATIC REMOTE KEY (wie er noch auf meinem Screenshot zu sehen ist). Sollte bei euch ein Anchor Channel betroffen sein, sieht der Befehl etwas anders aus und es muss auch der Output Index mit hinzugenommen werden. In unserem Beispiel würde es also wie folgt aussehen:

lncli closechannel --force 123456789 0

Anschließend wird die Closing TX-ID erneut an den Mempool übertragen und euer Kanal befindet sich nun tatsächlich im „Pending“ Status.

Euer Peer bekommt die Remote Balance sofort ausgezahlt, während Ihr - je nach Einstellung - die Lock Time abwarten müsst. In unserem Kanal waren es 144 Blöcke, sprich ca. 1 Tag. Und so war es dann auch.

Ich hoffe, dass Ihr erst gar nicht auf diesen Bug stößt und falls doch, dass euch diese kleine Anleitung dabei hilft.

7 „Gefällt mir“

Mit lncli pendingchannels nachzuschauen kann ich auch empfehlen wenn der Channel Close hängt. Bei mir war eine PartnerNode dauerhaft offline gegangen und ich dachte ok, machste einen Forced Close über Thunderhub. Nach über 2 Wochen im Pending wusste ich irgendwas hat wohl nicht geklappt. :sweat_smile:
Tja und die lncli hat mir dann verraten das Thunderhub (vermutlich ein Bug) einen Cooperate Close initiiert hat statt Forced. So kann ich natürlich bis in alle Ewigkeit warten das der Channel zu geht. Ein Forced Close hinterher und alles war gut.

Da fragt man sich echt wie so etwas möglich ist. Aber wie du es schon sagst: direkt über den Lightning Client zu gehen und auszuschließen, dass die App einen Anzeigefehler hat ist schon mal der erste richtige Schritt.

Hierzu wurde eben auch ein Issue auf github eröffnet.

Ohje… habe ihm mal vorgeschlagen von der Channeleröffnung zurückzutreten über den Command lncli abandonchannel

Ich habe dazu eine Frage bzw. ein Problem.

Es wurden zu mir Channel eröffnen die seit Tagen auf „pending“ stehen. Die Node zu diesen Channel ist nicht mehr erreichbar.

Mit deiner Anleitung konnte ich mir die Channel angucken, aber schließen kann ich diese über den Channel Point nicht.

Bekomme immer die Fehlermeldung
„Channel not found“. Kannst du mir da vielleicht einen Tipp geben?

hast du kontakt zu deinem peer? ist die funding tx an den mempool übertragen worden? wenn nicht; dann kann er möglicherweise die channeleröffnung über lncli abandonchannel unterbrechen und einen neuen versuch starten. bei dem github thread ein paar nachrichten über deiner gab es das gleiche problem. da hat diese vorgehensweise geholfen.

Nein ich habe keinen Kontakt und I’m mempool ist keine Transaktion zu finden. Bekomme das „opening Channel“ nicht weg. Dachte das erledigt sich von selbst da keine Transaktionen stattgefunden hat. Aber „open channel“ bleibt bestehen.

Ich habe das oberflächlich gesehen gleiche Problem, bekomme aber direkt nach dem versuchten Force Close die Meldung „[lncli] rpc error: code = Unknown desc = channel not found“
Woran kann das liegen?

Ich konnte mit der Beschreibung 4 von 5 Channels schließen, die seit Wochen als waiting_close geführt wurden, danke dafür.
Beim fünften erhalte ich aber immer folgende Fehlermeldung:

[lncli] rpc error: code = Unknown desc = channel not found

Was kann ich jetzt noch tun?

Sorry hat sich erledigt :slight_smile:

Habe leider das gleiche Problem.
Bei mir sind noch drei Channel im Status „Pending / Channel Close“ (seit ca 4 Wochen).
Habe auch schon einen Neustart probiert und mit „lncli closechannel CHANNELPOINT --force“ versucht die einzelnen Kanäle zu schließen. Bei allen Dreien erhalte ich „[lncli] rpc error: code = Unknown desc = channel not found“

Bei mir hat ein Force Close auf der Gegenseite geholfen.
Ich habe dazu den Betreiber der Node kontaktiert und ihn gebeten den Close durchzuführen
Die meisten sind ja über Telegram oder auch Twitter zu erreichen

2 „Gefällt mir“

Danke für den Hinweis!
Gestern hatte ich es noch geschafft einen Force Close von meiner Seite aus zu machen.
Dafür musste ich aus
lncli closechannel CHANNELPOINT --force
diesen Befehl eingeben:
lncli closechannel --force CHANNELPOINT „WERT 0 oder 1“
Dann habe ich keine Fehlermeldung mehr bekommen

Ein " *lncli pendingchannels" hat mir angezeigt, dass einige Sats „recovered“ wurden. Ich warte jetzt noch etwas ab und werde dann versuchen die Gegenseite zu kontaktieren.

Ok, viel Erfolg. Irgendwie kriegt man die Sats meistens wieder :slightly_smiling_face:
War bei mir immer der Fall. Man muss da nur Geduld haben. Ist oft nicht einfach, da natürlich auch irgendwie eine Summe dahinter steht.

1 „Gefällt mir“

Danke :grinning:
…Merkwürdigerweise hatte es vorher auch immer geklappt und nun gleich drei Channel hintereinander (hatte auch in etwas zur gleichen Zeit ein cooperative close gemacht) mit jeweils einem höheren 6stelligen Sat-Betrag. Wäre schon „schade“ wenn die weg wären :hot_face:

PS: Update: 2 von den drei offenen Channels sind inzwischen geschlossen und ich habe meine Sats wieder :+1:

1 „Gefällt mir“

Danke für die erklärung hat mir auch schon geholfen. Ich musste jetzt meine Node komplett neu aufsetzen dabei sind alle Channels geschlossen worden was auch okay ist lediglich 3 Channels sind nach dem SCB noch „offen“ bzw stehen im Status „ChanStatusRestored“ 2 Davon waren zu letzt noch geöffnet das merkwürdige ist das ich einen Channel dort sehe der definitiv schon vor dem recovery geschlossen war. was muss ich mit diesen channels machen warten oder gibt es noch eine andere möglichkeit für die 2 channels würde ich gerne ein force close initieren was aber natürlich in dem Satus nicht funktioniert den 3 Channel würde ich gerne ledig wg der Hygiene entfernen

Wenn du Kanäle lediglich aus Hygienegründen entfernen möchtest, sprich solche Kanäle, die eigentlich schon geschlossen sind, dir aber noch angezeigt werden:

lncli abandonchannel --funding_txid 0123456789 --output_index 0 —i_know_what_i_am_doing

Bitte nur nutzen, wenn du dir auch sicher bist, dass die Kanäle schon geschlossen sind.

P.S.: bei der funding tx id und dem output index musst du natürlich die entsprechenden Werte eintragen.

Ich habe leider das Problem, dass mein Channel auf „Pending Close“ hängen geblieben ist. Ich habe schon versucht, ein Force-Close hinterher zu schieben:

lncli closechannel <CHANNEL_POINT> --force 0

Leider mit folgender Fehlermeldung:
[lncli] unable to decode output index: strconv.ParseUint: parsing „9eefa04678248177ee04a2abfd15f327490adccc7c50638200935e198fb44f63“: invalid syntax

Die Gegenseite ist online.
Ich benutze den RaspiBlitz 1.8.0 mit LND 0.15.5-beta.

Hat vielleicht noch jemand eine Idee, was ich machen kann?

Die Syntax ist nicht korrekt. Da der Channel frisch ist, gehe ich davon aus, dass es sich hier um Anchorchannel handelt. Daher nicht

lncli closechannel <CHANNEL_POINT> --force 0

sondern

lncli closechannel --force CHANNELPOINT 0

1 „Gefällt mir“