閃電網路中的人怎麼會損失資金?
在比特幣中,一旦你擁有一個與上面有比特幣的地址相關聯的私鑰,你的資金理論上永遠是安全的。但是在閃電網路上,我看到一旦你將比特幣發送到那裡的地址,你的資金就會不知何故消失。與比特幣有什麼區別?一旦比特幣存在,誰或什麼擁有比特幣?
使用者在閃電網路中損失資金的原因有幾個。但要理解為什麼會發生這種情況,讓我們看看閃電網路的一些基本結構。
閃電基礎
當兩方在閃電網路中打開一個通道時,他們實際上所做的是將一些比特幣發送到他們都控制的 2-of-2 多重簽名(在目前規範中只有一方可以發送它)。然後,這個 2-of-2 多重簽名 UTXO 被用作創建承諾交易的輸入,其中輸出根據誰欠誰(就像資產負債表一樣)將比特幣支付給雙方。
然而,承諾交易輸出是不對稱的。下面是 Alice 和 Bob 為其通道持有的總容量為 0.1 BTC 的承諾交易範例。Alice 目前有 0.07 BTC,Bob 有 0.03 BTC,就他們在頻道中的餘額而言。下面的承諾交易狀態還考慮了 Alice 要求 Bob 添加 0.01 BTC 的 HTLC(從而將她的餘額減少到 0.06 BTC)的情況。
從上面的資訊圖中可以看出,支付給自己的輸出由撤銷密鑰保護。它立即支付撤銷密鑰,但在延遲 N 個塊後支付自己的公鑰。無論何時,Alice 和 Bob 將簽署一個新的承諾交易,他們將通過與另一方共享他們一方的撤銷秘密來撤銷先前的承諾狀態。因此,如果一方嘗試廣播通道的先前狀態,另一方可以通過使用撤銷秘密獲取通道的全部餘額(直到 N 個塊之後雙方都可以花費)。這阻止了他們廣播反映通道先前狀態的承諾交易,因為他們有可能從通道中損失全部資金。
因失去備份而損失資金
撤銷是一把雙刃劍。雙方必須保留為先前狀態和所有承諾交易共享的撤銷密鑰。如果其中一個失去,另一方可能會欺騙另一方。當您的機器崩潰使您失去備份時,這尤其可怕。以下是使用者損失資金的兩種不同方式:
(1)**您失去了合作夥伴的撤銷密鑰:**如果您失去了合作夥伴的撤銷密鑰,那麼如果對方發布了之前的頻道狀態,這對他們更有利,您不能使用撤銷密鑰的力量來獲取整個平衡狀態。您必須通過添加反映這一點的新承諾交易向他們傳遞了一些商品,但是由於您失去了之前交易狀態的撤銷密鑰,您的合作夥伴可以廣播之前的狀態,而不必擔心您會拿走他們的全部餘額。
(2)**您失去了承諾交易:**如果您失去了之前簽署的承諾交易,您的資金可能會受到兩種攻擊: (1) 如果您的交易對手試圖廣播之前的通道狀態,您將不會
txid
由於您失去了承諾交易,因此能夠查看區塊鏈。您可能不得不使用更昂貴的方式,查看進入區塊鏈的每筆交易的每個輸入,並查看 2-of-2 多重簽名的支出。(2) 如果您失去了您的承諾交易並且交易對手變得沒有反應,那麼您將無法取回您的比特幣。比特幣將保持鎖定在多重簽名中,在對方重新上線之前,您將無法使用。閃電實現嘗試通過多種方式解決此問題,例如
option_data_loss_protect
. 這允許節點知道目前的送出狀態並查看它是否落後。然而,這依賴於最新的一方是誠實的這一事實。另一方可能會利用其他節點落後的優勢並可能欺騙它。因下線而損失資金
離線也有損失資金的風險。假設 Alice 想向 Charlie 發送 0.01 BTC。Alice 將與 Bob 簽署一份承諾交易,而 Bob 將與 Charlie 簽署一份承諾交易,如上所示。就在與查理添加承諾交易後,鮑勃面臨斷電,切斷了他的網際網路連接。Charlie 將原像發佈到 HTLC 並立即獲得資金。假設 Bob 一天不能上網。在一些區塊之後,Alice 會假設 HTLC 沒有通過並在 M 個區塊延遲後將資金返還給她。因此 Bob 失去了 Alice 想要發送給 Charlie 的 BTC 數量。想像一下,如果您添加了多個 HTLC 並且您無法重新聯機,則會發生這種情況。