Blockchain

如何在 HD 錢包中遍歷比特幣地址

  • September 18, 2019

似乎有很多方法可以遍歷比特幣地址。我正在尋找最佳實踐,我也在尋找常見錢包如何做到這一點的記錄邏輯,以便我可以複製他們的行為。

例如,Trezor 在此位置創建第一個地址:m/49’/0’/0’/0/0,然後下一個地址將是 m/49’/0’/0’/0/1,並且很快。因此,似乎很容易在最後一位上使用迭代器。

但是,當您從 m/49’/0’/0’/0/0 消費時,它會將剩餘部分移至 m/49’/0’/0’/1/0 。所以,突然之間,我不僅要遍歷最後一位,還必須遍歷倒數第二位。我本可以說“倒數第二”,但我說倒數第二,因為它聽起來更聰明。

是否有遍歷地址的標準做法?例如,繼續遍歷地址,直到找到沒有交易的地址?或者可能連續說出三個沒有交易的地址?或者這真的是狂野的西部,我們只是隨心所欲?

大多數(但不是全部)錢包將遵循BIP 32、44和49中指定的內容

BIP 32 定義了派生路徑是什麼以及它們的含義。它是獲取 HD 錢包中所有密鑰的標準。

BIP 44 和 49 指定了錢包應該使用的派生路徑。BIP 44 定義了標準派生路徑格式:m / purpose' / coin_type' / account' / change / address_index. 它還定義了purpose非隔離見證比特幣密鑰。

當錢包派生密鑰時,外部密鑰的路徑,即您通過點擊“新接收地址”(或類似的)獲得的那些密鑰是m/44'/0'/0'/0/i並且i只是為新密鑰遞增。

對於內部密鑰,即更改地址的密鑰,派生路徑將change欄位設置為1,因此路徑將針對每個需要的新更改地址遞增m/44'/0'/0'/1/ii

由於該change欄位本質上是一個布爾值,因此不需要遍歷除0and之外的任何索引1

BIP 49 指定purpose用於 P2SH 嵌套 segwit 地址的 for 密鑰。它只是將purpose欄位設置為 49,因此派生路徑將是欄位的m/49'/0'/0'/k/i位置和. 和欄位與 BIP 44 中定義的相同。k``change``i``address_index``change``address_index


重要的是要記住,並非所有錢包都遵循 BIP 32、44 和 49。例如,Armory 使用自己的 HD 錢包算法,該算法早於 BIP 32,儘管目前正在開發對 Armoury 的 BIP 32 支持。其他錢包如 Bitcoin Core 和 MultiBit HD 不遵循 BIP 44。相反,它們使用不同的派生路徑。對於比特幣核心,它是m/k'/i'where kis change(與 BIP 44 相同的定義)和iis address_index(與 BIP 44 相同的定義)。

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