NBitcoin 和助记词标准

NBitcoin and Mnemonic Standards

我对比特币开发还很陌生,所以请原谅我...

我在 .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" 路径从主密钥派生的 public 地址:

Mnemonic: dry brown drive parade drastic shine embrace hard report loan fold iron

Path: m/0/0/: 1GcchMaHAN1XRQsoi8gPg8TShqzN4sNGvu

我测试了使用助记符重新创建我的密钥,并且始终能够派生出与我的控制台应用程序中预期的完全相同的密钥。

出于好奇,我想看看我是否可以将这个助记词导入现有的钱包软件并获得相同的密钥。由于 Exodus 钱包使用标准的 12 字助记符,我启动它并使用相同的助记符生成了我的钱包。但是 none 的键匹配!我导出了我的 public 密钥,并确保它与 master 的“m/0/0”路径相同。如您所见,它不匹配:

使用相同的助记符从 Exodus 导出 public 密钥:

Mnemonic: dry brown drive parade drastic shine embrace hard report loan fold iron

Address: 1DMDJ266gxMCJiTcWk5MZFbfxxx4Ss3URN

Path: m/0/0

我还在 Jaxx 上测试了助记符,在 Android 上测试了 Coinomi 钱包,它派生出与 Exodus 相同的密钥。

所以我完全糊涂了。我唯一能想到的是,我的实现中缺少这些钱包使用的标准熵?

我的问题是,我如何使用 NBitcoin 创建与 Exodus、Coinomi 和 Jaxx 等钱包使用的相同的助记符标准?

1DMD由路径m/44'/0'/0'/0/0

生成

试试这个:

Mnemonic mnemo = new Mnemonic("dry brown drive parade drastic shine embrace hard report loan fold iron",Wordlist.English);
ExtKey hdroot = mnemo.DeriveExtKey();
var firstprivkey = hdroot.Derive(new KeyPath("m/44'/0'/0'/0/0"));
var firstpubKey = firstprivkey.Neuter().PubKey;
return firstpubKey.GetAddress(Network.Main).ToString();