Pages:
Author

Topic: Consulta sobre el archivo 'wallet.dat' (Read 4589 times)

hero member
Activity: 616
Merit: 501
August 26, 2014, 03:23:07 PM
#26
¡Bien!, gracias, queda bastante más rápido...
Code:
#!/bin/bash
./bitcoind -daemon -checkblocks=5
rec=$(./bitcoin-cli -rpcwait listreceivedbyaddress 0 true | grep -c '"address" :')
out=$(./bitcoin-cli -rpcwait listtransactions | grep -c '"category" : "send"')
echo 'Direcciones usadas: '$((rec+out))
./bitcoind stop

legendary
Activity: 1974
Merit: 1030
August 26, 2014, 03:10:15 PM
#25
Prueba también '-checkblocks=5' para un arranque rapidito del daemon Wink.
hero member
Activity: 616
Merit: 501
August 26, 2014, 02:39:12 PM
#24
Ha ok gracias, bitcoind sería el server y bitcoin-cli el cliente, igual que cualquier par cliente-servidor (por ejemplo mysqld, mysql)...

Viendo las opciones de bitcoin-cli, me llamó la atención -rpcwait , con ésta opción se espera a que se termine de cargar el servidor para ejecutar el comando, de ésta forma ya no haría falta el chapucero "while" para esperar la carga completa de bitcoind. El script finalmente se reduciría a:

Code:
#!/bin/bash
./bitcoind -daemon
rec=$(./bitcoin-cli -rpcwait listreceivedbyaddress 0 true | grep -c '"address" :')
out=$(./bitcoin-cli -rpcwait listtransactions | grep -c '"category" : "send"')
echo 'Direcciones usadas: '$((rec+out))
./bitcoind stop

legendary
Activity: 1974
Merit: 1030
August 26, 2014, 01:58:05 PM
#23
Me quedó una duda, bitcoin-cli igual requiere cargar el demonio bitcoind, ¿o no?, por eso dejé el "bitcoind -daemon" y "bitcoind stop" en el script, o ¿hay un daemon para bitcoin-cli?.

Antes de la 0.9, bitcoind era al mismo tiempo cliente y servidor. Dependiendo de cómo lo invocaras, hacía una cosa u otra. El plan es separar estos roles, levantar el servidor usando bitcoind y hacerle consultas usando bitcoin-cli. Han dejado un tiempo de compatibilidad en el que bitcoind todavía sirve de cliente pero cualquier día cortarán el grifo y solo se podrá usar bitcoin-cli para eso. Incluyendo la llamada a "stop", que no es más que un comando RPC Wink.
hero member
Activity: 616
Merit: 501
August 26, 2014, 01:47:38 PM
#22
No, al importar una privkey se hace un rescan para encontrar las transacciones que han enviado coins "a esa key" y actualizar el saldo. El último parámetro de importprivkey controla esto. Para importar varias, se hace con ese parámetro a "false" y en la última, se omite y bitcoin core toma el valor por defecto, que es "true", y procede a hacer el rescan:

Code:
$ bitcoin-cli importprivkey Kfoo '' false
$ bitcoin-cli importprivkey Kbar '' false
$ bitcoin-cli importprivkey Kbaz '' false
$ bitcoin-cli importprivkey Kqux '' false
$ bitcoin-cli importprivkey Kquux         # <-- rescan aquí, y ya las coge todas

Ha vale gracias, entonces se demoró por el rescan no por el tamaño del wallet Smiley ... entonces no habría problema en importar muchas llaves privadas con el método que propones  Cool.

Ok, entonces el script quedó así:
Code:
#!/bin/bash
./bitcoind -daemon
while ! ./bitcoin-cli getinfo > /dev/null 2>&1
do
   echo 'Esperando por bitcoind...'
   sleep 5
done
rec=$(./bitcoin-cli listreceivedbyaddress 0 true | grep -c '"address" :')
out=$(./bitcoin-cli listtransactions | grep -c '"category" : "send"')
echo 'Direcciones usadas: '$((rec+out))
./bitcoind stop


Y por cierto, cambia 'bitcoind' por 'bitcoin-cli' Wink.

Me quedó una duda, bitcoin-cli igual requiere cargar el demonio bitcoind, ¿o no?, por eso dejé el "bitcoind -daemon" y "bitcoind stop" en el script, o ¿hay un daemon para bitcoin-cli?.
legendary
Activity: 1974
Merit: 1030
August 26, 2014, 11:56:48 AM
#21
No, listreceivedbyaddress sólo me va a dar las direcciones que solicité para recibir monedas, (cuando le doy click a 'Recibir' y 'Solicitar pago', el equivalente por interfaz a getnewaddress supongo), ni con false ni con true me va a dar todas las direcciones en la wallet (con true incluye direcciones que pedí pero que no han recibido nada, con false sólo las que han recibido algo).

Ajá, correcto. Acabo de comprobarlo con un wallet nuevo:

Code:
$ bitcoin-cli listreceivedbyaddress 0 true
[
    {
        "address" : "1KJsef128RAdj7wJLh4nV2CnUgoVScciH1",
        "account" : "",
        "amount" : 0.00000000,
        "confirmations" : 0,
        "txids" : [
        ]
    }
]
$ bitcoin-cli getnewaddress
17VjbSo4gJv4KA8oWgnKQMrYb9ByEn49J2
$ bitcoin-cli listreceivedbyaddress 0 true
[
    {
        "address" : "17VjbSo4gJv4KA8oWgnKQMrYb9ByEn49J2",
        "account" : "",
        "amount" : 0.00000000,
        "confirmations" : 0,
        "txids" : [
        ]
    },
    {
        "address" : "1KJsef128RAdj7wJLh4nV2CnUgoVScciH1",
        "account" : "",
        "amount" : 0.00000000,
        "confirmations" : 0,
        "txids" : [
        ]
    }
]


Code:
$ bitcoin-cli listreceivedbyaddress 0 false |grep -cw address
297

parece que te faltó borrar el "w", el comando entonces quedaría algo así:
Code:
./bitcoind listreceivedbyaddress 0 true | grep -c "\"address\" :"
(Agregué comillas y " :" por si alguien tiene la palabra "address" en el nombre de una de sus cuentas xD )

El -w es para evitar que en el futuro pongan por ejemplo "fromaddress"/"toaddress" o cualquier cosa, con eso buscamos solo la palabra entera. Pero lo tuyo ahora con los ":" ya es a prueba de bombas Tongue. Usa comillas simples en la shell (o en el script) para no tener que escapar las dobles:

Code:
$ bitcoin-cli listreceivedbyaddress 0 true |grep -c '"address" : '
2

De todas formas todavía es vulnerable a que estos cambien el formato del JSON, por ejemplo, quitando el primer espacio. Lo suyo sería parsear el JSON pero ya nos vamos un poco off topic Wink.


Code:
./bitcoind listtransactions | grep -o "{" | wc -l

No entiendo por qué necesitas esto.

Dado que listreceivedbyaddress sólo me da las direcciones que pedí por 'Solicitar pago', necesito incluir las direcciones de cambio creadas automáticamente cuando hago una transacción de salida.

Ah, es que eso a mí no me ocurre. Debido a la forma en que hago mis transacciones, con un programita propio y tal, siempre llamo a getnewaddress y todas mis direcciones aparecen en listreceivedbyaddress. Por eso no lo entendía. ¿Las del cambio entonces no aparecen ahí? Menuda caca… y además ahora no puedo comprobarlo porque lo último que he hecho con el wallet ha sido mezclarlo y no tengo ninguna transacción con cambio Smiley.

(que nadie se flipe al ver esa cantidad enorme de coins… aquello fue antes de lo de gox :/)


Encontré que sí hay un impacto en la importación de una private key... se demora bastante (unos 12 minutos para mi), supongo que tiene que cifrar de nuevo todo (?), menos mal no tenía yo que importar muchas... así que no lo recomendaría si quieres después importar un montón de llaves.

No, al importar una privkey se hace un rescan para encontrar las transacciones que han enviado coins "a esa key" y actualizar el saldo. El último parámetro de importprivkey controla esto. Para importar varias, se hace con ese parámetro a "false" y en la última, se omite y bitcoin core toma el valor por defecto, que es "true", y procede a hacer el rescan:

Code:
$ bitcoin-cli importprivkey Kfoo '' false
$ bitcoin-cli importprivkey Kbar '' false
$ bitcoin-cli importprivkey Kbaz '' false
$ bitcoin-cli importprivkey Kqux '' false
$ bitcoin-cli importprivkey Kquux         # <-- rescan aquí, y ya las coge todas

Y por cierto, cambia 'bitcoind' por 'bitcoin-cli' Wink.
hero member
Activity: 616
Merit: 501
August 26, 2014, 07:25:44 AM
#20
Es que el wallet no solo almacena claves privadas, sino también transacciones. Puedes enviar coins indefinidamente reutilizando direcciones (sin añadir claves privadas nuevas) y verás que el tamaño del wallet crece.

 Shocked tienes razón:

¿Y no te interesa más hacer 'listreceivedbyaddress 0 false'? Entiendo que quieres las direcciones que ya has utilizado, de las 10k originales. Una vez este número se aproxime a 10k, es hora de renovar el backup.

No, listreceivedbyaddress sólo me va a dar las direcciones que solicité para recibir monedas, (cuando le doy click a 'Recibir' y 'Solicitar pago', el equivalente por interfaz a getnewaddress supongo), ni con false ni con true me va a dar todas las direcciones en la wallet (con true incluye direcciones que pedí pero que no han recibido nada, con false sólo las que han recibido algo).

Entiendo que grepear por "address" es más robusto que usar una llave, y vas más al grano (son las direcciones, o sea privkeys, lo que te interesa mirar). Además, tienes 'grep -c' Wink:

Code:
$ bitcoin-cli listreceivedbyaddress 0 false |grep -cw address
297

Sí, puede ser, gracias, no había usado el grep -c, pero insisto en el true, y parece que te faltó borrar el "w", el comando entonces quedaría algo así:
Code:
./bitcoind listreceivedbyaddress 0 true | grep -c "\"address\" :"
(Agregué comillas y " :" por si alguien tiene la palabra "address" en el nombre de una de sus cuentas xD )

Para el obtener el número de transacciones de salida se usaría el comando:
Code:
./bitcoind listtransactions | grep -o "{" | wc -l

No entiendo por qué necesitas esto.

Dado que listreceivedbyaddress sólo me da las direcciones que pedí por 'Solicitar pago', necesito incluir las direcciones de cambio creadas automáticamente cuando hago una transacción de salida. Pero ahora que lo pienso, ésta lista también incluye las transacciones de entrada, alguien podría tener muchas transacciones de entrada pero pocas de salida por lo que la estimación no sería adecuada, quedaría mas exacto si mejor hago grep -c "\"category\" : \"send\""

Si estás de acuerdo el script (con llamada a bitcoind incluida) quedaría:
Code:
#!/bin/bash
./bitcoind -daemon
while ! ./bitcoind getinfo > /dev/null 2>&1
do
   echo "Esperando por bitcoind..."
   sleep 5
done
rec=$(./bitcoind listreceivedbyaddress 0 true | grep -c "\"address\" :")
out=$(./bitcoind listtransactions | grep -c "\"category\" : \"send\"")
echo $((rec+out))
./bitcoind stop


Gracias por las correcciones y el interés dserrano5... si tienes algo más soy todo oídos.


----------------------------------------------
Encontré que sí hay un impacto en la importación de una private key... se demora bastante (unos 12 minutos para mi), supongo que tiene que cifrar de nuevo todo (?), menos mal no tenía yo que importar muchas... así que no lo recomendaría si quieres después importar un montón de llaves.
legendary
Activity: 1974
Merit: 1030
August 26, 2014, 02:40:03 AM
#19
mencioné que decidí preocuparme cuando el archivo tenga unos 6 MB, pues asumo que es lo que más o menos pesa una wallet con unas 15.000 direcciones, no estoy asegurando que la proporción sea exactamente 2 MB por cada 5.000 pues parece que el tamaño resultante no se puede determinar, (hice otra prueba de otra wallet de 10.000 y al final obtuve 3.5 MB), por eso no propuse esperar a 8 MB, creí que 6 era lo suficientemente prudente...

Es que el wallet no solo almacena claves privadas, sino también transacciones. Puedes enviar coins indefinidamente reutilizando direcciones (sin añadir claves privadas nuevas) y verás que el tamaño del wallet crece.


Usando la opción "listreceivedbyaddress 0 true" de bitcoind me va a imprimir una lista de todas las direcciones que se crearon para recibir transacciones:
Code:
./bitcoind listreceivedbyaddress 0 true

¿Y no te interesa más hacer 'listreceivedbyaddress 0 false'? Entiendo que quieres las direcciones que ya has utilizado, de las 10k originales. Una vez este número se aproxime a 10k, es hora de renovar el backup.


Para contar el número de éstas direcciones (en linux) solo tendría que combinarlo con el comando grep y wc:
Code:
./bitcoind listreceivedbyaddress 0 true | grep -o "{" | wc -l
(cuenta el número de apariciones del caracter "{" pues es el que se usa para separar cada dirección en la lista de direcciones)

Entiendo que grepear por "address" es más robusto que usar una llave, y vas más al grano (son las direcciones, o sea privkeys, lo que te interesa mirar). Además, tienes 'grep -c' Wink:

Code:
$ bitcoin-cli listreceivedbyaddress 0 false |grep -cw address
297


Para el obtener el número de transacciones de salida se usaría el comando:
Code:
./bitcoind listtransactions | grep -o "{" | wc -l

No entiendo por qué necesitas esto.
hero member
Activity: 616
Merit: 501
August 25, 2014, 05:11:02 PM
#18
No, indagué un poco y no encontré una manera en la que pueda directamente saber exactamente cuándo me acerco a usar las 10.000, mencioné que decidí preocuparme cuando el archivo tenga unos 6 MB, pues asumo que es lo que más o menos pesa una wallet con unas 15.000 direcciones, no estoy asegurando que la proporción sea exactamente 2 MB por cada 5.000 pues parece que el tamaño resultante no se puede determinar, (hice otra prueba de otra wallet de 10.000 y al final obtuve 3.5 MB), por eso no propuse esperar a 8 MB, creí que 6 era lo suficientemente prudente...

Sin embargo hay otra forma menos descuidada:

Usando la opción "listreceivedbyaddress 0 true" de bitcoind me va a imprimir una lista de todas las direcciones que se crearon para recibir transacciones:
Code:
./bitcoind listreceivedbyaddress 0 true

Para contar el número de éstas direcciones (en linux) solo tendría que combinarlo con el comando grep y wc:
Code:
./bitcoind listreceivedbyaddress 0 true | grep -o "{" | wc -l
(cuenta el número de apariciones del caracter "{" pues es el que se usa para separar cada dirección en la lista de direcciones)

Para el obtener el número de transacciones de salida se usaría el comando:
Code:
./bitcoind listtransactions | grep -o "{" | wc -l

Para sumarlos automáticamente haría falta un pequeño script:

Code:
#!/bin/bash
rec=$(./bitcoind listreceivedbyaddress 0 true | grep -o "{" | wc -l)
out=$(./bitcoind listtransactions | grep -o "{" | wc -l)
echo $((rec+out))


Si se quiere se puede hacer un script para ejecutar bitcoind en el mismo:
Code:
#!/bin/bash
./bitcoind -daemon
while ! ./bitcoind getinfo > /dev/null 2>&1
do
   echo "Esperando por bitcoind.."
   sleep 5
done
rec=$(./bitcoind listreceivedbyaddress 0 true | grep -o "{" | wc -l)
out=$(./bitcoind listtransactions | grep -o "{" | wc -l)
echo $((rec+out))
./bitcoind stop

(El tiempo de espera es para que bitcoind termine de cargar)

(Recordar que bitcoind requiere la creación del archivo bitcoin.conf con la variable rpcpassword)
legendary
Activity: 1974
Merit: 1030
August 25, 2014, 03:24:35 PM
#17
en un uso promedio de una transacción (o petición) diaria me duraría unos 27 años, así que con mi nivel de actividad actual no tendría que preocuparme por un nuevo backup en por lo menos una década...

[…]

En algunos años crearé una nueva wallet y transferiré todo el saldo ahí para disfrutar de otro periodo sin preocuparme.

Tienes tu estimación hecha y tal, todo perfecto, vale, pero ¿se podría saber cuándo has usado las 10.000? Así a bote pronto no se me ocurre ninguna manera…
hero member
Activity: 616
Merit: 501
August 25, 2014, 02:39:18 PM
#16
Quería agregar que probé bitcoin-qt con la opción -keypool=10000 para generar una nueva wallet donde no me toque preocuparme por un backup por algunos años (sé que hacer un backup no es la gran cosa, pero sí es una preocupación que me quito de encima Tongue )... 10.000 me pareció racional, pues el backup queda de un tamaño bastante manejable, y 10.000 transacciones (o peticiones de nuevas direcciones) es suficiente para mi, uso muy poco mi wallet de escritorio, en un uso promedio de una transacción (o petición) diaria me duraría unos 27 años, así que con mi nivel de actividad actual no tendría que preocuparme por un nuevo backup en por lo menos una década...

El tamaño inicial sin cifrar fue de 6.2 MB, se demoró creándola unos 10 minutos...  cifrándola se demoró unos 13 minutos y finalmente quedó de 4.1 MB, bastante pequeña en realidad (podría haberla hecho de 20000, 30000 o más Tongue), el tamaño de la wallet no pareció influir en el tiempo de inicio de bitcoin-qt, tampoco al momento de descifrarla para hacer una transacción, tampoco hubo problema en el tiempo de actualización del saldo, por lo que por ahora no hay un impacto perceptible en el rendimiento.

En algunos años crearé una nueva wallet y transferiré todo el saldo ahí para disfrutar de otro periodo sin preocuparme.

Me preocuparé antes si mi actividad diaria aumenta mucho y sé que me acerco a un tamaño de wallet en donde me deba preocupar (6 MB tal vez sea un tamaño prudencial para comenzar a preocuparme en éste caso). También podría necesitar una nueva wallet si quiero cambiarme a una versión del cliente donde el formato actual del archivo no se pueda importar (ésto es muy improbable supongo, pues aunque hagan algún cambio en la estructura del wallet.dat, supongo que se conservarán las funciones de importación del formato anterior).

El procedimiento es muy sencillo, una vez estoy seguro del PC en donde la voy a generar sólo tengo que instalar btcoin-qt, ejecutarlo con el comando "bitcoin-qt -keypool=10000", esperar, cifrar, esperar y listo.

P.D.: Aproveché para cifrar la nueva wallet con una contraseña generada de forma aleatoria con más de 30 caracteres, y le agrego otra buena cantidad de caracteres añadiendo una contraseña que sólo tengo en mi cabeza, tal vez el cifrado se demore menos con una contraseña de un tamaño menos paranoico xD .

P.D.2: Mi preocupación en el tamaño final del archivo era con el objetivo de enviar mi wallet a backups a la nube sin ningún problema, quería un archivo de menos de 10 MB, tal vez hubiese podido hacer una wallet de 30.000 direcciones y conservar éste límite, pero por ahora me conformo con 10.000 Tongue .

P.D.3: Para generar la contraseña aleatoria (y conservarla) usé el gestor de contraseñas KeePassX y subí su respectivo backup cifrado a la nube.
sr. member
Activity: 310
Merit: 253
August 19, 2014, 04:06:45 PM
#15
^ Tienes razón. No me había fijado en que ese es el comportamiento cuando tienes cifrado el monedero. Cuando el monedero no está cifrado, en cambio, la generación de una nueva dirección sí que hace que se cree una nueva dirección de inmediato y el "cubo" se mantiene siempre lleno.

Tenía la idea de que la generación de nuevas direcciones requería desbloquear el monedero para evitar este tipo de cosas, pero no es así. Se ve que los desarrolladores decidieron reducir al mínimo las situaciones que requieren desbloqueo, a costa de perder la garantía de que el numero de direcciones de reserva se mantenga constante.
legendary
Activity: 1974
Merit: 1030
August 19, 2014, 01:57:04 AM
#14
Las direcciones no se crean en tandas, sino que Bitcoin Core crea una nueva dirección oculta cada vez que se utiliza una de esa reserva de claves/direcciones (keypool en inglés), bien como dirección de cambio o bien como dirección normal de recepción. De esa manera, siempre hay un número constante de direcciones disponibles en reserva, independientemente de las operaciones que hayamos efectuado.

Pero esto es porque cada vez que hacemos una transacción, tenemos que poner la contraseña para firmarla, y es gracias a eso que bitcoin core puede rellenar el disponible. Si gastamos direcciones sin meter la contraseña (por ejemplo, ejecutando muchas veces 'bitcoin-cli getnewaddress') llega un punto donde vacías el cubo y bitcoin core te da un error. Entonces metemos la contraseña ('bitcoin-cli walletpassphrase') y bitcoin core genera las que le faltan para llenar el cubo, que normalmente son 100.

O sea, normalmente no se generan en tandas porque bitcoin core ya puede ir teniendo el disponible siempre a tope, gracias a que metemos la contraseña regularmente. Pero si no la metiéramos durante un tiempo, entonces tan pronto fuera posible sí se generaría una tanda de golpe hasta llenar el cubo.
hero member
Activity: 616
Merit: 501
August 18, 2014, 05:27:16 PM
#13
Gracias Nibarus, no estaba seguro de eso del paquete de 100 direcciones, estoy seguro de haberlo leído hace unos años, supongo que lo cambiaron o lo leí en alguna página que estaba equivocada...

y creo que genera de a 100 en cada "paquete"

Interesante, no le había prestado atención a ese comando keypool, entonces si ejecuto bitcoin con -keypool=100000 podría hacer un backup que me dure para toda la vida.... aunque encontré un post donde Satoshi dice que cada key en la keypool ocuparía 1K: https://bitcointalksearch.org/topic/key-pool-feature-for-safer-wallet-backup-1414 no sé si ésto sigue vigente, en el caso de 100000 sería un backup de 100 MB...  Tongue y supongo que se va a demorar un buen rato generándolas...  queda pesado el backup, pero no tanto, considerando que no me tendría que preocupar por renovarlo hasta dentro de 100.000 transacciones (o generaciones de nuevas direcciones de pago), sería como 27 años si asumimos un uso exagerado (para una billetera personal) de 10 transacciones por día.
sr. member
Activity: 310
Merit: 253
August 18, 2014, 04:09:32 PM
#12
(...) pero cuando se han hecho muchas transacciones y todas las direcciones en tu wallet han sido usadas como direcciones de cambio o de entrada, el cliente crea otro paquete de direcciones para enviar ahí el cambio, (...)

Creo que esto no es exactamente así. Las direcciones no se crean en tandas, sino que Bitcoin Core crea una nueva dirección oculta cada vez que se utiliza una de esa reserva de claves/direcciones (keypool en inglés), bien como dirección de cambio o bien como dirección normal de recepción. De esa manera, siempre hay un número constante de direcciones disponibles en reserva, independientemente de las operaciones que hayamos efectuado. Es decir, que con el valor predeterminado de 100, la copia del wallet.dat solamente dejará de ser una copia de seguridad completa a partir del momento en que se utilice la 101ª dirección nueva posterior a la copia.

Quien haga operaciones muy frecuentes puede cambiar ese valor de las direcciones de reserva mediante la opción de línea de "comandos" -keypool. Por ejemplo, ejecutando "bitcoin-qt -keypool=1000" se crearía un total de 1000 direcciones de reserva.
hero member
Activity: 616
Merit: 501
August 18, 2014, 09:48:47 AM
#11
Por cierto, no tienes que hacer un backup en cada transacción, el cliente oficial sólo genera nuevas direcciones de cambio cuando ya ha usado las que generó en el último "paquete", y creo que genera de a 100 en cada "paquete". Un backup al mes es mucho más que suficiente, a menos que seas un procesador de pagos o algo así con muchas transacciones diarias.

No sabía este detalle.

Así pues, si instalo un fichero wallet.dat de hace una semana con los cambios de la fecha correspondiente tendría igualmente la información actualizada?

No sé si entiendo bien la pregunta, pero creo que aún no te han contado acerca del funcionamiento de la cadena de bloques, los "cambios" (transacciones) no se guardan en tu billetera, ahí sólo están las llaves privadas de tus direcciones y no hay transacciones ni saldo, ni nada más que las llaves privadas, el archivo wallet.dat es exactamente el mismo antes y después de todas las transacciones (excepto cuando se crea otro paquete de direcciones de cambio, lo amplío en el siguiente párrafo), todos los "cambios" se van a la cadena de bloques, están en la nube por así decirlo, en una nube P2P. Puedes importar un wallet de hace años, y cuando tu cliente se sincronice con la cadena de bloques se verá el saldo de las direcciones de esa wallet totalmente actualizados sin importar todas las transacciones que se hayan hecho en esos años.

Entonces sería necesario hacer solamente un backup en la vida, excepto que hay un detalle con las direcciones que contiene el archivo en el cliente oficial, el cliente oficial cuando hace una transacción escoge los fondos de las direcciones que cubrirán el monto de la transacción, y la diferencia (el cambio) la manda a otra dirección de tu wallet (dirección de cambio), ésto usualmente no escribe nada en el archivo de tu billetera pues (repito) todas las transacciones van a la cadena de bloques, pero cuando se han hecho muchas transacciones y todas las direcciones en tu wallet han sido usadas como direcciones de cambio o de entrada, el cliente crea otro paquete de direcciones para enviar ahí el cambio, así pues, si haces michas transacciones el archivo en algún momento tendrá más direcciones de cambio y en una transacción futura el saldo en las nuevas direcciones de cambio no lo tendrán las direcciones en el backup anterior.

¿Por qué crear más direcciones de cambio?, ¿por qué no enviar el cambio a la misma dirección en vez de usar una diferente en cada transacción?, es una medida para aumentar tu privacidad, si siempre usas las mismas direcciones para toda la vida, llegará un momento en el que alguien podría saber exactamente cuánto saldo tienes en todas las direcciones de tu billetera siguiendo el historial de transacciones que él sepa que te pertenecen, ésto no es deseable para muchos, por muchas razones.

Aquí hay algo más sobre el las direcciones de cambio (en Inglés): https://en.bitcoin.it/wiki/Change

Pero no hay que complicarse la vida, simplemente haces un backup cada pocos meses y estarás tranquilo.

(Debería haber alguna alerta en el cliente oficial, en donde recomiende renovar los backups cuando agrega un paquete de nuevas llaves al wallet.dat).
legendary
Activity: 1960
Merit: 1130
Truth will out!
August 18, 2014, 08:17:05 AM
#10
Si tienes una buena contraseña puedes publicar tu wallet en el sitio más lleno de piratas que se te ocurra y no va a pasar nada, en realidad no importa cómo llames al archivo, el e-mail al que lo envíes o el sistema de almacenamiento en línea al que lo envíes, tampoco importa lo corruptas que puedan ser las personas que trabajan ahí, lo único que importa es la contraseña, una laaarga, extraña y difícil contraseña... de esa forma es "imposible" que te quiten un satoshi así la wallet esté a disponibilidad del mundo entero.

Esto me recuerda al compañero de http://www.stealmywallet.com.
Es una página web donde una persona con 10.4634 BTC ofrece su wallet.dat para que lo descargues e intentes "obtener prestados" sus bitcoins  Cheesy

Evidentemente la contraseña será guapa guapa y se necesitarían bastantes años y potencia como para burlar la seguridad y obtener esa passphrase  Wink

Como tú comentas: una laaarga, extraña y difícil contraseña
XG
sr. member
Activity: 286
Merit: 250
August 18, 2014, 12:29:46 AM
#9
Por cierto, no tienes que hacer un backup en cada transacción, el cliente oficial sólo genera nuevas direcciones de cambio cuando ya ha usado las que generó en el último "paquete", y creo que genera de a 100 en cada "paquete". Un backup al mes es mucho más que suficiente, a menos que seas un procesador de pagos o algo así con muchas transacciones diarias.

No sabía este detalle.

Así pues, si instalo un fichero wallet.dat de hace una semana con los cambios de la fecha correspondiente tendría igualmente la información actualizada?
hero member
Activity: 616
Merit: 501
August 17, 2014, 02:53:48 PM
#8
Si tienes una buena contraseña puedes publicar tu wallet en el sitio más lleno de piratas que se te ocurra y no va a pasar nada, en realidad no importa cómo llames al archivo, el e-mail al que lo envíes o el sistema de almacenamiento en línea al que lo envíes, tampoco importa lo corruptas que puedan ser las personas que trabajan ahí, lo único que importa es la contraseña, una laaarga, extraña y difícil contraseña... de esa forma es "imposible" que te quiten un satoshi así la wallet esté a disponibilidad del mundo entero.

Yo sí recomendaría tener una copia en línea de la billetera, ésto te cubre contra daños de hardware y otros desastres físicos y naturales ocurridos a las copias de tu casa... pero repito y repito: con una buena contraseña de cifrado, solo así no importa quién acceda al archivo de tu billetera.
legendary
Activity: 1960
Merit: 1130
Truth will out!
August 16, 2014, 02:47:14 PM
#7
Por mi parte no almacenaría el wallet.dat en Dropbox, pues nunca sabes los problemas de seguridad que puede llegar a tener un software de terceros. Además, algunos datos son accesibles desde Internet.

Una buena contraseña para la wallet y fichero encriptado y almacenado off-line debería ser suficiente si no tienes una cantidad elevada de BTC para holdear.

Si los vas moviendo, es mejor tenerlo seguro pero en tu propio ordenador, etc.

Un saludo!  Wink
Pages:
Jump to: