HTLC 成功和 HTLC 超時事務的遠端節點簽名
根據 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 message
from 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。