Lightning-Network

由於 HTLC 在遠端承諾中單方面關閉

  • April 20, 2022

我在我的節點上執行 lnd,有時會看到如下消息:

[INF] CNCT: ChannelArbitrator(CHANPOINT): immediately failing htlc=HTLCID from remote commitment

我的節點發出的相應關閉交易不包含任何 HTLC 輸出。我想更多地了解這種情況,以及我能做些什麼來避免這種情況。

  • HTLC 如何在我的對等方的送出事務中結束?
  • 為什麼我的節點知道它,但在本地送出事務中沒有 HTLC?
  • 為什麼沒有必要在關閉交易中收回 HTLC 資金?
  • 出了什麼問題,即我怎樣才能幫助避免這種渠道關閉?

這是lnd中的對應程式碼:https ://github.com/lightningnetwork/lnd/blob/cd8a87c0daf569404f6bcf8e839524f0e639d881/contractcourt/channel_arbitrator.go#L1806

相關雷電通道在什麼情況下會自動強制關閉?

非常感謝 Rene Pickhardt,他花了一些時間和我一起研究這個。

當我的節點 A 向我的對等節點 B 發送 HTLC 時,這是使用Bolt 02update_add_htlc中定義的消息完成的。在此消息之後,我的節點簽署遠端的新承諾交易(其中包含 HTLC)並將其作為消息的一部分發送給B。commitment_signed

一旦節點 B 有權訪問此簽名交易,它就可以(理論上)廣播包括 HTLC 輸出的交易,並使用秘密散列來花費 HTLC 輸出。

請注意,B 可以隨時執行此操作,可能在 HTLC 超時之後很久。

如果傳出 HTLC 對應於傳入 HTLC(即,我的節點將資金從某個其他節點 X 轉發到 B),則我的節點需要在傳入 HTLC 超時之前絕對確定地使傳出 HTLC 失敗。如果傳入的 HTLC 首先超時,則傳入的 HTLC 失敗(並且我的節點沒有從 X 獲得傳入的資金),但是如果節點 B 決定廣播已簽名的交易(因此,我的節點將免費贈送資金,因為它不會從節點 X 取回金額)。

為了避免這種情況,lnd 如問題中所述強制關閉通道,以使傳出的 HTLC 絕對肯定會失敗,即剝奪節點 B 將來要求 HTLC 輸出的機會。

通常節點 B 會確認已簽名的交易並發送已簽名的交易作為回報。然而,在上述情況下,節點 B 沒有響應。日誌顯示failing link: unable to complete dance with error: remote unresponsive,表明節點 B 沒有按預期繼續應答。

update_add_htlc在發送and之前檢查節點 B 的執行狀況可能會有所幫助commitment_signed,這顯然不是 lnd 目前所做的事情。

正如您在 lnd 原始碼中看到的,整個過程非常類似於節點 B 也發送一個新的簽名交易(其中包含 HTLC),然後讓 HTLC 超時的情況。

引用自:https://bitcoin.stackexchange.com/questions/113335