Bitcoin Forum
November 14, 2024, 09:05:02 PM *
News: Check out the artwork 1Dq created to commemorate this forum's 15th anniversary
 
   Home   Help Search Login Register More  
Pages: « 1 [2]  All
  Print  
Author Topic: Consulta sobre el archivo 'wallet.dat'  (Read 4577 times)
dserrano5
Legendary
*
Offline Offline

Activity: 1974
Merit: 1029



View Profile
August 26, 2014, 04:56:48 PM
 #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.
fernarios
Hero Member
*****
Offline Offline

Activity: 616
Merit: 501



View Profile
August 26, 2014, 06: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?.
dserrano5
Legendary
*
Offline Offline

Activity: 1974
Merit: 1029



View Profile
August 26, 2014, 06: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.
fernarios
Hero Member
*****
Offline Offline

Activity: 616
Merit: 501



View Profile
August 26, 2014, 07: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

dserrano5
Legendary
*
Offline Offline

Activity: 1974
Merit: 1029



View Profile
August 26, 2014, 08:10:15 PM
 #25

Prueba también '-checkblocks=5' para un arranque rapidito del daemon Wink.
fernarios
Hero Member
*****
Offline Offline

Activity: 616
Merit: 501



View Profile
August 26, 2014, 08: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

Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!