Una reorganización es un cambio de estado en cadena local, no un cambio en las reglas de consenso de Bitcoin. El nodo completo primero verifica los bloques candidatos de acuerdo con sus propias reglas y solo entre las ramas válidas elige la que tiene la cadena acumulada más alta. Si difiere por debajo del consejo actual, el UTXO revierte los cambios de los bloques desconectados, aplica una rama alternativa y reevalúa las transacciones afectadas contra el mempool. (chainwork)
Bitcoin Core no sólo elige la rama más alta o más popular. La cadena candidata primero debe satisfacer todas las reglas de consenso que aplica el nodo. Las funciones FindMostWorkChain y ActivateBestChain solo funcionan con candidatos válidos; sólo entonces es decisiva la prueba acumulativa del trabajo. Por lo tanto, un bloque no válido no puede ganar simplemente por tener más hashrate detrás.
El punto de bifurcación es el último bloque común a la cadena activa actual y la bifurcación alternativa. La profundidad de la reorganización generalmente se describe por la cantidad de bloques de la punta activa que deben desconectarse de este ancestro común. Una reorganización de un solo bloque reemplaza la sugerencia, una reorganización más profunda devuelve varios bloques comprometidos. La profundidad es relativa a la vista de un nodo en particular.
DisconnectTip y la lógica de validación posterior devuelven los efectos de los bloques desconectados en orden inverso. El UTXO gastado se recuperará y las salidas creadas por el bloque eliminado dejarán de confirmarse. Es por eso que Bitcoin Core almacena datos de deshacer: debe poder reconstruir el conjunto UTXO exactamente en el punto de bifurcación.
Después de una reversión, ConnectTip conecta los bloques de la rama superior de la cadena en orden de avance. Cada transacción se revalida con el conjunto UTXO reconstruido y las reglas válidas a la altura determinada. El resultado es un estado en cadena correspondiente a una historia particular, no una mezcla de transacciones de ambas ramas.
Es posible que las transacciones de bloques desconectados no desaparezcan. Bitcoin Core intentará devolver transacciones elegibles que no sean de Coinbase al mempool. Es posible que algunos ya estén en una nueva sucursal, otros pueden entrar en conflicto, perder insumos, dejar de ser definitivos o no cumplir con la política de mempool. Por lo tanto, la billetera debe tener en cuenta que la confirmación puede cancelarse mediante reorganización.
La transacción de Coinbase es una excepción: no regresa al mempool después de la desconexión y sus resultados solo se pueden gastar después de 100 confirmaciones según el consenso. Cuando la reorganización elimina un bloque con una base de monedas, la recompensa de ese bloque desaparece del estado de cadena activo. Las transacciones posteriores que se basaron en el historial eliminado también pueden no ser válidas.
La confirmación cuenta los bloques encima de la transacción en la cadena actualmente activa de un nodo en particular. Cada bloque adicional normalmente aumenta el trabajo requerido para reemplazar la historia, pero ningún número finito de confirmaciones crea una finalidad matemática absoluta. Por lo tanto, las bolsas y los comerciantes eligen el umbral según el valor del pago y el modelo de riesgo.
Una reorganización breve puede ocurrir naturalmente cuando dos mineros encuentran bloques en competencia casi simultáneamente y diferentes partes de la red siguen diferentes consejos durante un tiempo; la rama con menos cadenas queda obsoleta. Un ataque de doble gasto utiliza el mismo mecanismo intencionalmente. El procedimiento técnico de selección de la cadena es el mismo, la causa y la finalidad económica son diferentes.
La reorganización se lleva a cabo dentro de un único conjunto de reglas: un nodo elige entre las ramas que considera válidas. Un hard fork, por otro lado, cambia la validez de tal manera que el software antiguo y el nuevo ya pueden estar en desacuerdo sobre si el bloque es válido. Por tanto, la reorganización no es en sí misma un cambio de consenso.
En Bitcoin Core, los pasos son explícitos: FindMostWorkChain encuentra la mejor rama válida, ActivateBestChainStep puede desconectar la punta actual, ConnectTip conecta bloques alternativos y MaybeUpdateMempoolForReorg vuelve a verificar las transacciones de bloques desconectados. El código fuente advierte explícitamente que una reorganización extensa puede alargar significativamente el procesamiento de ActivateBestChain.
Para obtener la imagen más completa, lee esta entrada junto con Timechain, Confirmación, Bloque obsoleto, Proof of Work, Consenso de Nakamoto, Bitcoin. También enlazan con esta entrada Confirmación, Doble gasto, Transacción coinbase, Soft Fork.