Un artículo sobre el lenguaje de programación ZK.

La prueba de conocimiento cero (ZKP) es una poderosa herramienta criptográfica que puede verificar la exactitud de los cálculos y al mismo tiempo proteger la privacidad de los datos de entrada. Como parte integral de esta infraestructura crítica, los lenguajes de dominio específico (DSL) desempeñan un papel vital a la hora de simplificar el proceso de desarrollo y verificación de circuitos ZKP. Desempeñan un papel importante al vincular conceptos abstractos con las representaciones de circuitos precisas necesarias para probar el sistema, actuando como un puente importante entre los dos.

Uno de los desafíos clave en la prueba de sistemas es traducir conceptos abstractos de alto nivel en circuitos reales. Sin embargo, la aparición de DSL aborda este desafío al facilitar la expresión estructurada de estos conceptos abstractos de una manera más concreta y alcanzable.

Durante la última década, hemos sido testigos de un crecimiento significativo en la cantidad y diversidad de DSL. La actividad en este campo se refleja en el desarrollo de diversos lenguajes de circuitos, entre ellos Noir, Leo, Zinc, etc. Ya sea que necesite una opción de uso general, como Circom, o una solución personalizada para una plataforma específica, como Cairo, puede elegir entre una amplia gama de lenguajes y marcos para escribir circuitos ZKP.

En este artículo, exploraremos los principales lenguajes de programación ZK que los desarrolladores utilizan activamente y analizaremos las mejores características de cada lenguaje.

TLDR;

Un artículo sobre el lenguaje de programación ZK

El Cairo por StarkWare

Cairo, el lenguaje central para programas informáticos de uso general que soportan pruebas STARK, ha desempeñado un papel clave en el éxito de StarkNet y StarkEx, impulsando la escalabilidad de las aplicaciones en la red principal de Ethereum. Vale la pena mencionar que Cairo ha jugado un papel importante en el soporte de diversas aplicaciones, incluidas dYdX, Sorare, Immutable X, etc. El nombre "Cairo" proviene de la abreviatura de "CPU Algebraic Intermediate Representation". En el campo de las pruebas de conocimiento cero, desempeña un papel similar al lenguaje ensamblador, lo que facilita el inicio a los desarrolladores familiarizados con lenguajes de programación de bajo nivel como C, C++ o Solidity.

Inspirándose en Rust, Cairo permite a los desarrolladores crear contratos inteligentes Starknet, centrándose en la seguridad y el desarrollo fácil de usar. Cairo tiene una sintaxis poderosa que simplifica la creación de circuitos ZK y permite a los usuarios realizar una variedad de tareas dentro de los programas de Cairo. Además, una ventaja significativa de Cairo es su extensibilidad, lo que permite la introducción flexible de nuevas características y capacidades.

En los sistemas ZK, la eficiencia y la escalabilidad son factores cruciales, y Cairo cumple con este requisito enfatizando estos dos aspectos. El lenguaje integra estrategias de optimización, incluida la reducción de restricciones y la eliminación de bucles, para aliviar la carga computacional típicamente asociada con los circuitos ZK. La optimización del diseño de circuitos de Cairo da como resultado una generación y verificación de pruebas más rápidas, lo que lo hace ideal para aplicaciones que requieren un alto rendimiento y una latencia mínima.

La expansión de El Cairo ha sido impresionante, con un aumento extraordinario de desarrolladores a tiempo completo en los últimos dos años. Este aumento resalta la adaptabilidad de El Cairo, ya que sus usos no se limitan a blockchain sino que son importantes en cualquier contexto donde se requiera verificación computacional. Como resultado, podemos esperar un crecimiento adicional significativo en la adopción de Cairo por parte de los desarrolladores.

El 28 de septiembre de 2023, Starknet lanzó una importante actualización de su lenguaje de programación Cairo v2.3.0. Este lanzamiento marca un gran paso adelante para hacer que los contratos sean más modulares, aumentando el potencial de los contratos inteligentes al introducir nuevas funciones, opciones de almacenamiento y gestión de eventos. La integración de estos componentes proporciona una forma flexible de ampliar la funcionalidad del contrato, permitiendo que módulos de terceros mejoren la funcionalidad del contrato.

Zinc de ZkSync

Zinc es un lenguaje de programación diseñado para crear contratos inteligentes y circuitos SNARK en la plataforma zkSync. Utiliza la sintaxis de Rust, incorpora elementos de Solidity y proporciona características únicas.

Lo que hace único a Zinc es su facilidad de uso. No es necesario comprender todos los detalles intrincados de los sistemas de restricciones de primer orden (R1CS) para escribir código seguro. El zinc enfatiza la inmutabilidad, haciéndolo inherentemente funcional. Esto significa que prioriza la evaluación de funciones y datos inmutables, lo que reduce los efectos secundarios y promueve la escritura de códigos de contratos inteligentes más limpios y menos propensos a errores.

Además, Zinc incluye operaciones matemáticas seguras para evitar posibles desbordamientos, garantizando la seguridad de todas las operaciones. Aunque tiene algunas limitaciones, como la ausencia de bucles infinitos y la recursividad, Zinc simplifica el proceso de depuración mediante el seguimiento de registros de la consola. Estos seguimientos mejoran la experiencia de depuración al simplificar el proceso de seguimiento y resolución de problemas en la red de prueba o la red principal.

Noir de Azteca

Noir es un DSL de código abierto desarrollado por Aztec, basado en Rust, diseñado para simplificar la creación de circuitos ZK y programas ZK sin conocimientos profundos de criptografía. Se considera uno de los lenguajes más fáciles para comenzar y es adecuado para escribir aplicaciones ZK que sean compatibles con cualquier sistema de prueba. Noir se centra en la seguridad, la simplicidad y el rendimiento. Proporciona una sintaxis de alto nivel similar a Rust que abstrae la seguridad criptográfica y simplifica el uso de primitivas criptográficas básicas mientras mantiene un alto rendimiento.

Noir tiene ventajas significativas al ampliar la gama de aplicaciones que pueden aprovechar las capacidades de protección de la privacidad proporcionadas por ZKP, mejorando así la privacidad y la eficiencia de la verificación. Noir se compila en una representación intermedia llamada Abstract Circuit Intermediate Representation (Acer), que luego se puede compilar en R1CS. Separar el sistema de prueba backend del lenguaje mismo permite a Noir admitir una variedad de sistemas de prueba, incluidos Aztec Brettenberg, Turbo Plonk y posibles integraciones futuras como Groth16 y Halo2.

El lenguaje proporciona una biblioteca estándar que incluye características eficientes como SHA-256 (una función hash criptográfica que genera una salida de tamaño fijo) y comprobaciones de Pedersen-Merkle (un método que utiliza compromisos de Pedersen y árboles de Merkle para garantizar la integridad de los datos y el cifrado de coherencia). tecnología de verificación). El diseño de Noir es similar a Rust e incluye características familiares para los desarrolladores de aplicaciones, como funciones, submódulos, tipos definidos por el usuario (estructuras), condicionales, bucles y constantes globales. Además, se están realizando esfuerzos continuos para desarrollar funciones genéricas y de primera clase para mejorar aún más las capacidades expresivas de Noir.

Cabe señalar que Noir aún es un trabajo en progreso y puede haber algunas limitaciones y posibles errores. Pero el equipo de desarrollo está comprometido a mejorar y optimizar continuamente el lenguaje.

o1js por 0(1) laboratorios

o1js, anteriormente conocido como SnarkyJS, es una biblioteca de tipos desarrollada por 0(1)Labs para crear contratos inteligentes utilizando el lenguaje de programación SNARK. Aprovecha tecnologías establecidas como Node.js y la compatibilidad del navegador para garantizar un fácil acceso y facilidad de uso para los desarrolladores.

o1js puede integrarse perfectamente con bibliotecas y herramientas Java y TypeScript, proporcionando a los desarrolladores un ecosistema sólido y un amplio soporte comunitario. Esta integración simplifica el proceso de desarrollo y reduce la curva de aprendizaje asociada con la adopción de un nuevo entorno de desarrollo. Además, es totalmente compatible con Visual Studio Code (VS Code), un editor de código ampliamente utilizado que permite a los desarrolladores aprovechar al máximo funciones como la finalización de código, el resaltado de sintaxis y la depuración para mejorar la experiencia de desarrollo.

o1js es esencialmente un marco ZK versátil que le proporciona las herramientas clave que necesita para crear pruebas ZK. Admite la creación de diversos programas ZK, que cubren una variedad de operaciones demostrables integradas, que incluyen aritmética básica, hash, firmas, operaciones booleanas, comparaciones y más. Con el marco o1js, puede crear zkApps en el protocolo Mina, contratos inteligentes que se ejecutan en el lado del cliente y tienen entradas privadas.

Vale la pena mencionar que a principios de septiembre de 2023, el equipo de 0(1)Labs anunció que haría la transición de SnarkyJS a o1js y enfatizó su compromiso de mejorar el rendimiento. De particular interés es que lograron una reducción de 3 a 4 veces en el tiempo de carga de la biblioteca, lo que se refiere al tiempo necesario para importar o1js, un proceso que puede bloquear el hilo principal. Para las aplicaciones web, el tiempo de carga es de gran importancia tanto para el tiempo de ejecución de Java como para la representación de toda la página. Además, el equipo también actualizó la CLI de Mina zkApp para mejorar la experiencia de creación de la interfaz de usuario y anunció mejoras adicionales en la API de Archive Node para mejorar su confiabilidad y claridad.

Leo por Aleo

Aleo blockchain es único en el campo de los contratos inteligentes y enfatiza la protección de la privacidad. En esencia, se encuentra el lenguaje de programación Leo, un lenguaje de tipado estático inspirado en Rust. Diseñado específicamente para desarrollar aplicaciones privadas, Leo empodera a los creadores que desean construir un ecosistema descentralizado seguro y privado. Lo verdaderamente único de Leo es su papel pionero en la introducción de un conjunto de herramientas integral para aplicaciones de conocimiento cero de propósito general. Este conjunto de herramientas incluye un marco de prueba, registro de paquetes, analizador de importación, compilador remoto y generador de teoremas.

Leo fue concebido por un equipo de desarrolladores liderado por Howard Wu, quien imaginó una tecnología que permitiría a los desarrolladores crear aplicaciones descentralizadas que priorizaran la privacidad y la seguridad. El diseño de Leo se basa en los principios de Rust e incorpora algunos elementos similares a Java para promover la familiaridad y la conveniencia durante el proceso de desarrollo. Además, Leo tiene como objetivo acelerar el desarrollo y simplificar el proceso de desarrollo proporcionando una plataforma de prueba integrada, registro de paquetes y conversor de importación. Esta integración permite a los desarrolladores centrarse en la lógica central de sus aplicaciones sin verse abrumados por problemas de infraestructura.

Una característica sorprendente de Leo es su compilador, que convierte programas al formato de prueba R1CS de bajo nivel. El compilador Leo es único en su riguroso proceso de verificación formal. Esta verificación es fundamental porque pueden surgir vulnerabilidades en múltiples etapas, desde la programación inicial hasta la auditoría y la compilación. Al realizar rigurosas comprobaciones matemáticas para garantizar que el compilador sea coherente con la intención del programador, Leo pretende reducir el riesgo de errores no detectados o posibles vulnerabilidades, especialmente en contextos L2, paquetes acumulativos de ZK o programas privados en la plataforma Leo.

Circom por iden3

Circom, un DSL diseñado específicamente para el desarrollo de circuitos ZK, es el resultado del trabajo conjunto entre Jordi Baylina y el equipo de iden3. El compilador Circom está escrito en Rust y su tarea principal es compilar circuitos escritos en el lenguaje Circom. En particular, Circom se ha convertido en la opción preferida para aplicaciones ZK destacadas del mundo real, como Dark Forest y Tornado Cash. Su popularidad se debe a su excelente rendimiento, que incluye tiempos rápidos de prueba del navegador a través de pruebas WASM optimizadas, pruebas eficientes del lado del servidor a través de rapidsnark y verificación eficiente en cadena.

Sin embargo, es importante darse cuenta de que la funcionalidad de Circom se centra principalmente en el desarrollo de circuitos ZK, lo que puede hacerlo menos adecuado para manejar una gama más amplia de tareas informáticas. Los desarrolladores que buscan más funciones que puedan satisfacer una gama más amplia de necesidades de desarrollo pueden encontrar las capacidades de Circom algo limitadas. En este caso, es posible que los desarrolladores necesiten combinar otros lenguajes o marcos de programación para satisfacer necesidades de desarrollo más amplias.

Un artículo sobre el lenguaje de programación ZK Imágenes de Circom

La compatibilidad de Circom se centra principalmente en sistemas ZKP ampliamente utilizados, como snarkjs y libsnark. Si bien esta compatibilidad garantiza una integración perfecta con estos sistemas ampliamente utilizados, también significa que los circuitos Circom heredan capacidades y limitaciones específicas asociadas con estas dependencias. Los desarrolladores que prefieran o requieran un sistema ZKP alternativo pueden enfrentar desafíos de compatibilidad o requerir trabajo adicional para adaptar e integrar los circuitos generados por Circom en su sistema preferido.

Acechar por Lurk Lab

Lurk es un dialecto Lisp de ámbito estático influenciado por Scheme y Common Lisp, con una característica única: permite la prueba directa de la corrección de la ejecución del programa utilizando zk-SNARK, lo que permite una verificación compacta y eficiente.

Los usos principales de Lurk incluyen:

  • Cálculo verificable: Lurk le permite demostrar la exactitud de sus expresiones en condiciones de conocimiento cero, lo que mejora la confianza en los resultados del cálculo.
  • Conocimiento cero: los usuarios pueden demostrar conocimientos sin revelar información específica más allá de la aportación pública, protegiendo así la privacidad.
  • Datos direccionables por contenido: cada programa Lurk está equipado con un identificador de contenido único (CID), lo que lo hace compatible con IPFS e IPLD.
  • Completitud de Turing: Lurk admite la creación y prueba de afirmaciones computacionales arbitrarias.
  • Funciones de orden superior: las funciones Lurk pueden aceptar y devolver funciones, lo que permite una programación funcional expresiva.
  • Computación que maneja datos privados: Lurk hace posible manejar datos privados y al mismo tiempo garantiza resultados demostrablemente correctos sin comprometer la privacidad.

Lurk aprovecha al máximo el asignador de memoria "contras" de Lisp al construir circuitos de uso general. Este asignador combina expresiones y genera referencias mediante hashes. La clave es demostrar que las dos expresiones efectivamente tienen como hash la misma referencia. Esta verificación permite a Lurk realizar cálculos dentro del circuito snark.

Lurk tiene muchas funciones, incluida la compatibilidad con recursividad infinita, bucles, flujo de control condicional y múltiples sistemas de prueba de backend, como Groth16, SnarkPack+ y Nova. Esta versatilidad abre la puerta a una variedad de aplicaciones, incluido el cálculo de verificación, el procesamiento de datos privados y la ejecución de programas completos de Turing dentro de circuitos snark.

Resumir

Con el aumento de la diversidad de aplicaciones ZK, DSL tiene amplias perspectivas de desarrollo en el campo ZK. La clave para un DSL exitoso es crear una comunidad próspera y bibliotecas ricas para enriquecer la experiencia del desarrollador. Los DSL que priorizan la compatibilidad con las bibliotecas existentes pueden aprovechar el conocimiento y los recursos de la comunidad de desarrolladores en general. Este enfoque facilita una integración más fluida, acelera el desarrollo y proporciona una mayor flexibilidad al implementar aplicaciones ZK. Este esfuerzo de colaboración es fundamental para fomentar un ecosistema más sólido en torno a DSL, proporcionando beneficios tangibles a los desarrolladores e impulsará aún más la adopción y eficacia de la tecnología ZK.

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)