Pruebas de lenguaje específico de dominio (DSL) en conocimiento cero (ZK).[4] desempeña un papel vital en el campo. En esencia, las pruebas ZK resuelven el desafío de probar la existencia de ciertos atributos en datos secretos sin revelar ninguna información adicional. Sin embargo, traducir ideas de alto nivel en pruebas concretas puede ser complejo. Aquí es donde entran en juego los DSL, que unen conceptos abstractos con la representación de los circuitos necesarios para probar el sistema.
Sistema de prueba[5] es un método o acuerdo que permite a una parte probar la validez de una declaración o reclamación a otra parte sin revelar ninguna información confidencial. Se trata de un conjunto de reglas y procedimientos que permiten al probador convencer al verificador de la veracidad de una determinada afirmación, como la exactitud de un cálculo o la posesión de ciertos conocimientos, sin revelar ningún secreto o dato subyacente.
Sin embargo, los sistemas de prueba no pueden tratar directamente con conceptos de alto nivel. En su lugar, deben convertirse en circuitos que representen las propiedades deseadas. Este cambio de conceptos de alto nivel a circuitos presenta desafíos. Aquí es donde entra en juego el lenguaje de los circuitos. Los lenguajes de circuito resuelven este problema al proporcionar una forma estructurada y formal de expresar ideas de alto nivel.
Durante la última década, ha habido un aumento significativo en el número y la diversidad de los idiomas de circuito. El desarrollo de muchos lenguajes de circuito, como el noir, el Cairo[6] y Leo, lo que indica qué tan activo es el campo. Esta proliferación de lenguas nos permite comparar y contrastar sus características, similitudes y diferencias. Un examen exhaustivo de estos idiomas proporciona una comprensión más profunda del panorama general de los idiomas de circuito.
TLDR;
Noir - Desarrollado por Aztec, abstrae la complejidad de la criptografía y hace posible que los desarrolladores de cualquier experiencia escriban circuitos ZK.
– o1js – Una biblioteca de tipos desarrollada por O(1) Labs. Permite a los desarrolladores escribir contratos inteligentes. Se integra bien con las bibliotecas y herramientas existentes de Java y Type.
**– **Circom**[7] ** – Diseñado para el desarrollo de circuitos ZKP. Aportando precisión y claridad, sus características se centran principalmente en esta área en particular.
– Leo – Proporciona un entorno fácil de usar para los desarrolladores. Se utiliza una arquitectura de compilador validada formalmente con un enfoque en la detección temprana y prevención de errores.
**–**El Cairo**[8] ** – Énfasis en la eficiencia y la escalabilidad. La interoperabilidad se admite a través de interfaces estándar que se pueden integrar con plataformas blockchain, contratos inteligentes y sistemas fuera de la cadena.
Lurk – Resuelve las limitaciones de los SNARKs tradicionales aprovechando Lisp para implementar un circuito común.
Glosario
Ya que hablaremos de conceptos técnicos, aquí hay un glosario de algunos de los términos complejos que puede encontrar en los textos posteriores:
Representación Intermedia de Circuitos (Acer) :* Representación intermedia del circuito ZK utilizado por Noir que puede ser compilado en un sistema de restricción de primer orden (R1CS).
• Puertas personalizadas: Puertas lógicas especializadas diseñadas para operaciones criptográficas eficientes y seguras en circuitos ZK.
• SHA-256: una función hash criptográfica que toma una entrada y produce una salida de tamaño fijo.
Comprobación de Pedersen-Merkle: Utilizando la Promesa de Pedersen y las técnicas de verificación criptográfica de Merkle Tree, se puede verificar la integridad y la coherencia de los datos.
• Completitud de Turing: Propiedad de un sistema informático que puede emular una máquina de Turing y ser capaz de resolver cualquier problema computable con tiempo y recursos suficientes.
El Estilo de Aprobación de Continuación (CPS) :* una técnica de programación que divide el proceso de evaluación en pasos manejables para una ejecución uniforme y eficiente.
Elementos de campo :* elementos en un campo matemático finito, comúnmente utilizados en esquemas y cálculos criptográficos.
Negro
Negro[9] es un Lenguaje Específico de Dominio (DSL) diseñado por Aztec para simplificar la creación de circuitos y programas ZK sin necesidad de tener amplios conocimientos de criptografía o convertirse en criptógrafo. Su objetivo principal es permitir a los desarrolladores de cualquier origen escribir circuitos ZK (conocimiento cero). Noir prioriza la seguridad, la simplicidad y el rendimiento. Proporciona una sintaxis de alto nivel, similar a la de Rust, que abstrae la seguridad criptográfica y simplifica el uso de primitivas criptográficas al tiempo que mantiene un alto rendimiento.
Posibilidades de escalado con ZK Proof
Una ventaja de Noir es que tiene el potencial de ampliar la gama de aplicaciones que pueden aprovechar las características de preservación de la privacidad proporcionadas por las pruebas ZK. Estas pruebas mejoran la privacidad y proporcionan una verificación eficiente. Noir se compila en una representación intermedia llamada Representación Intermedia de Circuito Abstracto (Acer), que se puede compilar en un sistema de restricciones llamado R1CS (restricción de rango uno). Este desacoplamiento del sistema de prueba de back-end del lenguaje permite a Noir admitir una variedad de sistemas de prueba, incluidos Aztec Brettenberg, Turbo Plonk y, potencialmente, futuras integraciones como Groth16 y Halo 2.
Optimización y biblioteca estándar
Los desarrolladores pueden optimizar los circuitos en el nivel del sistema de atestación para mejorar la velocidad, la seguridad y una variedad de características de la aplicación aprovechando las puertas personalizadas, un tipo de puerta lógica diseñada específicamente para realizar operaciones criptográficas de manera eficiente y segura. El lenguaje proporciona una biblioteca estándar con funciones optimizadas como las comprobaciones SHA-256 y Pedersen-Merkle, que utilizan los compromisos de Pedersen y los árboles de Merkle para verificar la integridad y la coherencia de los datos.
!
Gráficos que muestran la sintaxis del lenguaje negro### Organización del código y habilidades de presentación
Noir admite la organización del código a través de módulos y cajas externas, lo que facilita la creación de bibliotecas para programas Noir. Proporciona tipos de datos compuestos, como matrices, tuplas y estructuras, lo que permite a los desarrolladores agrupar datos e implementar funciones comunes. El lenguaje también admite estructuras de flujo de control, como bucles for, instrucciones if y operadores lógicos y bit a bit. Los genéricos y las funciones de primer orden se están desarrollando activamente para mejorar aún más las capacidades expresivas del Noir.
Es importante tener en cuenta que el Noir sigue evolucionando. Puede tener algunas limitaciones y posibles errores. El equipo de desarrollo está constantemente iterando en el lenguaje y está comprometido con la mejora continua.
o1js
o1js[10] es una biblioteca de tipos diseñada por (0)1Labs para escribir contratos inteligentes utilizando el lenguaje de programación Snark. Aprovecha las tecnologías abiertas existentes, como Node, .js y navegadores, para hacerlo más accesible y conveniente para los desarrolladores. Al basarse en Type, o1js permite a los desarrolladores aprovechar sus conocimientos existentes sobre las bibliotecas y herramientas de Java y Type.
Integraciones
o1js se integra a la perfección con las bibliotecas y herramientas de Java y Type, lo que proporciona a los desarrolladores potentes funciones y un amplio soporte de la comunidad. Esta integración aumenta la productividad y reduce la curva de aprendizaje para adoptar nuevos entornos de desarrollo.
Soporte de VS Code
Proporciona compatibilidad con Visual Studio Code (VS Code), un editor de código popular. Los desarrolladores pueden aprovechar características como la finalización de código, el resaltado de sintaxis y la depuración para mejorar la experiencia de desarrollo general.
Biblioteca estándar
O1JS proporciona una biblioteca estándar completa que incluye tipos básicos como elementos de dominio, un-64, un-32, claves públicas, claves privadas y firmas. Estos tipos vienen con métodos integrados que simplifican el manejo de esquemas de cifrado, datos opcionales, booleanos y curvas elípticas.
Circom
Circom, abreviatura de Circuit Compiler, es un potente lenguaje específico de dominio (DSL) diseñado para el desarrollo de circuitos de prueba de conocimiento cero (ZKP), creado por Jordi Balyna y el equipo de iden3.
Definición de circuito expresivo
Con su sintaxis expresiva, Circom permite a los desarrolladores definir circuitos para aplicaciones ZKP de una manera precisa y clara. Sin embargo, la sintaxis y la semántica de Circom pueden ser difíciles de entender para aquellos que son nuevos en Circom y para aquellos que no están familiarizados con los conceptos de DSL o ZKP. Para los desarrolladores de circuitos novatos o los desarrolladores con experiencia en lenguajes de programación de propósito general, puede requerir esfuerzo y tiempo adicionales.
Límites de alcance
Si bien Circom sobresale en el desarrollo de circuitos ZKP, es importante tener en cuenta que sus características se centran principalmente en esta área en particular. Como resultado, los desarrolladores que buscan un lenguaje de propósito más general para manejar una amplia gama de tareas informáticas pueden encontrar Circom algo limitado. Para satisfacer necesidades de desarrollo más amplias, puede ser necesario utilizar Circom junto con otros lenguajes de programación o marcos.
Una explicación de cómo funciona Circom. ### Herramientas y limitaciones del ecosistema
Circom está respaldado por una variedad de herramientas de desarrollo y tiene un ecosistema en crecimiento, aunque la disponibilidad de sus herramientas y recursos aún puede ser relativamente limitada en comparación con los lenguajes y marcos de programación más establecidos. Los desarrolladores pueden tener dificultades para encontrar documentación completa, bibliotecas y soporte de la comunidad para casos de uso específicos o funciones avanzadas. Esta limitación puede tener un impacto en la velocidad de desarrollo de Circom y en la adopción por parte de la comunidad.
Consideraciones de compatibilidad
La compatibilidad de Circom se centra principalmente en los sistemas populares de prueba de conocimiento cero como snarkjs y libsnark. Si bien esto le permite integrarse sin problemas con estos sistemas, también introduce dependencias en sus características y limitaciones específicas. Los desarrolladores que prefieran o necesiten otros sistemas ZKP pueden experimentar problemas de compatibilidad o requerir un esfuerzo adicional para adaptar e integrar los circuitos generados por Circom en sus sistemas preferidos.
Leo
Leo[11] es un lenguaje de programación diseñado específicamente para el desarrollo de aplicaciones de prueba de conocimiento cero. Su objetivo es proporcionar un entorno fácil de usar para los desarrolladores, especialmente para aquellos con experiencia previa en el ecosistema blockchain. LEO es similar a Rust y tiene algunos elementos similares a Java diseñados para crear familiaridad y conveniencia en el desarrollo de aplicaciones.
Una característica notable de Leo es su compilador, que convierte los programas en un formato de prueba de bajo nivel llamado R1CS. Lo que distingue al compilador Leo es el riguroso proceso de verificación formal al que se somete. Esta comprobación es necesaria porque pueden producirse errores en varias fases, como la programación, la auditoría y la compilación. Al garantizar matemáticamente que el compilador sigue la intención del programador, Leo tiene como objetivo minimizar el riesgo de que los errores se pasen por alto o se exploten, especialmente en contextos L2, ZK-rollups o programas propietarios en la plataforma LEO.
La gramática de la lengua Leo reconoce que, a pesar de los mejores esfuerzos, los errores son inevitables, y el equipo de Leo enfatiza la importancia de la prevención y detección temprana de errores, especialmente en los sistemas que se ocupan de transferencias de valor importantes. Para solucionar este problema, la arquitectura del compilador formalmente validada de Leo inyecta confianza adicional y reduce la probabilidad de desviaciones no deseadas del comportamiento esperado del programa.
Además del lenguaje y el compilador, Leo ofrece una variedad de herramientas y características de experiencia de desarrollador. Estos componentes están diseñados para mejorar el proceso de desarrollo, simplificar las tareas y aumentar la eficiencia. Basándose en siete años de experiencia y observando la evolución del ecosistema Ethereum, el equipo de Leo tiene como objetivo proporcionar un entorno fácil de usar similar a la evolución de herramientas como exploradores, marcos de implementación como Truffle y Ganache, y otros recursos que simplifican el desarrollo y las pruebas de aplicaciones.
El Cairo
El Cairo[12] Proporciona una sintaxis que simplifica el proceso de creación de circuitos ZKP. Inspirándose en los lenguajes de programación tradicionales, Cairo permite a los desarrolladores aprovechar sus habilidades de programación existentes al diseñar sistemas ZK. A través de su enfoque declarativo, Cairo permite normalizar declaraciones lógicas y cálculos, lo que facilita la representación de escenarios del mundo real en el contexto de pruebas de conocimiento cero.
Eficiencia y escalabilidad
El rendimiento es un factor clave en el sistema ZK. Cairo resuelve este problema centrándose en la eficiencia y la escalabilidad. El lenguaje emplea técnicas de optimización como la reducción de restricciones y la eliminación de bucles para minimizar la sobrecarga computacional asociada con los circuitos ZKP. Al optimizar el diseño del circuito, Cairo logra una generación y verificación de pruebas más rápida para aplicaciones que requieren un alto rendimiento y baja latencia.
Interoperabilidad e integración
Cairo está diseñado para integrarse con la infraestructura de software existente, lo que permite a los desarrolladores combinar las capacidades de ZKP con otras tecnologías. El lenguaje admite la interoperabilidad a través de interfaces estándar, lo que permite la integración con plataformas blockchain, contratos inteligentes y sistemas fuera de la cadena. Esta flexibilidad abre la puerta a la posibilidad de implementar características de privacidad mejoradas en aplicaciones descentralizadas, sistemas financieros y protocolos de validación de datos.
Arquitectura de CPU SNARK de Cairo en un ejemplo ### Comunidad y ecosistema
El proyecto Cairo fomenta una comunidad de desarrolladores, investigadores y entusiastas que contribuyen a su desarrollo. La disponibilidad de documentación, tutoriales y código de muestra ayuda en el proceso de incorporación, lo que permite a los desarrolladores comprender conceptos y comenzar a construir sistemas ZK. Además, El Cairo se beneficia del ecosistema más amplio de StarkWare, que proporciona apoyo, herramientas y avances en investigación para mejorar el idioma y sus capacidades.
Acecho
Agazaparse[13] Su objetivo es resolver las limitaciones de los SNARK y circuitos tradicionales aprovechando Lisp, un lenguaje de programación funcional, para implementar circuitos de propósito general. Usando Lisp, Lurk introduce una función genérica llamada "" que puede evaluar cualquier expresión de datos en un circuito snark.
El código es un dato, un dato es un código
Uno de los principios básicos de Lurk es representar un programa como datos con contenido direccionable. Este enfoque permite una evaluación y validación eficientes de los programas de Lurk. La direccionabilidad del contenido simplifica el proceso de análisis, y los datos resultantes se pueden utilizar directamente en los probadores SNARK sin necesidad de un paso de compilación independiente.
Implementando Lisp en SNARKs
Para crear un circuito de propósito general, Lurk aprovechó los "contras" del asignador de memoria de Lisp. El asignador combina dos expresiones y genera una referencia a la expresión resultante mediante hash. Al demostrar que dos expresiones tienen un hash en la misma referencia, Lurk puede realizar cálculos en un circuito snark.
Continuación del estilo de pase
Lurk emplea el Estilo de Pase de Continuidad (CPS), que divide el proceso de evaluación en pasos manejables. Cada paso de evaluación se convierte en un cálculo procesable, lo que permite una ejecución uniforme y eficiente. La inclusión de continuaciones explícitas en los circuitos SNARK ayuda a pasar por el proceso de evaluación paso a paso.
Le da a Turing plenitud y habilidades recursivas
Al emplear Lisp, Lurk logra la completitud de Turing y admite la recursividad infinita en los circuitos SNARK. Esta importante capacidad permite la prueba de cálculos complejos y la implementación de circuitos de propósito general capaces de realizar cálculos arbitrarios.
Efectos y aplicaciones
Las capacidades de Lurk tienen implicaciones de gran alcance. Al admitir la recursividad infinita, los cíclicos y los flujos controlados condicionalmente, Lurk permite cálculos complejos en circuitos SNARK. Esto abre una variedad de aplicaciones para cálculos de verificación, procesamiento de datos privados y la ejecución de programas Turing-completos.
Conclusión
La elección de lenguajes específicos de dominio (DSL) es diversa y se espera que continúe creciendo a medida que los casos de uso de pruebas de conocimiento cero (ZK) continúen expandiéndose en los ecosistemas de blockchain. Por el momento, la carrera por establecer un lenguaje dominante para la creación de aplicaciones ZK aún se encuentra en sus primeras etapas, lo que sugiere que podemos esperar más mejoras en esta área.
Sin embargo, una limitación común de la mayoría de los DSL es la falta de efectos de red de grandes comunidades y bibliotecas sólidas. Tener una comunidad vibrante y bibliotecas completas puede mejorar en gran medida la experiencia del desarrollador. Si bien esta deficiencia puede abordarse con el tiempo, es importante que los equipos involucrados en el desarrollo de DSL prioricen la compatibilidad con otras bibliotecas, tomando prestado el enfoque adoptado por o1js.
Al garantizar la compatibilidad con las bibliotecas existentes, los DSL pueden aprovechar el conocimiento y los recursos colectivos de la comunidad de desarrolladores en general, lo que permite una integración más fácil, un desarrollo más rápido y una mayor flexibilidad en la implementación de aplicaciones ZK. Este enfoque colaborativo fomentará el desarrollo de un ecosistema más sólido en torno a los DSL en beneficio de los desarrolladores y, en última instancia, impulsará la adopción y la 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.
ZK Language Survey: Noir, o1js, Circom, Leo, Cairo, Lurk
Introducción
Pruebas de lenguaje específico de dominio (DSL) en conocimiento cero (ZK).[4] desempeña un papel vital en el campo. En esencia, las pruebas ZK resuelven el desafío de probar la existencia de ciertos atributos en datos secretos sin revelar ninguna información adicional. Sin embargo, traducir ideas de alto nivel en pruebas concretas puede ser complejo. Aquí es donde entran en juego los DSL, que unen conceptos abstractos con la representación de los circuitos necesarios para probar el sistema.
Sistema de prueba[5] es un método o acuerdo que permite a una parte probar la validez de una declaración o reclamación a otra parte sin revelar ninguna información confidencial. Se trata de un conjunto de reglas y procedimientos que permiten al probador convencer al verificador de la veracidad de una determinada afirmación, como la exactitud de un cálculo o la posesión de ciertos conocimientos, sin revelar ningún secreto o dato subyacente.
Sin embargo, los sistemas de prueba no pueden tratar directamente con conceptos de alto nivel. En su lugar, deben convertirse en circuitos que representen las propiedades deseadas. Este cambio de conceptos de alto nivel a circuitos presenta desafíos. Aquí es donde entra en juego el lenguaje de los circuitos. Los lenguajes de circuito resuelven este problema al proporcionar una forma estructurada y formal de expresar ideas de alto nivel.
Durante la última década, ha habido un aumento significativo en el número y la diversidad de los idiomas de circuito. El desarrollo de muchos lenguajes de circuito, como el noir, el Cairo[6] y Leo, lo que indica qué tan activo es el campo. Esta proliferación de lenguas nos permite comparar y contrastar sus características, similitudes y diferencias. Un examen exhaustivo de estos idiomas proporciona una comprensión más profunda del panorama general de los idiomas de circuito.
TLDR;
Noir - Desarrollado por Aztec, abstrae la complejidad de la criptografía y hace posible que los desarrolladores de cualquier experiencia escriban circuitos ZK.
– o1js – Una biblioteca de tipos desarrollada por O(1) Labs. Permite a los desarrolladores escribir contratos inteligentes. Se integra bien con las bibliotecas y herramientas existentes de Java y Type.
**– **Circom**[7] ** – Diseñado para el desarrollo de circuitos ZKP. Aportando precisión y claridad, sus características se centran principalmente en esta área en particular.
– Leo – Proporciona un entorno fácil de usar para los desarrolladores. Se utiliza una arquitectura de compilador validada formalmente con un enfoque en la detección temprana y prevención de errores.
**–**El Cairo**[8] ** – Énfasis en la eficiencia y la escalabilidad. La interoperabilidad se admite a través de interfaces estándar que se pueden integrar con plataformas blockchain, contratos inteligentes y sistemas fuera de la cadena.
Lurk – Resuelve las limitaciones de los SNARKs tradicionales aprovechando Lisp para implementar un circuito común.
Glosario
Ya que hablaremos de conceptos técnicos, aquí hay un glosario de algunos de los términos complejos que puede encontrar en los textos posteriores:
Representación Intermedia de Circuitos (Acer) :* Representación intermedia del circuito ZK utilizado por Noir que puede ser compilado en un sistema de restricción de primer orden (R1CS).
• Puertas personalizadas: Puertas lógicas especializadas diseñadas para operaciones criptográficas eficientes y seguras en circuitos ZK.
• SHA-256: una función hash criptográfica que toma una entrada y produce una salida de tamaño fijo.
Comprobación de Pedersen-Merkle: Utilizando la Promesa de Pedersen y las técnicas de verificación criptográfica de Merkle Tree, se puede verificar la integridad y la coherencia de los datos.
• Completitud de Turing: Propiedad de un sistema informático que puede emular una máquina de Turing y ser capaz de resolver cualquier problema computable con tiempo y recursos suficientes.
El Estilo de Aprobación de Continuación (CPS) :* una técnica de programación que divide el proceso de evaluación en pasos manejables para una ejecución uniforme y eficiente.
Elementos de campo :* elementos en un campo matemático finito, comúnmente utilizados en esquemas y cálculos criptográficos.
Negro
Negro[9] es un Lenguaje Específico de Dominio (DSL) diseñado por Aztec para simplificar la creación de circuitos y programas ZK sin necesidad de tener amplios conocimientos de criptografía o convertirse en criptógrafo. Su objetivo principal es permitir a los desarrolladores de cualquier origen escribir circuitos ZK (conocimiento cero). Noir prioriza la seguridad, la simplicidad y el rendimiento. Proporciona una sintaxis de alto nivel, similar a la de Rust, que abstrae la seguridad criptográfica y simplifica el uso de primitivas criptográficas al tiempo que mantiene un alto rendimiento.
Posibilidades de escalado con ZK Proof
Una ventaja de Noir es que tiene el potencial de ampliar la gama de aplicaciones que pueden aprovechar las características de preservación de la privacidad proporcionadas por las pruebas ZK. Estas pruebas mejoran la privacidad y proporcionan una verificación eficiente. Noir se compila en una representación intermedia llamada Representación Intermedia de Circuito Abstracto (Acer), que se puede compilar en un sistema de restricciones llamado R1CS (restricción de rango uno). Este desacoplamiento del sistema de prueba de back-end del lenguaje permite a Noir admitir una variedad de sistemas de prueba, incluidos Aztec Brettenberg, Turbo Plonk y, potencialmente, futuras integraciones como Groth16 y Halo 2.
Optimización y biblioteca estándar
Los desarrolladores pueden optimizar los circuitos en el nivel del sistema de atestación para mejorar la velocidad, la seguridad y una variedad de características de la aplicación aprovechando las puertas personalizadas, un tipo de puerta lógica diseñada específicamente para realizar operaciones criptográficas de manera eficiente y segura. El lenguaje proporciona una biblioteca estándar con funciones optimizadas como las comprobaciones SHA-256 y Pedersen-Merkle, que utilizan los compromisos de Pedersen y los árboles de Merkle para verificar la integridad y la coherencia de los datos.
!
Gráficos que muestran la sintaxis del lenguaje negro### Organización del código y habilidades de presentación
Noir admite la organización del código a través de módulos y cajas externas, lo que facilita la creación de bibliotecas para programas Noir. Proporciona tipos de datos compuestos, como matrices, tuplas y estructuras, lo que permite a los desarrolladores agrupar datos e implementar funciones comunes. El lenguaje también admite estructuras de flujo de control, como bucles for, instrucciones if y operadores lógicos y bit a bit. Los genéricos y las funciones de primer orden se están desarrollando activamente para mejorar aún más las capacidades expresivas del Noir.
Es importante tener en cuenta que el Noir sigue evolucionando. Puede tener algunas limitaciones y posibles errores. El equipo de desarrollo está constantemente iterando en el lenguaje y está comprometido con la mejora continua.
o1js
o1js[10] es una biblioteca de tipos diseñada por (0)1Labs para escribir contratos inteligentes utilizando el lenguaje de programación Snark. Aprovecha las tecnologías abiertas existentes, como Node, .js y navegadores, para hacerlo más accesible y conveniente para los desarrolladores. Al basarse en Type, o1js permite a los desarrolladores aprovechar sus conocimientos existentes sobre las bibliotecas y herramientas de Java y Type.
Integraciones
o1js se integra a la perfección con las bibliotecas y herramientas de Java y Type, lo que proporciona a los desarrolladores potentes funciones y un amplio soporte de la comunidad. Esta integración aumenta la productividad y reduce la curva de aprendizaje para adoptar nuevos entornos de desarrollo.
Soporte de VS Code
Proporciona compatibilidad con Visual Studio Code (VS Code), un editor de código popular. Los desarrolladores pueden aprovechar características como la finalización de código, el resaltado de sintaxis y la depuración para mejorar la experiencia de desarrollo general.
Biblioteca estándar
O1JS proporciona una biblioteca estándar completa que incluye tipos básicos como elementos de dominio, un-64, un-32, claves públicas, claves privadas y firmas. Estos tipos vienen con métodos integrados que simplifican el manejo de esquemas de cifrado, datos opcionales, booleanos y curvas elípticas.
Circom
Circom, abreviatura de Circuit Compiler, es un potente lenguaje específico de dominio (DSL) diseñado para el desarrollo de circuitos de prueba de conocimiento cero (ZKP), creado por Jordi Balyna y el equipo de iden3.
Definición de circuito expresivo
Con su sintaxis expresiva, Circom permite a los desarrolladores definir circuitos para aplicaciones ZKP de una manera precisa y clara. Sin embargo, la sintaxis y la semántica de Circom pueden ser difíciles de entender para aquellos que son nuevos en Circom y para aquellos que no están familiarizados con los conceptos de DSL o ZKP. Para los desarrolladores de circuitos novatos o los desarrolladores con experiencia en lenguajes de programación de propósito general, puede requerir esfuerzo y tiempo adicionales.
Límites de alcance
Si bien Circom sobresale en el desarrollo de circuitos ZKP, es importante tener en cuenta que sus características se centran principalmente en esta área en particular. Como resultado, los desarrolladores que buscan un lenguaje de propósito más general para manejar una amplia gama de tareas informáticas pueden encontrar Circom algo limitado. Para satisfacer necesidades de desarrollo más amplias, puede ser necesario utilizar Circom junto con otros lenguajes de programación o marcos.
Una explicación de cómo funciona Circom. ### Herramientas y limitaciones del ecosistema
Circom está respaldado por una variedad de herramientas de desarrollo y tiene un ecosistema en crecimiento, aunque la disponibilidad de sus herramientas y recursos aún puede ser relativamente limitada en comparación con los lenguajes y marcos de programación más establecidos. Los desarrolladores pueden tener dificultades para encontrar documentación completa, bibliotecas y soporte de la comunidad para casos de uso específicos o funciones avanzadas. Esta limitación puede tener un impacto en la velocidad de desarrollo de Circom y en la adopción por parte de la comunidad.
Consideraciones de compatibilidad
La compatibilidad de Circom se centra principalmente en los sistemas populares de prueba de conocimiento cero como snarkjs y libsnark. Si bien esto le permite integrarse sin problemas con estos sistemas, también introduce dependencias en sus características y limitaciones específicas. Los desarrolladores que prefieran o necesiten otros sistemas ZKP pueden experimentar problemas de compatibilidad o requerir un esfuerzo adicional para adaptar e integrar los circuitos generados por Circom en sus sistemas preferidos.
Leo
Leo[11] es un lenguaje de programación diseñado específicamente para el desarrollo de aplicaciones de prueba de conocimiento cero. Su objetivo es proporcionar un entorno fácil de usar para los desarrolladores, especialmente para aquellos con experiencia previa en el ecosistema blockchain. LEO es similar a Rust y tiene algunos elementos similares a Java diseñados para crear familiaridad y conveniencia en el desarrollo de aplicaciones.
Una característica notable de Leo es su compilador, que convierte los programas en un formato de prueba de bajo nivel llamado R1CS. Lo que distingue al compilador Leo es el riguroso proceso de verificación formal al que se somete. Esta comprobación es necesaria porque pueden producirse errores en varias fases, como la programación, la auditoría y la compilación. Al garantizar matemáticamente que el compilador sigue la intención del programador, Leo tiene como objetivo minimizar el riesgo de que los errores se pasen por alto o se exploten, especialmente en contextos L2, ZK-rollups o programas propietarios en la plataforma LEO.
La gramática de la lengua Leo reconoce que, a pesar de los mejores esfuerzos, los errores son inevitables, y el equipo de Leo enfatiza la importancia de la prevención y detección temprana de errores, especialmente en los sistemas que se ocupan de transferencias de valor importantes. Para solucionar este problema, la arquitectura del compilador formalmente validada de Leo inyecta confianza adicional y reduce la probabilidad de desviaciones no deseadas del comportamiento esperado del programa.
Además del lenguaje y el compilador, Leo ofrece una variedad de herramientas y características de experiencia de desarrollador. Estos componentes están diseñados para mejorar el proceso de desarrollo, simplificar las tareas y aumentar la eficiencia. Basándose en siete años de experiencia y observando la evolución del ecosistema Ethereum, el equipo de Leo tiene como objetivo proporcionar un entorno fácil de usar similar a la evolución de herramientas como exploradores, marcos de implementación como Truffle y Ganache, y otros recursos que simplifican el desarrollo y las pruebas de aplicaciones.
El Cairo
El Cairo[12] Proporciona una sintaxis que simplifica el proceso de creación de circuitos ZKP. Inspirándose en los lenguajes de programación tradicionales, Cairo permite a los desarrolladores aprovechar sus habilidades de programación existentes al diseñar sistemas ZK. A través de su enfoque declarativo, Cairo permite normalizar declaraciones lógicas y cálculos, lo que facilita la representación de escenarios del mundo real en el contexto de pruebas de conocimiento cero.
Eficiencia y escalabilidad
El rendimiento es un factor clave en el sistema ZK. Cairo resuelve este problema centrándose en la eficiencia y la escalabilidad. El lenguaje emplea técnicas de optimización como la reducción de restricciones y la eliminación de bucles para minimizar la sobrecarga computacional asociada con los circuitos ZKP. Al optimizar el diseño del circuito, Cairo logra una generación y verificación de pruebas más rápida para aplicaciones que requieren un alto rendimiento y baja latencia.
Interoperabilidad e integración
Cairo está diseñado para integrarse con la infraestructura de software existente, lo que permite a los desarrolladores combinar las capacidades de ZKP con otras tecnologías. El lenguaje admite la interoperabilidad a través de interfaces estándar, lo que permite la integración con plataformas blockchain, contratos inteligentes y sistemas fuera de la cadena. Esta flexibilidad abre la puerta a la posibilidad de implementar características de privacidad mejoradas en aplicaciones descentralizadas, sistemas financieros y protocolos de validación de datos.
Arquitectura de CPU SNARK de Cairo en un ejemplo ### Comunidad y ecosistema
El proyecto Cairo fomenta una comunidad de desarrolladores, investigadores y entusiastas que contribuyen a su desarrollo. La disponibilidad de documentación, tutoriales y código de muestra ayuda en el proceso de incorporación, lo que permite a los desarrolladores comprender conceptos y comenzar a construir sistemas ZK. Además, El Cairo se beneficia del ecosistema más amplio de StarkWare, que proporciona apoyo, herramientas y avances en investigación para mejorar el idioma y sus capacidades.
Acecho
Agazaparse[13] Su objetivo es resolver las limitaciones de los SNARK y circuitos tradicionales aprovechando Lisp, un lenguaje de programación funcional, para implementar circuitos de propósito general. Usando Lisp, Lurk introduce una función genérica llamada "" que puede evaluar cualquier expresión de datos en un circuito snark.
El código es un dato, un dato es un código
Uno de los principios básicos de Lurk es representar un programa como datos con contenido direccionable. Este enfoque permite una evaluación y validación eficientes de los programas de Lurk. La direccionabilidad del contenido simplifica el proceso de análisis, y los datos resultantes se pueden utilizar directamente en los probadores SNARK sin necesidad de un paso de compilación independiente.
Implementando Lisp en SNARKs
Para crear un circuito de propósito general, Lurk aprovechó los "contras" del asignador de memoria de Lisp. El asignador combina dos expresiones y genera una referencia a la expresión resultante mediante hash. Al demostrar que dos expresiones tienen un hash en la misma referencia, Lurk puede realizar cálculos en un circuito snark.
Continuación del estilo de pase
Lurk emplea el Estilo de Pase de Continuidad (CPS), que divide el proceso de evaluación en pasos manejables. Cada paso de evaluación se convierte en un cálculo procesable, lo que permite una ejecución uniforme y eficiente. La inclusión de continuaciones explícitas en los circuitos SNARK ayuda a pasar por el proceso de evaluación paso a paso.
Le da a Turing plenitud y habilidades recursivas
Al emplear Lisp, Lurk logra la completitud de Turing y admite la recursividad infinita en los circuitos SNARK. Esta importante capacidad permite la prueba de cálculos complejos y la implementación de circuitos de propósito general capaces de realizar cálculos arbitrarios.
Efectos y aplicaciones
Las capacidades de Lurk tienen implicaciones de gran alcance. Al admitir la recursividad infinita, los cíclicos y los flujos controlados condicionalmente, Lurk permite cálculos complejos en circuitos SNARK. Esto abre una variedad de aplicaciones para cálculos de verificación, procesamiento de datos privados y la ejecución de programas Turing-completos.
Conclusión
La elección de lenguajes específicos de dominio (DSL) es diversa y se espera que continúe creciendo a medida que los casos de uso de pruebas de conocimiento cero (ZK) continúen expandiéndose en los ecosistemas de blockchain. Por el momento, la carrera por establecer un lenguaje dominante para la creación de aplicaciones ZK aún se encuentra en sus primeras etapas, lo que sugiere que podemos esperar más mejoras en esta área.
Sin embargo, una limitación común de la mayoría de los DSL es la falta de efectos de red de grandes comunidades y bibliotecas sólidas. Tener una comunidad vibrante y bibliotecas completas puede mejorar en gran medida la experiencia del desarrollador. Si bien esta deficiencia puede abordarse con el tiempo, es importante que los equipos involucrados en el desarrollo de DSL prioricen la compatibilidad con otras bibliotecas, tomando prestado el enfoque adoptado por o1js.
Al garantizar la compatibilidad con las bibliotecas existentes, los DSL pueden aprovechar el conocimiento y los recursos colectivos de la comunidad de desarrolladores en general, lo que permite una integración más fácil, un desarrollo más rápido y una mayor flexibilidad en la implementación de aplicaciones ZK. Este enfoque colaborativo fomentará el desarrollo de un ecosistema más sólido en torno a los DSL en beneficio de los desarrolladores y, en última instancia, impulsará la adopción y la eficacia de la tecnología ZK.