¿Qué hago si pareciera que la blockchain esta dañada?

Qué opciones tengo en caso de que en el nodo me salga algún mensaje que me diga que la blockchain esta dañada?

En esta ocasión vamos a ver un tema que se suele preguntar mucho en los grupos de ayuda sobre nodos de Bitcoin. A veces nos encontramos con problemas que parecieran indicar que la cadena o blockchain esta dañada o que no podemos ver todas las transacciones que se han realizado en nuestra cartera del nodo.

Aquí algunas opciones que podrían ayudar antes de que entremos en pánico o que definitivamente tengamos que descargar la blockchain de nuevo.

 

Rescan

Si tenemos problemas con los movimientos de la cartera, donde por ejemplo, no vemos todos los movimientos que se han realizado, una opción muy útil para tratar de solventar este problema es usar la opción -rescan.

Bitcoin almacena en la cartera las transacciones que afectan a los bitcoin (utxos) que gestiona o sobre los que tienen visibilidad. Cada que el nodo «ve» una nueva transacción, comprueba si esa transacción afecta a alguna llave almacenada en la cartera, esto incluye a aquellas llaves que hayamos importado incluso como de vigilancia (watch-only). Si detecta un cambio la cartera se actualiza. Del mismo modo, si la cadena se reorganiza (existen varios motivos por los que la cadena podría reorganizarse, pero no ahondaremos en ello en este artículo), la cartera se actualiza.

 

Sin embargo, el cliente del nodo en algunas ocasiones se queda «des-sincronizado» ya que a veces no comprueba que la cartera esté sincronizada con la cadena de bloques actual. Para arreglar esto, se puede utilizar el la opción rescan. Esto hace que el cliente, al iniciarse, recorra todos los bloques que ha descargado, busque las transacciones que afectan a las cuentas de la cartera, y actualice el almacén de transacciones y los saldos de la cartera para reflejar de manera correcta las transacciones.

También hay algunos casos en los que definitivamente hay que volver a escanear. Por ejemplo si se restaura una cartera a partir de una copia de seguridad, o si por ejemplo tuvimos la cartera «cerrada» dentro del nodo (unloadwallet). En estos casos tendríamos que volver a escanear.

Una cosa a saber es que el cliente del nodo no descargará los bloques mientras esté reescaneando. Y los bloques recién descargados deberían actualizar la cartera de todos modos.

 

Así que Iniciando el nodo con la opción -rescan (bitcoind -rescan), estarías indicándole al nodo que al iniciarse, el nodo compruebe las transacciones que pudieran estar faltando de tu wallet, como dijimos, esto incluye aquellas llaves que tuvieras importadas como watch-only también.

 

Reindex

Si tuvieras mensajes que indican que hay problemas en el indice de los bloques, podrías usar la opción -reindex (bitcoind -reindex), lo que esta opción hará sera re-sincronizar todos los bloques y reconstruir el estado de la cadena, así como y el índice de bloques desde los archivos blk*.dat que contiene el nodo.

Antes de usar esta opción es importante que sepas que con la opción del reindexado lo que sucede es que se borra el estado de la cadena (y el conjunto de UTXO), se borra el índice de bloques (la base de datos con información sobre qué bloques se encuentran en el disco), reconstruye el índice de bloques (revisando todos los archivos blk*.dat) y se reconstruye el estado de la cadena (rehaciendo toda la validación de los bloques) basándose en los bloques que hay ahora en el índice.

Importante saber, esta opción NO borra los bloques, no tengas miedo con ello. Pero por contra, el reindexado es muy tardado (del orden de horas) ya que recorre todos los bloques para rehacer lo que hemos mencionado antes, así que si la usas, paciencia!

 

Reindex-chainstate

También podrías verificar el estado con la opción -reindex-chainstate (bitcoind -reindex-chainstate), esta opción borra el estado de la cadena y lo reconstruye utilizando el índice de bloques que se tuvieran antes, a diferencia del reindex que borra todo y reconstruye tanto el índice de los bloques, como el estado de la cadena, con todas las transacciones. Esta opción debería ser más rápida a la hora de realizar el reindexado, ya que no necesita reconstruir el índice de bloques primero, parte del que ya tiene y es útil para no tener que reindexar todo. Así que si sospechamos que solo el estado de la cadena está dañado, es recomendable empezar por esta opción.

También podrías incluir esta opción dentro del archivo de configuración de Bitcoin llamado bitcoin.conf, el cual podrás encontrar en la ruta en la que hayas configurado tu instalación de Bitcoin, en linux suele ser ~/.bitcoin, deberás incluir la opción reindex-chainstate=1.

Nota: si incluyes esta opción en el archivo, debes tener en consideración que cada vez que reinicies tu nodo o el servicio de bitcoin, se estará ejecutando esta acción. 

 

Otras opciones o comandos útiles podrían ser:

verifychain, con este comando RPC se puede verificar cada entrada en la cadena de bloques, un ejemplo de como usarlo sería:

Desde la consola de comandos ejecutar bitcoin-cli verifychain 4 10000, este comando ejecutaría la acción para que se verificarán, dentro de la blockchain, los 10,000 bloques más recientes.

 

rescanblockchain

este comando RPC, aunque simple, suele ser útil cuando tenemos que realizar un rescan de la cadena porque no tenemos o nos aparece alguna información en nuestra cartera, pero no queremos rescanear la cadena entera. La única complejidad, entre comillas en el uso de esta comando es determinar los bloques desde el que quieres empezar el rescan y su finalización, pero nada del otro mundo, por ejemplo si tienes el ID de una transacción en particular, en tu explorador de bloques la pones y te indica el bloque en el que esa transacción se encuentra, o si sabes más o menos la fecha también lo puedes saber desde tu explorador.

El comando sería: 

rescanblockchain («start_height») («stop_height»)

 

Y hasta aquí este artículo que espero que te sea de utilidad, si es así, por favor déjame un comentario o una propina. Si tienes alguna duda, también házmelo saber o a través de twitter. Mil gracias!!

5/5

Puedes dejar una propina con el botón «Invítame un café».

O mediante Lightning network:

⚡[email protected]

También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:

PayNym: +decentralized