Recuperación de billetera con semilla Bip39

De tener una lista de semillas bip39, hay alguna forma de recuperar una billetera? En particular, tengo una lista de ~100 semillas, una de las cuales es mía, y necesito una forma automática de averiguar cuál es válida y tiene mis fondos. Gracias

Respuestas (1)

Hay algunas cosas a considerar aquí.

Primero, ¿conoces el camino de la billetera HD? Puede averiguar qué tipo de estructura de ruta está utilizando su billetera, y si la dirección con las transacciones no gastadas fue la primera, entonces sería la cuenta 0, por ejemplo.

Vea esto en las rutas BIP44...

Si conoce la estructura de la ruta y sabe la dirección exacta que está buscando en una ruta determinada, entonces podría hacer algo como esto usando bitcoinjs-lib:

const bip39 = require("bip39")
const bitcoin = require("bitcoinjs-lib")

const network = bitcoin.networks.bitcoin

for (const phrase of phrases) {
    const seed = await bip39.mnemonicToSeed(phrase)
    const root = bitcoin.bip32.fromSeed(seed, network)
    const path = "m/44'/0'/0'/0"
    const child = root.derivePath(path)
    const { address } = bitcoin.payments.p2sh({
        redeem: bitcoin.payments.p2wpkh({
            pubkey: child.publicKey,
            network
        }),
        network
    })

    if (address === '3...') {
        //this is yours
    }
}

Tenga en cuenta que este ejemplo es para direcciones encapsuladas P2WPKH (prefijo 3). Tendría que cambiar esto un poco dependiendo del tipo de dirección que está tratando de hacer coincidir.

Hola Michael, lamentablemente no tengo la ruta de la billetera HD. Tengo una lista de semillas (y, por lo tanto, puedo derivar la clave pública maestra) y estaba pensando en escanear la cadena de bloques (blockchain.com) usando la clave pública maestra para ver los fondos en la billetera. Sé cuántos bitcoins tengo en esa cuenta. ¿Tiene alguna otra sugerencia sobre cómo hacer esto sin la ruta? Siempre puedo derivar direcciones, pero eso tomará mucho tiempo.
@SameerLal de hecho! Puede obtener los xpubs de la lista de semillas que tiene recorriéndolos como se muestra arriba, y luego verifique en blockchain.com/btc/xpub/ <xpub_address> para ver si ha encontrado su coincidencia.
¡gracias! Esto funciona bien. Disculpe tantas preguntas, pero ¿conoce algún módulo de Python o algún código que me permita derivar la dirección xpub de la semilla bip39 sin tener que hacer ningún trabajo pesado? solo tratando de ahorrar tiempo.
Seguro que no hay problema. ¿Python es tu preferencia? El fragmento que publiqué anteriormente usa bitcoinjs-lib, que está bastante bien mantenido y es fácil de usar, pero si nodo/JavaScript no es lo tuyo, también puedo ayudarte a lograrlo con una biblioteca de python.
Sí, preferiría python porque ya tengo un script (bastante largo) que escribí en python para otras partes. Si no conoce ninguna otra alternativa, no se preocupe, puedo pasar un tiempo tratando de pytonificar el código que escribió.
Esto parece prometedor: github.com/ranaroussi/pywallet/blob/master/README.rst , excepto que en su caso querrá proporcionar sus mnemónicos de una lista en lugar de usar el método generate().
esto parece interesante, excepto que creo que en el archivo Léame está creando una billetera derivada de la frase. la clave xpub en el json es diferente a la que veo en el sitio de Ian: iancoleman.io/bip39 . En realidad no estoy seguro de por qué este es el caso, ¿alguna idea?
Estoy pensando en algo como esto: for seed in checksum_candidates: w = wallet.create_wallet(network="BTC", seed=seed) xpubkey = w['xpublic_key'] url = f'https://blockchain.info/multiaddr?active={xpubkey}' time.sleep(1) r = requests.get(url = url, verify=False) response_dict = json.loads(r.text) print(response_dict['wallet']['final_balance']) pero me preocupa que este método no funcione por algún motivo, ya que obtengo un saldo de 0 para todas mis semillas candidatas (¿falsos negativos?)
Parece que python lib usa la ruta m/44'/0'/0'/mientras que el sitio de Ian usa m/44'/0'/0/sin el último . Pero la ruta solo afectaría a las direcciones derivadas, no al root xpub. ¿Está utilizando root xpub para consultar los historiales de transacciones?