Como novato en Bitcoin y programándolo, estoy tratando de generar direcciones BTC a partir de mnemotécnicos. Así que leí sobre los BIP y encontré códigos en Github que los implementan.
¡Descubrí que Electrum no implementa BIP-39 (por defecto si no me he equivocado), porque Electrum acepta mnemónicos que no son válidos en BIP-39!
Entonces mi pregunta es: ¿ Cómo hace Electrum su propia sección "De mnemónico a semilla" (al menos para la billetera estándar)? Este "byte semilla" es el que se utilizará en BIP-32 para generar claves, si no me he equivocado.
Probé el siguiente psuedocódigo de Python (de "Electrum Seed Version System"):
hmac = hmac.digest(b"Seed version", b"...(12 word mnemonic)...", hashlib.sha512)
bip32_thing = Bip32(secret = hmac[:32], chain = hmac[32:]) # default: Bip32 main net version (idk what this means)
Pero mi clave pública maestra generada y la de Electrum no coinciden (lo más probable es que no haya entendido bien el "Sistema de versión de semillas"). ¡Gracias por responder!
En caso de que ayude: estoy usando bip-utils
en Python.
Después de muchas horas, lo encontré! ¡ Es exactamente lo que Mnemonic.mnemonic_to_seed()
hace en mnemonic.py! ( enlace )
La parte más relevante es lo que devuelve:
seed_byte = hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'), b'electrum' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS)
donde PBKDF2_ROUNDS = 2048
_ Entonces, acabo de hacer...
bip32_node = Bip32.FromSeed(seed_byte) # Derivation path: "m/"