Bip32-Hd-Wallets

使用 WIF 從 bip39 助記符儲存整個種子

  • March 9, 2022

我正在使用 bitcoinjs 庫集合,特別是<https://github.com/bitcoinjs/wif>、<https://github.com/bitcoinjs/bip32>和<https://github.com/bitcoinjs/bip39>和 nodejs。

我有一個助記符,可以使用 bip39 獲取它的種子:

> const mnemonic = 'laptop arrest wide slice extend today jelly bachelor interest similar debris behind'
> const seed = bip39.mnemonicToSeedSync(mnemonic)
> seed
&lt;Buffer 11 ae 55 c9 cb c0 c8 5c 09 d2 4e 36 4a 90 a6 64 09 fe 2b 87 47 79 4a 7b 03 39 76 ff 4b e9 28 59 84 74 81 cf 07 a2 7f c6 91 67 ec 04 7c a3 dc d9 23 9b ... 14 more bytes&gt;

但是,使用 wif 對其進行編碼然後對其進行解碼僅包含種子的前 16 個字節:

> wif.decode(wif.encode(0x80, seed, true)).privateKey
&lt;Buffer 11 ae 55 c9 cb c0 c8 5c 09 d2 4e 36 4a 90 a6 64 09 fe 2b 87 47 79 4a 7b 03 39 76 ff 4b e9 28 59&gt;

這是一個問題,因為當我使用 bip32.fromSeed 時,派生的密鑰不一樣。使用 bip32.fromPrivateKey 解決了這個問題,但前提是我有鏈碼,它仍然需要以某種方式單獨儲存。

我究竟做錯了什麼?提前致謝。使用助記符時,我是否應該丟棄部分種子以使其與 WIF 對齊?

WIF 是一種用於原始私鑰的編碼方案,通常為 32 字節長。

種子不是私鑰,因此對其進行編碼可能不是一個好主意。

擴展密鑰是私鑰的 32 個字節加上鍊碼的 32 個字節,深度和子索引的字節數更多。像種子一樣,它不應該以 WIF 格式編碼。

我想到了。您需要儲存以 xpriv 開頭的擴展私鑰。你可以用 bip32.fromSeed(seed).toBase58()

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