Reorganización de la Cadena
Cuando un nodo cambia su cadena activa por una nueva cadena más larga
Una reorganización de la cadena (o "reorg") ocurre cuando tu nodo recibe bloques que forman parte de una nueva cadena más larga. Tu nodo desactivará los bloques de su cadena activa antigua a favor de los bloques que forman la nueva cadena más larga.
Ese proceso permite que nodos individuales de toda la red se pongan de acuerdo con la misma versión de la blockchain, porque la visión globalmente aceptada siempre será la cadena de bloques más larga*.
*Técnicamente es la cadena con más trabajo, pero el mayor número de bloques suele ser lo mismo.
Escenario
¿Cuándo ocurre una reorganización de la cadena?
Una reorganización ocurre con mayor frecuencia después de que dos bloques son minados al mismo tiempo.
Debido a la velocidad de propagación de los bloques por la red, algunos nodos reciben un bloque primero y otros reciben el otro bloque primero. Por lo tanto, habrá un desacuerdo temporal sobre cuál de esos bloques fue realmente el "primero" y pertenece a la cima de la blockchain de todos.
Eso se resuelve cuando se mina el siguiente bloque. El siguiente bloque construirá sobre uno de esos bloques, creando una nueva cadena más larga. Cuando los nodos reciben ese bloque más nuevo, ven que crea una nueva cadena más larga y hacen una reorganización de la cadena para adoptarla.
Así que, gracias a las reorganizaciones, cada nodo termina acordando la misma versión de la blockchain que todos los demás.
Bloques "Stale"
¿Qué pasa con las transacciones de la cadena más larga antigua?
Si un bloque se desactiva debido a una reorganización (un "bloque stale"), las transacciones dentro de él dejan de formar parte de la blockchain. Si intentas gastar las salidas de una transacción dentro de un bloque stale, los nodos rechazarían tu transacción, porque estarías intentando gastar bitcoins que no existen en la cadena válida.
En la práctica, sin embargo, si dos bloques se minan al mismo tiempo, probablemente incluyan las mismas transacciones (o parecidas), así que una reorg generalmente no causa problema. Pero, si hay transacciones en el bloque stale que no están en el bloque competidor, vuelven al memory pool de tu nodo y se propagan de nuevo por la red, para la posibilidad de ser minadas en un bloque futuro.
Vale la pena esperar a que una transacción llegue a 2+ bloques de profundidad antes de considerarla final. Siempre existe la posibilidad de que sea removida por una reorg, y tendrás que esperar/esperar que sea re-minada en la cadena más larga.
Un "bloque stale" a veces se llama "bloque huérfano", pero "stale" es el término más preciso. Un bloque huérfano es cuando tu nodo recibe un bloque antes de recibir el bloque padre sobre el que construye; los bloques stale no son huérfanos porque tienen padres.
Ejemplo
Aquí podemos ver un ejemplo de una reorganización de la cadena real que ocurrió en la blockchain a la altura de bloque 578.141.
Tamaño
¿Qué tan grandes pueden ser las reorganizaciones?
Una reorganización puede tener cualquier número de bloques de longitud. Si tu nodo recibe una nueva cadena más larga que su cadena activa actual, hace la reorganización para adoptarla, sin importar cuántos bloques serán reemplazados.
Por eso es posible que un minero con la mayoría del poder de hash reemplace bloques y transacciones de tu cadena activa actual mediante un ataque de 51%. La cadena más larga siempre gana.
Sin embargo, las reorganizaciones "naturales" (que ocurren por dos bloques minados al mismo tiempo) raramente involucran más que el bloque de la cima de tu cadena.
Frecuencia
¿Con qué frecuencia ocurren reorganizaciones?
No con mucha frecuencia. Basándose en los datos de un nodo ejecutándose continuamente desde marzo de 2021, las reorganizaciones reales ocurrieron aproximadamente 1 cada 6.505 bloques (44,7 días).
Comandos
¿Cómo encontrar reorganizaciones de la cadena?
Puedes ver las reorganizaciones que tu nodo ha observado con el comando bitcoin-cli getchaintips. Los campos principales son:
branchlen– cuántos bloques hay en la cadena competidora.status:active– Nuestra cadena activa actual (la más larga).valid-fork– Nuestro nodo hizo una reorganización. Descargamos y validamos estos bloques y los teníamos como parte de la cadena activa, pero luego los desactivamos al recibir una cadena más larga.valid-headers– Nuestro nodo observó una posible reorganización. Descargamos estos bloques, pero no los validamos, ya que nuestra cadena activa era equivalente y quedó más larga.invalid– Una rama que contiene bloques inválidos.
Resumen
Las reorganizaciones de la cadena son una parte perfectamente normal del funcionamiento de un nodo Bitcoin. Adoptar la cadena conocida más larga permite que nodos de la red se pongan de acuerdo sobre la misma blockchain.
Las transacciones dentro de bloques desactivados por una reorganización se vuelven inválidas, pero son recicladas de vuelta al memory pool para la oportunidad de ser minadas en un bloque de la nueva cadena más larga. Como estas reorgs naturales normalmente solo afectan al bloque de la cima, espera a que tu transacción alcance 2 bloques de profundidad para evitar ese escenario.