Glosario / Minería y consenso
Bloque huérfano
- ¿Qué es un bloque huérfano?
- Un bloque huérfano es un bloque del que su nodo aún no ha visto el bloque padre, así que no se puede validar ni conectar, y no es lo que la mayoría quiere decir con esa palabra.
La palabra tiene dos vidas. En el protocolo describe un bloque que llega fuera de orden, sin ningún ancestro conocido al que unirlo; en el uso cotidiano, y en la mayoría de los exploradores de bloques, designa un bloque válido que simplemente perdió una carrera y que, en rigor, se llama bloque obsoleto. Bitcoin Core dejó de guardar bloques huérfanos por completo en la versión 0.10, publicada en febrero de 2015.
Cómo funciona
Un bloque huérfano solo existe en el intervalo que va desde que se recibe un bloque hasta que se sabe dónde encaja.
La validación es secuencial. Para comprobar un bloque se necesita el conjunto de UTXO tal como estaba justo antes de él, y ese conjunto se construye aplicando en orden todos los bloques anteriores. Si a un nodo se le entrega un bloque cuyo bloque padre falta, podrá verificar la prueba de trabajo del encabezado, pero nada más: ni las comisiones, ni el subsidio, ni si alguna entrada ya se había gastado. El bloque es imposible de verificar, no inválido.
Las versiones antiguas de Bitcoin Core retenían esos bloques en memoria y esperaban a que apareciera el bloque padre que faltaba. Era necesario porque los bloques se solicitaban según se anunciaban, así que un par podía entregarlos fácilmente fuera de orden. La sincronización headers-first (primero los encabezados) eliminó esa necesidad. Ahora un nodo descarga y comprueba la cadena de encabezados de 80 bytes antes de pedir el cuerpo de un solo bloque, lo que significa que siempre sabe dónde encaja un bloque que llega y puede solicitar los cuerpos a varios pares a la vez sin confusión. La reserva de bloques huérfanos se eliminó en esa misma versión, y en un nodo moderno es prácticamente imposible producir un verdadero bloque huérfano.
Una cosa sí conservó el nombre. Bitcoin Core sigue manteniendo una reserva de transacciones huérfanas para las transacciones cuyas entradas no ha visto, en la que guarda hasta 100 de forma predeterminada, con la apuesta razonable de que la transacción padre que falta llega solo unos segundos por detrás. Así que, cuando la palabra aparece en los registros o en la configuración del propio Core, habla de transacciones, nunca de bloques.
Dónde aparece
La palabra huérfano sobrevive sobre todo en lugares que están describiendo otra cosa.
Los exploradores de bloques son la mayor fuente de confusión: varios publican una página de bloques huérfanos que enumera bloques válidos descartados cuando ganó un bloque competidor, y la prensa copia la etiqueta. Los paneles de los pools de minería hacen lo mismo e informan de una proporción de bloques huérfanos que en realidad es una proporción de bloques obsoletos. La documentación de las altcoins, en gran parte copiada de la wiki de los primeros tiempos de bitcoin, usa el término para ambos significados indistintamente.
Bitcoin Core no lo hace. Pídale las ramas en competencia que conoce y le devolverá la punta de cada una con uno de los estados active (activa), valid fork (bifurcación válida), valid headers (encabezados válidos), headers only (solo encabezados) o invalid (inválida). No existe un estado de huérfano, porque la situación que la palabra describía ya no se da.
Para un lector, la comprobación útil es si el bloque en cuestión llegó a validarse alguna vez. Si alguien puede decirle la altura del bloque, su número de transacciones y el pool que lo minó, el bloque se validó por completo y perdió una carrera, así que la palabra que busca es obsoleto.
Bloque huérfano frente a bloque obsoleto
Un bloque huérfano no se puede verificar porque se desconoce su bloque padre. Un bloque obsoleto sí se verificó, era completamente válido y se abandonó solo porque se construyó antes sobre otro bloque de la misma altura. Casi todos los que dicen huérfano quieren decir obsoleto, incluidos varios exploradores, así que vale la pena preguntar a cuál se refiere una fuente antes de sacar conclusiones de ella. Ninguno de los dos le cuesta nada como usuario: los pagos de un bloque descartado vuelven a la mempool y normalmente se minan de nuevo en uno o dos bloques.