Lightning-Network

HTLC 成功和 HTLC 超時事務的遠端節點簽名

  • May 27, 2019

根據 BOLT #3,當在本地節點的版本中建構 HTLC 輸出(接收和提供 HTLC)時,它需要使用操作碼鎖定對本地節點的付款,該CHECKMULTISIG操作碼既需要,也需要localhtlcsig花費remotehtlcsig

據我所見,節點不交換它們的 htlc 簽名(儘管我們可以通過基點派生 htlc 公鑰)。

所以問題是:假設在我從一個節點接收到一個 HTLC 並成功將其傳遞給其他節點後,將 HTLC 發送給我的節點變得無響應。現在我需要將我的承諾交易版本廣播到比特幣區塊鏈,以便我可以索取被鎖定的資金payment_hash(當我收到一個時)。但是,為了使用該輸出,我的見證堆棧將需要具有0 <remotehtlcsig> <localhtlcsig> <payment_preimage>. 現在,如果遠端節點處於離線狀態,我將如何獲取remotehtlcsig鎖定在 HTLC 中的資金?

只是為了提供更多詳細資訊,下面是根據 BOLT #3 接收到的 HTLC 輸出的本地節點版本

# To remote node with revocation key
OP_DUP OP_HASH160 <RIPEMD160(SHA256(revocationpubkey))> OP_EQUAL
OP_IF
   OP_CHECKSIG
OP_ELSE
   <remote_htlcpubkey> OP_SWAP OP_SIZE 32 OP_EQUAL
   OP_IF
       # To local node via HTLC-success transaction.
       OP_HASH160 <RIPEMD160(payment_hash)> OP_EQUALVERIFY
       2 OP_SWAP <local_htlcpubkey> 2 OP_CHECKMULTISIG
   OP_ELSE
       # To remote node after timeout.
       OP_DROP <cltv_expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
       OP_CHECKSIG
   OP_ENDIF
OP_ENDIF

據我所見,節點不交換它們的 htlc 簽名(儘管我們可以通過基點派生 htlc 公鑰)。

我相信你已經忽略了commitment signed messagefrom bolt 02。從那裡我引用:

當一個節點對遠端送出有更改時,它可以應用它們,簽署生成的交易(如 BOLT #3 中所定義),並發送一個commitment_signed 消息。

type: 132 (commitment_signed)
data:
[32:channel_id]
[64:signature]
[2:num_htlcs]
[num_htlcs*64:htlc_signature]

雖然我們已經看到所有 htlc 的簽名都已傳輸,但我們可以進一步找到要求:

發送節點:…必須為每個 HTLC 事務包含一個 htlc_signature,對應於送出事務的順序(參見 BOLT #3)。

我相信節點在驗證收到的承諾的所有 htlc 的簽名之前不應轉發 htlc。

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