NBitcoin и мнемонические стандарты

Я очень новичок в разработке биткойнов, так что простите меня...

Я использую 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?

Ответы (1)

Мнемонический стандарт — 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