Bip32-Hd-Wallets

NBitcoin 和助記符標準

  • December 26, 2017

我對比特幣開發很陌生,所以請原諒我……

我在 .Net 控制台應用程序中使用 NBitcoin 使用助記符生成主密鑰,然後派生分層密鑰。這是我正在使用的程式碼:

Mnemonic mnemo = new Mnemonic(Wordlist.English, WordCount.Twelve);
ExtKey hdroot = mnemo.DeriveExtKey();
var wif = hdroot.GetWif(Network.Main);
var defaultAddress = hdroot.Derive(new KeyPath("m/0/0"));

這是我得到的助記符,以及使用**“m/0/0”**路徑從主密鑰派生的公共地址:

**助記詞:**幹棕驅車大放光擁抱硬報借折鐵

路徑:m/0/0/: 1GcchMaHAN1XRQsoi8gPg8TShqzN4sNGvu

我測試了使用助記符重新創建我的密鑰,並且始終能夠在我的控制台應用程序中派生出與預期完全相同的密鑰。

出於好奇,我想看看我是否可以將這個助記詞導入現有的錢包軟體並獲得相同的密鑰。由於 Exodus 錢包使用標準的十二字助記符,我啟動它並使用相同的助記符生成我的錢包。但是沒有一個鍵匹配!我導出了我的公鑰,並確保它與主節點的“m/0/0”路徑相同。如您所見,它不是匹配項:

使用相同的助記符從 Exodus 導出的公鑰:

**助記詞:**幹棕驅車大放光擁抱硬報借折鐵

地址: 1DMDJ266gxMCJiTcWk5MZFbfxxx4Ss3URN

路徑: m/0/0

我還測試了 Jaxx 上的助記符以及 Android 上的 Coinomi 錢包,它派生了與 Exodus 相同的密鑰。

所以我完全糊塗了。我唯一能想到的是,這些錢包使用的標準熵在我的實現中缺少嗎?

我的問題是,如何使用 NBitcoin 創建與 Exodus、Coinomi 和 Jaxx 等錢包相同的助記符標準?

助記符標準是 BIP 39,這不是問題。問題是派生路徑。

Exodus、Jaxx、Coinomi 和許多其他錢包使用 BIP 44 規範來派生密鑰。這意味著m這些錢包實際上是路徑的關鍵m/44'/0'/0'。但是,在您使用 NBitcoin 的程式碼中,您使用的是直接 BIP 32 路徑,因此您m實際上是m. 所以在 NBitcoin 中,你的密鑰路徑實際上是,m/0/0但在其他錢包軟體中,路徑是m/44'/0'/0'/0/0

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