Un article sur le langage de programmation ZK

La preuve sans connaissance (ZKP) est un outil cryptographique puissant qui peut vérifier l'exactitude des calculs tout en protégeant la confidentialité des données d'entrée. En tant que partie intégrante de cette infrastructure critique, les langages spécifiques à un domaine (DSL) jouent un rôle essentiel dans la simplification du processus de développement et de vérification des circuits ZKP. Ils jouent un rôle important en reliant les concepts abstraits aux représentations de circuits précises nécessaires pour prouver le système, agissant comme un pont important entre les deux.

L’un des principaux défis de la démonstration de systèmes consiste à traduire des concepts abstraits de haut niveau en circuits réels. Cependant, l'émergence des DSL répond à ce défi en facilitant l'expression structurée de ces concepts abstraits d'une manière plus concrète et réalisable.

Au cours de la dernière décennie, nous avons assisté à une croissance significative du nombre et de la diversité des DSL. L'activité dans ce domaine se reflète dans le développement de divers langages de circuits, dont Noir, Leo, Zinc, etc. Que vous ayez besoin d'une option à usage général, comme Circom, ou d'une solution personnalisée pour une plate-forme spécifique, comme Cairo, vous pouvez choisir parmi une large gamme de langages et de frameworks pour écrire des circuits ZKP.

Dans cet article, nous explorerons les principaux langages de programmation ZK que les développeurs utilisent activement et analyserons les meilleures fonctionnalités de chaque langage.

TLDR ;

Un article sur le langage de programmation ZK

Le Caire par StarkWare

Cairo, le langage de base des programmes informatiques à usage général prenant en charge les preuves STARK, a joué un rôle clé dans le succès de StarkNet et StarkEx, en favorisant l'évolutivité des applications sur le réseau principal Ethereum. Il convient de mentionner que Le Caire a joué un rôle important dans la prise en charge de diverses applications, notamment dYdX, Sorare, Immutable X, etc. Le nom "Le Caire" vient de l'abréviation de "CPU Algebraic Intermediate Representation". Dans le domaine des preuves à connaissance nulle, il joue un rôle similaire au langage assembleur, facilitant la prise en main des développeurs familiarisés avec les langages de programmation de bas niveau tels que C, C++ ou Solidity.

Inspiré de Rust, Cairo permet aux développeurs de créer des contrats intelligents Starknet, en se concentrant sur la sécurité et le développement convivial. Cairo possède une syntaxe puissante qui simplifie la création de circuits ZK et permet aux utilisateurs d'effectuer diverses tâches dans les programmes Cairo. De plus, un avantage significatif de Cairo est son extensibilité, permettant l’introduction flexible de nouvelles fonctionnalités et capacités.

Dans les systèmes ZK, l’efficacité et l’évolutivité sont des facteurs cruciaux, et Cairo répond à cette exigence en mettant l’accent sur ces deux aspects. Le langage intègre des stratégies d'optimisation, notamment la réduction des contraintes et l'élimination des boucles, pour alléger la charge de calcul généralement associée aux circuits ZK. L'optimisation de la conception des circuits par Cairo permet une génération et une vérification plus rapides des preuves, ce qui le rend idéal pour les applications nécessitant un débit élevé et une latence minimale.

L'expansion du Caire a été impressionnante, avec une augmentation extraordinaire du nombre de développeurs à temps plein au cours des deux dernières années. Cette poussée met en évidence l’adaptabilité du Caire, car les utilisations du Caire ne se limitent pas à la blockchain mais sont importantes dans tout contexte où une vérification informatique est requise. En conséquence, nous pouvons nous attendre à une nouvelle croissance significative de l’adoption du Caire par les développeurs.

Le 28 septembre 2023, Starknet a lancé une mise à niveau importante de son langage de programmation Cairo v2.3.0. Cette version marque une avancée majeure dans la modularisation des contrats, augmentant le potentiel des contrats intelligents en introduisant de nouvelles fonctionnalités, options de stockage et gestion d'événements. L'intégration de ces composants offre un moyen flexible d'étendre la fonctionnalité du contrat, permettant à des modules tiers d'améliorer la fonctionnalité du contrat.

Zinc par ZkSync

Zinc est un langage de programmation conçu pour créer des contrats intelligents et des circuits SNARK sur la plateforme zkSync. Il utilise la syntaxe Rust, intègre des éléments de Solidity et offre des fonctionnalités uniques.

Ce qui rend Zinc unique, c'est sa convivialité. Vous n'avez pas besoin de comprendre tous les détails complexes des systèmes de contraintes de premier ordre (R1CS) pour écrire du code sécurisé. Le zinc met l’accent sur l’immuabilité, ce qui le rend intrinsèquement fonctionnel. Cela signifie qu'il donne la priorité aux données immuables et à l'évaluation des fonctions, réduisant ainsi les effets secondaires et favorisant l'écriture d'un code de contrat intelligent plus propre et moins sujet aux erreurs.

De plus, Zinc inclut des opérations mathématiques sûres pour éviter les débordements potentiels, garantissant ainsi la sécurité de toutes les opérations. Bien qu'il présente certaines limites, telles que l'absence de boucles infinies et de récursivité, Zinc simplifie le processus de débogage grâce au traçage des journaux de la console. Ces traces améliorent l'expérience de débogage en simplifiant le processus de suivi et de résolution des problèmes sur le réseau de test ou le réseau principal.

Noir Par Aztèque

Noir est un DSL open source développé par Aztec, basé sur Rust, conçu pour simplifier la création de circuits ZK et de programmes ZK sans connaissance approfondie de la cryptographie. Il est considéré comme l'un des langages les plus faciles à utiliser et convient à l'écriture d'applications ZK compatibles avec n'importe quel système de preuve. Noir se concentre sur la sécurité, la simplicité et les performances. Il fournit une syntaxe de haut niveau de type Rust qui fait abstraction de la sécurité cryptographique et simplifie l'utilisation des primitives cryptographiques de base tout en maintenant des performances élevées.

Noir présente des avantages significatifs en élargissant la gamme d'applications pouvant tirer parti des capacités de protection de la vie privée fournies par ZKP, améliorant ainsi l'efficacité de la confidentialité et de la vérification. Noir est compilé dans une représentation intermédiaire appelée Abstract Circuit Intermediate Representation (Acer), qui peut ensuite être compilée dans R1CS. Séparer le système de preuve backend du langage lui-même permet à Noir de prendre en charge une variété de systèmes de preuve, notamment Aztec Brettenberg, Turbo Plonk, et de potentielles intégrations futures telles que Groth16 et Halo2.

Le langage fournit une bibliothèque standard qui inclut des fonctionnalités efficaces telles que SHA-256 (une fonction de hachage cryptographique qui génère une sortie de taille fixe) et les contrôles Pedersen-Merkle (une méthode qui utilise les engagements de Pedersen et les arbres Merkle pour garantir l'intégrité des données et le cryptage cohérent. technologie de vérification). La conception de Noir est similaire à celle de Rust et inclut des fonctionnalités familières aux développeurs d'applications, telles que des fonctions, des sous-modules, des types (structs) définis par l'utilisateur, des conditions, des boucles et des constantes globales. De plus, des efforts continus sont déployés pour développer des fonctionnalités génériques et de première classe afin d'améliorer encore les capacités d'expression de Noir.

Il convient de noter que Noir est toujours un travail en cours et qu'il peut y avoir certaines limitations et bugs potentiels. Mais l’équipe de développement s’engage à améliorer et à optimiser continuellement le langage.

o1js par 0(1) Labs

o1js, anciennement connu sous le nom de SnarkyJS, est une bibliothèque de types développée par 0(1)Labs pour créer des contrats intelligents à l'aide du langage de programmation SNARK. Il exploite des technologies établies telles que Node.js et la compatibilité des navigateurs pour garantir un accès et une utilisation faciles aux développeurs.

o1js peut s'intégrer de manière transparente aux bibliothèques et outils Java et TypeScript, offrant aux développeurs un écosystème solide et un support communautaire étendu. Cette intégration simplifie le processus de développement et réduit la courbe d'apprentissage associée à l'adoption d'un nouvel environnement de développement. De plus, il prend entièrement en charge Visual Studio Code (VS Code), un éditeur de code largement utilisé qui permet aux développeurs de profiter pleinement 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.

o1js est essentiellement un framework ZK polyvalent qui vous fournit les outils clés dont vous avez besoin pour créer des preuves ZK. Il prend en charge la création de divers programmes ZK, couvrant une variété d'opérations prouvables intégrées, notamment l'arithmétique de base, le hachage, les signatures, les opérations booléennes, les comparaisons, etc. Avec le framework o1js, vous pouvez créer des zkApps sur le protocole Mina, des contrats intelligents exécutés côté client et dotés d'entrées privées.

Il convient de mentionner que début septembre 2023, l'équipe 0(1)Labs a annoncé qu'elle passerait de SnarkyJS à o1js et a souligné son engagement à améliorer les performances. Il convient de noter en particulier qu'ils ont obtenu une réduction de 3 à 4 fois du temps de chargement de la bibliothèque, qui fait référence au temps requis pour importer o1js, un processus qui peut bloquer le thread principal. Pour les applications Web, le temps de chargement est d'une grande importance à la fois pour le timing d'exécution Java et pour le rendu de la page entière. En outre, l'équipe a également mis à jour la CLI Mina zkApp pour améliorer l'expérience de création d'interface utilisateur, et a annoncé de nouvelles améliorations de l'API Archive Node pour améliorer sa fiabilité et sa clarté.

Léo par Aleo

La blockchain Aleo est unique dans le domaine des contrats intelligents et met l'accent sur la protection de la vie privée. À la base se trouve le langage de programmation Leo, un langage typé statiquement inspiré de Rust. Conçu spécifiquement pour développer des applications privées, Leo permet aux créateurs qui souhaitent créer un écosystème décentralisé sécurisé et privé. Ce qui est vraiment unique chez Leo, c'est son rôle de pionnier dans l'introduction d'une boîte à outils complète pour les applications générales sans connaissance. Cette boîte à outils comprend un cadre de test, un registre de packages, un analyseur d'importation, un compilateur distant et un générateur de théorèmes.

Leo a été conçu par une équipe de développeurs dirigée par Howard Wu qui a imaginé une technologie qui permettrait aux développeurs de créer des applications décentralisées donnant la priorité à la confidentialité et à la sécurité. La conception de Leo s'appuie sur les principes de Rust tout en incorporant des éléments de type Java pour promouvoir la familiarité et la commodité pendant le processus de développement. De plus, Leo vise à accélérer le développement et à simplifier le processus de développement en fournissant une plate-forme de test intégrée, un registre de packages et un convertisseur d'importation. Cette intégration permet aux développeurs de se concentrer sur la logique centrale de leurs applications sans être alourdis par les problèmes d'infrastructure.

Une caractéristique frappante de Leo est son compilateur, qui convertit les programmes au format de preuve R1CS de bas niveau. Le compilateur Leo est unique par son processus de vérification formelle rigoureux. Cette vérification est essentielle car des vulnérabilités peuvent survenir à plusieurs étapes, de la programmation initiale à l'audit et à la compilation. En effectuant des contrôles mathématiques rigoureux pour garantir que le compilateur est cohérent avec l'intention du programmeur, Leo vise à réduire le risque d'erreurs non détectées ou de vulnérabilités potentielles, en particulier dans les contextes L2, les rollups ZK ou les programmes privés sur la plateforme Leo.

Circom par iden3

Circom, un DSL spécialement conçu pour le développement de circuits ZK, est le résultat d'un effort conjoint entre Jordi Baylina et l'équipe iden3. Le compilateur Circom est écrit en Rust et sa tâche principale est de compiler des circuits écrits en langage Circom. Circom est notamment devenu le choix incontournable pour les applications ZK exceptionnelles du monde réel, telles que Dark Forest et Tornado Cash. Sa popularité est due à ses excellentes performances, notamment des temps de preuve rapides du navigateur grâce à des preuves WASM optimisées, des preuves efficaces côté serveur via rapidsnark et une vérification efficace en chaîne.

Cependant, il est important de réaliser que les fonctionnalités de Circom sont principalement axées sur le développement de circuits ZK, ce qui peut le rendre moins adapté à la gestion d'un plus large éventail de tâches informatiques. Les développeurs recherchant davantage de fonctionnalités pouvant répondre à un plus large éventail de besoins de développement peuvent trouver les capacités de Circom quelque peu limitées. Dans ce cas, les développeurs devront peut-être combiner d'autres langages ou frameworks de programmation pour répondre à des besoins de développement plus larges.

Un article sur le langage de programmation ZK Photos de Circom

La compatibilité de Circom se concentre principalement sur les systèmes ZKP largement utilisés, tels que snarkjs et libsnark. Bien que cette compatibilité garantisse une intégration transparente avec ces systèmes largement utilisés, cela signifie également que les circuits Circom héritent de capacités et de limitations spécifiques associées à ces dépendances. Les développeurs qui préfèrent ou ont besoin d'un système ZKP alternatif peuvent être confrontés à des problèmes de compatibilité ou avoir besoin de travaux supplémentaires pour adapter et intégrer les circuits générés par Circom dans leur système préféré.

Lurk par Lurk Lab

Lurk est un dialecte Lisp à portée statique influencé par Scheme et Common Lisp, avec une fonctionnalité unique : il permet une preuve directe de l'exactitude de l'exécution du programme à l'aide de zk-SNARK, permettant une vérification compacte et efficace.

Les principales utilisations de Lurk incluent :

  • Calcul vérifiable : Lurk vous permet de prouver l'exactitude de ses expressions dans des conditions de connaissance nulle, renforçant ainsi la confiance dans les résultats du calcul.
  • Connaissance nulle : les utilisateurs peuvent prouver leurs connaissances sans révéler d'informations spécifiques au-delà de la contribution du public, protégeant ainsi la confidentialité.
  • Données adressables par contenu : chaque programme Lurk est équipé d'un identifiant de contenu unique (CID), le rendant compatible avec IPFS et IPLD.
  • Complétude de Turing : Lurk prend en charge la création et la preuve de déclarations informatiques arbitraires.
  • Fonctions d'ordre supérieur : les fonctions Lurk peuvent accepter et renvoyer des fonctions, permettant une programmation fonctionnelle expressive.
  • Calcul qui gère les données privées : Lurk permet de gérer des données privées tout en garantissant une sortie prouvée correcte sans compromettre la confidentialité.

Lurk tire pleinement parti de l'allocateur de mémoire « contre » de Lisp lors de la construction de circuits à usage général. Cet allocateur combine des expressions et génère des références via des hachages. La clé est de prouver que les deux expressions ont bien la même référence. Cette vérification permet à Lurk d'effectuer des calculs au sein du circuit snark.

Lurk est très riche en fonctionnalités, notamment la prise en charge de la récursivité infinie, des boucles, du flux de contrôle conditionnel et de plusieurs systèmes de preuve backend, tels que Groth16, SnarkPack+ et Nova. Cette polyvalence ouvre la porte à une variété d’applications, notamment le calcul de vérification, le traitement de données privées et l’exécution de programmes complets de Turing dans des circuits snark.

Résumer

Avec l'augmentation de la diversité des applications ZK, le DSL a de larges perspectives de développement dans le domaine ZK. La clé du succès d’un DSL réside dans la création d’une communauté prospère et de bibliothèques riches pour enrichir l’expérience des développeurs. Les DSL qui donnent la priorité à la compatibilité avec les bibliothèques existantes peuvent tirer parti des connaissances et des ressources de la communauté des développeurs au sens large. Cette approche facilite une intégration plus fluide, accélère le développement et offre une plus grande flexibilité lors de la mise en œuvre des applications ZK. Cet effort de collaboration est essentiel pour favoriser un écosystème plus robuste autour des DSL, offrant des avantages tangibles aux développeurs et stimulera davantage 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
  • Épingler
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)