¿Por qué falla la llamada API RPC de "tiempo de actividad" si Bitcoin Core se está ejecutando pero no se ha sincronizado completamente?

Al menos este parece ser el caso, porque la función que he creado para determinar si Bitcoin Core está "funcionando" hace la llamada API más mínima/simple que pude encontrar, que fue "tiempo de actividad", para ver si mi sistema todavía puede comunicarse. con Bitcoin Core (en la misma computadora) o si algo se ha roto.

Dado que la cadena de bloques ha crecido a un tamaño increíble, me vi obligado a mover mi "dirección de datos" de Bitcoin de un disco SSD a uno mecánico (debido a que me quedé sin espacio en el primero). Casi al mismo tiempo, también configuré Bitcoin Core para usar siempre Tor para todas las conexiones. La combinación de estas dos cosas causó el problema inesperado de que mi pregunta "¿todavía está todo bien?" el script falla para Bitcoin Core cuando enciendo la computadora después de una noche de sueño, porque Bitcoin Core tarda más que antes en estar listo. A veces puede tardar como media hora.

(Esto mismo también afecta mis encuestas para verificar el saldo actual, lo que al menos es comprensible porque Bitcoin Core probablemente no quiera informar una cifra obsoleta si los nuevos datos a punto de obtener cambian el saldo).

Todo lo que dice en el manual es esto: https://bitcoincore.org/en/doc/0.18.0/rpc/control/uptime/

(Por alguna razón, no hay documentos API para 0.18.1... la última versión es 0.18).

Mis preguntas:

  1. ¿Es este un problema/error conocido? ¿Se arreglará pronto?
  2. ¿Debería usar alguna otra llamada API para verificar si Bitcoin Core se está ejecutando y "puede hablar conmigo"?
  3. ¿Existe una llamada API separada que pueda usar para determinar si Bitcoin Core está "todo listo para la acción" (totalmente sincronizado)?
Si bitcoin está haciendo el inicio, por lo que el nodo se está actualizando sincronizado con la red, el servidor no se está ejecutando porque está en el inicio. Un ejemplo, si está ejecutando el servidor del juego y está estableciendo una conexión con la red, no puede jugar.

Respuestas (1)

El nodo no necesita sincronizarse completamente para que RPC comience a responder a las consultas.

Lo que sucede es que Bitcoin Core se inicia en modo de "calentamiento". Durante el calentamiento, RPC no está disponible porque el sistema se está configurando. Aquí es cuando se llevan a cabo las billeteras, la red de su información UTXO local, la configuración del índice de bloque y la verificación de sus bloques locales. (Sospecho que puede haber confundido el mensaje "Verificando bloques..." con la sincronización). En el modo de calentamiento, el puerto RPC 8333 está abierto pero devolverá un error JSON para cada consulta. El puerto abierto indica a los pares de conexión entrantes que hay un nodo allí, pero que aún no puede responder a las consultas.

Una vez finalizada esta rutina de calentamiento (toma unos minutos), el nodo estará activo y sincronizado desde la red. Durante la sincronización, incluso si lleva semanas, el servidor RPC está activo. Obviamente, no podrá responder a las consultas de bloques que aún no haya recuperado y verificado.

¿Es este un problema/error conocido? ¿Se arreglará pronto?

No es un error. Es parte de cómo se inicia Bitcoin Core.

¿Debería usar alguna otra llamada API para verificar si Bitcoin Core se está ejecutando y "puede hablar conmigo"?

Pruebe el comando de ayuda . Si regresa, significa que el servidor RPC está activo.

¿Existe una llamada API separada que pueda usar para determinar si Bitcoin Core está "todo listo para la acción" (totalmente sincronizado)?

Puede intentar usar getblockcountpara ver cuál es la altura del último bloque sincronizado. Está completamente sincronizado si la altura es la misma que la altura de la red. Nuevamente, no necesita esto para usar RPC, pero incluí esto para responder su pregunta.

Intente getrpcinfoverificar el estado del servidor RPC.

Consulte otros métodos API aquí .