跳至主要內容
高級

Data Loss Protection 數據丟失保護

了解閃電網路的數據丟失保護機制,如何在節點數據損失後安全恢復。

10 分鐘

數據丟失的風險

閃電節點需要保存每個通道的最新狀態。如果丟失數據並使用舊狀態,可能會被視為作弊而損失資金。 Data Loss Protection(DLP)協議幫助安全恢復。

功能位: option_data_loss_protect(bit 0/1)現在幾乎是必需的功能。

DLP 協議原理

channel_reestablish 訊息:

重連時交換:
channel_reestablish {
  channel_id,
  next_commitment_number,        // 我期望的下一個承諾編號
  next_revocation_number,        // 我期望的下一個撤銷編號
  your_last_per_commitment_secret, // 你最後給我的 secret
  my_current_per_commitment_point  // 我當前的承諾點
}

正常情況:
A 發送:next_commitment=100, next_revocation=99
B 發送:next_commitment=100, next_revocation=99
→ 雙方同步,繼續正常操作

數據丟失檢測:
A(丟失數據):next_commitment=50, next_revocation=49
B(正常):    next_commitment=100, next_revocation=99

B 檢測到:A 的狀態比我知道的舊
→ 觸發 DLP 恢復流程

恢復流程

DLP 恢復選項:

選項 1:對方協助關閉
1. 對方發送:your_last_per_commitment_secret
2. 丟失方可以驗證這是自己的 secret
3. 對方發起協商關閉(mutual close)
4. 雙方按最新餘額分配資金

這是最好的結果:沒有懲罰,費用最低

選項 2:對方強制關閉
1. 對方廣播自己的承諾交易
2. 丟失方等待 to_remote 輸出(無時間鎖)
3. 使用 static_remotekey 可以直接花費

結果:丟失進行中的 HTLC,但主餘額安全

最壞情況:丟失方廣播舊狀態
如果丟失方錯誤地廣播舊承諾交易:
• 對方持有撤銷密鑰
• 可以執行懲罰交易
• 丟失方損失全部資金!

DLP 的目的就是防止這種情況

Static Remote Key

static_remotekey 增強:

傳統問題:
• to_remote 輸出的密鑰每次承諾都變化
• 丟失數據 → 不知道當前密鑰 → 無法花費

static_remotekey 解決方案:
• to_remote 輸出始終使用固定的 payment_basepoint
• 只需要種子就能恢復密鑰
• 即使數據丟失也能取回資金

SCB 備份

Static Channel Backup 配合 DLP 使用,提供通道恢復資訊。

瞭望塔

即使你離線,瞭望塔也能檢測作弊並執行懲罰。

關鍵提醒: 永遠不要從備份恢復後直接嘗試使用通道!應該讓對方關閉通道。

相關資源

已複製連結
已複製到剪貼簿