Lightning-Network
閃電網路:欺騙節點取消交易並造成損失和金錢損失
在閱讀了這篇文章和類似文章中關於閃電網路的內容後,我意識到我不明白協議和系統如何防止以下情況發生:
- Alice 和 Bob 之間有一個既定的通道。
- 最新“同意”的鏈下交易的交易輸出是 Alice 一側的 1BC 和 Bob 一側的 1 BC。
- Alice & Bob 發起一個新的交易。
- Alice 和 Bob 交換他們的撤銷密鑰部分。
- Bob 決定作弊並假裝“消失”,不簽署新交易也不響應,但仍然線上並監控鏈上交易。
- 在某個時間點,如果 Alice 想釋放她的 1 個比特幣,她會執行最新的“同意”交易,但她的資金被鎖定了 2 週。
- Bob 假裝沒有反應,正在監控鏈並在它發生時立即執行撤銷條款,獲得兩個比特幣。
顯然,#5 和#6 之間可能會經過相當長的時間,但如果 Bob 可以等待,他就可以成功。
似乎為了避免這種情況,新的鏈下交易需要在單個分佈式交易中通過撤銷密鑰的交換進行簽名,但我看不出它是如何可行的。我讀過多次提到在簽署新交易之前交換密鑰。
我在這裡讀過一個類似的問題,但我認為它並沒有真正解決我所描述的情況。
我錯過了什麼?
你觸及一個有點微妙但從來沒有問題的點。我已經在頻道操作章節中一步步解釋了: https ://github.com/lnbook/lnbook/blob/develop/09_channel_operation.asciidoc
TL;DR:雖然改變了通道的餘額,但 Alice 只有在她收到 Bob 的新狀態簽名後才會撤銷她的 tx 和狀態。因此,如果 Bob 在此過程中變得無響應並且 alice 死後沒有新的簽名,但她可以強制關閉她確實擁有簽名的最新狀態(因為該狀態尚未被撤銷)
在將餘額向前移動一小段時間的同時,通道的每一側都暫時有兩個完全簽名但未撤銷的承諾交易。這是安全的,因為發布“舊”狀態並沒有錯,而新狀態尚未完全同意。