Spv

如何使用 bitcoin-filter.js(或其他庫)從 SPV 錢包中獲取所有 UTXO?

  • June 16, 2020

我正在使用bitcoinjs-lib創建私鑰 (WIF)、地址並簽署交易。

我想獲取與錢包相關的所有交易(UTXO)。我找到了這些庫: bitcoin-filterbitcoin-net

但我不明白下面的程式碼:

var filter = new Filter(peers)
filter.add(new Buffer('818895f3dc2c178629d3d2d8fa3ec4a3f8179821', 'hex'))
filter.add(walletObject)

過濾器接收什麼參數?他們是地址嗎?如果是這樣,我怎樣才能找到一個HD錢包的所有使用地址?

你在這裡問了幾個不同的問題,我會盡力幫助解決每個問題:

**錢包過濾器:**參見BIP37,它概括地描述了 SPV 錢包。布隆過濾器由SPV 錢包生成並發送到網路上的完整節點。過濾器是一個緊湊的資料結構,表示 SPV 錢包感興趣的每個公鑰。全節點將根據該過濾器檢查塊中的每筆交易和記憶體池,如果匹配,則將該交易發送回 SPV 錢包. BIP37 指定了過濾器測試的所有數據,但總的來說,它包括交易雜湊、公鑰、公鑰雜湊和腳本雜湊。

你可以在 bcoin 錢包(也是 JavaScript)中看到,錢包的公鑰雜湊值和監視的 outpoints 被添加到布隆過濾器中。

bcoin套接字 API還具有一種方法,用於在將地址散列發送到完整節點之前將地址雜湊添加到布隆過濾器。

**高畫質錢包地址:**要了解高畫質錢包,閱讀描述恢復過程的BIP44很重要。在 BIP44 錢包恢復期間,程序以熵種子開始(源自您的 12 或 24 詞片語)。然後它生成賬戶 0,接收並更改地址 0 到 20。然後,從指定的區塊高度(就在錢包第一次及時生成之前)開始,它遍歷區塊鏈,尋找與這些地址匹配的 TX。每次找到匹配項時,它都會生成另一個地址(第 21 個地址,依此類推……)。在 SPV 模式下,必須將每個新地址添加到布隆過濾器並發送回全節點。這實際上可能會導致錢包同步出現問題,並且可能需要重新掃描某些塊。

筆記:

我正在使用 bitcoinjs-lib 創建私鑰 (WIF)、地址並簽署交易。我想獲取與錢包相關的所有交易(UTXO)。

通常,使用單個私鑰並重用單個地址被認為是不好的做法。BIP44 是生成多個密鑰和地址的錢包的出色設計。

如果你真的只有一個地址可以掃描 UTXO,你可以使用地址索引器,如 bcoin即將合併到比特幣核心。僅對單個地址使用rpc scantxoutset也可能取得一些成功。

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