Importación de claves maestras en el núcleo de bitcoin

Quiero usar una frase mnemotécnica y BIP 39 para almacenar las claves, y usar bitcoin-core, entiendo que las claves privadas maestras no se pueden importar al menos directamente y esa frase mnemotécnica no es compatible.

Además, sé que existe la idea de repensar el formato de billetera del núcleo de bitcoin para usar descriptores que admitan la derivación de claves usando BIP32.

Mi idea era usar importmulti para generar una billetera utilizable básica con algunas direcciones generadas a partir de la clave de la cuenta maestra.

Usando https://iancoleman.io/bip39/ , generé una semilla y un mnemotécnico:

rebel image use energy write boil throw okay claw
umbrella advice together clarify water actress

Desde allí puedo obtener la clave privada extendida de la cuenta (44'/1'/0'):

tprv8fvSBE7NPnC8FJfBwcptSmmgxhQZhsAbbzRWaLo9d9ystozdV7BFUbRHqvYgL18fnV3WfM4GZb2cLKbLq5H8qZqC9XDnq8Mep3RWXfRsZ7o

A partir de ahí, puedo crear algunos descriptores para crear una billetera utilizable:

Externo

deriveaddresses "combo(tprv8fvSBE7NPnC8FJfBwcptSmmgxhQZhsAbbzRWaLo9d9ystozdV7BFUbRHqvYgL18fnV3WfM4GZb2cLKbLq5H8qZqC9XDnq8Mep3RWXfRsZ7o/0h/*)#quvrmfad" 0
# => ["myeHNHuNnbk1aG4WcJNkWw6foM2G64AXGF", "myeHNHuNnbk1aG4WcJNkWw6foM2G64AXGF", "tb1qcm233e9h79ntuv4c5mhsvmfhe2umvm0hsgafsf", "2N56BvNBqmkTh1Jic4GbpXSYpbtTNHUdQFw"]

Interno

deriveaddresses "wpkh(tprv8fvSBE7NPnC8FJfBwcptSmmgxhQZhsAbbzRWaLo9d9ystozdV7BFUbRHqvYgL18fnV3WfM4GZb2cLKbLq5H8qZqC9XDnq8Mep3RWXfRsZ7o/1h/*)#6gdaynzv" 0
# => ["tb1q5vgxy6ntsugpdde9ryhst66cz8z4c8ztp4k7qv"]

Para generar la billetera, creé una billetera vacía (ya que no quiero depender de las copias de seguridad, solo el mnemotécnico que generé anteriormente) e importé algunas direcciones con importmulti:

createwallet "mnemonic-test" false true
importmulti '[{"desc": "combo(tprv8fvSBE7NPnC8FJfBwcptSmmgxhQZhsAbbzRWaLo9d9ystozdV7BFUbRHqvYgL18fnV3WfM4GZb2cLKbLq5H8qZqC9XDnq8Mep3RWXfRsZ7o/0h/*)#quvrmfad", "range": 10, "timestamp": "now"}, {"desc": "wpkh(tprv8fvSBE7NPnC8FJfBwcptSmmgxhQZhsAbbzRWaLo9d9ystozdV7BFUbRHqvYgL18fnV3WfM4GZb2cLKbLq5H8qZqC9XDnq8Mep3RWXfRsZ7o/1h/*)#6gdaynzv", "range": 10, "internal": true, "timestamp": "now"}]' '{"rescan": false}'

Parece funcionar, se generan todas las direcciones generadas, no hay semilla HD habilitada (por lo que las direcciones siempre se derivan de la semilla mnemotécnica).

Los problemas que encontré es que, esas direcciones, nunca son usadas por bitcoin-wallet, al intentar recibir bitcoin dice que no puede generar una dirección (no intenta usar una de las direcciones ya generadas) y al gastar dice que sí no tiene ninguna dirección interna disponible.

¿Sabes cómo habilitar esas monedas?

Respuestas (1)

No puede importar claves privadas al conjunto de claves. Esto actualmente no está permitido porque generalmente se considera inseguro, al menos con la forma en que funciona la billetera hoy. Se está trabajando para cambiar esto en el futuro.

Puede hacer una configuración de billetera dividida en la que tenga una billetera de solo reloj con las claves públicas importadas en el conjunto de claves y usar eso para la generación de direcciones y la creación de transacciones. Luego, tiene una billetera con solo las claves privadas importadas y las usa para firmar. Pero eso no es lo que quieres.

Si no está obligado a usar una semilla BIP 39, puede generar una semilla de 256 bits y usarla sethdseedpara configurar la semilla HD de una billetera. Eso haría lo que quieras, pero BIP 39 usa semillas de 512 bits y no 256, por lo que no funcionará allí.


Las direcciones importadas nunca se usan automáticamente cuando lo hace getnewaddress. Cuando los importa, debe configurar keypool: "true"cada objeto importado para que funcione.

El problema es que keypool: truees only allowed when wallet private keys are disabled. pero quiero usarlos, así que no sé cómo hacerlo.
Correcto. No puedes entonces. La razón por la que no se permite el uso compartido de claves para billeteras con claves privadas es que no queremos que los usuarios usen claves que han sido expuestas. Las claves privadas importadas se consideran expuestas. Importar claves privadas al conjunto de claves también significa que puede estar reutilizando direcciones, y queremos evitar eso también.
¿Podría generar un mnemotécnico, usarlo para generar la semilla de 512 bits, dividir esa semilla en dos y usar la primera en el núcleo de bitcoin? Si alguna vez perdí el acceso a las copias de seguridad del núcleo de bitcoin, puedo usar el mismo procedimiento para obtener la misma semilla, ¿es correcto? tiene sentido?
Podrías hacer eso, pero la semilla sería inútil en cualquier otro software.