NBitcoin y estándares mnemotécnicos

Soy muy nuevo en el desarrollo de Bitcoin, así que perdóname...

Estoy usando NBitcoin en una aplicación de consola .Net para generar una clave maestra usando un mnemotécnico y luego derivar claves jerárquicas. Aquí está el código que estoy usando:

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"));

Aquí está el mnemotécnico que obtengo como resultado, así como una dirección pública derivada de la clave maestra usando la ruta "m/0/0" :

Mnemotécnico: desfile de conducción marrón seco brillo drástico abrazo duro informe préstamo doblar hierro

Ruta: m/0/0/: 1GcchMaHAN1XRQsoi8gPg8TShqzN4sNGvu

Probé recreando mis claves usando el mnemotécnico y siempre pude derivar las mismas claves exactas que esperaba dentro de mi aplicación de consola.

Siendo curioso, quería ver si podía importar este mnemotécnico en el software de billetera existente y obtener las mismas claves también. Dado que la billetera Exodus usa una regla nemotécnica estándar de doce palabras, la encendí y generé mi billetera usando la misma regla nemotécnica. ¡Sin embargo, ninguna de las claves coincide! Exporté mi clave pública y me aseguré de que fuera la misma ruta de "m/0/0" del maestro. Como puedes ver NO es una coincidencia:

Clave pública exportada de Exodus usando el mismo mnemotécnico:

Mnemotécnico: desfile de conducción marrón seco brillo drástico abrazo duro informe préstamo doblar hierro

Dirección: 1DMDJ266gxMCJiTcWk5MZFbfxxx4Ss3URN

Ruta: m/0/0

También probé el mnemotécnico en Jaxx, así como la billetera Coinomi en Android y derivó las mismas claves que Exodus.

Así que estoy completamente confundido. Lo único que se me ocurre es que hay una entropía estándar que usan estas billeteras que falta en mi implementación.

Mi pregunta es, ¿cómo puedo usar NBitcoin para crear el mismo estándar mnemotécnico que usan las billeteras como Exodus, Coinomi y Jaxx?

Respuestas (1)

El estándar mnemotécnico es BIP 39, y ese no es el problema. El problema son las rutas de derivación.

Exodus, Jaxx, Coinomi y muchas otras billeteras usan la especificación BIP 44 para derivar claves. Esto significa mque para esas billeteras es en realidad la clave en la ruta m/44'/0'/0'. Sin embargo, en su código con NBitcoin, está utilizando rutas BIP 32 directas, por lo mque en realidad es m. Entonces, en NBitcoin, su ruta clave es en realidad, m/0/0pero en otro software de billetera, la ruta esm/44'/0'/0'/0/0