Я очень новичок в разработке биткойнов, так что простите меня...
Я использую NBitcoin в консольном приложении .Net для создания главного ключа с помощью мнемоники, а затем для получения иерархических ключей. Вот код, который я использую:
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
Путь: м/0/0
Я также протестировал мнемонику на Jaxx, а также кошелек Coinomi на Android, и он получил те же ключи, что и 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