Fundamentos técnicos de blockchain - 4. La cadena de bloques

in #blockchain7 years ago

Una cadena de bloques no es más que una serie de ”bloques” que agrupan transacciones y que están enlazados siguiendo un orden temporal.
blocks_1.png

Cabecera de bloque e inmutabilidad

Los bloques de la cadena se componen de una cabecera de bloque y un contenido. Cada bloque dentro de la cadena de bloques se identifica mediante el cálculo de una funcion hash de la cabecera del bloque. Cada bloque hace referencia a un bloque anterior, conocido como el bloque padre, a través del campo "hash de bloque anterior" en la cabecera del bloque. La secuencia de los hashes que unen cada bloque a su padre crea una cadena que se remonta hasta el el primer bloque jamás creado, conocido como el bloque génesis.
blocks_2.png

Al tener el "hash de bloque anterior" dentro de la cabecera del bloque, el hash del bloque anterior afecta al hash del bloque actual. La identidad propia del hijo cambia si la identidad de los padres cambia. Cuando el padre se modifica de alguna manera, los cambios de hash de los padres tambien cambian. Cuando el hash del padre cambia requiere un cambio en el puntero "hash de bloque anterior" del hijo. Esto a su vez hace que el hash del hijo cambie, lo que requiere un cambio en el puntero del nieto, que a su vez cambia el nieto, y así sucesivamente. Este efecto cascada asegura que, una vez que un bloque tiene muchas generaciones siguientes, no puede ser cambiado sin forzar un nuevo cálculo de todos los bloques siguientes. Debido a que un nuevo cálculo requeriría una computación enorme, la existencia de una larga cadena de bloques hace que la historia profunda de la cadena de bloques sea inmutable, que es una característica clave de la seguridad de la tecnología blockchain.

Nota: La cabecera incluye otra información como la dificultad, sello temporal (timestamp), nonce o la raíz del árbol de Merkle. No te preocupes si no conoces el significado de estos campos adicionales porque se explicarán en este artículo y posteriores.

Contenido del bloque

Los bloques incluyen, a parte de una cabecera, la lista de transacciones incluidas en dicho bloque.

La principal diferencia de la blockchain de Ethereum con respecto a la de Bitcoin en cuanto a la arquitectura es que los bloques en Ethereum contienen, aparte de la lista de transacciones, el estado más reciente resultado de procesar las transacciones en el bloque y que se explicó en el anterior artículo.

El algoritmo de validación de un bloque en Ethereum sigue los siguiente pasos:

  • Comprobar que el bloque previo referenciado existe y es válido.
  • Comprobar que el sello temporal (timestamp) del bloque es posterior al sello temporal del bloque previo y con una diferencia menor a 15 minutos.
  • Comprobar que otros campos como el número de bloque, límite de gas, dificultad, nonce, etc. son válidos.
  • Comprobar que el estado inicial S[0] del nuevo bloque es igual al estado final del bloque anterior
  • Comprobar que el nuevo estado S[N] es el resultado de aplicar las N transacciones incluidas en el bloque al estado S[0]: Para 1 a N, S[i+1] = APPLY(S[i],TX[i]).
  • Calcular el estado final como resultado de añadir al estado S[N] la recompensa pagado al minero que produce el bloque.
  • Comprobar que la raíz del árbol de Merkle calculado coincide con el provisto durante la generación del bloque.

Arboles de Merkle

Un árbol de Merkle, también conocido como un árbol hash binario, es una estructura de datos que se usa para resumir y verificar de manera eficiente la integridad de grandes conjuntos de datos. Los árboles merkle son árboles binarios que contienen hashes criptográficos.

Los árboles merkle se usan en bitcoin y otras blockchains para resumir todas las transacciones en un bloque, produciendo una huella digital completa de todo el conjunto de transacciones, proporcionando un proceso muy eficiente para verificar si una transacción está incluida en un bloque. Un árbol de Merkle se construye mediante la ejecución de una función de hash en pares de nodos de forma recursiva hasta que solo queda un único hash, al que se le llama raíz o raíz merkle.

Cuando se toman N elementos de datos, se hace hash de cada uno de ellos y se resumen en un árbol merkle, se puede comprobar si cualquier elemento de datos está incluido en el árbol con un máximo de 2*log2(N) cálculos, convirtiéndolo en una estructura de datos muy eficiente.

En el caso de la blockchain los nodos hoja o nodos en la parte inferior son las transacciones incluidas en el bloque y se genera el árbol hacia arriba aplicando la función hash correspondiente.
merkle-tree.png

Para demostrar que una transacción específica está incluida en un bloque, un nodo solo necesita producir log2(N) hashes, elaborando una ruta de autenticación o ruta Merkle que conecte la transacción específica a la raíz del árbol. Ésto es útil por ejemplo en los conocidos como clientes ligeros o SPV que se utilizan para implementar las carteras de monedas digitales y que sólo desean guardan información relativa a las direcciones de dicha cartera y no la cadena de bloques completa.

Seria teóricamente posible crear cabeceras de bloque que contuvieran toda la información de transacciones pero esto presentaría serios problemas de escalabilidad.

En el caso de Ethereum además se incluye además otro tipo de árbol, conocido como árbol de Patricia y que representa el estado de la máquina virtual. Este enfoque podría parecer muy ineficiente, sin embargo cada bloque no guarda todo el estado sino una pequeña parte del árbol con la parte que ha cambiado con respecto al anterior estado.

Los árboles es un concepto avanzado y que puede ser difícil de entender inicialmente. Si éste es tu caso, te animo a que busques más información sobre ellos. Este artículo solo pretende explicar cual es su estructura y objetivo en la blockchain.

¿Como se eligen las transacciones a incluir en un bloque?

En el próximo artículo explicaré como se eligen las transacciones que se incluyen dentro de un bloque. Es lo que se conoce como minería o validación, y se ejecuta tal y como haya sido programado en lo que se conoce como algoritmo de consenso, sin duda el concepto mas innovador que introdujo Bitcoin y la tecnología blockchain.

Sort:  

Congratulations @asuarez! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

Do not miss the last announcement from @steemitboard!