No sé si te va a ayudar algo lo que te comento. Me salgo un poco por la tangente...
No he trabajado con wallets HD en Python, pero supongo que habría que llamar a las funciones de BIP32Node.
https://github.com/richardkiss/pycoin/blob/master/pycoin/key/BIP32Node.pySí he trabajado con wallets HD en Copay y Colu, que utilizan Node.js.
Por ejemplo, en Copay obtienes el wallet HD a partir de una semilla de palabras según se especifica en BIP39.
var Mnemonic = require('bitcore-mnemonic');
var code = new Mnemonic('cheese upset pudding inmate flavor crush hard same element index laugh supreme');
var xpriv = code.toHDPrivateKey();
var privKey=xpriv.toJSON()['privateKey'];
Y en Colu, directamente de la documentación:
var Colu = require('colu')
var settings = {
network: 'mainnet',
privateSeed: null
}
var colu = new Colu(settings)
colu.on('connect', function () {
var address = colu.hdwallet.getAddress()
console.log("address: ", address)
})
colu.init()
Si quieres las siguientes direcciones, vuelves a llamar a colu.hdwallet.getAddress() tantas veces como sea necesario.
Estas dos webs me sirvieron para hacerme mejor a la idea de los wallets HD:
https://coinb.in/http://bip32.org/Y al mismo tiempo me sirvió para darme cuenta de que queda bastante por desarrollar. Por ejemplo, coinb.in aún no permite pasar tus propios xprv y xpub, y en bip32.org aún no está disponible el "derivation path" m/44'/0'/0' (BIP44) que se está empezando a utilizar bastante, por ejemplo, en Copay.
Mycelium Gear tiene una implementación en Ruby.
Siento no poder ser de más ayuda
EDIT: En Electrum parece que no utilizan pycoin:
https://github.com/spesmilo/electrum/blob/master/lib/wallet.py . Conviertes el mnemónico a semilla en
mnemonic_to_seed, y a partir de ahí obtienes el xpub y xprv con las funciones
add_xpub_from_seed y
add_xprv_from_seed respectivamente.