(OroyFinanzas.com) – Debido a que la cadena de bloques (blockchain) de Bitcoin [1] es una estructura de datos descentralizada, las diferentes copias de la misma en todos los nodos no siempre son consistentes. Los bloques pueden llegar a algunos nodos en diferentes momentos, haciendo que éstos tengan versiones distintas temporales. Esto provoca una bifurcación de la cadena de bloques o blockchain forks, que consisten en la ramificación de dos cadenas de bloques. Sin embargo, esto es algo eventual, y que por como está diseñado el protocolo Bitcoin, la re-convergencia de la cadena de bloques se produce de forma automática cuando se añaden más bloques.
Para resolver y evitar que una bifurcación de la cadena de bloques o blockchain fork se extienda en el tiempo, por defecto, cada nodo en la red Bitcoin siempre selecciona y trata de extender la cadena de bloques que representa la mayoría de las pruebas del trabajo (proof-of-work), también conocida como la cadena más larga o cadena de mayor dificultad acumulativa. Al sumar la dificultad registrada en cada bloque en una cadena, un nodo puede calcular la cantidad total de la prueba del trabajo que se ha gastado para crear esa cadena. Como todos los nodos seleccionan la cadena de mayor dificultad acumulativa, la red Bitcoin mundial converge de manera natural.
Inconsistencias temporales en la cadena de bloques
Sin embargo, los forks o bifurcaciones se producen cuando existen inconsistencias temporales entre las versiones de la cadena de bloques, que se resuelven con la eventual reconvergencia cuando se añaden más bloques a una de las horquillas. Y casi siempre se resuelven después de un bloque.
Un fork o bifurcación se produce siempre que hay dos bloques candidatos que compiten para ser añadidos a la cadena de bloques. Esto ocurre en condiciones normales siempre que dos mineros resuelven el algoritmo de prueba de trabajo (proof-of-work) en un corto período de tiempo unos de otros. Como ambos mineros obtienen la solución para sus bloques, de inmediato emiten su propio bloque “ganador” a sus vecinos inmediatos, que comienzan a propagar el bloque a través de la red. Cada nodo [2] que recibe un bloque válido lo incorporará a su copia de la cadena de bloques, ampliando en un bloque la que tenía anteriormente. Si ese nodo más tarde recibe otro bloque candidato extendiendo del mismo bloque padre (último bloque de la cadena de bloques que sirve de referencia para resolver el siguiente bloque), conecta el segundo candidato a una cadena secundaria. Como resultado, algunos nodos “ven” un bloque candidato primero, mientras que otros nodos verán el otro bloque candidato primero y es cuando surgen dos versiones de la cadena de bloques
¿Cómo se origina y cómo se resuelve un fork o bifurcación?
Para poder entender bien este proceso, cómo se origina y cómo se resuelve, imaginaremos que la red de nodos de Bitcoin se entrelaza por ubicación geográfica (en realidad la malla de la red Bitcoin se une topológicamente, no geográficamente, pero nos servirá imaginar que es así para visualizar más fácilmente el proceso).
Supongamos, por ejemplo, que un minero en México encuentra la solución para un bloque, que diremos que es rojo y lo añade a la cadena de bloques (azul). Casi al mismo tiempo, un minero noruego encuentra una solución para su bloque (verde) y lo añade a la cadena de bloques (azul). Ambos bloques (el rojo y el verde) son válidos porque ambos bloques contienen una solución válida para la prueba de trabajo (proof-of-work), y por tanto ambos bloques (rojo y verde) extienden el mismo bloque padre, es decir el mismo último bloque de la cadena de bloques (azul).
Como los dos bloques (rojo y verde) son correctos, ambos se propagan a la red. Por proximidad, los nodos de América recibirán el bloque rojo primero y crean una cadena de mayor dificultad acumulativa con ese bloque rojo (azul-rojo) como el último bloque de la cadena de bloques, ignorando el bloque candidato verde que llega un poco más tarde. Mientras tanto, los nodos de Europa recibirán el bloque verde primero y crean una cadena de mayor dificultad acumilativa con ese bloque verde (azul-verde) como el último bloque de la cadena de bloques, ignorando el bloque candidato rojo que llega un poco más tarde.
Los mineros que han visto primero el bloque rojo construirán inmediatamente bloques candidatos con referencia a este bloque rojo como bloque padre (la llamaremos cadena roja) y empezarán a resolver la prueba de trabajo de esos bloques candidatos. Y por su parte, los mineros que recibieron el bloque verde, tomarán como referencia éste para extender la cadena de bloques con sus bloques candidatos (la llamaremos cadena verde).
Como parte de la potencia hash de la red se centra ahora en resolver el siguiente bloque en referencia a la cadena roja y otra parte de la potencia hash se centra en la construcción de la cadena verde. Pero incluso si la potencia hash se dividiese exáctamente a partes iguales entre los nodos de la cadena roja y de la cadena verde, es prácticamente imposible que ambos encuentren la solución exáctamente al mismo tiempo y muy probable que un grupo de ellos encuentre una solución primero. Digamos que el grupo de mineros de la cadena verde, resuelve antes un nuevo bloque (rosa) y se añade a la cadena (azul-verde-rosa). Rápidamente este nuevo bloque se propaga como una solución válida por toda la red Bitcoin.
Todos los nodos que habían recibido el bloque verde en la ronda anterior, simplemente extienden ahora la cadena de bloques con el nuevo bloque (rosa). Pero los nodos que eligieron el bloque rojo en la anterior ronda, verán ahora dos cadenas:
-Azul-rojo
-Azul-verde-rosa
Reconvergencia de la cadena de bloques en Bitcoin
La cadena azul-verde-rosa es ahora más larga, y por lo tanto, tiene mayor dificultad acumulativa, que la cadena azul-rojo, por lo que establecerán la cadena azul-verde-rosa como la cadena principal y la cadena azul-roja queda como secundaria. Es lo que se llama una reconvergencia, porque esos nodos se ven obligados a revisar su versión de la cadena de bloques para incorporar la nueva cadena más larga. Y todos los mineros Bitcoin [3] que habían estado trabajando en la ampliación de la cadena azul-rojo, pararán su trabajo y su bloque candidato se convierte en un bloque huérfano, ya que su padre (rojo) ya no está en la cadena más larga. Las transacciones que estaban dentro del bloque rojo se ponen a la cola de nuevo para su procesamiento en el siguiente bloque, ya que el bloque no está en la cadena principal.
Toda la red de nodos Bitcoin reconverge entonces en una sola cadena de bloques (azul-verde-rosa), con el bloque rosa como último bloque de la cadena. Y todos los mineros comienzan a trabajar inmediatamente en bloques de candidatos con el bloque rosa como padre para continúar extendiendo la cadena.
En teoría, es posible que un fork o bifurcación se extienda dos bloques. Sin embargo, la posibilidad de que eso ocurra es muy baja. Mientras que un fork o bifurcación de un bloque puede ocurrir cada semana, uno de dos bloques es extremadamente raro.
Esto es lo que explica el diseño de Bitcoin para que el intervalo entre los bloques sea de diez minutos. Es un compromiso entre los tiempos de confirmación, y que conlleva la liquidación de las transacciones, y la probabilidad de que se produzca un fork o bifurcación. Un intervalo más rápido entre bloques, haría que las transacciones se ejecutaran más rápido pero llevará a la bifurcación de la cadena de bloques con más frecuencia y viceversa.
EPL
Fuente: Mastering Bitcoin
© OroyFinanzas.com