0

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

我在 .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 等钱包相同的助记符标准?

4

1 回答 1

2

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();
于 2017-10-10T00:05:20.873 回答