Lightning-Network
沒有種子但使用 xprv 的 lnd 恢復
假設我有一個過時的 lnd 數據庫副本(帶有解鎖密碼)和一個最新的靜態通道備份,但我沒有種子詞來嘗試正常的 lnd 恢復。但是,我可以使用 chantools 檢索錢包 xprv,因此鏈上資金是安全的。
我該怎麼做才能讓 lnd 開始使用 DLP 恢復鏈下資金,就好像我在錢包創建期間輸入了種子並提供了啟動通道備份一樣?我相信這應該是可能的,因為所有需要的資訊都在那裡。
如果我在 lnd 未連接到任何對等點時在每個通道上執行放棄通道,然後載入靜態通道備份(甚至可能嗎?)
如果使用 lnd+lncli 不可能,我將不勝感激有關如何/在哪裡修補 lnd,或者我應該如何修補 wallet.db 以使其成為可能等方面的指導。我的節點很好,但沒有種子詞的備份,我必須為未來做計劃。
還有一個 PR 可以使其得到官方支持:https ://github.com/lightningnetwork/lnd/pull/4717
事實證明,從舊的 wallet.db(或由 chantools 提取的主私鑰)和最近的 channel.backup 中恢復,沒有種子,確實是可能的,即使沒有辦法用“官方”lnd 啟動它。
我已經對 lnd 源應用了一個快速的髒更新檔,如下所示:
- 在 walletunlocker/service.go 中,如果助記詞的第一個單詞是“xprv”,則不要通過 ToCipherSeed;創建一個 aezeed.CipherSeed,其熵全為零和一些合理的生日(硬編碼或指定為助記符的第二個單詞)
- 在 lnd 依賴 github.com/btcsuite/btcutil/hdkeychain/extendedkey.go 中,修補 NewMaster 以便它檢查全零種子 [],在這種情況下,回退到 NewKeyFromString(<hardcoded xprv,或 os.Getenv,或讀取文件…>)。
建構 lnd,執行“lncli create”並假裝有一個助記詞,輸入“xprv 3500 lorem ipsum dolor <up to 24 words>”。
塊掃描和靜態通道備份恢復都比成功。