Estoy tratando de volver a generar las direcciones de recepción (y cambiar las direcciones, para el caso) que ha generado mi billetera de mycelium.
Hasta ahora he usado la implementación de trezor de BIP39 para generar la entropía de las 12 palabras, y una implementación de BIP32 que he usado anteriormente (con éxito, para generar las mismas direcciones que el núcleo de bitcoin, que usa un esquema de subclaves diferente pero de un tpub, no de la entropía), para producir las claves de la entropía.
Aquí está el código:
from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
import bip39
wallet_generator = bip39.Mnemonic('english')
entropy = wallet_generator.to_entropy('12 words here')
key = BIP32Key.fromEntropy(entropy)
account_number = 0
i = 0
print key.ChildKey(44 + BIP32_HARDEN) \
.ChildKey(0 + BIP32_HARDEN) \
.ChildKey(account_number + BIP32_HARDEN) \
.ChildKey(0) \
.ChildKey(i) \
.Address()
Estoy tratando de seguir el esquema de BIP44 como se describe aquí .
Obtengo una clave, pero no la que aparece en mi primera transacción de micelio. Intenté buscar los primeros 100 i
con account_number
0 a 9, sin éxito. Usar bip32gen
desde la línea de comando tampoco produce la clave correcta:
echo YOUR_ENTROPY_IN_HEX_HERE | \
bip32gen -v \
-i entropy -f - -x \
-o addr -F - -X \
m/44h/0h/0h/0/0
Con entropy
convertido a hexadecimal conprint ''.join('{:02X}'.format(x) for x in entropy)
¿Qué me estoy perdiendo? ¿La entropía con la parte BIP39 es incorrecta? ¿Esa biblioteca BIP32 está generando direcciones erróneas? ¿Qué alternativas hay?
ACTUALIZAR:
Gracias a este sitio , he visto que el xprv generado a partir de las 12 palabras es incorrecto. Entonces, o el bip39 está defectuoso, o la forma en que lo estoy usando lo está.
La dificultad está en los mal nombrados BIP32Key.fromEntropy
.
Por lo general, para crear una nueva billetera, usted:
BIP32Key.fromEntropy
realmente debería haber sido nombrado BIP32Key.fromSeed
.
Aquí hay un ejemplo:
from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
import os, bip39
strength_bits = 128
entropy = os.urandom(strength_bits // 8)
wallet_generator = bip39.Mnemonic('english')
mnemonic = wallet_generator.to_mnemonic(entropy)
assert wallet_generator.to_entropy(mnemonic) == entropy # see, bijective!
# Or specify the mnemonic directly if you prefer:
mnemonic = 'aware report movie exile buyer drum poverty supreme gym oppose float elegant'
print mnemonic
seed = bip39.Mnemonic.to_seed(mnemonic)
key = BIP32Key.fromEntropy(seed)
account_number = 0
i = 0
print key.ChildKey(44 + BIP32_HARDEN) \
.ChildKey(0 + BIP32_HARDEN) \
.ChildKey(account_number + BIP32_HARDEN) \
.ChildKey(0) \
.ChildKey(i) \
.Address()
andres chow
m/44'/0'/0'/0/i
, pruebam/44'/0'/0'/0'/i
.gabriel
pebwindkraft