Mastering Bitcoin
10. Minería y Consenso » Montaje y Selección de Cadenas de Bloques
Página 76 de 98
Montaje y Selección de Cadenas de Bloques
El último paso en el mecanismo de consenso descentralizado de bitcoin es el montaje de bloques en cadenas y la selección de la cadena con la mayor prueba de trabajo. Una vez que un nodo ha validado un nuevo bloque, entonces intentará montar una cadena conectando el bloque a la cadena de bloques existente.
Los nodos mantienen tres conjuntos de bloques: los relacionados con la cadena de bloques principal, los que forman las ramas de la cadena de bloques principal (cadenas secundarias) y, por último, los bloques que no tienen un padre conocido en las cadenas conocidas (huérfanos). Los bloques no válidos son rechazados en cuanto falla uno cualquiera de los criterios de validación y, por tanto, no están incluidos en ninguna cadena.
La «cadena principal» en cualquier momento es la cadena con bloques que tiene asociada la mayor cantidad de dificultad. Bajo la mayoría de circunstancias, esto coincide con la cadena que tiene el mayor número de bloques, excepto cuando haya dos cadenas de igual longitud y una de ellas tenga mayor prueba de trabajo que la otra. La cadena principal también tendrá ramas con bloques que son «hermanos» de bloques en la cadena principal. Estos bloques son válidos, pero no forman parte de la cadena principal. Se mantienen para futuras referencias, en caso de que una de esas cadenas se extienda y supere en dificultad a la cadena principal. En la siguiente sección (Bifurcaciones de la Cadena de Bloques), vamos a ver cómo se producen cadenas secundarias cuando se minan bloques casi simultáneamente a la misma altura.
Cuando se recibe un nuevo bloque, un nodo intentará ensamblarlo en la cadena de bloques existente.
El nodo leerá de ese bloque el campo «hash de bloque anterior», que es la referencia al padre del nuevo bloque. A continuación, el nodo intentará encontrar ese padre en la cadena de bloques existente. La mayoría de las veces, el padre será la «punta» de la cadena principal, lo que significaría que este nuevo bloque extiende la cadena principal. Por ejemplo, el nuevo bloque 277.316 tiene una referencia al hash de su bloque padre 277.315. La mayoría de los nodos que reciban 277.316 ya tendrán al bloque 277.315 como la punta de su cadena principal y por lo tanto enlazarán el nuevo bloque y extenderán esa cadena.
A veces, como veremos en Bifurcaciones de la Cadena de Bloques, el nuevo bloque extiende una cadena que no es la cadena principal. En ese caso, el nodo extenderá la cadena secundaria al conectar el nuevo bloque y luego comparará la dificultad de la cadena secundaria con la de la cadena principal.
Si la cadena secundaria tiene más dificultad acumulada que la cadena principal, el nodo reconverge en la cadena secundaria, lo que significa que se seleccionaría la cadena secundaria como su nueva cadena principal, haciendo que la cadena principal se convierta en una cadena secundaria. Si el nodo es un minero, a partir de entonces, construirá el próximo bloque como ampliación de este nueva y más larga cadena.
Si se recibe un bloque válido y no se encuentra ningún padre en las cadenas existentes, ese bloque se considera un «huérfano». Los bloques huérfanos se guardan en el pool de bloques huérfanos donde permanecerán hasta que se reciba a su padre. Una vez que se recibe el padre y se enlaza a las cadenas existentes, el huérfano se puede sacar del pool de huérfanos y enlazarlo al padre, haciéndolo parte de una cadena. Los bloques huérfanos suelen ocurrir cuando dos bloques que fueron minados en poco tiempo el uno del otro se reciben en orden inverso (hijo antes del padre).
Al seleccionar la cadena de mayor dificultad, todos los nodos finalmente logran el consenso de toda la red. Las discrepancias temporales entre las cadenas se resuelven con el tiempo a medida que se añade más prueba de trabajo, extendiendo una de las posibles cadenas. Los nodos de minería «votan» con su poder de minería para elegir qué cadena se extiende por la minería del siguiente bloque. Cuando mina un nuevo bloque y se extienda la cadena, ese nuevo bloque representa su voto.
En la siguiente sección vamos a ver cómo las discrepancias entre las cadenas que compiten entre sí (bifurcación) se resuelven mediante la selección independiente de la cadena de dificultad más larga.
Bifurcaciones de la Cadena de Bloques
Debido a que la cadena de bloques es una estructura de datos descentralizada, sus diferentes copias no siempre son coherentes. Los bloques podrían llegar a diferentes nodos en diferentes momentos, haciendo que los nodos tengan diferentes perspectivas de la cadena de bloques. Para resolver esto, cada nodo siempre selecciona e intenta extender la cadena de bloques que represente la mayor prueba de trabajo, también conocida como la cadena más larga o la cadena de mayor dificultad acumulada.
Sumando la dificultad registrada en cada bloque en una cadena, un nodo puede calcular la cantidad total de prueba de trabajo que se ha gastado para crear esa cadena. Mientras todos los nodos seleccionen la cadena de dificultad acumulada más larga, la red bitcoin mundial finalmente converge a un estado coherente. Las bifurcaciones producen inconsistencias temporales entre versiones de la cadena de bloques, que finalmente se resuelven por reconvergencia a medida que se añaden más bloques a una de las bifurcaciones.
En los próximos diagramas, seguimos el progreso de un evento «bifurcación» en toda la red. El diagrama es una representación simplificada de bitcoin como una red global. En realidad, la topología de la red bitcoin no está organizada geográficamente. Más bien, se forma una red de malla de nodos interconectados, que podrían situarse muy lejos unos de otros geográficamente. La representación de una topología geográfica es una simplificación utilizada para ilustrar una bifurcación. En la red bitcoin real, la «distancia» entre nodos se mide en «saltos» de un nodo a otro, no mediante su ubicación física.
Con fines ilustrativos, los diferentes bloques se muestran con diferentes colores, extendiéndose por la red y coloreando las conexiones que atraviesan.
En el primer diagrama (Visualización de un evento bifurcación de la cadena de bloques antes de la bifurcación), la red tiene una perspectiva unificada de la cadena de bloques, con el bloque azul como la punta de la cadena principal.

Figura 2. Visualización de un evento bifurcación de la cadena de bloques antes de la bifurcación.
Una «bifurcación» se produce siempre que hay dos bloques candidatos que compiten para formar la cadena de bloques más larga. Esto ocurre en condiciones normales cuando dos mineros resuelven el algoritmo de prueba de trabajo dentro de un corto período de tiempo el uno del otro. Como los dos mineros descubren una solución para sus respectivos bloques candidatos, de inmediato emiten su propio bloque «vencedor» a sus vecinos inmediatos que comienzan a propagar el bloque a toda la red.
Cada nodo incorporará en su cadena de bloques el bloque válido que haya recibido, extendiendo la cadena de bloques en un bloque. Si ese nodo más tarde ve otro bloque candidato extendiendo el mismo padre, conectará el segundo candidato en una cadena secundaria. Como resultado, algunos nodos «verán» un bloque candidato primero, mientras que otros nodos verán el otro bloque candidato, y así surgirán dos versiones rivales de la cadena de bloques. En Visualización de un evento bifurcación en la cadena de bloques: se encuentran dos bloques simultáneamente, vemos a dos mineros que extraen dos bloques diferentes casi al mismo tiempo.
Ambos bloques son hijos del bloque azul, creados con la intención de extender la cadena mediante la construcción en la parte superior del bloque azul. Para ayudarnos a rastrearlo, uno se visualiza como un bloque rojo procedente de Canadá, y el otro está marcado como un bloque verde procedente de Australia.
Supongamos, por ejemplo, que un minero en Canadá encuentra una solución de prueba de trabajo para un bloque «rojo» que extiende la cadena de bloques sobre la parte superior del bloque padre «azul». Casi al mismo tiempo, un minero australiano que también estaba extendiendo a partir del bloque «azul» encuentra una solución para el bloque «verde» que es su bloque candidato. Ahora, hay dos bloques posibles, que llamamos «rojo», originario de Canadá, y uno que llamamos «verde» originario de Australia. Ambos bloques son válidos, ambos bloques contienen una solución válida para la prueba de trabajo, y ambos bloques extienden el mismo padre. Ambos bloques probablemente contengan prácticamente las mismas transacciones, y quizás solamente algunas diferencias en el orden de las transacciones.

Figura 3. Visualización de un evento bifurcación en la cadena de bloques: se encuentran dos bloques simultáneamente

Figura 4. Visualización de un evento bifurcación en la cadena de bloques: se propagan dos bloques, seccionando la red
A medida que los dos bloques se propagan, algunos nodos reciben el bloque «rojo» primero y algunos reciben el bloque «verde» en primer lugar. Como se muestra en Visualización de un evento bifurcación en la cadena de bloques: se propagan dos bloques, seccionando la red, la red se secciona en dos perspectivas diferentes de la cadena de bloques, una con el bloque rojo en lo más alto, y la otra con el bloque verde.

Figura 5. Visualización de un evento bifurcación de la cadena de bloques: un nuevo bloque extiende una bifurcación
A partir de ese momento, los nodos de la red bitcoin más cercanos (topológicamente, no geográficamente) al nodo canadiense oirán acerca del bloque «rojo» primero y crearán una cadena de bloques con la mayor dificultad acumulada con el bloque «rojo» como último bloque de la cadena (por ejemplo, azul-rojo), ignorando el bloque candidato «verde» que llega un poco más tarde. Mientras tanto, los nodos más cerca del nodo de Australia tomarán a ese bloque como el ganador y extenderán la cadena de bloques con el «verde» como el último bloque (por ejemplo, azul-verde), haciendo caso omiso del «rojo» cuando llega a los pocos segundos. Los mineros que hayan visto el «rojo» en primer lugar, inmediatamente construirán bloques candidatos que haga referencia al «rojo» como padre y empezarán a tratar de resolver la prueba de trabajo para estos bloques candidatos. Por contra, los mineros que aceptaron «verde» empezarán a construir por encima del «verde», extendiendo esa cadena.
Las bifurcaciones casi siempre se resuelven en el tiempo que se tarda en encontrar un bloque.
Mientras parte de la potencia de hash de la red se dedica a la construcción con el «rojo» como padre, otra parte de la potencia de hash se dedica a la construcción por encima del «verde». Incluso si la potencia de hash se dividiera casi en partes iguales, es probable que un grupo de mineros encuentre una solución y la propague antes de que el otro grupo de mineros haya encontrado alguna solución.
Digamos, por ejemplo, que los mineros que construyen en la parte superior del «verde» encuentran un nuevo bloque «rosa» que extiende la cadena (por ejemplo, azul, verde y rosa). Propagan inmediatamente este nuevo bloque y toda la red lo ve como una solución válida, como se muestra en Visualización de un evento bifurcación de la cadena de bloques: un nuevo bloque extiende una bifurcación.

Figura 6. Visualización de un evento bifurcación de la cadena de bloques: la red reconverge en una nueva cadena más larga
Todos los nodos que habían elegido «verde» como el ganador en la ronda anterior simplemente extenderán la cadena un bloque más. Los nodos que eligieron «rojo» como el ganador, sin embargo, ahora verán dos cadenas: azul-verde-rosa y azul-rojo. La cadena azul-verde-rosa es ahora más larga (mayor dificultad acumulada) que la cadena azul-rojo. Como resultado, esos nodos establecen la cadena azul-verde-rosa como la cadena principal y convierten la cadena azul-rojo en una cadena secundaria, como se muestra en Visualización de un evento bifurcación de la cadena de bloques: la red reconverge en una nueva cadena más larga. Esto es una reconvergencia de cadena, porque esos nodos se ven obligados a revisar su visión de la cadena de bloques para incorporar la nueva evidencia de una cadena más larga. Cualquier minero que trabaje en la extensión de la cadena azul-rojo ahora detendrá ese trabajo porque su bloque candidato es un «huérfano», ya que su padre, «rojo», ya no está en la cadena más larga. Las transacciones dentro de «rojo» se ponen en cola de nuevo para su procesamiento en el bloque siguiente, ya que el bloque ya no está en la cadena principal. La red entera reconverge en una sola cadena de bloques azul-verde-rosa, con «rosa» como el último bloque de la cadena. Todos los mineros comienzan a trabajar inmediatamente en bloques candidatos que hacen referencia a «rosa» como su padre para extender la cadena azul-verde-rosa.
Es teóricamente posible que una bifurcación se extienda a dos bloques, si los mineros encuentran casi al mismo tiempo dos bloques en «lados» opuestos de una bifurcación anterior. Sin embargo, la posibilidad de que eso ocurra es muy baja. Mientras que una bifurcación de un bloque puede ocurrir todas las semanas, una bifurcación de dos bloques es muy rara.
El intervalo de bloque de bitcoin de 10 minutos es un compromiso de diseño entre tiempos rápidos de confirmación (liquidación de las transacciones) y la probabilidad de una bifurcación. Un tiempo más rápido de bloque haría las transacciones claramente más rápidas, pero daría lugar a bifurcaciones más frecuentes de la cadena de bloques, mientras que un tiempo de bloque más lento disminuiría el número de bifurcaciones pero harían la liquidación más lenta.