NBitcoin,如何實現錢包恢復?它是如何工作的?
起初很抱歉我的無知,我在比特幣程式方面幾乎沒有經驗。
我正在嘗試使用 NBitcoin 庫實現一個非常簡單的錢包。我做了一些工作,但現在我堅持使用錢包恢復功能。
假設我有助記私鑰,然後我計算它的公鑰。
使用公鑰,我可以跟踪與此密鑰相關的所有交易嗎?即使我使用了多個地址?它是如何完成的(NBitcoin)?有什麼建議嗎?我是否必須遍歷整個區塊鏈並檢查簽名?
謝謝你。
使用公鑰,我可以跟踪與此密鑰相關的所有交易嗎?
公鑰有兩個對應的地址:未壓縮和壓縮。為了簡單起見,我建議只生成壓縮的公鑰。相關方法是
Compress
和Decompress
here。所以,是的。
即使我使用了多個地址?
多個地址:是的,您應該跟踪所有地址。
我是否必須遍歷整個區塊鏈並檢查簽名?
你應該使用 SPV:下載一個塊,驗證它,保留標題,跳到下一個塊。此外,您應該保留傳入/傳出的交易。將目前區塊高度寫入錢封包件是個好主意,因為在您第二次啟動錢包後,您只需下載區塊並掃描該區塊高度之後的相關交易。
恢復錢包餘額:
要僅從助記密碼恢復錢包餘額並確定您可使用的 UTXO,您需要使用已驗證區塊鏈的受信任本地節點執行 UTXO 掃描。
使用
Bitcoind
伺服器,考慮查詢scantxoutset
,它允許您確定(每個公鑰/地址)哪些未使用的輸出由您的錢包控制。恢復錢包歷史:
恢復錢包的接收/支出歷史將需要你為所有交易建立一個“地址索引”,索引與你控制的地址相關的 tx。
Libbitcoin-Server
預設情況下,已經按標準地址對所有交易進行了索引,因此您可以查詢標準 Libbitcoin 伺服器以獲取錢包中每個地址的完整歷史記錄。注意:您不需要在錢包恢復期間驗證簽名,因為您的本地比特幣伺服器已經驗證了這些。如果您正在執行自己的驗證全節點,則無需建構 SPV 客戶端。