Hard Fork

Una actualización incompatible con versiones anteriores del software

Diagrama que muestra un hard fork en la blockchain.

Un hard fork ocurre cuando se realiza una actualización en el software de Bitcoin que es incompatible con versiones anteriores.

Es cuando se hacen cambios en las reglas de modo que bloques/transacciones antes inválidos pasan a considerarse válidos en la nueva versión del software.

Como resultado, a menos que todos actualicen al nuevo software, la blockchain se dividirá en dos direcciones:

  1. Una cadena formada por bloques que siguen las reglas antiguas.
  2. Una cadena formada por bloques que siguen las reglas nuevas.
Diagrama que muestra un hard fork en la red bitcoin.

Los nodos antiguos no pueden aceptar esos nuevos bloques, así que dos blockchains paralelas van a existir. Eso se conoce como un "hard fork" en la cadena.

Por lo tanto, si quieres que un cambio vía hard fork tenga éxito, necesitas que todos los nodos de la red estén de acuerdo con los cambios y actualicen su software. Es la única forma de que todos permanezcan en la misma versión de la blockchain después de la actualización.

Escenario

¿Cómo se crea un hard fork?

Para crear un hard fork, necesitas cambiar las reglas del software para permitir que bloques/transacciones antes inválidos sean considerados válidos.

Para dar un ejemplo simple, digamos que el límite de tamaño del bloque es 1 MB, y que actualizamos el software para aceptar bloques de hasta 10 MB. El cambio comienza cuando los mineros actualizan a la nueva versión; el hard fork de hecho ocurre cuando se mina el primer bloque de 10 MB:

Diagrama que muestra el inicio de un hard fork cuando un nuevo bloque rompe las reglas antiguas.

Ese hard fork persistirá mientras la nueva cadena (con bloques incompatibles de 10 MB) permanezca como la cadena más larga de la red.

Causas

¿Qué puede causar un hard fork?

Cualquier cosa que rompa las reglas de consenso existentes resultará en un hard fork. Por ejemplo: cambios en la estructura del bloque (por ejemplo, aumento directo del tamaño máximo), cambios en la estructura de la transacción (por ejemplo, cambiar la criptografía de las firmas) o cambios en otras reglas de consenso (por ejemplo, aumentar el suministro máximo de bitcoin).

Motivación

¿Por qué crearías un hard fork?

Un cambio mediante hard fork es la única forma de hacer actualizaciones que rompen el consenso en el software de Bitcoin.

Así que, si quieres hacer una actualización en bitcoin, pero la única manera de lograrlo es romper las reglas que todos los nodos de la red siguen actualmente, entonces un hard fork es tu única opción.

Puedes hacer cambios en las reglas usando lo que se conoce como soft fork. Sin embargo, dependiendo de la complejidad de la actualización, un hard fork sería normalmente la opción más simple para hacer cambios en el software de Bitcoin.

Problemas

¿Por qué no querrías crear un hard fork?

1. Todos tienen que actualizar.

Quien no actualiza se queda atrás. No recibirá los nuevos bloques incompatibles y se quedará sin ver las transacciones más recientes de la red. Esas personas no pierden sus bitcoins, pero ya no pueden participar normalmente en el sistema. No es una forma amistosa de actualizar una red peer-to-peer.

2. Un desacuerdo dividirá la red.

El peor escenario sería un "hard fork contencioso", donde algunos mineros aceptan la actualización, pero una parte significativa no. Eso provocaría que la blockchain se ramifique en dos blockchains paralelas, dividiendo efectivamente la moneda en dos direcciones.

Diagrama que muestra bitcoin como moneda dividiéndose en dos direcciones después de un hard fork contencioso.

Eso causaría confusión entre usuarios y comerciantes y socavaría la confianza en el sistema, lo que no es ideal si el objetivo es crear una moneda digital estable.

Una división entre mineros también dividiría el poder de minería entre las dos cadenas. Cada cadena quedaría, por tanto, menos segura, con menos poder para protegerse de un ataque de 51%.

Beneficios

¿Cuándo querrías un hard fork?

Debido al riesgo de dividir la blockchain en dos, un hard fork se evita para mejoras generales del software. Como resultado, las actualizaciones vía hard fork se reservan para correcciones urgentes de eventos potencialmente catastróficos, como: cambiar la función hash SHA-256 (si se encuentra una debilidad) o aumentar manualmente el valor del objetivo (reducir la dificultad) en caso de pérdida irrecuperable de poder de minería.

Por eso todas las actualizaciones de Bitcoin hasta ahora se han implementado como soft forks; un hard fork solo debería ocurrir en caso de un problema fundamental en el funcionamiento del sistema.

Ejemplos

¿Ha habido algún hard fork en la historia de Bitcoin?

No ha habido ningún cambio intencional vía hard fork propuesto por los desarrolladores de Bitcoin Core. Sin embargo, hubo dos actualizaciones de software que causaron (o podrían haber causado) un hard fork accidental:

1. Actualización de BerkeleyDB a LevelDB

v0.7.0 a v0.8.0

Las versiones anteriores a v0.8.0 usaban la base de datos BerkeleyDB, que imponía un límite inesperado en el número de entradas en un bloque. Cuando fue reemplazada por LevelDB en v0.8.0, ese límite desconocido se eliminó. El , se minó un bloque con más entradas de las que un nodo pre-v0.8.0 aceptaría, creando un hard fork no intencional. Luego se minó un hard fork permanente el , en la altura 252.451, eliminando el límite.

2. Vulnerabilidad de doble gasto (CVE-2018-17144)

Las versiones entre 0.15.0 y 0.16.2 podrían haber causado un hard fork, pero la vulnerabilidad (que permitiría a un minero gastar dos veces la misma UTXO) fue corregida en 0.16.3 antes de ser explotada, así que no ocurrió ningún hard fork de hecho.

Resumen

Un hard fork es cuando haces una actualización en el software de Bitcoin que produce nuevos bloques/transacciones incompatibles con la versión antigua.

Para que un hard fork tenga éxito, quieres que todos (nodos y mineros) actualicen. Si los mineros no están de acuerdo y continúan minando con ambas versiones, la blockchain se ramifica en dos cadenas paralelas, dividiendo bitcoin en dos monedas separadas, lo cual sería malo para Bitcoin. Por eso, las actualizaciones generales se hacen preferentemente vía soft forks.

Recursos