Las bifurcaciones, o la amenaza de ellas, parecen ser una característica establecida del paisaje de criptomonedas. Pero, ¿qué son? ¿Por qué son tan importantes? ¿Y cuál es la diferencia entre un tenedor duro y un tenedor blando?
Un «tenedor», en términos de programación, es una modificación de código de fuente abierta. Por lo general, el código bifurcado es similar al original. Pero con modificaciones importantes, y los dos «dientes» coexisten cómodamente. Algunas veces se usa un tenedor para probar un proceso. Pero con las criptomonedas, se usa más a menudo para implementar un cambio fundamental o para crear un nuevo activo con características similares (pero no iguales) que el original.
No todos los tenedores son intencionales. Con una base de código abierto de amplia distribución. Una horquilla puede suceder accidentalmente cuando no todos los nodos están replicando la misma información. Por lo general, estas horquillas se identifican y se resuelven. Sin embargo, y la mayoría de las horquillas de criptomonedas se deben a desacuerdos sobre las características incrustadas.
Una cosa a tener en cuenta con los tenedores es que tienen una «historia compartida». El registro de transacciones en cada una de las cadenas (antiguas y nuevas) es idéntico antes de la división.
Tenedores duros
Hay dos tipos principales de horquilla de programación: dura y blanda. Un hard fork es un cambio a un protocolo que invalida las versiones anteriores. Si las versiones anteriores continúan ejecutándose, terminarán con un protocolo diferente y con datos diferentes que la versión más nueva. Esto puede conducir a confusión significativa y posible error.
Con Bitcoin, sería necesario un hard fork para cambiar los parámetros de definición como el tamaño del bloque, la dificultad del rompecabezas criptográfico que debe resolverse. los límites a la información adicional que se puede agregar, etc. Un cambio en cualquiera de estas reglas hace que los bloques sean aceptados por el nuevo protocolo pero rechazados por versiones anteriores y podría ocasionar problemas graves. Posiblemente incluso una pérdida de fondos.
Por ejemplo, si el límite de tamaño de bloque se aumentara de 1 MB a 4 MB. Los nodos que ejecuten la nueva versión aceptarían un bloque de 2 MB, pero los nodos que ejecutan la versión anterior lo rechazarán.
Los tenedores duros en la práctica
Digamos que este bloque de 2MB es validado por un nodo actualizado y agregado a la cadena de bloques. ¿Qué pasa si el siguiente bloque es validado por un nodo que ejecuta una versión anterior del protocolo? Tratará de agregar su bloque a la cadena de bloques. Pero detectará que el último bloque no es válido. Por lo tanto, ignorará ese bloque y adjuntará su nueva validación al anterior. De repente, tienes dos blockchains, uno con bloques de versión más antiguos y más nuevos, y otro con bloques de versiones más antiguas. La cadena que crece más rápido dependerá de qué nodos consigan que se validen los siguientes bloques, y podría terminar siendo divisiones adicionales. Es factible que las dos (o más) cadenas crezcan en paralelo indefinidamente.
Es un tenedor difícil y potencialmente desordenado. También es arriesgado. Ya que es posible que los bitcoins gastados en un nuevo bloque puedan distribuirse nuevamente en un bloque antiguo. Ya que los comerciantes, billeteras y usuarios que ejecutan el código anterior no detectarían el gasto en el nuevo código, que consideran no válido.
La única solución es que una rama se abandone a favor de la otra. Lo que implica que algunos mineros pierdan las transacciones en sí mismas. O bien, todos los nodos tendrían que cambiar a la versión más nueva al mismo tiempo. Lo cual es difícil de lograr en un sistema descentralizado y ampliamente difundido.
Tenedor suave
Un tenedor suave todavía puede funcionar con versiones anteriores. Si, por ejemplo, un protocolo se modifica de una manera que aprieta las reglas, que implementa un cambio cosmético o que agrega una función que no afecta la estructura de ninguna manera, entonces los nuevos bloques de versión serán aceptados por los nodos de versiones anteriores. Sin embargo, no al revés: la versión más nueva y más «estrecha» rechazaría los viejos bloques de versiones.
En bitcoins, idealmente los mineros de versiones antiguas se darían cuenta de que sus bloques fueron rechazados y se actualizarían. A medida que aumentan los mineros, la cadena con bloques predominantemente nuevos se convierte en la más larga, lo que haría huérfanos a los bloques de versiones anteriores, lo que llevaría a más mineros a actualizarse, y el sistema se autocorregirá. Como los nodos antiguos y actualizados aceptan los bloques de versión nuevos, los bloques de la nueva versión finalmente ganan.
Los tenedores suaves en el mundo real
Por ejemplo, supongamos que la comunidad decidió reducir el tamaño del bloque a 0.5MB del límite actual de 1MB. Los nuevos nodos de versión rechazarían bloques de 1MB y se construirían en el bloque anterior (si se extraía con una versión actualizada del código), lo que causaría un fork temporal.
Este es un tenedor suave, y ya ha sucedido varias veces. Inicialmente, Bitcoin no tenía un límite de tamaño de bloque. La introducción del límite de 1 MB se realizó a través de un tenedor suave, ya que la nueva regla era «más estricta» que la anterior. La función pay-to-script-hash, que mejora el código sin cambiar la estructura, también se agregó con éxito a través de un soft tenedor. En general, este tipo de enmienda requiere que la mayoría de los mineros se actualice, lo que lo hace más factible y menos perjudicial.
Las bifurcaciones suaves no conllevan el riesgo de doble gasto que afecta a las bifurcaciones duras, ya que los comerciantes y los usuarios que ejecutan nodos antiguos leerán bloques de versiones nuevas y viejas.