ZK Language Survey : Noir, o1js, Circom, Leo, Cairo, Lurk

Présentation

Preuves DSL (Domain-Specific Language) à connaissance nulle (ZK).[4] joue un rôle essentiel sur le terrain. À la base, les preuves ZK résolvent le défi de prouver l’existence de certains attributs dans les données secrètes sans révéler d’informations supplémentaires. Cependant, traduire des idées de haut niveau en preuves concrètes peut s’avérer complexe. C’est là que les DSL entrent en jeu, faisant le pont entre des concepts abstraits et la représentation des circuits nécessaires pour prouver le système.

Système d’épreuve[5] est une méthode ou un accord qui permet à une partie de prouver la validité d’une déclaration ou d’une revendication à une autre partie sans révéler d’informations sensibles. Il s’agit d’un ensemble de règles et de procédures qui permettent au prouveur de convaincre le vérificateur de la véracité d’une certaine affirmation, comme l’exactitude d’un calcul ou la possession de certaines connaissances, sans révéler de secrets ou de données sous-jacents.

Cependant, les systèmes de preuve ne peuvent pas traiter directement des concepts de haut niveau. Au lieu de cela, ils doivent être convertis en circuits qui représentent les propriétés souhaitées. Ce passage de concepts de haut niveau à des circuits présente des défis. C’est là que le langage des circuits entre en jeu. Les langages de circuit résolvent ce problème en fournissant un moyen structuré et formel d’exprimer des idées de haut niveau.

Au cours de la dernière décennie, il y a eu une augmentation significative du nombre et de la diversité des langues de circuit. Le développement de nombreux langages de circuit, tels que le noir, le caire[6] et Leo, indiquant à quel point le champ est actif. Cette prolifération de langues nous permet de comparer et de contraster leurs caractéristiques, leurs similitudes et leurs différences. Un examen complet de ces langages permet de mieux comprendre l’ensemble du paysage linguistique des circuits.

TLDR ;

Noir – Développé par Aztec, il fait abstraction de la complexité de la cryptographie et permet aux développeurs de tous horizons d’écrire des circuits ZK.

– o1js – Une bibliothèque de types développée par O(1) Labs. Permet aux développeurs d’écrire des contrats intelligents. S’intègre bien aux bibliothèques et outils Java et Type existants.

**– **Circom**[7] ** – Conçu pour le développement de circuits ZKP. Apportant précision et clarté, ses fonctionnalités sont principalement axées sur ce domaine particulier.

– Leo – Fournit un environnement convivial pour les développeurs. Une architecture de compilateur formellement validée est utilisée en mettant l’accent sur la détection et la prévention précoces des erreurs.

**–**Le Caire**[8] ** – L’accent est mis sur l’efficacité et l’évolutivité. L’interopérabilité est prise en charge par des interfaces standard qui peuvent être intégrées aux plateformes blockchain, aux contrats intelligents et aux systèmes hors chaîne.

Lurk – Résout les limitations des SNARK traditionnels en tirant parti de Lisp pour implémenter un circuit commun.

Glossaire

Puisque nous aborderons des concepts techniques, voici un glossaire de certains des termes complexes que vous pourriez rencontrer dans les textes suivants :

Abstract Circuit Intermediate Representation (Acer) :* Représentation intermédiaire du circuit ZK utilisé par Noir qui peut être compilé dans un système de contraintes du premier ordre (R1CS).

• Portes personnalisées : Portes logiques spécialisées conçues pour des opérations cryptographiques efficaces et sécurisées dans les circuits ZK.

• SHA-256 : Une fonction de hachage cryptographique qui prend une entrée et produit une sortie de taille fixe.

Vérification de Pedersen-Merkle : En utilisant la promesse de Pedersen et les techniques de vérification cryptographique de l’arbre de Merkle, l’intégrité et la cohérence des données peuvent être vérifiées.

• Complétence de Turing : Propriété d’un système informatique capable d’émuler une machine de Turing et de résoudre n’importe quel problème calculable avec suffisamment de temps et de ressources.

Le Continuation Passing Style (CPS) :* une technique de programmation qui décompose le processus d’évaluation en étapes gérables pour une exécution uniforme et efficace.

Les éléments de champ :* éléments d’un corps mathématique fini, couramment utilisés dans les schémas et les calculs de cryptographie.

Noir

Noir[9] est un langage DSL (Domain Specific Language) conçu par Aztec pour simplifier la création de circuits ZK et de programmes ZK sans avoir besoin d’une connaissance approfondie de la cryptographie ou de devenir un cryptographe. Son objectif principal est de permettre aux développeurs de n’importe quel milieu d’écrire des circuits ZK (zero-knowledge). Noir privilégie la sécurité, la simplicité et la performance. Il fournit une syntaxe de haut niveau, semblable à celle de Rust, qui fait abstraction de la sécurité cryptographique et simplifie l’utilisation des primitives cryptographiques tout en maintenant des performances élevées.

Possibilités de mise à l’échelle avec ZK Proof

L’un des avantages de Noir est qu’il a le potentiel d’élargir la gamme d’applications qui peuvent tirer parti des fonctionnalités de préservation de la vie privée fournies par les preuves ZK. Ces preuves améliorent la confidentialité et fournissent une vérification efficace. Noir est compilé dans une représentation intermédiaire appelée Abstract Circuit Intermediate Representation (Acer), qui peut être compilée dans un système de contraintes appelé R1CS (contrainte de rang un). Ce découplage du système de preuve back-end du langage permet à Noir de prendre en charge une variété de systèmes de preuve, y compris Aztec Brettenberg, Turbo Plonk, et potentiellement de futures intégrations telles que Groth16 et Halo 2.

Optimisation et bibliothèque standard

Les développeurs peuvent optimiser les circuits au niveau du système d’attestation pour améliorer la vitesse, la sécurité et une variété de fonctionnalités d’application en tirant parti des portes personnalisées, un type de porte logique spécialement conçu pour effectuer des opérations cryptographiques de manière efficace et sécurisée. Le langage fournit une bibliothèque standard avec des fonctions optimisées telles que les vérifications SHA-256 et Pedersen-Merkle, qui utilisent les engagements de Pedersen et les arbres de Merkle pour vérifier l’intégrité et la cohérence des données.

! [](https://img-cdn.gateio.im/webp-social/moments-40baef27dd-627b2da8eb-dd1a6f-cd5cc0.webp « ! [Graphique montrant la grammaire de la langue noire »)

Graphiques montrant la syntaxe du langage Noir### Organisation du code et compétences de présentation

Noir prend en charge l’organisation du code par le biais de modules et de caisses externes, ce qui facilite la création de bibliothèques pour les programmes Noir. Il fournit des types de données composites tels que des tableaux, des tuples et des structures, ce qui permet aux développeurs de regrouper les données et d’implémenter des fonctions communes. Le langage prend également en charge les structures de flux de contrôle telles que les boucles for, les instructions if et les opérateurs logiques et binaires. Des génériques et des fonctions de premier ordre sont activement développés pour améliorer encore les capacités expressives de Noir.

Il est important de noter que Noir est toujours en évolution. Il peut avoir des limitations et des bogues potentiels. L’équipe de développement est constamment en train d’itérer sur le langage et s’engage à l’amélioration continue.

o1js

o1js[10] est une bibliothèque de types conçue par (0)1Labs pour l’écriture de contrats intelligents à l’aide du langage de programmation Snark. Il tire parti des technologies ouvertes existantes telles que Node .js et les navigateurs pour le rendre plus accessible et pratique pour les développeurs. En s’appuyant sur Type, o1js permet aux développeurs de tirer parti de leurs connaissances existantes des bibliothèques et des outils Java et Type.

Intégrations

o1js s’intègre de manière transparente aux bibliothèques et outils Java et Type, offrant aux développeurs des fonctionnalités puissantes et un support communautaire étendu. Cette intégration augmente la productivité et réduit la courbe d’apprentissage pour l’adoption de nouveaux environnements de développement.

Prise en charge du code VS

Il prend en charge Visual Studio Code (VS Code), un éditeur de code populaire. Les développeurs peuvent tirer parti de fonctionnalités telles que la complétion de code, la coloration syntaxique et le débogage pour améliorer l’expérience de développement globale.

Bibliothèque standard

O1JS fournit une bibliothèque standard complète qui comprend des types de base tels que les éléments de domaine, un-64, un-32, les clés publiques, les clés privées et les signatures. Ces types sont fournis avec des méthodes intégrées qui simplifient la gestion des schémas de chiffrement, des données facultatives, des booléens et des courbes elliptiques.

Circom

Circom, abréviation de Circuit Compiler, est un puissant langage DSL (Domain-Specific Language) conçu pour le développement de circuits ZKP (Zero-Knowledge Proof), créé par Jordi Balyna et l’équipe d’iden3.

Définition du circuit expressif

Grâce à sa syntaxe expressive, Circom permet aux développeurs de définir des circuits pour les applications ZKP de manière précise et claire. Cependant, la syntaxe et la sémantique de Circom peuvent être difficiles à comprendre pour ceux qui découvrent Circom et ceux qui ne sont pas familiers avec les concepts DSL ou ZKP. Pour les développeurs de circuits novices ou les développeurs ayant une formation dans les langages de programmation à usage général, cela peut nécessiter des efforts et du temps supplémentaires.

Limites de portée

Bien que Circom excelle dans le développement de circuits ZKP, il est important de noter que ses fonctionnalités sont principalement axées sur ce domaine particulier. Par conséquent, les développeurs à la recherche d’un langage plus polyvalent pour gérer un large éventail de tâches informatiques peuvent trouver Circom quelque peu limité. Pour répondre à des besoins de développement plus larges, il peut être nécessaire d’utiliser Circom en conjonction avec d’autres langages ou frameworks de programmation.

Une explication du fonctionnement de Circom. ### Outils et limites de l’écosystème

Circom est soutenu par une variété d’outils de développement et dispose d’un écosystème en pleine croissance, bien que la disponibilité de ses outils et de ses ressources puisse encore être relativement limitée par rapport aux langages de programmation et aux frameworks plus établis. Les développeurs peuvent avoir des difficultés à trouver une documentation complète, des bibliothèques et un support communautaire pour des cas d’utilisation spécifiques ou des fonctionnalités avancées. Cette limitation peut avoir un impact sur la vitesse de développement de Circom et son adoption par la communauté.

Considérations relatives à la compatibilité

La compatibilité de Circom est principalement axée sur les systèmes de preuve à divulgation nulle de connaissance populaires tels que snarkjs et libsnark. Bien que cela lui permette de s’intégrer de manière transparente à ces systèmes, il introduit également des dépendances sur leurs caractéristiques et limitations spécifiques. Les développeurs qui préfèrent ou ont besoin d’autres systèmes ZKP peuvent rencontrer des problèmes de compatibilité ou nécessiter des efforts supplémentaires pour adapter et intégrer les circuits générés par Circom dans leurs systèmes préférés.

Lion

Lion[11] est un langage de programmation spécialement conçu pour le développement d’applications de preuve à divulgation nulle de connaissance. Il vise à fournir un environnement convivial pour les développeurs, en particulier ceux qui ont une expérience préalable de l’écosystème blockchain. LEO est similaire à Rust et possède des éléments de type Java conçus pour créer de la familiarité et de la commodité dans le développement d’applications.

Une caractéristique notable de Leo est son compilateur, qui convertit les programmes dans un format de preuve de bas niveau appelé R1CS. Ce qui distingue le compilateur Leo, c’est le processus rigoureux de vérification formelle qu’il subit. Cette vérification est nécessaire car des erreurs peuvent se produire à différentes étapes, notamment la programmation, l’audit et la compilation. En s’assurant mathématiquement que le compilateur suit l’intention du programmeur, Leo vise à minimiser le risque que des erreurs soient négligées ou exploitées, en particulier dans les contextes L2, les ZK-rollups ou les programmes propriétaires de la plate-forme LEO.

La grammaire du langage Leo reconnaît que, malgré tous les efforts, les erreurs sont inévitables, et l’équipe Leo souligne l’importance de la prévention et de la détection précoces des erreurs, en particulier dans les systèmes traitant d’importants transferts de valeur. Pour remédier à ce problème, l’architecture du compilateur formellement validée de Leo injecte une confiance supplémentaire et réduit la probabilité d’écarts involontaires par rapport au comportement attendu du programme.

En plus du langage et du compilateur, Leo offre une variété d’outils et de fonctionnalités d’expérience de développement. Ces composants sont conçus pour améliorer le processus de développement, simplifier les tâches et augmenter l’efficacité. S’appuyant sur sept années d’expérience et observant l’évolution de l’écosystème Ethereum, l’équipe Leo vise à fournir un environnement convivial similaire à l’évolution d’outils tels que les explorateurs, les frameworks de déploiement tels que Truffle et Ganache, et d’autres ressources qui simplifient le développement et les tests d’applications.

Le Caire

Le Caire[12] Fournit une syntaxe qui simplifie le processus de construction des circuits ZKP. S’inspirant des langages de programmation traditionnels, Cairo permet aux développeurs de tirer parti de leurs compétences en programmation existantes lors de la conception de systèmes ZK. Grâce à son approche déclarative, Cairo permet de normaliser les énoncés logiques et les calculs, ce qui facilite la représentation de scénarios du monde réel dans le contexte de preuves à divulgation nulle de connaissance.

Efficacité et évolutivité

La performance est un facteur clé dans le système ZK. Le Caire résout ce problème en mettant l’accent sur l’efficacité et l’évolutivité. Le langage utilise des techniques d’optimisation telles que la réduction des contraintes et l’élimination des boucles pour minimiser la surcharge de calcul associée aux circuits ZKP. En optimisant la conception du circuit, Cairo accélère la génération et la vérification des preuves pour les applications qui nécessitent un débit élevé et une faible latence.

Interopérabilité et intégration

Cairo est conçu pour s’intégrer à l’infrastructure logicielle existante, ce qui permet aux développeurs de combiner les capacités de ZKP avec d’autres technologies. Le langage prend en charge l’interopérabilité via des interfaces standard, permettant l’intégration avec les plateformes blockchain, les contrats intelligents et les systèmes hors chaîne. Cette flexibilité ouvre la porte à la possibilité de mettre en œuvre des fonctionnalités de confidentialité améliorées dans les applications décentralisées, les systèmes financiers et les protocoles de validation des données.

L’architecture CPU Cairo SNARK en un exemple ### Communauté et écosystème

Le projet Cairo favorise une communauté de développeurs, de chercheurs et de passionnés qui contribuent à son développement. La disponibilité de la documentation, des didacticiels et des exemples de code facilite le processus d’intégration, permettant aux développeurs de saisir les concepts et de commencer à créer des systèmes ZK. En outre, Cairo bénéficie de l’écosystème plus large de StarkWare, qui fournit un soutien, des outils et des avancées de recherche pour améliorer le langage et ses capacités.

Rôder

Se cacher[13] Il vise à résoudre les limitations des SNARK et des circuits traditionnels en tirant parti de Lisp, un langage de programmation fonctionnel, pour implémenter des circuits à usage général. En utilisant Lisp, Lurk introduit une fonction générique appelée «  » qui peut évaluer n’importe quelle expression de données dans un circuit snark.

Le code est une donnée, les données sont un code

L’un des principes de base de Lurk est de représenter un programme sous forme de données avec un contenu adressable. Cette approche permet d’évaluer et de valider efficacement les programmes de Urrk. L’adressabilité du contenu simplifie le processus d’analyse, et les données résultantes peuvent être utilisées directement dans les prouveurs SNARK sans avoir besoin d’une étape de compilation séparée.

Implémentation de Lisp dans les SNARKs

Pour créer un circuit à usage général, Lurk s’est appuyé sur les « inconvénients » de l’allocateur de mémoire de Lisp. L’allocateur combine deux expressions et génère une référence à l’expression résultante par hachage. En prouvant que deux expressions sont hachées dans la même référence, Lurk peut effectuer des calculs dans un circuit snark.

Suite du style de passe

Lurk utilise le style de passage de continuité (CPS), qui décompose le processus d’évaluation en étapes gérables. Chaque étape d’évaluation devient un calcul traitable, permettant une exécution uniforme et efficace. L’inclusion de continuations explicites dans les circuits SNARK permet de suivre le processus d’évaluation étape par étape.

Donne à Turing la complétude et les capacités récursives

En utilisant Lisp, Lurk atteint la complétude de Turing et prend en charge la récursivité infinie dans les circuits SNARK. Cette capacité importante permet la preuve de calculs complexes et la mise en œuvre de circuits à usage général capables d’effectuer des calculs arbitraires.

Effets et applications

Les capacités de Lurk ont de vastes implications. En prenant en charge la récursivité infinie, les cycles et les écoulements contrôlés conditionnellement, Lurk permet des calculs complexes dans les circuits SNARK. Cela ouvre une variété d’applications pour les calculs de vérification, le traitement de données privées et l’exécution de programmes Turing-complets.

Conclusion

Le choix de langages spécifiques à un domaine (DSL) est diversifié et devrait continuer à croître à mesure que les cas d’utilisation des preuves à divulgation nulle de connaissance (ZK) continuent de s’étendre dans les écosystèmes de la blockchain. À l’heure actuelle, la course à l’établissement d’un langage dominant pour la création d’applications ZK n’en est qu’à ses débuts, ce qui suggère que nous pouvons nous attendre à de nouvelles améliorations dans ce domaine.

Cependant, une limitation commune à la plupart des DSL est l’absence d’effets de réseau provenant de grandes communautés et de bibliothèques robustes. Disposer d’une communauté dynamique et de bibliothèques complètes peut grandement améliorer l’expérience des développeurs. Bien que cette lacune puisse être corrigée au fil du temps, il est important pour les équipes impliquées dans le développement DSL de donner la priorité à la compatibilité avec d’autres bibliothèques, en empruntant l’approche adoptée par o1js.

En assurant la compatibilité avec les bibliothèques existantes, les DSL peuvent tirer parti des connaissances et des ressources collectives de la communauté des développeurs au sens large, ce qui facilite l’intégration, accélère le développement et offre une plus grande flexibilité dans la mise en œuvre des applications ZK. Cette approche collaborative favorisera le développement d’un écosystème plus fort autour des DSL au profit des développeurs et, en fin de compte, favorisera l’adoption et l’efficacité de la technologie ZK.

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • Commentaire
  • Partager
Commentaire
0/400
Aucun commentaire
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)