Api

高畫質錢包如何跟踪所有賬戶?

  • April 23, 2018

例如,如果 HD Wallet 生成 1,000 個帳戶。

他們將如何跟踪所有賬戶的餘額,例如,如果有人向第 455 個賬戶付款,他們會想要更新錢包餘額。

我想儲存所有賬戶不會有效率,查詢區塊鍊或 API 來查詢所有 1,000 個賬戶也不會有效率。

使用孤立的案例:

如果 API HD 錢包生成 1,000 個地址,它無法在使用者每次啟動手機時查詢全部 1,000 個地址,也無法定期查詢,因為每個人都訪問同一個端點,這將是一個瓶頸。

我確實記得 blockchain.info 允許您使用擴展公鑰進行查詢,我想他們使用間隙限制以相同的方式遍歷帳戶。

一般來說,HD 錢包使用以下邏輯來查詢要查詢的地址數量以及何時停止:

  1. 從賬戶 0 開始,生成gap limit地址數量(通常為 20)
  2. 檢查這些地址中的任何交易
  3. 如果沒有交易,停止搜尋新地址和賬戶
  4. 如果有交易,gap limit則從最後一個帶有交易的地址的索引中生成更多。此外,還為賬戶 1 執行此過程(如果賬戶 n 有交易,您只檢查 n+1 賬戶

一般的想法是,如果前一個帳戶未使用,則不會存在任何帳戶,並且在單個連續gap limit的未使用地址塊之後將不會使用帳戶中的任何地址。

像 BitGo 這樣為交易所等提供高畫質錢包服務的公司,你可以很容易地連續擁有數千個未使用的地址,然後是帶有交易的地址,通常會忽略間隙限制。相反,他們維護所有生成地址的列表,並將它們作為單獨的地址進行索引,而不是作為 HD 錢包。

在 API 方面,錢包通常會嘗試保持執行索引。他們將維護一個已知事務的記憶體,並繼續追加它。這樣,當您啟動它時,它只會掃描自上次掃描以來新塊中的事務。這使得即使是輕量級客戶端(例如 Electrum 或 Ledger/Trezor 錢包)也可以通過少量節點為數千名使用者提供服務,因為每個錢包都不會重新查詢它已經知道的以前的交易。

當然,如果您將經常使用的高畫質錢包導入新錢包或刪除記憶體,初始同步可能需要很長時間。但是,錢包的後續同步會快得多。

除此之外,HD 錢包通常會依賴全節點(例如 Bitcoin Core)或 ElectrumX 或 Insight 等系統。所有這些都能夠維持完整的索引。比特幣核心僅維護一個跨已知地址的執行索引(這就是為什麼您在導入地址時需要重新掃描)。ElectrumX 和 Insight 維護一個增強索引,跟踪所有交易,並可以快速返回任何給定地址的數據。

HD 錢包會繼續檢查所有使用地址的交易。他們只是不會每次都重新掃描整個鏈。但是對於每個新區塊,該區塊中的每個 tx 都將針對 HD 錢包中的每個地址進行檢查。這種檢查可以通過布隆過濾器或預索引數據(例如來自 Electrum 或 Insight)快速完成,而不會遇到瓶頸。

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