Cómo importar una clave privada a una billetera encriptada (en un cliente estándar)

Tengo un cliente estándar (cliente QT en OSX) con una billetera encriptada. Intenté importar claves con pywallet, pero aunque decía que las estaba importando, cuando volví a ejecutar el cliente de bitcoin, dijo que wallet.dat estaba dañado (sí, el cliente no se estaba ejecutando cuando hice la importación).

Supongo que pywallet no conoce el cifrado y no se preocupó lo suficiente como para verificar que todo estuviera bien antes de importarlos.

Entonces, ¿cómo hago esta importación?


Al intentar ejecutar el cliente de la línea de comandos, aparece el siguiente error unos segundos después de iniciarlo (con la opción -daemon, por supuesto):

EXCEPTION: NSt8ios_base7failureE       
CDataStream::read() : end of data       
bitcoin in AppInit()       

Ejecutar el cliente QT con la -serveropción también falla después de un tiempo (aparentemente funciona correctamente sin eso).

Logré importarlos a MultiBit, sin embargo, no funciona de todos modos: bitcoin.stackexchange.com/questions/3549/…

Respuestas (1)

Desde 0.6.0, la importación/exportación de claves está disponible en el propio cliente, aunque solo a través de RPC. Los comandos se llaman dumpprivkeyy importprivkey. Por ejemplo (en testnet):

$ ./bitcoin obtener nueva dirección

n2JjZgLeCUgfubswxDm9zAaBGSLLHSLdNv

$ ./bitcoind dumpprivkey n2JjZgLeCUgfubswxDm9zAaBGSLLHSLdNv

cR4RtpaeAZY8MwrNvTQGX9PZ9pdCgFoLxuo4Pkwqx61broC4Gb4y

Y en otra billetera:

$ ./bitcoind importprivkey R4RtpaeAZY8MwrNvTQGX9PZ9pdCgFoLxuo4Pkwqx61broC4Gb4y

$ ./bitcoind validar dirección n2JjZgLeCUgfubswxDm9zAaBGSLLHSLdNv

{ "isvalid": verdadero, "dirección": "n2JjZgLeCUgfubswxDm9zAaBGSLLHSLdNv", "ismine": verdadero, "pubkey": "029e3a934cfc9f89d7a1c15f99b98479cabc81964f4972e7b8fa3989a788261695", "iscompressed": verdadero, "cuenta" }

Oh, aparentemente bitcoin-qt no proporciona un servidor para que el cliente de línea de comandos se conecte; también parece que bitcoind ya no se inicia, fallando con una excepción unos segundos después de que comenzó... (¿admite billeteras encriptadas? en las opciones no noté nada al respecto...)
Debe ejecutar "bitcoin-qt -server" para que proporcione un servidor. Y necesitará tener 'rpcuser=x' y 'rpcpassword=y' en su archivo bitcoin.conf, pero creo que bitcoin-qt le dirá eso si no lo tiene. bitcoind admite billeteras encriptadas, pero asegúrese de estar usando la misma versión que la versión de bitcoin-qt que tiene.
@ChrisMoore mmmh, al hacerlo, solo obtengo errores -4 "Error al agregar la clave a la billetera" si intento agregar priv_sipao -5 "Clave privada no válida" si intento agregarpriv
Oh, necesita descifrar su billetera temporalmente para que pueda agregar la nueva clave. Hago lo siguiente, para que mi frase de contraseña no termine en mi historial de shell. Abre la billetera durante 60 segundos: lea x; ./frase de contraseña de la billetera bitcoin "$x" 60; desarmar x
No puedo hacer eso: si ejecuto el servidor desde la línea de comandos, se bloquea después de un tiempo, y lo mismo sucede si ejecuto el cliente QT con la opción -server.
Entonces eso es un error. ¿Puedes reportarlo en github? No obstante, esta respuesta es cómo se pretende realizar la importación de claves.