Conclusiones clave

  • Un árbol Merkle es una estructura de datos criptográfica que organiza los datos en pares de hashes, combinándolos de forma ascendente hasta que un único hash, la raíz Merkle, representa todo el conjunto de datos.

  • Las raíces Merkle permiten a las redes blockchain verificar si una transacción está incluida en un bloque sin descargar el bloque completo, utilizando una prueba Merkle compacta que aumenta logarítmicamente con el número de transacciones.

  • Bitcoin incorpora la raíz Merkle en el encabezado de cada bloque, lo que permite a los clientes ligeros verificar las transacciones utilizando únicamente los encabezados de los bloques en lugar de toda la cadena de bloques.

  • Ethereum utiliza un árbol Merkle Patricia más complejo para almacenar los saldos de las cuentas y el estado de los contratos inteligentes, lo que posibilita las pruebas de estado para clientes ligeros y agregaciones de capa 2.

BInance Academy courses banner

Introducción

Los árboles de Merkle son uno de los conceptos fundamentales que hacen que los sistemas blockchain sean eficientes y verificables a gran escala. Permiten a las redes resumir conjuntos de datos completos en una única huella digital criptográfica, al tiempo que posibilitan demostrar que una transacción o información específica está incluida. Para comprender la importancia de los árboles de Merkle en el diseño de blockchain, analicemos su funcionamiento, cómo los utilizan las diferentes redes y cómo estructuras más recientes, como los árboles de Verkle, podrían mejorarlos en el futuro.

Cómo funcionan los árboles de Merkle

Un árbol Merkle, que recibe su nombre del científico informático Ralph Merkle, quien patentó el concepto en 1979, es una estructura de datos que se utiliza para resumir y verificar de manera eficiente la integridad de grandes conjuntos de datos. En una cadena de bloques, los árboles Merkle comprimen miles de transacciones en un único valor compacto que se almacena en la cabecera del bloque.

El árbol se construye de abajo hacia arriba mediante funciones hash criptográficas. Cada nodo hoja contiene el hash de un dato específico, como una transacción. Estos hashes de hoja se emparejan: el hash de cada par se calcula concatenando los dos hashes hijos y aplicando la función hash al resultado. Este proceso se repite hacia arriba, capa por capa, hasta que queda un único hash en la parte superior, la raíz Merkle.

Dado que cada nodo padre depende de sus dos hijos, cualquier cambio en una sola hoja se propagará hacia arriba y producirá una raíz Merkle completamente diferente. Esta propiedad convierte a los árboles Merkle en una herramienta eficaz para detectar manipulaciones: si dos copias de un conjunto de datos producen la misma raíz Merkle, existe una altísima probabilidad de que los conjuntos de datos sean idénticos.

Raíces de Merkle

La raíz Merkle es un hash de tamaño fijo, generalmente de 32 bytes (256 bits) en aplicaciones blockchain, que actúa como una huella digital para todo el conjunto de datos. En la mayoría de las redes blockchain, los encabezados de bloque incluyen la raíz Merkle junto con otros metadatos, como marcas de tiempo y el hash del bloque anterior, lo que permite mantener los encabezados pequeños sin dejar de garantizar criptográficamente el cumplimiento de todas las transacciones dentro del bloque.

Para ilustrarlo de forma sencilla, veamos un archivo de 8 GB dividido en ocho partes. Llamemos a los diferentes fragmentos de la A a la H. Cada fragmento se pasa luego por una función hash, lo que nos da ocho hashes diferentes.

Fragments A-H and each of their hashes.
Cada uno de los ocho fragmentos se llama a través de una función hash para obtener sus hashes.

Con el hash de todos los fragmentos, si uno es defectuoso, lo sabrás comparándolo con el original, ¿verdad? Posiblemente, pero esto también puede ser increíblemente ineficiente. Si tu archivo tiene miles de fragmentos, ¿calcularás el hash de todos ellos y compararás meticulosamente los resultados?

La raíz Merkle proporciona una solución más elegante. Toma cada par de hashes, combínalos y luego aplica la función hash al conjunto. Obtendrás los hashes hA + hB, hC + hD, hE + hF y hG + hH, y terminarás con cuatro hashes.

Merkle root first and second round of hashes
La estructura se asemeja a un árbol invertido. En la fila inferior, tenemos las hojas, que se combinan para formar los nodos y, finalmente, la raíz.

Luego, otra ronda de hash y obtendrás dos: hABCD y hEFGH. Finalmente, aplica el hash a los dos restantes para obtener el hash maestro, y tendrás la raíz Merkle (o hash raíz): hABCDEFGH.

Pruebas y verificación de Merkle

Una de las características más prácticas de los árboles Merkle es la capacidad de demostrar que un dato específico pertenece al conjunto de datos sin revelar todo el conjunto. Esto se conoce como prueba Merkle. Para verificar que una transacción está incluida en un bloque, un cliente ligero solo necesita la transacción en sí, un pequeño conjunto de hashes hermanos a lo largo de la ruta hacia la raíz y la raíz Merkle del encabezado del bloque. El verificador recalcula los hashes a lo largo de la ruta y comprueba si el resultado coincide con la raíz conocida. Si coincide, se demuestra matemáticamente que la transacción forma parte del bloque.

Merkle verification example, three hash rounds
Para comprobar hD, solo necesitamos los hashes que se muestran en rojo.

Consideremos un escenario en el que se desea verificar una transacción cuyo TXID es hD. Si se proporciona hC, se puede calcular hCD. Luego, se utiliza hAB para calcular hABCD. Finalmente, con hEFGH, se comprueba que la raíz Merkle resultante coincida con la del encabezado del bloque. Si coincide, esto demuestra que la transacción se incluyó en el bloque. Sería prácticamente imposible generar el mismo hash con datos diferentes.

En el ejemplo anterior, solo necesitarás aplicar la función hash tres veces. Sin una prueba Merkle, tendrías que hacerlo siete veces. Dado que hoy en día los bloques contienen miles de transacciones, el uso de pruebas Merkle ahorra mucho tiempo y recursos informáticos.

El tamaño de la prueba crece logarítmicamente con el número de hojas: para un millón de transacciones (un árbol binario de profundidad 20), solo se necesitan unos 20 hashes, aproximadamente 640 bytes. Esto es lo que permite a los nodos ligeros, a veces llamados clientes de Verificación de Pago Simplificada (SPV), verificar transacciones sin descargar toda la cadena de bloques, un proceso que de otro modo requeriría cientos de gigabytes de datos.

Árboles Merkle en redes blockchain

Bitcoin y verificación de transacciones

En Bitcoin, cada encabezado de bloque contiene una raíz Merkle de 32 bytes que confirma todas las transacciones incluidas en ese bloque. Los mineros de Bitcoin construyen un árbol Merkle a partir de las transacciones que incluyen, y la raíz resultante se integra en el encabezado del bloque junto con la solución de Prueba de Trabajo. Este diseño permite que el encabezado del bloque, generalmente de unos 80 bytes, sea suficiente para verificar que cualquier transacción específica se incluyó en el bloque, sin necesidad de consultar las demás transacciones.

Bitcoin también utiliza árboles Merkle en su propuesta MAST (Merkelized Abstract Syntax Trees), que permite representar condiciones de gasto complejas en los scripts de Bitcoin como un árbol Merkle. Solo es necesario revelar la rama ejecutada del script, manteniendo privadas las condiciones no utilizadas y reduciendo el tamaño de las transacciones.

Ethereum y las pruebas de estado

Ethereum utiliza una variante más sofisticada llamada Merkle Patricia Trie, una estructura de árbol hexadecimal (de 16 ramas) que almacena saldos de cuentas, código de contratos y datos de almacenamiento. A diferencia del sencillo árbol Merkle binario utilizado para las transacciones de Bitcoin, el Merkle Patricia Trie está diseñado para admitir actualizaciones frecuentes del estado: cuando cambia el saldo de una cuenta, solo es necesario recalcular la ruta desde esa hoja hasta la raíz, en lugar de reconstruir todo el árbol.

Las pruebas de estado generadas a partir del árbol de prefijos Merkle Patricia permiten a los clientes ligeros de Ethereum y a los agregadores de capa 2 verificar los saldos de las cuentas y el almacenamiento de contratos sin necesidad de ejecutar un nodo completo. Estas pruebas también son esenciales para los puentes entre cadenas que necesitan verificar eventos de una cadena desde otra.

Limitaciones y desarrollos futuros

Si bien los árboles Merkle proporcionan una verificación eficiente, el tamaño de las pruebas sigue creciendo logarítmicamente con el conjunto de datos. En Ethereum, a medida que el estado crece, los testigos de bloque (las pruebas necesarias para validar un bloque) pueden alcanzar varios megabytes. Esto supone un desafío de escalabilidad para los clientes sin estado, que tendrían que recibir y verificar estas pruebas para cada bloque.

Los árboles de Verkle, que utilizan compromisos vectoriales basados ​​en compromisos polinomiales (Kate-Zaverucha-Goldberg o KZG) en lugar del hash tradicional, ofrecen una posible solución. Al agrupar muchos nodos hijos bajo cada nodo (factor de ramificación de 256), los árboles de Verkle producen pruebas de tamaño casi constante, aproximadamente 170 bytes, independientemente del tamaño del conjunto de datos. Ethereum está desarrollando activamente la integración de árboles de Verkle, y se espera su implementación en una futura actualización. Esta transición reduciría significativamente la carga de datos en los clientes ligeros y mejoraría la escalabilidad general de la red.

Preguntas frecuentes

¿Qué es un árbol Merkle en términos sencillos?

Un árbol Merkle es una forma de organizar datos de manera que una pequeña porción de información, la raíz Merkle, pueda representar un conjunto grande de datos. Funciona mediante la aplicación repetida de funciones hash a pares de datos hasta que solo queda una función hash, lo que permite verificar si un elemento específico pertenece al conjunto sin tener que comprobar cada elemento individualmente.

¿Qué es una raíz Merkle?

La raíz Merkle es el hash único en la parte superior de un árbol Merkle. Actúa como una huella digital compacta para todos los datos que se encuentran debajo. En las redes blockchain, la raíz Merkle se almacena en la cabecera del bloque y se confirma en cada transacción de ese bloque, lo que permite verificar de forma eficiente que una transacción forma parte de un bloque.

¿Cómo funciona una prueba Merkle?

Una prueba Merkle proporciona una transacción junto con el conjunto mínimo de hashes hermanos necesarios para recalcular la ruta desde esa transacción hasta la raíz Merkle. El verificador aplica el hash a la transacción, la combina con los hashes hermanos proporcionados en el orden correcto y comprueba si el resultado final coincide con la raíz Merkle conocida en el encabezado del bloque. Si coincide, se demuestra que la transacción está incluida.

¿Por qué son importantes los árboles Merkle para la tecnología blockchain?

Los árboles Merkle permiten a las redes blockchain separar las cabeceras de los bloques de los datos completos de las transacciones. Un cliente ligero puede descargar solo las cabeceras de los bloques, aproximadamente 80 bytes por bloque, y aun así verificar que se incluyó una transacción, utilizando una prueba Merkle compacta. Sin los árboles Merkle, verificar una transacción requeriría descargar el bloque completo o la cadena completa.

¿Cuál es la diferencia entre un árbol Merkle y un árbol Verkle?

Ambos son acumuladores criptográficos que se utilizan para probar la pertenencia a un conjunto de datos, pero emplean matemáticas diferentes. Los árboles de Merkle utilizan funciones hash y generan pruebas cuyo tamaño crece logarítmicamente con el conjunto de datos (O(log n)). Los árboles de Verkle utilizan compromisos polinomiales (KZG) y generan pruebas de tamaño casi constante, de unos pocos cientos de bytes independientemente del tamaño del conjunto de datos, lo que los hace más adecuados para pruebas de estado de blockchain a gran escala.

Reflexiones finales

Los árboles Merkle son un pilar fundamental de la arquitectura blockchain, ya que permiten la verificación sin necesidad de confianza a gran escala. Al comprimir un bloque completo de transacciones en un único hash de 32 bytes, permiten a los participantes verificar los datos sin descargarlos todos, un principio que sustenta desde las carteras SPV de Bitcoin hasta las pruebas de estado de Ethereum y los puentes entre cadenas. A medida que las redes blockchain sigan creciendo, las nuevas estructuras criptográficas, como los árboles Verkle, podrían complementar o incluso reemplazar a los árboles Merkle, pero el concepto subyacente, la integridad de datos eficiente basada en hashes, probablemente seguirá siendo un componente fundamental de los sistemas distribuidos durante muchos años.

Lecturas adicionales

  • ¿Qué es un algoritmo de consenso de blockchain?

  • Historia de la criptografía

  • Soluciones de escalado de capa 1 frente a capa 2 de blockchain

  • ¿Qué es el sharding y cómo funciona?

Descargo de responsabilidad: Este contenido se presenta «tal cual» únicamente con fines informativos y educativos generales, sin ninguna declaración ni garantía de ningún tipo. No debe interpretarse como asesoramiento financiero, legal ni profesional de ningún tipo, ni pretende recomendar la compra de ningún producto o servicio específico. Debe consultar con asesores profesionales competentes. Si el contenido es aportado por un tercero, tenga en cuenta que las opiniones expresadas pertenecen a dicho tercero y no reflejan necesariamente las de Binance Academy. Los precios de los activos digitales pueden ser volátiles. El valor de su inversión puede subir o bajar y es posible que no recupere el monto invertido. Usted es el único responsable de sus decisiones de inversión y Binance Academy no se hace responsable de las pérdidas que pueda sufrir. Para obtener más información, consulte nuestros Términos de uso, Advertencia de riesgos y Términos de Binance Academy.