Wallet

NBitcoin,如何實現錢包恢復?它是如何工作的?

  • February 17, 2022

起初很抱歉我的無知,我在比特幣程式方面幾乎沒有經驗。

我正在嘗試使用 NBitcoin 庫實現一個非常簡單的錢包。我做了一些工作,但現在我堅持使用錢包恢復功能。

假設我有助記私鑰,然後我計算它的公鑰。

使用公鑰,我可以跟踪與此密鑰相關的所有交易嗎?即使我使用了多個地址?它是如何完成的(NBitcoin)?有什麼建議嗎?我是否必須遍歷整個區塊鏈並檢查簽名?

謝謝你。

使用公鑰,我可以跟踪與此密鑰相關的所有交易嗎?

公鑰有兩個對應的地址:未壓縮和壓縮。為了簡單起見,我建議只生成壓縮的公鑰。相關方法是CompressDecompress here

所以,是的。

即使我使用了多個地址?

多個地址:是的,您應該跟踪所有地址。

我是否必須遍歷整個區塊鏈並檢查簽名?

你應該使用 SPV:下載一個塊,驗證它,保留標題,跳到下一個塊。此外,您應該保留傳入/傳出的交易。將目前區塊高度寫入錢封包件是個好主意,因為在您第二次啟動錢包後,您只需下載區塊並掃描該區塊高度之後的相關交易。

恢復錢包餘額:

要僅從助記密碼恢復錢包餘額並確定您可使用的 UTXO,您需要使用已驗證區塊鏈的受信任本地節點執行 UTXO 掃描。

使用Bitcoind伺服器,考慮查詢scantxoutset,它允許您確定(每個公鑰/地址)哪些未使用的輸出由您的錢包控制。

恢復錢包歷史:

恢復錢包的接收/支出歷史將需要​​你為所有交易建立一個“地址索引”,索引與你控制的地址相關的 tx。

Libbitcoin-Server預設情況下,已經按標準地址對所有交易進行了索引,因此您可以查詢標準 Libbitcoin 伺服器以獲取錢包中每個地址的完整歷史記錄。

注意:您不需要在錢包恢復期間驗證簽名,因為您的本地比特幣伺服器已經驗證了這些。如果您正在執行自己的驗證全節點,則無需建構 SPV 客戶端。

引用自:https://bitcoin.stackexchange.com/questions/84196