Cuando descargo la cadena de bloques por primera vez usando bitcoind, ¿cómo puedo saber cuándo ha terminado?

Estoy usando bitcoind en Ubuntu, sin cabeza. Así que no hay GUI que me diga cuándo está hecho.

Entonces, ¿cómo lo sé?

Respuestas (7)

Ejecute bitcoind getinfoel shell de su elección y compare el recuento de bloques, que aparece después de "blocks", con el recuento de bloques que se indica aquí . Si los dos números son iguales, su cliente está actualizado.

Aquí hay un script que hace precisamente eso:

echo `bitcoin-cli getblockcount 2>&1`/`wget -O - https://blockchain.info/q/getblockcount 2>/dev/null`

corre bitcoind getblocktemplate_ Si no está al día, volverá con un error de -10.

Revisé esto, no es así. (Sin embargo, lo verifiqué en la red testnet, pero no debería ser diferente a la red principal en este caso).
Este es un pequeño truco, pero más o menos funciona. Excelente :)
@StevenRoose, ¿cuál fue el problema que encontró con este método? ¿Cuándo no funcionó? Parece estar funcionando para mí, fallando cuando estoy en medio de la descarga de bloques.
@ StephenM347 ha pasado más de un año, probablemente hubo un problema en ese entonces que ya se resolvió ...

El bitcoindcomando muestra diferentes errores ahora.

La nueva forma de verificar es conbitcoin-cli getblocktemplate

Se ha publicado el uso con secuencias de comandos donde encontré esta pregunta por primera vez

¿Cómo verificar si la cadena de bloques está actualizada usando bitcoind o json-rpc?

La forma más sencilla es ejecutar

bitcoind -blocknotify myscript.sh %s

En los bloques después de que bitcoind se ponga al día con la cadena de bloques, sus scripts serán llamados con el nuevo blockhash. Puede imprimir un mensaje o hacer cualquier otra cosa requerida en este script

Un método alternativo, (trabajando con versiones recientes), que no depende de sitios web externos, es usar bitcoin-cli getblockchaininfoy comparar el headerscampo y el blockscampo.

Actualmente, para sincronizar la cadena de bloques más rápido, los encabezados se descargan antes que los bloques reales. Esto se conoce como Headers-First Sync Como consecuencia, la cantidad de encabezados de bloque durante la Descarga de bloque inicial (IBD) será mayor que la cantidad de bloques. Cuando este número "se pone al día" con el número de bloques, podemos decir que estamos "al día" con la cadena de bloques que nuestros pares nos anunciaron.

Escribí un script para iniciar bitcoind y generar puntos mientras aún estaba en la fase IBD. Cuando la cadena de bloques esté actualizada, emitirá un mensaje. Aquí está el guión: https://github.com/frz-dev/btcutils/blob/master/bitcoin-core/start-bitcoind.sh

Con solo un navegador web, puede visitar http://bitcoinwatch.com/ para descubrir la altura o el recuento de bloques de la red Bitcoin actual.

O apunte su bitcoin-cli a un servidor Bitcoind de producción y emita el siguiente comando (tenga en cuenta que el archivo *.conf debe ser el que use en su lugar):

% ../bin/bitcoin-cli -conf=mainNet-productionServer.conf getblockcount

La forma más fácil es consultar todas las conexiones de sus pares para obtener numerosos detalles que también incluyen la "altura inicial" para cada uno de ellos.

% ../bin/bitcoin-cli -conf=mainNet-localServer.conf getpeerinfo

Alternativamente, el siguiente comando libbitcoin-explorer (bx, cumple una función análoga a bitcoin-cli) proporciona solo un número cuando el cliente bx se conecta a un servidor bitcoin de producción (anteriormente llamado Obelisco) para consultarlo por la altura de Blockchain.

% bx altura de búsqueda

Para obtener la altura actual de su localServer que se está construyendo, intente:

% ../bin/bitcoin-cli -conf=mainNet-localServer.conf getblockcount

Para propósitos de contraste, el siguiente comando de ayuda de bitcoin-cli proporciona detalles adicionales para la imagen de Blockchain local que está creando:

% ../bin/bitcoin-cli -conf=mainNet.conf ayuda gettxoutsetinfo gettxoutsetinfo

Devuelve estadísticas sobre el conjunto de salida de transacciones no gastadas. Tenga en cuenta que esta llamada puede tardar algún tiempo.

Resultado: { "altura": n , (numérico) La altura del bloque actual (índice) "bestblock": "hex", (cadena) el mejor bloque hash hex "transacciones": n, (numérico) El número de transacciones "txouts ": n, (numérico) El número de transacciones de salida "bytes_serialized": n, (numérico) El tamaño serializado "hash_serialized": "hash", (cadena) El hash serializado "total_amount": x.xxx (numérico) El total Monto }

Su cadena de bloques está completa cuando los dos números coinciden. Este enfoque le dará una buena idea sobre su estado actual.