我对比特币发展很陌生,请原谅我......
我在.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钱包使用标准的12字助记符,我将其解雇并使用相同的助记符生成我的钱包。但是没有一把钥匙匹配!我导出了我的公钥,并确保它是" m / 0/0"来自大师。你可以看到它不匹配:
使用相同助记符从Exodus导出公钥:
助记符:干棕色驾驶游行激烈闪耀拥抱硬报贷褶皱铁
地址: 1DMDJ266gxMCJiTcWk5MZFbfxxx4Ss3URN
路径: m / 0/0
我还测试了Jaxx上的助记符以及Android上的Coinomi钱包,它衍生出与Exodus相同的键。
所以我完全糊涂了。我唯一能想到的是,这些钱包使用的标准熵是我实施中缺少的?
我的问题是,如何使用NBitcoin创建与Exodus,Coinomi和Jaxx等钱包相同的助记符号?
答案 0 :(得分:1)
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();