¿Qué sucederá si se pierde un bloque en un compañero?

En la red Bitcoin, cada par mantiene una copia completa del libro mayor (cadena de bloques). ¿Qué sucederá si un par pierde uno de sus bloques en la cadena de bloques (por ejemplo, otro proceso en el par borra accidentalmente el área del disco que almacena el bloque)? ¿Podrá este par detectar que falta este bloque? En caso afirmativo, ¿cómo lo detectará el compañero y cómo lo reparará?

Respuestas (1)

Depende de la implementación. Para Bitcoin Core, el nodo mantiene una base de datos que tiene las ubicaciones de todos los bloques en el disco. Si se elimina un bloque, notará que la ubicación de un bloque no existe o contiene basura o datos no válidos. Si nota que falta un bloque (o algo está dañado), intentará reconstruir la base de datos usando los bloques almacenados en el disco y luego descargará los bloques faltantes de sus pares.

Sin embargo, los bloques se pueden eliminar después de que se hayan verificado y la base de datos local se haya actualizado para que el nodo sepa que el bloque que acaba de eliminar era un bloque válido. Esto se denomina poda, y con la poda, los bloques históricos antiguos se pueden eliminar, ya que no se usan para nada en el funcionamiento normal del nodo (excepto para ayudar a sincronizar nuevos nodos).

Gracias @Andrew Chow, mencionó "entonces notará que la ubicación de un bloque no existe o contiene basura o datos no válidos", me pregunto cómo "se dará cuenta". ¿Hay un subproceso en segundo plano en cada par que verifica periódicamente la integridad de la cadena de bloques, o el par necesita escanear la cadena de bloques por algún motivo?
El nodo verifica la integridad de sus bases de datos y de la cadena de bloques al inicio. Creo que podría eliminar bloques mientras se está ejecutando y no se dará cuenta, pero habrá un error la próxima vez que se inicie.