Una de las tecnologías más prometedoras dentro del ecosistema Ethereum es la zkEVM o Zero-Knowledge EVM, un proyecto que busca, no solo mejorar las prestaciones de la Ethereum Virtual Machine, sino también dar un salto tecnológico enorme que se traducirá, no solo en mayor velocidad de operación sino también en agregar mejoras que protegerán nuestra privacidad cuando interactuamos con los smart contracts que se ejecutan al usar esta nueva EVM.
Este proyecto es impulsado por los desarrolladores de zkSync, una empresa de nombre Matter Labs que desde 2018 busca construir una solución de escalabilidad y privacidad única en su estilo. Además, por ser una solución del tipo software libre, esta puede adaptarse a todos los proyectos derivados de Ethereum, con lo que se impulsa el desarrollo de este ecosistema buscando nuevos horizontes.
zkEVM, el poder de las ZKP llega a los smart contracts
Para entender qué es la zkEVM, debemos conocer las dos tecnologías que este proyecto busca unir. En primer lugar, las siglas zk son por el hecho de que este proyecto usa las conocidas Zero Knowledge Proofs o Pruebas de Conocimiento Cero para su funcionamiento. Esta característica le permite agregar funciones únicas centradas en ofrecer un ambiente más privado a las ejecuciones de smart contracts que se dan sobre la EVM y que son almacenadas en la blockchain.
Recordemos que en cada interacción que realizamos con un smart contract (ej: cuando hacemos un intercambio en Uniswap), este proceso genera una serie de datos que son almacenados en la blockchain de Ethereum (o de la red que estemos usando).
Toda esta información es pública y pseudo anónima, pudiendo verificarse y rastrearse en todo momento. El pseudo anonimato en todo caso protege de forma bastante efectiva nuestra privacidad, pero siempre deja trazas que otros pueden usar para rastrear nuestra actividad e identificarnos en la vida real. Con las ZKP es posible, no solo evitar esta debilidad, sino que al mismo tiempo hacemos que las operaciones criptográficas ocupen menos espacio, sean igualmente verificables y auditables, además de abrir la posibilidad para manejar estados de computación de forma mucho más efectiva y eficiente.
Ahora, si unimos las ZKP y las integramos a la EVM, tenemos la capacidad de convertir a redes como Etheruem y derivados en espacios mucho más seguros, potentes y escalables, los objetivos que precisamente busca lograr la zkEVM:
- Reducir las comisiones de las operaciones, debido a la reducción del coste computacional de las operaciones.
- Mantener el funcionamiento sin confianza de las redes que implementan las zkEVM.
- Mejorar la privacidad y la seguridad de la red donde se implementa la zkEVM.
- Habilitar nuevas tecnologías que se puedan aplicar a los smart contracts. Por ejemplo, la posibilidad de mejorar la experiencia de uso de los tokens NFTs u otras funciones avanzadas para otros estándares.
zk, una tecnología que lo cambia todo
Ahora bien, expliquemos con un poco más de profundidad algunos conceptos antes de continuar:
¿Qué es zk?
Cuando vemos zk en el nombre de zkEVM, debemos pensar como hemos mencionado ya en las ZKP o Pruebas de Conocimiento Cero.
Una Zero Knowledge Protocol o ZKP, es un avanzado protocolo de criptografía empleado para crear sistemas distribuidos altamente seguros y anónimos. Los protocolos ZKP permiten compartir y verificar la información sin revelar datos innecesarios, manteniendo así un altísimo nivel de seguridad.
Básicamente, este mecanismo de criptografía busca crear una forma de demostrar al mundo que existe un secreto, algo tan secreto, que solo la persona que tiene el secreto en su poder sabe con exactitud de qué se trata.
¿Pero cómo demuestras que tienes un secreto sin revelarlo? Pues bien, para esto, ZKP usa una serie de datos matemáticos que le permiten al resto de personas verificar que efectivamente el secreto existe y está en poder de quien dice tenerlo, pero en ningún momento se revela dato alguno de dicho secreto ni de su contenido, ni nada que permita relacionar la información dada para verificación con la naturaleza del secreto en sí mismo.
Así, ZKP permite revelar un secreto sin revelarlo realmente, simplemente ofreciendo una prueba matemática de que el secreto existe y de que puedes confiar en dicha realidad. Lo bueno de este tipo de criptografía es que no solo es segura contra los ataques actuales, sino también contra los futuros (ej: ZKP es resistente a la computación cuántica), además de ser computacionalmente más eficiente en términos de ejecución y de espacio usado por sus pruebas criptográficas. Por ello, muchos proyectos se interesan en este tipo de tecnologías para mejorar la eficiencia, seguridad y la escalabilidad de las redes blockchain.
zk-Rollup, la evolución de las Rollups
Si bien, las ZKP son extremadamente potentes, si unimos este poder con las Rollups, las cosas cambian radicalmente a mejor. Las Rollups son una tecnología de escalabilidad sidechain que tiene un funcionamiento bastante sencillo. La idea es agrupar una serie de transacciones (ej: todas las operaciones de un bloque) y de ellas generar una sola transacción que se publica en la mainnet de la red a la que está unida dicha sidechain.
Así, una rollups funciona como una transacción de síntesis de operaciones que se publica en una mainnet, mientras que se enlaza a un conjunto de operaciones en una sidechain y donde se puede verificar de forma clara y segura. Esta no es una tecnología nueva, de hecho, Lightning Network usa un sistema muy parecido, ya que las operaciones de los canales LN terminan siendo sintetizadas en una sola operación dentro de Bitcoin.
Las rollups son muy útiles, pero existe un problema: la criptografía actualmente usada en blockchain (criptografía asimétrica) genera pruebas grandes que son computacionalmente poco eficientes y con algunos problemas de fungibilidad (ej: en las optimistic rollups, es posible manipular económicamente las operaciones).
Así, con el objetivo de mejorar esta tecnología nacieron las zk-Rollups, que no solo tienen todas las ventajas de la Rollups y ZKP, sino que a su vez solucionan los problemas de seguridad de algunas implementaciones de Rollups.
Arquitectura y funcionamiento de la zkEVM
Ahora bien, lograr el proceso que permite el funcionamiento de la zkEVM es bastante complejo, uno que los desarrolladores de Matter Labs llevan desde 2018 trabajando.
Entendiendo como funciona la EVM
En primer lugar, revisemos cómo funciona la EVM normal: tenemos los smart contracts que son todos estos programas escritos en Solidity que podemos ver en la blockchain y repositorios de software de los proyectos DApps que conocemos. Este código se puede decir que es lo que hace funcionar a las Dapps, aunque eso no es del todo correcto. La EVM directamente no ejecuta el lenguaje Solidity, porque la EVM no interpreta directamente el lenguaje.
Así, llegamos al segundo punto, la compilación de los smart contracts. Cada smart contract escrito en Solidity (o compatible) es compilado y de esto se genera un bytecode, un código de máquina que la EVM es capaz de manejar. Este bytecode se conoce como Smart Contract Bytecode, y es el preludio de la ejecución de los smart contracts en la red.
Por supuesto, este bytecode está formado por una serie de OP_CODE o Códigos de Operación, que son instrucciones precisas que la EVM ha implementado y que puede ejecutar para hacer funcionar realmente a los smart contracts. Este OP_CODE generado da las instrucciones precisas que la EVM debe ejecutar para realizar su trabajo: permitirnos usar las Dapp o cualquier operación dentro de la red. Este OP_CODE se puede revisar a detalle dentro de la especificación que se encuentra en el Yellow Paper de Ethereum.
Finalmente, los nodos de la red, todos ellos con una EVM, ejecutan ese código, verifican que todo es correcto y agregan las transacciones y estados a la blockchain, quedando un consenso claro de las mismas y una prueba verificable de tales operaciones.
Mejorando la EVM con zkEVM
El funcionamiento anterior es el que podemos ver en la EVM y sus derivados, y eso incluye a la zkEVM. La diferencia más fundamental entre EVM y la zkEVM, es que esta última genera un entorno de ejecución seguro y blindado contra agentes externos, incluso si estos pertenecen a la misma red.
Por ejemplo, en la EVM un operador de nodo puede ver las operaciones que se realizan. Puede “verlas” en el sentido que es posible rastrear los datos de entrada y salida de dichas operaciones, incluyendo sus estados intermedios. Esto es posible porque la EVM tiene un entorno de ejecución abierto, la criptografía que se usa en el proceso solo está allí para proteger ciertas secciones del código (como las direcciones y la autorización de manejo de tokens).
Pero en la zkEVM esto cambia radicalmente. En una entorno ZKP, podemos ver los datos de entrada, pero estos en realidad no son los datos reales, sino una serie de datos generados por criptografía ZKP. Así, básicamente la entrada de datos es una serie de datos que le permiten a la zkEVM verificar que lo que decimos es verdad, pero sin revelar en ningún momento la información real que dio origen a esos datos.
Estos datos de entrada van acompañados por datos de ejecución y una serie de datos testigos, que la zkEVM agrupa. Tras agruparlos, la zkEVM tiene todo lo necesario para aplicar el proceso que le permitirá saber si los datos de entrada son correctos, y al serlo, la zkEVM genera los cambios de estado que indican a la red que el smart contract se ha ejecutado y, adicional a eso, se generan las pruebas que indican que tales datos y ejecución son correctas.
Al final, dependiendo del despliegue de la zkEVM (ej: es nativa – L1, o está dentro de una sidechain – L2), se pueden enviar esos datos a los nodos de la red para que se ejecuten pasos adicionales de verificación, terminando así con el proceso.
Facilitando el desarrollo
Ahora bien ¿Por qué molestarse en complicar el diseño de la EVM? Pues bien, en primer lugar, la zkEVM no solo permite hacer la ejecución de smart contracts más privada, sino que nos brinda la posibilidad de usar los recursos computacionales de los nodos de forma más efectiva.
zkEVM ha sido diseñada especialmente para ser una solución a implementar en sidechain, más específicamente sobre la zkSync y sus famosas zk-Rollups. Esto tiene tres objetivos:
- Al ser sidechain, se pueden relajar ciertos procesos de consenso para impulsar la escalabilidad. Sin embargo, la conexión sidechain es directa a L1, cada transacción en la zkEVM genera pruebas únicas y verificables que quedan grabadas no solo en la sidechain sino también en la L1 como un rollup. Con esto se busca mantener un alto nivel de seguridad a la vez que se incrementa la escalabilidad, no solo con sidechains, sino también en sharding.
- El lenguaje de programación con la zkEVM puede evolucionar. Si bien se puede usar Solidity por convención y compatibilidad, zkEVM puede usar otros lenguajes compatibles con LLVM, y eso incluye lenguajes como C/C++, Zinc (un lenguaje y framework de desarrollo inspirado y desarrollado sobre Rust). Esto significa que la zkEVM puede funcionar de forma más computacionalmente eficiente al usar los recursos de los nodos de forma más directa, incluso con la capacidad de alcanzar paralelismo.
3. Facilita el desarrollo de aplicaciones ZKP, ya que el framework Zinc ayuda a generar aplicaciones ZKP de forma segura para esta VM.
Otros proyectos en el horizonte
zkEVM de Matter Labs es el proyecto que inició todo este desarrollo de ZKP sobre la EVM, pero a esta iniciativa se han unido ya otros proyectos. Por ejemplo, Polygon (MATIC) también ha anunciado su propia solución zkEVM, que también es conocida como Polygon Hermez, un proyecto que se presentó en marzo de 2021. Por supuesto, Polygon zkEVM funciona de forma totalmente distinta a la zkEVM de Matter Labs.
Igualmente, tenemos proyectos como Scroll o StarkNet, dos proyectos centrados en ofrecer soluciones zk-Rollups únicas y potentes que buscan convertirse en soluciones de escalabilidad de primer nivel para Ethereum y otras redes compatibles.
Estos actualmente son los proyectos más grandes y desarrollados, pero seguramente veremos otros proyectos de está índole salir y presentarse al mundo. Al final, el desarrollo de la blockchain parece imparable y proyectos como zkEVM lo demuestran muy claramente.