Ir al contenido principal

Última actualización de la página: 12 de agosto de 2024

Árboles Verkle

Los árboles de Verkle (una palabra combinada de «Vector commitment» o compromiso vectorial y «Merkle Trees») son una estructura de datos que se puede utilizar para actualizar los nodos de Ethereum y así dejen de almacenar grandes cantidades de datos de estado sin perder la capacidad de validar bloques.

Sin estado

Los árboles de Verkle son un paso crítico en el rumbo hacia los clientes de Ethereum sin estado. Los clientes sin estado son aquellos que no tienen que almacenar toda la base de datos estatal para validar los bloques entrantes. En lugar de usar su propia copia local del estado de Ethereum para verificar los bloques, los clientes sin estado usan un «testigo» de los datos del estado que llegan con el bloque. Un testigo es una colección de piezas individuales de los datos estatales que se requieren para ejecutar un conjunto particular de transacciones, y una prueba criptográfica de que el testigo es realmente parte de los datos completos. El testigo se utiliza en lugar de de la base de datos de estado. Para que esto funcione, los testigos deben ser muy pequeños, para que puedan transmitirse de forma segura a través de la red a tiempo para que los validadores los procesen en un plazo de 12 segundos. La estructura de datos del estado actual no es adecuada, porque los testigos son demasiado grandes. Los árboles de Verkle resuelven el problema al habilitar pequeños testigos, eliminando una de las principales barreras de clientes sin estado.

¿Qué es un testigo y por qué lo necesitamos?

Verificar un bloque significa volver a ejecutar las transacciones contenidas en el bloque, aplicar los cambios a la prueba de estado trie de Ethereum y calcular el nuevo hash raíz. Un bloque verificado es aquel cuyo hash raíz de estado calculado es el mismo que el proporcionado con el bloque (porque esto significa que el proponente de bloques realmente hizo el cálculo que dice que hizo). En los clientes de Ethereum de hoy en día, la actualización del estado requiere acceso a todo el estado trie, que es una gran estructura de datos que debe almacenarse localmente. Un testigo solo contiene los fragmentos de los datos de estado que se requieren para ejecutar las transacciones en el bloque. Un validador solo puede usar esos fragmentos para verificar que el proponente de bloques haya ejecutado las transacciones de bloque y actualizado el estado correctamente. Sin embargo, esto significa que el testigo debe transferirse entre pares en la red Ethereum lo suficientemente rápido como para que cada nodo lo reciba y procese de forma segura dentro de una ranura de 12 segundos. Si el testigo es demasiado grande, algunos nodos podrían tardar demasiado en descargarlo y mantenerlo sincronizado con la cadena. Esta es una fuerza de centralización porque significa que solo los nodos con conexiones rápidas a Internet pueden participar en la validación de bloques. Con los árboles de Verkle no es necesario almacenar el estado en su disco duro; solo necesita comprobar que un bloque esté contenido dentro del propio bloque. Por desgracia, los testigos que se pueden producir a partir de los tries de Merkle son demasiado grandes para apoyar a los clientes sin estado.

¿Por qué los árboles de Verkle permiten testigos más pequeños?

La estructura de un Merkle Trie hace que los tamaños de los testigos sean muy grandes, demasiado grandes para transmitir de forma segura entre pares dentro de un espacio de 12 segundos. Esto se debe a que el testigo es una ruta que conecta los datos, que se mantienen en las hojas, con el hash raíz. Para verificar los datos, es necesario tener no solo todos los hashes intermedios que conectan cada hoja con la raíz, sino también todos los nodos «de los hermanos». Cada nodo de la prueba tiene un hermano con el que se hace un hash para crear el siguiente hash hasta el trie. Y eso supone una gran cantidad de datos. Los árboles Verkle reducen el tamaño del testigo al acortar la distancia entre las hojas del árbol y su raíz, además de eliminar la necesidad de proporcionar nodos hermanos para verificar el hash raíz. Se obtendrá aún más eficiencia de espacio mediante el uso de un potente esquema de compromiso polinómico en lugar del compromiso vectorial de estilo hash. El compromiso polinómico permite que el testigo tenga un tamaño fijo, independientemente del número de hojas que demuestre.

Bajo el esquema de compromiso polinómico, los testigos tienen tamaños manejables que se pueden transferir fácilmente en la red entre pares. Esto permite a los clientes verificar los cambios de estado en cada bloque con una cantidad mínima de datos.

¿Cuál es la estructura de un árbol de Verkle?

Los árboles de Verkle son (llave, valor) pares donde las llaves son elementos de 32 bytes compuestos por un tallo de 31 bytes y un solo byte sufijo. Estas claves están organizadas en nodos de extensión y nodos internos. Los nodos de extensión representan una sola raíz para 256 hijos con diferentes sufijos. Los nodos internos también tienen 256 hijos, pero pueden ser otros nodos de extensión. La principal diferencia entre el árbol Verkle y la estructura del árbol Merkle es que el árbol Verkle es mucho más plano, lo que significa que hay menos nodos intermedios que conectan una hoja con la raíz y, por lo tanto, menos datos necesarios para generar una prueba.

Bibliografía para profundizar sobre la estructura de los árboles Verkle.(opens in a new tab)

Progreso actual

Las redes de prueba del árbol de Verkle ya están en funcionamiento, pero todavía se requieren sustanciales actualizaciones pendientes para los clientes en apoyo de los árboles de Verkle. Puede ayudar a acelerar el progreso implementando contratos en las redes de prueba o ejecutando clientes de la red de prueba.

Explore la red de prueba Verkle Gen Devnet 2(opens in a new tab)

Vea a Guillaume Ballet explicar la red de prueba Condrieu Verkle(opens in a new tab) (tenga en cuenta que la red de prueba Condrieu era de prueba de trabajo y ahora se ha sustituido por la red de prueba Verkle Gen Devnet 2).

Más información

¿Le ha resultado útil este artículo?