Utxo
如何從全節點查詢一個地址的所有utxos?
我是區塊鏈領域的新手,我正在嘗試從頭開始建構自己的區塊瀏覽器,以真正了解比特幣。我目前在樹莓派中執行一個完整的節點,並且我已經使用 Node.js 的 levelDB 庫對鏈狀態/UTXO 集進行了解碼。這個數據庫的內容並不完全是我在文件中找到的,但足以讓我完全解碼這個數據庫。
基本上,鍵是帶有輸出索引的交易 id,值包含高度、是否是 coinbase 交易、金額和每個 utxo 的地址(在 base58 編碼之前)。
但是,我真的不知道如何以有效的方式查詢該數據庫以獲取特定地址的所有 utxos,而無需掃描整個鏈狀態。我花了大約 10 分鐘才得到一個地址的所有 utxos,這是完全不可接受的。
我想我的具體問題是如何通過值而不是鍵來查詢這個數據庫?或者如果有更好的方法來做到這一點,也許是通過區塊鏈本身?也許是一個 RPC bitcoin-cli 呼叫?
實際上沒有一種方法可以有效地做到這一點,因為比特幣核心不是為此而設計的。
您可以使用
scantxoutset
RPC 命令進行搜尋,但所做的只是遍歷整個數據庫並返回匹配的條目(儘管它比僅按地址更強大;例如,它也可以搜尋 xpub + 派生路徑)。圍繞向比特幣核心添加對可選(和單獨)基於地址的索引的支持有一些工作,但這最早將用於 v0.21。
除此之外,還有許多其他軟體包可以建構這樣的索引(獨立於比特幣核心)。