La Verge - Ethereum's Efficient Verifiable Query Technique: Verkle Trees

Avanzado5/6/2024, 9:19:56 AM
¿Qué son los árboles Verkle, por qué Ethereum los necesita y cómo resuelven los árboles Verkle los problemas? El objetivo de este artículo es responder a estas preguntas para los lectores sin adentrarse demasiado en la criptografía y las matemáticas, ayudando a aquellos con cierto entendimiento de Ethereum a comprender rápidamente el concepto de los árboles Verkle.

1. Introducción

En el último día de 2023, Vitalik compartió la hoja de ruta de Ethereum para 2023 en Twitter, resumiendo el progreso de Ethereum a lo largo del año. La sección de la hoja de ruta 'The Verge' describió cómo la tecnología de Ethereum podría verificar estados de blockchain de manera más simple y eficiente. Un concepto central mencionado allí son los 'Árboles Verkle'. Entonces, ¿qué son los Árboles Verkle, por qué Ethereum los necesita y cómo los Árboles Verkle resuelven problemas? El objetivo de este artículo es responder a estas preguntas para los lectores sin profundizar demasiado en criptografía y matemáticas, ayudando a aquellos con cierto entendimiento de Ethereum a captar rápidamente el concepto de los Árboles Verkle.

2. Consulta verificable

La tecnología de consulta verificable es ampliamente investigada en el campo de las bases de datos tradicionales, principalmente utilizada para resolver problemas de confianza con bases de datos externas. En muchos escenarios, los propietarios de datos pueden optar por no almacenar los datos ellos mismos, sino encomendar sus necesidades de base de datos a un tercero para proporcionar servicios de base de datos (como bases de datos en la nube). Sin embargo, debido a que los terceros no siempre son de confianza, la credibilidad de los resultados de consulta que devuelven a los usuarios es difícil de garantizar. Las soluciones actuales de consulta verificable para bases de datos tradicionales principalmente se dividen en dos categorías: aquellas basadas en ADS (Estructuras de Datos Autenticadas) y aquellas basadas en computación verificable.

ADS es una técnica de consulta verificable ampliamente utilizada en bases de datos tradicionales, en su mayoría construidas sobre estructuras como árboles de Merkle u estructuras acumulativas similares. Con la evolución de las herramientas criptográficas, muchos investigadores han comenzado gradualmente a explorar el uso de técnicas de computación verificable para abordar problemas con consultas no confiables. Algunos esquemas de computación verificable basados en protocolos de Prueba de Conocimiento Cero, como SNARKs, pueden soportar indirectamente consultas verificables para bases de datos externas. Estos esquemas admiten una amplia variedad de tipos de consulta y generan menos información de verificación, pero tienen mayores costos computacionales.

Actualmente, Ethereum utiliza Árboles de Merkle para implementar consultas verificables, y la tecnología de Verkle Tree también se basa en la tecnología de Árboles de Merkle. Por lo tanto, primero presentemos los Árboles de Merkle para ayudar a los lectores a entender el papel de las consultas verificables utilizando como ejemplo.

3. Árboles de Merkle

3.1. Definición y Características de los Árboles de Merkle

Los árboles de Merkle son una estructura similar a un árbol comúnmente utilizada en criptografía, adecuada para resolver problemas de integridad de datos. A continuación se muestra una estructura típica de árbol de Merkle: los nodos hoja representan los datos originales o sus valores hash, y cada nodo no hoja (interno) contiene el hash combinado de sus nodos hijos.

Los árboles de Merkle tienen dos características importantes:

  1. Resistencia a la manipulación: Los árboles de Merkle suelen construirse utilizando funciones hash resistentes a colisiones, lo que hace computacionalmente inviable encontrar dos mensajes diferentes que produzcan el mismo valor hash. A partir de la estructura de un árbol de Merkle, es evidente que cualquier modificación en los datos de transacción dentro de un nodo hoja provocará un cambio en el hash raíz del árbol.
  2. Verificación eficiente de la integridad de grandes conjuntos de datos: los verificadores solo necesitan almacenar el hash raíz del árbol de Merkle para verificar la integridad de cualquier dato. Esto se logra sin transmitir el conjunto de datos completo, sino utilizando nodos hermanos a lo largo del camino desde la hoja hasta la raíz, conocido como un camino de Merkle. Estos nodos hermanos pueden usarse para reconstruir el hash raíz con fines de verificación.

3.2. ¿Cómo construir una prueba de Merkle?

En un escenario común de consulta verificable, hay un probador y un verificador. El probador necesita generar una prueba y enviarla al verificador. Correspondiente a la red de Ethereum, un escenario de aplicación típico es donde un nodo ligero (un cliente que solo almacena encabezados de bloques) consulta datos de transacciones de un nodo completo o un nodo de archivo (clientes con todos los datos) y obtiene una prueba de Merkle para verificar localmente si el resultado de la consulta es correcto.

La prueba de Merkle consta de las siguientes tres partes:

  1. La raíz hash del árbol de Merkle para el conjunto de datos completo.
  2. El bloque de datos cuya integridad necesita ser probada.
  3. El camino de Merkle, que incluye los valores de todos los nodos hermanos en el camino desde el nodo hoja hasta el nodo raíz.

Entre estos, el hash raíz del árbol de Merkle debe enviarse al verificador con antelación a través de un medio confiable, y el verificador debe confiar en este valor. En Ethereum, la confiabilidad de los datos del bloque está garantizada por el algoritmo de consenso, y el hash raíz del árbol de Merkle está contenido dentro del encabezado del bloque.

A continuación se muestra un ejemplo específico: cuando el probador necesita demostrar al verificador que "4" es un bloque de datos existente en el conjunto de datos, y el verificador tiene el hash raíz de confianza "1d25" del árbol de Merkle completo del conjunto de datos, entonces el probador solo necesita proporcionar todos los datos marcados en azul. Suponiendo que hay n piezas de datos en el conjunto, como máximo se necesitan 𝘭𝘰𝘨₂(𝘯) cálculos de hash para verificar la corrección de cualquier bloque de datos.


Los nodos ligeros de Ethereum sincronizan solo los encabezados de bloque, que contienen las raíces de los árboles de Merkle para varios conjuntos de datos (árbol de estado, árbol de transacciones, árbol de recibos). Cuando un nodo ligero solicita a un nodo completo los datos de un nodo hoja en particular en el árbol, el nodo completo devuelve los datos originales junto con la ruta de prueba de Merkle correspondiente. Esto permite que el nodo ligero confíe en la corrección del resultado de la consulta.

3.3. Variantes de Árboles de Merkle

Sobre la base de los Árboles de Merkle, se pueden combinar y modificar con otras estructuras de datos para lograr nuevas características basadas en diferentes objetivos. Para atender a diversos escenarios de consulta verificables, los Árboles de Merkle pueden extenderse a varias estructuras de datos indexadas, como los Árboles de Merkle-B (MBT). Para la ejecución eficiente de operaciones como inserción, eliminación y consulta, el equipo de Ethereum propuso el Árbol de Patricia de Merkle (MPT).

3.3.1. Merkle-B Tree

El árbol Merkle-B (MBT) se utiliza principalmente para manejar consultas de rango verificables. Sea 𝑓 el fan-out del MBT (el número de nodos hijos para cada nodo). Basado en la estructura de árbol B+, cada nodo interno del MBT, además de almacenar 𝑓 — 1 claves de índice y punteros a 𝑓 nodos hijos, también mantiene los valores hash de todos sus nodos hijos de forma resumida. A continuación se muestra una representación de la estructura de nodos hoja y nodos internos en un MBT.

Cuando es necesario demostrar que los datos devueltos de una cierta consulta de rango cumplen con el rango especificado, el servidor que calcula el Objeto de Verificación (OV) primero debe realizar dos operaciones de búsqueda de arriba hacia abajo para encontrar los límites izquierdo y derecho. También debe devolver todos los datos dentro de este límite, así como los hash de todas las ramas necesarias para construir el camino hacia el hash raíz.

La desventaja de esta estructura de datos es que el VO devuelto solo puede demostrar que los resultados de la consulta están dentro del rango de consulta solicitado, pero no puede demostrar que los resultados devueltos sean completos.

3.3.2. Árbol Merkle Patricia

Si se utiliza un árbol de Merkle ingenuo para proporcionar consultas verificables, el proceso de regeneración de la raíz del árbol de Merkle después de cada inserción o eliminación de datos puede volverse significativo y consumir mucho tiempo. Además, se hace necesario mantener árboles de búsqueda de datos adicionales para almacenamiento. El árbol de Patricia de Merkle (MPT) combina atributos de un árbol de prefijo compacto (Radix Tree) y un árbol de Merkle, lo que le permite realizar inserciones, eliminaciones y consultas en tiempo O(log(N)). Para comprender completamente el MPT, los lectores pueden consultar artículos técnicos detallados sobre el tema. Este artículo solo presentará algunas definiciones básicas y proporcionará ejemplos para ayudar a los lectores a comprender rápidamente el MPT.

La estructura subyacente de Ethereum emplea una base de datos clave-valor para el almacenamiento, lo que significa que los datos se almacenan en forma de pares clave-valor. El MPT también se descompone en pares clave-valor para el almacenamiento. Definimos la estructura lógica de los nodos MPT de la siguiente manera:

  • índice
  • camino
  • datos

En el contexto del árbol de Merkle Patricia (MPT), el "índice" se refiere a la clave de un par clave-valor, mientras que el "camino" combinado con los "datos" constituye el valor del par clave-valor. El índice realmente almacena el hash del nodo del árbol de Merkle, y el camino corresponde a la cadena de ruta utilizada en el árbol de prefijos para encontrar el nodo objetivo. Ethereum utiliza cadenas hexadecimales como cadenas de ruta, y por lo tanto, el ancho del MPT es 16. Los datos son los datos objetivo correspondientes al camino.

A continuación se muestra un ejemplo de un MPT que ha sido optimizado con prefijos comprimidos, almacenando los siguientes datos de pares clave-valor:

{

'cab8': 'perro',

‘cabe’: ‘gato’,

‘39’: ‘pollo’,

«395»: «pato»,

'56f0': 'caballo'

}

Para encontrar los datos 'pato' usando la ruta '395', comenzarías en el hash raíz y procederías a través de hashA, hashC y hashD para finalmente llegar a los datos objetivo. Aquí tienes una guía paso a paso:

  1. Hash raíz: Este es el punto de entrada del Árbol de Patricia Merkle (MPT), y lo usarías para encontrar el primer nodo.
  2. hashA: Basado en el hash raíz, recuperarías el nodo o contenido identificado por hashA. Dado que el camino es "395", estás buscando la parte del árbol que te llevará a "3".
  3. hashC: Después de acceder al contenido de hashA, continúas siguiendo el camino. El siguiente segmento, “9”, te lleva a hashC.
  4. hashD: Finalmente, continuando por el camino, el último segmento "5" te lleva a hashD, que contiene el valor "duck".

En cada paso del camino, el MPT aprovecha las propiedades tanto del Árbol Radix, para encontrar el camino correcto basado en la clave, como del Árbol Merkle, para garantizar la integridad de los datos a través de enlaces hash. Las "rutas" en el árbol suelen representarse con una codificación hexadecimal, que corresponde con el factor de ramificación del árbol de 16. Cada nodo en el camino incluye suficientes punteros hash (a nodos hijos) y valores para verificar la integridad de los datos y para navegar a través del árbol.

Tenga en cuenta que en un MPT real, los caminos y los datos se codificarían y almacenarían en un formato específico, y tipos adicionales de nodos (como nodos de extensión y nodos hoja) ayudan a optimizar la estructura para la eficiencia en diferentes escenarios.

4. Compromiso de vector

Los esquemas de compromiso[1] son primitivas criptográficas que garantizan la privacidad y la integridad de los datos. Se utilizan ampliamente en escenarios como las pruebas de conocimiento cero y la computación segura entre múltiples partes. Un esquema de compromiso básico se divide en dos etapas: la fase de compromiso y la fase de revelación (o apertura).

  1. Fase de compromiso: En esta fase, el comprometedor utiliza un algoritmo criptográfico para vincular un mensaje a un valor de compromiso y envía este valor de compromiso al destinatario. En esta etapa, el compromiso posee dos propiedades: ocultación y vinculación. La ocultación garantiza que el contenido del mensaje comprometido sea desconocido para todos, excepto el comprometedor. La vinculación garantiza que una vez hecho un compromiso, no puede ser alterado por nadie, incluido el comprometedor.
  2. Fase de revelación (Apertura): Durante esta fase, el comprometedor puede demostrar al destinatario que el valor de compromiso que recibió es un compromiso válido para el mensaje original. El compromiso tiene la propiedad de corrección, lo que significa que si tanto el comprometedor como el destinatario siguen el protocolo correctamente, el destinatario estará convencido de que el valor de compromiso que recibieron durante la fase de compromiso es un compromiso válido para el mensaje original.

El Compromiso Vectorial es un tipo especial de esquema de compromiso propuesto por Catalano et al. [2] que permite a un comprometedor hacer un compromiso con un conjunto ordenado de mensajes 𝑚 = ⟨𝑚1 , 𝑚2 , …, 𝑚𝑞 ⟩ y revelar (abrir) en cualquier posición especificada para probar que el mensaje 𝑚𝑖 es el mensaje comprometido número i. En los compromisos vectoriales, la ligadura significa que nadie puede abrir la misma posición para revelar mensajes diferentes.

Un esquema de compromiso de vectores típicamente consta de los siguientes algoritmos:

5. Árboles Verkle

5.1. Definición y características de los árboles Verkle

Definición: Verkle Trees = Compromisos Vectoriales + Árboles de Merkle.

Por favor note: Vitalik Buterin, el co-fundador de Ethereum, tiene un blogpublicación específicamente dedicada a la introducción de los árboles Verkle. Este capítulo añade algo de antecedentes y conocimientos matemáticos basados en su blog. Algunos de los datos e ilustraciones en el siguiente texto se derivan de su blog.

Los árboles Verkle (VTs) se caracterizan por proporcionar pruebas más pequeñas en comparación con los árboles Merkle. Para datos en una escala de miles de millones de entradas, un árbol Merkle podría generar pruebas de alrededor de 1KB, mientras que las pruebas de árbol Verkle pueden ser de menos de 150 bytes. Este tamaño compacto de prueba es ventajoso para implementar...clientes sin estado”.

La estructura de un árbol Verkle es algo similar a la del Árbol Merkle Patricia (MPT). Aquí tienes un ejemplo de su estructura. Los nodos de un árbol Verkle pueden ser: (i) Vacíos, (ii) Nodos hoja que contienen una clave y su valor correspondiente, o (iii) Nodos internos con un número fijo de nodos hijos. Este número de hijos también se conoce como la “anchura” del árbol.

La diferencia entre VT (Árboles Verkle) y MPT (Árboles de Patricia de Merkle) radica principalmente en cómo el ancho del árbol (o fan-out, que se refiere al número de nodos secundarios que tiene un nodo en el árbol) afecta su eficiencia. En el caso de MPT, si el ancho es mayor, tiende a ser menos eficiente porque un mayor ancho significa más nodos hermanos, lo que podría llevar a tiempos de actualización más largos para el MPT y tamaños de prueba más grandes. Por el contrario, para VT, un ancho de árbol más amplio resulta en pruebas más pequeñas. La única restricción es que si el ancho es demasiado alto, el tiempo que lleva generar una prueba puede volverse más largo.

En Ethereum’s @vbuterinPara /verkle_tree_eip\u003e, se sugiere un ancho de 256 para las VT, lo cual es significativamente mayor que el actual de 16 para MPT. Este ancho tan grande es factible en las VT gracias al uso de técnicas criptográficas avanzadas, como compromisos vectoriales, que permiten pruebas compactas independientemente del ancho del árbol. Esta técnica de compresión permite que los Verkle Trees escalen de manera más eficiente en cuanto al tamaño de la prueba. El texto posterior explicará con más detalle las características mencionadas anteriormente.

5.2. Compromiso y Prueba de Árboles Verkle

Veamos cómo se generan las pruebas en un MPT: La prueba debe incluir los valores hash de todos los nodos laterales (o nodos hermanos) en el camino desde el nodo raíz hasta el nodo hoja objetivo. Tomando "4ce" como ejemplo, las partes marcadas en rojo en el diagrama a continuación son los nodos que deben incluirse en la prueba devuelta.

En los árboles Verkle, no es necesario proporcionar nodos hermanos; en su lugar, solo necesita proporcionar la ruta junto con algunos datos adicionales como evidencia.

Entonces, ¿cómo generar compromisos para un VT? La función hash utilizada para el cálculo no es una hash convencional, sino que utiliza compromisos vectoriales.

Después de reemplazar la función hash con un algoritmo de generación de compromiso a partir de compromisos vectoriales, el llamado hash raíz es ahora un compromiso raíz. Si los datos de algún nodo son manipulados, afectará en última instancia al compromiso raíz.

¿Cómo generar una prueba? Como se muestra en el diagrama a continuación, solo necesita proporcionar tres subpruebas, cada una de las cuales puede demostrar que un nodo en el camino existe en una posición determinada dentro de su nodo padre. Cuanto mayor sea el ancho, menos capas habrá y, en consecuencia, se requerirán menos subpruebas.

En implementaciones prácticas, se utilizan compromisos polinomiales (que se pueden implementar de manera simple y eficiente para compromisos de vector), lo que permite un compromiso con un polinomio. Los dos esquemas de compromiso polinomial más fáciles de usar son " compromisos KZG” y “compromisos polinómicos estilo a prueba de balas(el primero tiene un tamaño de compromiso de 48 bytes, mientras que el último es de 32 bytes).

Si emplea compromisos y pruebas KZG, la prueba para cada nodo intermedio es apenas 96 bytes, lo que representa un ahorro de espacio de casi tres veces en comparación con un árbol de Merkle básico (asumiendo un ancho de 256).

La complejidad temporal teórica para operaciones en árboles Merkle y árboles Verkle es la siguiente:

El esquema de prueba de Verkle introducido hasta ahora es bastante básico; de hecho, hay más estrategias avanzadas de optimización disponibles.

5.3. Optimización: Fusionando las Pruebas

5.3.1. idea

En comparación con generar una prueba para cada capa de compromisos en un camino, la característica de los compromisos polinomiales puede ser utilizada para lograr “demostrar la relación padre-hijo entre todos los compromisos en el camino con una prueba de tamaño fijo, que puede incluir un número ilimitado de elementos.” Para comprender específicamente cómo se logra esto, es necesario introducir algún conocimiento matemático para la explicación. Este artículo implicará algunas fórmulas matemáticas pero no cubrirá la parte criptográfica de la prueba en principio. Para el método específico, consulteesquema que implementa multipruebas mediante evaluación aleatoria.

5.3.2. Derivación matemática

Primero, vamos a introducir algunos conceptos básicos sobre polinomios en matemáticas: ¿cómo realizamos la reducción de polinomios, también conocida como reducción de grado de un polinomio?

Suponiendo que conocemos un polinomio 𝑃(𝑥) y su valor 𝑦₁ en 𝑥₁, es decir, 𝑃(𝑥₁) = 𝑦₁.

Ahora, considere un nuevo polinomio 𝑃(𝑥) - 𝑦₁ , que tiene un valor de cero en (𝑥 = 𝑥₁) , porque 𝑃(𝑥₁) - 𝑦₁ =𝑦₁ - 𝑦₁ = 0.

Por lo tanto, el polinomio 𝑃(𝑥) - 𝑦₁ tiene una raíz en 𝑥 = 𝑥₁, lo que significa que (𝑥 - 𝑥₁) es un factor de 𝑃(𝑥) - 𝑦₁.

En otras palabras, podemos expresarlo en la siguiente forma: [ 𝑃(𝑥) - 𝑦₁ = (𝑥 - 𝑥₁ )𝑄(𝑥)]

𝑄(𝑥) es otro polinomio cuyo grado es uno menos que el de 𝑃(𝑥). Esto se debe a que (𝑥 -𝑥₁ ) es un factor de primer grado, lo que reduce el grado total del polinomio.

¿Cómo usar KZG para probar un solo valor en un vector?

Tomemos el compromiso KZG10 como ejemplo, para el polinomio 𝑃(𝑥), supongamos que su compromiso polinómico es [ 𝑃(𝑠) ]₁.

Como se explicó anteriormente, para el polinomio 𝑃(𝑥), si 𝑃(𝑧) = 𝑦, entonces tenemos 𝑄(𝑥) = (𝑃(𝑥) - 𝑦)/(𝑥 - 𝑧)

Ahora, el probador puede generar una prueba de que el polinomio 𝑃(𝑥) satisface 𝑃(𝑧) = 𝑦: calcular [ 𝑄(𝑠) ]₁ y enviarlo al verificador.

El verificador necesita verificar 𝑒( [ 𝑄(𝑠) ]₁, [ 𝑠 - 𝑧]₂ ) = 𝑒( [ 𝑃(𝑠) ]₁- [𝑦]₁, [1]₂) .

¿Cómo usar KZG para demostrar múltiples valores en un vector?

Podemos construir una prueba para demostrar múltiples valores en un vector de la siguiente manera:

Al utilizar este método, independientemente del número de puntos de datos en el mismo vector que necesitan ser verificados, solo se requiere una prueba de tamaño constante.

Ahora veamos el esquema del Árbol Verkle sin optimización desde la perspectiva del algoritmo de compromiso KZG.

Utilizando el método de construcción de la sección “Cómo usar KZG para demostrar un único valor en un vector,” el verificador puede construir compromisos para los polinomios original y de cociente para cada polinomio 𝑓ᵢ(𝑥), lo que resulta en un total de 𝟐﹡𝑚 compromisos de KZG. El verificador envía todos estos compromisos como prueba para verificación.

Sin embargo, como se mencionó anteriormente, este enfoque requiere generar múltiples pruebas, y el verificador también necesita realizar múltiples cálculos de verificación. Necesitamos encontrar una forma de comprimir múltiples pruebas de compromiso.

Uniendo las Pruebas

El probador envía la prueba [ 𝑞( 𝑠 )]₁ al verificador para su verificación.

La evidencia producida por este esquema consiste en un compromiso, dos pruebas y un valor, con un tamaño de datos constante. Finalmente, después de la optimización de fusión de pruebas en el árbol Verkle, el objeto de datos verificable enviado al verificador incluye lo siguiente:

  1. Evidencia de tamaño constante
  2. Los datos de las hojas a demostrar (pares clave-valor)
  3. Los valores de compromiso de todos los nodos en el camino desde la hoja hasta la raíz (suponiendo un ancho de árbol de 256 con 2³² nodos, entonces la profundidad promedio es 4, requiriendo solo 3 valores de compromiso)

Tenga en cuenta que 𝑥ᵢ y 𝑦ᵢ no necesitan ser proporcionados explícitamente; todos pueden ser calculados.

5.3.3. rendimiento

En cuanto al esquema de combinación de pruebas para los árboles Verkle, el tamaño específico de la prueba generada es el siguiente(La unidad de la fila es mil millones.):

Los datos anteriores asumen el uso de un árbol de ancho 256, empleando el esquema de compromiso KZG (con un tamaño de compromiso de 48 bytes), y maximiza la utilización del árbol. En la práctica, para distribuciones de información completamente aleatorias, la profundidad del árbol aumentaría aproximadamente en un 60%, y el tamaño de cada elemento aumentaría en 30 bytes. Si se utiliza el esquema a prueba de balas, entonces el tamaño del compromiso sería de 32 bytes.

5.4. Carga de cálculo del probador y verificador

  1. Generación de Pruebas: El costo de generar pruebas por el demostrador está relacionado con el ancho del árbol, pero cada operación atómica requiere un costo computacional relativamente bajo, por lo que los árboles Verkle con anchos entre 256 y 1024 funcionan bien en términos de algoritmos.
  2. Verificación de prueba: Vitalik ha indicado que el algoritmo de verificación es muy rápido y generalmente se puede completar en menos de 100 ms, incluso cuando hay varios miles de valores para verificar.
  3. Al actualizar árboles Verkle: La actualización del árbol requiere volver a calcular todos los valores de compromiso intermedios a lo largo de la ruta debido a cambios en los valores o la estructura. Sin embargo, Vitalik mencionó que, gracias a algunas propiedades del algoritmo de compromiso polinómico, es posible diseñar un método que precalcule valores de compromiso alternativos y los almacene, reduciendo así el costo de tiempo computacional durante las actualizaciones, que esencialmente intercambia espacio por tiempo.

6. Conclusiones

Estas son las palabras originales del blog de Vitalik, agregamos un párrafo al final como suplemento.

Los árboles Verkle son una actualización poderosa de las pruebas de Merkle que permiten tamaños de prueba mucho más pequeños. En lugar de necesitar proporcionar todos los "nodos hermanos" en cada nivel, el probador solo necesita proporcionar una prueba única que demuestre todas las relaciones padre-hijo entre todos los compromisos a lo largo de los caminos desde cada nodo hoja hasta la raíz. Esto permite que los tamaños de las pruebas disminuyan en un factor de ~6-8 en comparación con los árboles Merkle ideales, y en un factor de más de 20-30 en comparación con los árboles Patricia hexarios que Ethereum usa hoy en día (!!).

Requieren una criptografía más compleja para implementarse, pero ofrecen la oportunidad de obtener grandes ganancias en cuanto a escalabilidad. A medio plazo, los SNARKs pueden mejorar las cosas aún más: podemos SNARKear el verificador de prueba Verkle, que ya es eficiente, para reducir el tamaño del testigo a casi cero, o volver a las pruebas de Merkle SNARKeadas si/cuando los SNARKs mejoran mucho (por ejemplo, a través de GKR, funciones hash muy amigables con SNARKs o ASICs). Más adelante, la llegada de la computación cuántica obligará a cambiar a pruebas de Merkle STARKed con hashes, ya que hace que las homomorfismos lineales en los que dependen los árboles de Verkle sean inseguros. Pero por ahora, nos proporcionan los mismos beneficios de escalabilidad que obtendríamos con tecnologías más avanzadas, y ya tenemos todas las herramientas que necesitamos para implementarlas eficientemente.

En la actualidad, muchos clientes de Ethereum han proporcionado la implementación del árbol Verkle y las redes de prueba relacionadas. La comunidad todavía está debatiendo el momento en que los Árboles Verkle se lanzarán en la red principal. Es probable que se implemente en una actualización de hard fork en 2024 o 2025. Para obtener información detallada sobre los árboles Verkle en Ethereum, consultehttps://verkle.info/ .

7. Referencia

[1]. BRASSARD G, CHAUM D, CRÉPEAU C. Pruebas de conocimiento de divulgación mínima[J]. Journal of computer and system sciences, 1988, 37(2): 156–189.

[2]. CATALANO D, FIORE D. Compromisos vectoriales y sus aplicaciones [C] // Criptografía de clave pública - PKC 2013: 16ª Conferencia Internacional sobre Práctica y Teoría en Criptografía de Clave Pública, Nara, Japón, 26 de febrero - 1 de marzo de 2013. Actas 16. Springer, 2013: 55-72.

Descargo de responsabilidad:

  1. Este artículo es un reimpreso de [ZAN], Todos los derechos de autor pertenecen al autor original [AntChain Open Labs y ZAN]. Si hay objeciones a esta reimpresión, por favor contacte al Gate Learnequipo, y lo resolverán rápidamente.
  2. Renuncia de responsabilidad: Las opiniones expresadas en este artículo son únicamente las del autor y no constituyen ningún consejo de inversión.
  3. Las traducciones del artículo a otros idiomas son realizadas por el equipo de Gate Learn. A menos que se mencione, está prohibido copiar, distribuir o plagiar los artículos traducidos.

La Verge - Ethereum's Efficient Verifiable Query Technique: Verkle Trees

Avanzado5/6/2024, 9:19:56 AM
¿Qué son los árboles Verkle, por qué Ethereum los necesita y cómo resuelven los árboles Verkle los problemas? El objetivo de este artículo es responder a estas preguntas para los lectores sin adentrarse demasiado en la criptografía y las matemáticas, ayudando a aquellos con cierto entendimiento de Ethereum a comprender rápidamente el concepto de los árboles Verkle.

1. Introducción

En el último día de 2023, Vitalik compartió la hoja de ruta de Ethereum para 2023 en Twitter, resumiendo el progreso de Ethereum a lo largo del año. La sección de la hoja de ruta 'The Verge' describió cómo la tecnología de Ethereum podría verificar estados de blockchain de manera más simple y eficiente. Un concepto central mencionado allí son los 'Árboles Verkle'. Entonces, ¿qué son los Árboles Verkle, por qué Ethereum los necesita y cómo los Árboles Verkle resuelven problemas? El objetivo de este artículo es responder a estas preguntas para los lectores sin profundizar demasiado en criptografía y matemáticas, ayudando a aquellos con cierto entendimiento de Ethereum a captar rápidamente el concepto de los Árboles Verkle.

2. Consulta verificable

La tecnología de consulta verificable es ampliamente investigada en el campo de las bases de datos tradicionales, principalmente utilizada para resolver problemas de confianza con bases de datos externas. En muchos escenarios, los propietarios de datos pueden optar por no almacenar los datos ellos mismos, sino encomendar sus necesidades de base de datos a un tercero para proporcionar servicios de base de datos (como bases de datos en la nube). Sin embargo, debido a que los terceros no siempre son de confianza, la credibilidad de los resultados de consulta que devuelven a los usuarios es difícil de garantizar. Las soluciones actuales de consulta verificable para bases de datos tradicionales principalmente se dividen en dos categorías: aquellas basadas en ADS (Estructuras de Datos Autenticadas) y aquellas basadas en computación verificable.

ADS es una técnica de consulta verificable ampliamente utilizada en bases de datos tradicionales, en su mayoría construidas sobre estructuras como árboles de Merkle u estructuras acumulativas similares. Con la evolución de las herramientas criptográficas, muchos investigadores han comenzado gradualmente a explorar el uso de técnicas de computación verificable para abordar problemas con consultas no confiables. Algunos esquemas de computación verificable basados en protocolos de Prueba de Conocimiento Cero, como SNARKs, pueden soportar indirectamente consultas verificables para bases de datos externas. Estos esquemas admiten una amplia variedad de tipos de consulta y generan menos información de verificación, pero tienen mayores costos computacionales.

Actualmente, Ethereum utiliza Árboles de Merkle para implementar consultas verificables, y la tecnología de Verkle Tree también se basa en la tecnología de Árboles de Merkle. Por lo tanto, primero presentemos los Árboles de Merkle para ayudar a los lectores a entender el papel de las consultas verificables utilizando como ejemplo.

3. Árboles de Merkle

3.1. Definición y Características de los Árboles de Merkle

Los árboles de Merkle son una estructura similar a un árbol comúnmente utilizada en criptografía, adecuada para resolver problemas de integridad de datos. A continuación se muestra una estructura típica de árbol de Merkle: los nodos hoja representan los datos originales o sus valores hash, y cada nodo no hoja (interno) contiene el hash combinado de sus nodos hijos.

Los árboles de Merkle tienen dos características importantes:

  1. Resistencia a la manipulación: Los árboles de Merkle suelen construirse utilizando funciones hash resistentes a colisiones, lo que hace computacionalmente inviable encontrar dos mensajes diferentes que produzcan el mismo valor hash. A partir de la estructura de un árbol de Merkle, es evidente que cualquier modificación en los datos de transacción dentro de un nodo hoja provocará un cambio en el hash raíz del árbol.
  2. Verificación eficiente de la integridad de grandes conjuntos de datos: los verificadores solo necesitan almacenar el hash raíz del árbol de Merkle para verificar la integridad de cualquier dato. Esto se logra sin transmitir el conjunto de datos completo, sino utilizando nodos hermanos a lo largo del camino desde la hoja hasta la raíz, conocido como un camino de Merkle. Estos nodos hermanos pueden usarse para reconstruir el hash raíz con fines de verificación.

3.2. ¿Cómo construir una prueba de Merkle?

En un escenario común de consulta verificable, hay un probador y un verificador. El probador necesita generar una prueba y enviarla al verificador. Correspondiente a la red de Ethereum, un escenario de aplicación típico es donde un nodo ligero (un cliente que solo almacena encabezados de bloques) consulta datos de transacciones de un nodo completo o un nodo de archivo (clientes con todos los datos) y obtiene una prueba de Merkle para verificar localmente si el resultado de la consulta es correcto.

La prueba de Merkle consta de las siguientes tres partes:

  1. La raíz hash del árbol de Merkle para el conjunto de datos completo.
  2. El bloque de datos cuya integridad necesita ser probada.
  3. El camino de Merkle, que incluye los valores de todos los nodos hermanos en el camino desde el nodo hoja hasta el nodo raíz.

Entre estos, el hash raíz del árbol de Merkle debe enviarse al verificador con antelación a través de un medio confiable, y el verificador debe confiar en este valor. En Ethereum, la confiabilidad de los datos del bloque está garantizada por el algoritmo de consenso, y el hash raíz del árbol de Merkle está contenido dentro del encabezado del bloque.

A continuación se muestra un ejemplo específico: cuando el probador necesita demostrar al verificador que "4" es un bloque de datos existente en el conjunto de datos, y el verificador tiene el hash raíz de confianza "1d25" del árbol de Merkle completo del conjunto de datos, entonces el probador solo necesita proporcionar todos los datos marcados en azul. Suponiendo que hay n piezas de datos en el conjunto, como máximo se necesitan 𝘭𝘰𝘨₂(𝘯) cálculos de hash para verificar la corrección de cualquier bloque de datos.


Los nodos ligeros de Ethereum sincronizan solo los encabezados de bloque, que contienen las raíces de los árboles de Merkle para varios conjuntos de datos (árbol de estado, árbol de transacciones, árbol de recibos). Cuando un nodo ligero solicita a un nodo completo los datos de un nodo hoja en particular en el árbol, el nodo completo devuelve los datos originales junto con la ruta de prueba de Merkle correspondiente. Esto permite que el nodo ligero confíe en la corrección del resultado de la consulta.

3.3. Variantes de Árboles de Merkle

Sobre la base de los Árboles de Merkle, se pueden combinar y modificar con otras estructuras de datos para lograr nuevas características basadas en diferentes objetivos. Para atender a diversos escenarios de consulta verificables, los Árboles de Merkle pueden extenderse a varias estructuras de datos indexadas, como los Árboles de Merkle-B (MBT). Para la ejecución eficiente de operaciones como inserción, eliminación y consulta, el equipo de Ethereum propuso el Árbol de Patricia de Merkle (MPT).

3.3.1. Merkle-B Tree

El árbol Merkle-B (MBT) se utiliza principalmente para manejar consultas de rango verificables. Sea 𝑓 el fan-out del MBT (el número de nodos hijos para cada nodo). Basado en la estructura de árbol B+, cada nodo interno del MBT, además de almacenar 𝑓 — 1 claves de índice y punteros a 𝑓 nodos hijos, también mantiene los valores hash de todos sus nodos hijos de forma resumida. A continuación se muestra una representación de la estructura de nodos hoja y nodos internos en un MBT.

Cuando es necesario demostrar que los datos devueltos de una cierta consulta de rango cumplen con el rango especificado, el servidor que calcula el Objeto de Verificación (OV) primero debe realizar dos operaciones de búsqueda de arriba hacia abajo para encontrar los límites izquierdo y derecho. También debe devolver todos los datos dentro de este límite, así como los hash de todas las ramas necesarias para construir el camino hacia el hash raíz.

La desventaja de esta estructura de datos es que el VO devuelto solo puede demostrar que los resultados de la consulta están dentro del rango de consulta solicitado, pero no puede demostrar que los resultados devueltos sean completos.

3.3.2. Árbol Merkle Patricia

Si se utiliza un árbol de Merkle ingenuo para proporcionar consultas verificables, el proceso de regeneración de la raíz del árbol de Merkle después de cada inserción o eliminación de datos puede volverse significativo y consumir mucho tiempo. Además, se hace necesario mantener árboles de búsqueda de datos adicionales para almacenamiento. El árbol de Patricia de Merkle (MPT) combina atributos de un árbol de prefijo compacto (Radix Tree) y un árbol de Merkle, lo que le permite realizar inserciones, eliminaciones y consultas en tiempo O(log(N)). Para comprender completamente el MPT, los lectores pueden consultar artículos técnicos detallados sobre el tema. Este artículo solo presentará algunas definiciones básicas y proporcionará ejemplos para ayudar a los lectores a comprender rápidamente el MPT.

La estructura subyacente de Ethereum emplea una base de datos clave-valor para el almacenamiento, lo que significa que los datos se almacenan en forma de pares clave-valor. El MPT también se descompone en pares clave-valor para el almacenamiento. Definimos la estructura lógica de los nodos MPT de la siguiente manera:

  • índice
  • camino
  • datos

En el contexto del árbol de Merkle Patricia (MPT), el "índice" se refiere a la clave de un par clave-valor, mientras que el "camino" combinado con los "datos" constituye el valor del par clave-valor. El índice realmente almacena el hash del nodo del árbol de Merkle, y el camino corresponde a la cadena de ruta utilizada en el árbol de prefijos para encontrar el nodo objetivo. Ethereum utiliza cadenas hexadecimales como cadenas de ruta, y por lo tanto, el ancho del MPT es 16. Los datos son los datos objetivo correspondientes al camino.

A continuación se muestra un ejemplo de un MPT que ha sido optimizado con prefijos comprimidos, almacenando los siguientes datos de pares clave-valor:

{

'cab8': 'perro',

‘cabe’: ‘gato’,

‘39’: ‘pollo’,

«395»: «pato»,

'56f0': 'caballo'

}

Para encontrar los datos 'pato' usando la ruta '395', comenzarías en el hash raíz y procederías a través de hashA, hashC y hashD para finalmente llegar a los datos objetivo. Aquí tienes una guía paso a paso:

  1. Hash raíz: Este es el punto de entrada del Árbol de Patricia Merkle (MPT), y lo usarías para encontrar el primer nodo.
  2. hashA: Basado en el hash raíz, recuperarías el nodo o contenido identificado por hashA. Dado que el camino es "395", estás buscando la parte del árbol que te llevará a "3".
  3. hashC: Después de acceder al contenido de hashA, continúas siguiendo el camino. El siguiente segmento, “9”, te lleva a hashC.
  4. hashD: Finalmente, continuando por el camino, el último segmento "5" te lleva a hashD, que contiene el valor "duck".

En cada paso del camino, el MPT aprovecha las propiedades tanto del Árbol Radix, para encontrar el camino correcto basado en la clave, como del Árbol Merkle, para garantizar la integridad de los datos a través de enlaces hash. Las "rutas" en el árbol suelen representarse con una codificación hexadecimal, que corresponde con el factor de ramificación del árbol de 16. Cada nodo en el camino incluye suficientes punteros hash (a nodos hijos) y valores para verificar la integridad de los datos y para navegar a través del árbol.

Tenga en cuenta que en un MPT real, los caminos y los datos se codificarían y almacenarían en un formato específico, y tipos adicionales de nodos (como nodos de extensión y nodos hoja) ayudan a optimizar la estructura para la eficiencia en diferentes escenarios.

4. Compromiso de vector

Los esquemas de compromiso[1] son primitivas criptográficas que garantizan la privacidad y la integridad de los datos. Se utilizan ampliamente en escenarios como las pruebas de conocimiento cero y la computación segura entre múltiples partes. Un esquema de compromiso básico se divide en dos etapas: la fase de compromiso y la fase de revelación (o apertura).

  1. Fase de compromiso: En esta fase, el comprometedor utiliza un algoritmo criptográfico para vincular un mensaje a un valor de compromiso y envía este valor de compromiso al destinatario. En esta etapa, el compromiso posee dos propiedades: ocultación y vinculación. La ocultación garantiza que el contenido del mensaje comprometido sea desconocido para todos, excepto el comprometedor. La vinculación garantiza que una vez hecho un compromiso, no puede ser alterado por nadie, incluido el comprometedor.
  2. Fase de revelación (Apertura): Durante esta fase, el comprometedor puede demostrar al destinatario que el valor de compromiso que recibió es un compromiso válido para el mensaje original. El compromiso tiene la propiedad de corrección, lo que significa que si tanto el comprometedor como el destinatario siguen el protocolo correctamente, el destinatario estará convencido de que el valor de compromiso que recibieron durante la fase de compromiso es un compromiso válido para el mensaje original.

El Compromiso Vectorial es un tipo especial de esquema de compromiso propuesto por Catalano et al. [2] que permite a un comprometedor hacer un compromiso con un conjunto ordenado de mensajes 𝑚 = ⟨𝑚1 , 𝑚2 , …, 𝑚𝑞 ⟩ y revelar (abrir) en cualquier posición especificada para probar que el mensaje 𝑚𝑖 es el mensaje comprometido número i. En los compromisos vectoriales, la ligadura significa que nadie puede abrir la misma posición para revelar mensajes diferentes.

Un esquema de compromiso de vectores típicamente consta de los siguientes algoritmos:

5. Árboles Verkle

5.1. Definición y características de los árboles Verkle

Definición: Verkle Trees = Compromisos Vectoriales + Árboles de Merkle.

Por favor note: Vitalik Buterin, el co-fundador de Ethereum, tiene un blogpublicación específicamente dedicada a la introducción de los árboles Verkle. Este capítulo añade algo de antecedentes y conocimientos matemáticos basados en su blog. Algunos de los datos e ilustraciones en el siguiente texto se derivan de su blog.

Los árboles Verkle (VTs) se caracterizan por proporcionar pruebas más pequeñas en comparación con los árboles Merkle. Para datos en una escala de miles de millones de entradas, un árbol Merkle podría generar pruebas de alrededor de 1KB, mientras que las pruebas de árbol Verkle pueden ser de menos de 150 bytes. Este tamaño compacto de prueba es ventajoso para implementar...clientes sin estado”.

La estructura de un árbol Verkle es algo similar a la del Árbol Merkle Patricia (MPT). Aquí tienes un ejemplo de su estructura. Los nodos de un árbol Verkle pueden ser: (i) Vacíos, (ii) Nodos hoja que contienen una clave y su valor correspondiente, o (iii) Nodos internos con un número fijo de nodos hijos. Este número de hijos también se conoce como la “anchura” del árbol.

La diferencia entre VT (Árboles Verkle) y MPT (Árboles de Patricia de Merkle) radica principalmente en cómo el ancho del árbol (o fan-out, que se refiere al número de nodos secundarios que tiene un nodo en el árbol) afecta su eficiencia. En el caso de MPT, si el ancho es mayor, tiende a ser menos eficiente porque un mayor ancho significa más nodos hermanos, lo que podría llevar a tiempos de actualización más largos para el MPT y tamaños de prueba más grandes. Por el contrario, para VT, un ancho de árbol más amplio resulta en pruebas más pequeñas. La única restricción es que si el ancho es demasiado alto, el tiempo que lleva generar una prueba puede volverse más largo.

En Ethereum’s @vbuterinPara /verkle_tree_eip\u003e, se sugiere un ancho de 256 para las VT, lo cual es significativamente mayor que el actual de 16 para MPT. Este ancho tan grande es factible en las VT gracias al uso de técnicas criptográficas avanzadas, como compromisos vectoriales, que permiten pruebas compactas independientemente del ancho del árbol. Esta técnica de compresión permite que los Verkle Trees escalen de manera más eficiente en cuanto al tamaño de la prueba. El texto posterior explicará con más detalle las características mencionadas anteriormente.

5.2. Compromiso y Prueba de Árboles Verkle

Veamos cómo se generan las pruebas en un MPT: La prueba debe incluir los valores hash de todos los nodos laterales (o nodos hermanos) en el camino desde el nodo raíz hasta el nodo hoja objetivo. Tomando "4ce" como ejemplo, las partes marcadas en rojo en el diagrama a continuación son los nodos que deben incluirse en la prueba devuelta.

En los árboles Verkle, no es necesario proporcionar nodos hermanos; en su lugar, solo necesita proporcionar la ruta junto con algunos datos adicionales como evidencia.

Entonces, ¿cómo generar compromisos para un VT? La función hash utilizada para el cálculo no es una hash convencional, sino que utiliza compromisos vectoriales.

Después de reemplazar la función hash con un algoritmo de generación de compromiso a partir de compromisos vectoriales, el llamado hash raíz es ahora un compromiso raíz. Si los datos de algún nodo son manipulados, afectará en última instancia al compromiso raíz.

¿Cómo generar una prueba? Como se muestra en el diagrama a continuación, solo necesita proporcionar tres subpruebas, cada una de las cuales puede demostrar que un nodo en el camino existe en una posición determinada dentro de su nodo padre. Cuanto mayor sea el ancho, menos capas habrá y, en consecuencia, se requerirán menos subpruebas.

En implementaciones prácticas, se utilizan compromisos polinomiales (que se pueden implementar de manera simple y eficiente para compromisos de vector), lo que permite un compromiso con un polinomio. Los dos esquemas de compromiso polinomial más fáciles de usar son " compromisos KZG” y “compromisos polinómicos estilo a prueba de balas(el primero tiene un tamaño de compromiso de 48 bytes, mientras que el último es de 32 bytes).

Si emplea compromisos y pruebas KZG, la prueba para cada nodo intermedio es apenas 96 bytes, lo que representa un ahorro de espacio de casi tres veces en comparación con un árbol de Merkle básico (asumiendo un ancho de 256).

La complejidad temporal teórica para operaciones en árboles Merkle y árboles Verkle es la siguiente:

El esquema de prueba de Verkle introducido hasta ahora es bastante básico; de hecho, hay más estrategias avanzadas de optimización disponibles.

5.3. Optimización: Fusionando las Pruebas

5.3.1. idea

En comparación con generar una prueba para cada capa de compromisos en un camino, la característica de los compromisos polinomiales puede ser utilizada para lograr “demostrar la relación padre-hijo entre todos los compromisos en el camino con una prueba de tamaño fijo, que puede incluir un número ilimitado de elementos.” Para comprender específicamente cómo se logra esto, es necesario introducir algún conocimiento matemático para la explicación. Este artículo implicará algunas fórmulas matemáticas pero no cubrirá la parte criptográfica de la prueba en principio. Para el método específico, consulteesquema que implementa multipruebas mediante evaluación aleatoria.

5.3.2. Derivación matemática

Primero, vamos a introducir algunos conceptos básicos sobre polinomios en matemáticas: ¿cómo realizamos la reducción de polinomios, también conocida como reducción de grado de un polinomio?

Suponiendo que conocemos un polinomio 𝑃(𝑥) y su valor 𝑦₁ en 𝑥₁, es decir, 𝑃(𝑥₁) = 𝑦₁.

Ahora, considere un nuevo polinomio 𝑃(𝑥) - 𝑦₁ , que tiene un valor de cero en (𝑥 = 𝑥₁) , porque 𝑃(𝑥₁) - 𝑦₁ =𝑦₁ - 𝑦₁ = 0.

Por lo tanto, el polinomio 𝑃(𝑥) - 𝑦₁ tiene una raíz en 𝑥 = 𝑥₁, lo que significa que (𝑥 - 𝑥₁) es un factor de 𝑃(𝑥) - 𝑦₁.

En otras palabras, podemos expresarlo en la siguiente forma: [ 𝑃(𝑥) - 𝑦₁ = (𝑥 - 𝑥₁ )𝑄(𝑥)]

𝑄(𝑥) es otro polinomio cuyo grado es uno menos que el de 𝑃(𝑥). Esto se debe a que (𝑥 -𝑥₁ ) es un factor de primer grado, lo que reduce el grado total del polinomio.

¿Cómo usar KZG para probar un solo valor en un vector?

Tomemos el compromiso KZG10 como ejemplo, para el polinomio 𝑃(𝑥), supongamos que su compromiso polinómico es [ 𝑃(𝑠) ]₁.

Como se explicó anteriormente, para el polinomio 𝑃(𝑥), si 𝑃(𝑧) = 𝑦, entonces tenemos 𝑄(𝑥) = (𝑃(𝑥) - 𝑦)/(𝑥 - 𝑧)

Ahora, el probador puede generar una prueba de que el polinomio 𝑃(𝑥) satisface 𝑃(𝑧) = 𝑦: calcular [ 𝑄(𝑠) ]₁ y enviarlo al verificador.

El verificador necesita verificar 𝑒( [ 𝑄(𝑠) ]₁, [ 𝑠 - 𝑧]₂ ) = 𝑒( [ 𝑃(𝑠) ]₁- [𝑦]₁, [1]₂) .

¿Cómo usar KZG para demostrar múltiples valores en un vector?

Podemos construir una prueba para demostrar múltiples valores en un vector de la siguiente manera:

Al utilizar este método, independientemente del número de puntos de datos en el mismo vector que necesitan ser verificados, solo se requiere una prueba de tamaño constante.

Ahora veamos el esquema del Árbol Verkle sin optimización desde la perspectiva del algoritmo de compromiso KZG.

Utilizando el método de construcción de la sección “Cómo usar KZG para demostrar un único valor en un vector,” el verificador puede construir compromisos para los polinomios original y de cociente para cada polinomio 𝑓ᵢ(𝑥), lo que resulta en un total de 𝟐﹡𝑚 compromisos de KZG. El verificador envía todos estos compromisos como prueba para verificación.

Sin embargo, como se mencionó anteriormente, este enfoque requiere generar múltiples pruebas, y el verificador también necesita realizar múltiples cálculos de verificación. Necesitamos encontrar una forma de comprimir múltiples pruebas de compromiso.

Uniendo las Pruebas

El probador envía la prueba [ 𝑞( 𝑠 )]₁ al verificador para su verificación.

La evidencia producida por este esquema consiste en un compromiso, dos pruebas y un valor, con un tamaño de datos constante. Finalmente, después de la optimización de fusión de pruebas en el árbol Verkle, el objeto de datos verificable enviado al verificador incluye lo siguiente:

  1. Evidencia de tamaño constante
  2. Los datos de las hojas a demostrar (pares clave-valor)
  3. Los valores de compromiso de todos los nodos en el camino desde la hoja hasta la raíz (suponiendo un ancho de árbol de 256 con 2³² nodos, entonces la profundidad promedio es 4, requiriendo solo 3 valores de compromiso)

Tenga en cuenta que 𝑥ᵢ y 𝑦ᵢ no necesitan ser proporcionados explícitamente; todos pueden ser calculados.

5.3.3. rendimiento

En cuanto al esquema de combinación de pruebas para los árboles Verkle, el tamaño específico de la prueba generada es el siguiente(La unidad de la fila es mil millones.):

Los datos anteriores asumen el uso de un árbol de ancho 256, empleando el esquema de compromiso KZG (con un tamaño de compromiso de 48 bytes), y maximiza la utilización del árbol. En la práctica, para distribuciones de información completamente aleatorias, la profundidad del árbol aumentaría aproximadamente en un 60%, y el tamaño de cada elemento aumentaría en 30 bytes. Si se utiliza el esquema a prueba de balas, entonces el tamaño del compromiso sería de 32 bytes.

5.4. Carga de cálculo del probador y verificador

  1. Generación de Pruebas: El costo de generar pruebas por el demostrador está relacionado con el ancho del árbol, pero cada operación atómica requiere un costo computacional relativamente bajo, por lo que los árboles Verkle con anchos entre 256 y 1024 funcionan bien en términos de algoritmos.
  2. Verificación de prueba: Vitalik ha indicado que el algoritmo de verificación es muy rápido y generalmente se puede completar en menos de 100 ms, incluso cuando hay varios miles de valores para verificar.
  3. Al actualizar árboles Verkle: La actualización del árbol requiere volver a calcular todos los valores de compromiso intermedios a lo largo de la ruta debido a cambios en los valores o la estructura. Sin embargo, Vitalik mencionó que, gracias a algunas propiedades del algoritmo de compromiso polinómico, es posible diseñar un método que precalcule valores de compromiso alternativos y los almacene, reduciendo así el costo de tiempo computacional durante las actualizaciones, que esencialmente intercambia espacio por tiempo.

6. Conclusiones

Estas son las palabras originales del blog de Vitalik, agregamos un párrafo al final como suplemento.

Los árboles Verkle son una actualización poderosa de las pruebas de Merkle que permiten tamaños de prueba mucho más pequeños. En lugar de necesitar proporcionar todos los "nodos hermanos" en cada nivel, el probador solo necesita proporcionar una prueba única que demuestre todas las relaciones padre-hijo entre todos los compromisos a lo largo de los caminos desde cada nodo hoja hasta la raíz. Esto permite que los tamaños de las pruebas disminuyan en un factor de ~6-8 en comparación con los árboles Merkle ideales, y en un factor de más de 20-30 en comparación con los árboles Patricia hexarios que Ethereum usa hoy en día (!!).

Requieren una criptografía más compleja para implementarse, pero ofrecen la oportunidad de obtener grandes ganancias en cuanto a escalabilidad. A medio plazo, los SNARKs pueden mejorar las cosas aún más: podemos SNARKear el verificador de prueba Verkle, que ya es eficiente, para reducir el tamaño del testigo a casi cero, o volver a las pruebas de Merkle SNARKeadas si/cuando los SNARKs mejoran mucho (por ejemplo, a través de GKR, funciones hash muy amigables con SNARKs o ASICs). Más adelante, la llegada de la computación cuántica obligará a cambiar a pruebas de Merkle STARKed con hashes, ya que hace que las homomorfismos lineales en los que dependen los árboles de Verkle sean inseguros. Pero por ahora, nos proporcionan los mismos beneficios de escalabilidad que obtendríamos con tecnologías más avanzadas, y ya tenemos todas las herramientas que necesitamos para implementarlas eficientemente.

En la actualidad, muchos clientes de Ethereum han proporcionado la implementación del árbol Verkle y las redes de prueba relacionadas. La comunidad todavía está debatiendo el momento en que los Árboles Verkle se lanzarán en la red principal. Es probable que se implemente en una actualización de hard fork en 2024 o 2025. Para obtener información detallada sobre los árboles Verkle en Ethereum, consultehttps://verkle.info/ .

7. Referencia

[1]. BRASSARD G, CHAUM D, CRÉPEAU C. Pruebas de conocimiento de divulgación mínima[J]. Journal of computer and system sciences, 1988, 37(2): 156–189.

[2]. CATALANO D, FIORE D. Compromisos vectoriales y sus aplicaciones [C] // Criptografía de clave pública - PKC 2013: 16ª Conferencia Internacional sobre Práctica y Teoría en Criptografía de Clave Pública, Nara, Japón, 26 de febrero - 1 de marzo de 2013. Actas 16. Springer, 2013: 55-72.

Descargo de responsabilidad:

  1. Este artículo es un reimpreso de [ZAN], Todos los derechos de autor pertenecen al autor original [AntChain Open Labs y ZAN]. Si hay objeciones a esta reimpresión, por favor contacte al Gate Learnequipo, y lo resolverán rápidamente.
  2. Renuncia de responsabilidad: Las opiniones expresadas en este artículo son únicamente las del autor y no constituyen ningún consejo de inversión.
  3. Las traducciones del artículo a otros idiomas son realizadas por el equipo de Gate Learn. A menos que se mencione, está prohibido copiar, distribuir o plagiar los artículos traducidos.
Start Now
Sign up and get a
$100
Voucher!