閃電網路談話中的多重簽名退款交易缺陷
我正在觀看Tadje Dryja在 SF Bitcoin Devs 會議上關於交易延展性的演講,這構成了閃電網路背後的基礎。
在 17'45",我看到了這個例子。在隔離見證之前,甚至在考慮延展性之前,怎麼可能在不知道 TX 基金簽名的情況下簽署退款 txn?雙方的資金簽名都需要
txid
創建在 TX-refund 輸入中引用。但是,如果知道此資訊,則其中一方可以在簽署退款 txn 之前將資金 txn 發送到網路,從而迫使另一方的資金進入多重簽名合約。我錯過了什麼嗎?(我認為引入 SIGHASH_NOINPUT 是為了解決這個確切的限制。)
是的,你是對的。Joseph Poon 和 Tadje Dryja 在他們的閃電網路白皮書中提出了該
SIGHASH_NOINPUT
標誌,以防止交易延展性缺陷阻礙在為交易提供資金之前創建承諾交易。然而,隨著 2017 年 SegWit 的部署,NOINPUT
不再需要簽名,因為簽名不是txid
SegWit 交易建構的一部分。由於簽名不構成txid
計算的一部分,它解決了NOINPUT
試圖解決的 ECDSA 簽名延展性問題。因此,SegWit 部署允許我們在簽署資金交易之前創建承諾交易。自從 2016 年初那篇論文發表以來,閃電網路的規格發生了翻天覆地的變化。我試圖在下面強調各方如何按照今天的方式傳達交易的簽署,以及在彼此開放渠道時對未來的提議.
在目前規範(BOLT 1.0)中,只允許一方向頻道貢獻比特幣。這簡化了在資金交易之前交換簽名和創建承諾交易的過程。假設 Alice 和 Bob 想要打開一個頻道。只有當 Alice 收到 Bob 對她持有的承諾交易的簽名時,她才會廣播資金交易。由於 Alice 是這裡唯一的資助者,所以在 Bob 交換他的資助公鑰後,她擁有創建資助交易的所有彈藥。她創建並簽署交易,計算
txid
並與 Bob 共享它以及 Bob 持有的她的承諾交易簽名。目前有一個提案(BOLT 1.1)允許雙方向頻道捐款。雙方通過共享資金交易的輸入和輸出來幫助彼此建立資金交易,他們計劃用於資助渠道。重要的是要注意,除了這些輸入的簽名之外,它們共享所有資訊。一旦雙方共享了所有的投入和產出,雙方就有足夠的資訊來計算資金
txid
。這是因為 SegWit 交易簽名不包括在計算中txid
(如前所述)。這使我們甚至可以在創建資金交易之前建立第一個承諾交易。**注意:**目前,閃電網路實施不需要該
NOINPUT
標誌。但要實施Eltoo支付建設有一個提議要介紹SIGHASH_NOINPUT
。簡而言之,Eltoo 允許我們擺脫懲罰性交易並減少維護通道狀態的大量成本。如果您有興趣,您可以閱讀Lightning 郵件列表中有關此提案的討論。