Python: cómo generar direcciones de bitcoin usando la biblioteca electrum

¿Qué estoy haciendo mal aquí? Estoy tratando de generar direcciones de bitcoin a partir de la semilla, pero no coinciden con las de la aplicación electrum. ¿Me he perdido algo? Y también tengo problemas para generar wifs, ya que parece que eliminaron el método bitcoin.SecretToASecret(prv,pressed=True), pero no puedo encontrar con qué lo reemplazaron.

from electrum import bitcoin
from electrum import keystore
from electrum.mnemonic import Mnemonic

defaultseed = "face circle glad valley exhibit find man oblige kingdom scorpion fish misery"

m44_0_0_0_0 = {
    'address': '1ALSQR3C68JLj5rtJHv594r5cviTqoXMNr',  # compressed by default
    'private_key': 'Ky9mddDtaqcLC1vv6egmgQpiZh8Lgh111LnJSyJENxJs3oW93bjD'
}

if __name__ == '__main__':

    password = ''
    bip32_seed = Mnemonic.mnemonic_to_seed(defaultseed, password)

    # m / purpose' / coin_type' / account' / change / address_index
    derivation = "m/44'/0'/0'/"
    xtype = keystore.xtype_from_derivation(derivation)
    # print('seed: {}'.format(repr(bip32_seed)))
    xprv, xpub = bitcoin.bip32_root(bip32_seed, xtype)
    # print('root: {0}  {1}'.format(xprv, xpub))

    xprv, xpub = bitcoin.bip32_private_derivation(xprv, 'm/', derivation)  # 1st account

    # generate first receiving addresses:
    i = 0
    prv, pub = bitcoin.bip32_private_derivation(xprv, "", "0/{index}".format(index=i))

    pub = bitcoin.deserialize_xkey(pub, False)[-1]
    prv = bitcoin.deserialize_xkey(prv, True)[-1]
    addr = bitcoin.public_key_to_p2pkh(pub)

    wif = 'how to generate wif from {prv} using electrum'

    print('{index:2}: {addr}  {wif}'.format(index=i, addr=addr, wif=wif))

Respuestas (1)

La ruta de derivación que utilizó es incorrecta. Electrum no usa bip44. De todos modos, aquí hay una forma de hacer esto para las direcciones p2pkh:

from electrum import bitcoin
from electrum import keystore

seed = "<seed here>"
change = False
address_index = 0


k = keystore.from_seed( seed, '', False )
print( bitcoin.pubkey_to_address('p2pkh', k.derive_pubkey( change, address_index ) ) )
¡Saludos! ¿Puedes importar electrum a python con éxito, cargar una billetera, conectarte a la red oficial de BTC y enumerar el saldo de dicha billetera? Parece que no puedo averiguar cómo hacerlo después de pasar mucho tiempo mirando sus documentos. el inicio rápido en los scripts parece muy útil, pero se conecta a una red de prueba y no a la red bitcoin real.
@frogeyedpeas probablemente deberías pedir ayuda con eso en el canal #electrum irc en freenode.