Exploration des langages de programmation ZK

Débutant12/24/2023, 3:04:47 PM
Cet article présente le champ d'application des différents langages de programmation ZK, ainsi que leurs avantages et inconvénients respectifs.

Les preuves de zéro connaissance (ZKP) sont un outil cryptographique puissant qui peut valider l'exactitude des calculs tout en protégeant la confidentialité des données d'entrée. Les langages spécifiques à un domaine (DSL) jouent un rôle crucial dans le cadre de cette infrastructure clé, simplifiant le développement et le processus de vérification des circuits ZKP. Ils agissent comme un pont important entre les concepts abstraits et la représentation précise du circuit requise par les systèmes de preuve.

Un des défis clés auxquels sont confrontés les systèmes de preuve est de traduire des concepts abstraits de haut niveau en circuits pratiques. Cependant, l'émergence des DSL a résolu ce problème en facilitant la structuration de ces concepts abstraits de manière plus concrète et implémentable, répondant ainsi à ce défi.

Au cours de la dernière décennie, nous avons constaté une augmentation significative de la quantité et de la diversité des DSL. Cette vitalité dans le domaine est évidente dans le développement de divers langages de circuit, notamment Noir, Leo et Zinc. Que vous ayez besoin d'une option polyvalente comme Circom ou d'une solution personnalisée pour une plateforme spécifique comme Cairo, vous pouvez choisir parmi de nombreux langages et cadres pour écrire des circuits ZKP.

Dans cet article, nous explorerons les principaux langages de programmation ZK activement utilisés par les développeurs et analyserons les meilleures fonctionnalités de chaque langue.

Caire par StarkWare

Le Caire est le langage de base pour les programmes de calcul général prenant en charge les preuves STARK. Il a joué un rôle clé dans le succès de StarkNet et StarkEx, en favorisant la scalabilité des applications sur le mainnet Ethereum. Notamment, Cairo a contribué de manière significative à prendre en charge diverses applications, notamment dYdX, Sorare et Immutable X. Le nom “Cairo” est dérivé de l'abréviation de “CPU Algebraic Intermediate Representation”. Dans le domaine des preuves de connaissance nulle, il fonctionne de manière similaire à un langage d'assemblage, permettant aux développeurs familiers avec les langages de programmation de bas niveau tels que C, C++ ou Solidity de commencer plus facilement.

Inspiré par Rust, Cairo permet aux développeurs de créer des contrats intelligents Starknet en mettant l'accent sur la sécurité et le développement convivial. Cairo se vante d'une syntaxe puissante qui simplifie la création de circuits ZK, permettant aux utilisateurs d'effectuer diverses tâches au sein des programmes Cairo. De plus, l'un des avantages significatifs de Cairo est sa capacité de mise à l'échelle, permettant l'intégration flexible de nouvelles fonctionnalités et fonctionnalités.

Dans les systèmes ZK, l'efficacité et la scalabilité sont des facteurs cruciaux, et Le Caire répond à ces exigences en les mettant en avant tous les deux. Le langage intègre des stratégies d'optimisation, notamment la réduction des contraintes et l'élimination des boucles, pour soulager la charge de calcul généralement associée aux circuits ZK. L'optimisation dans la conception des circuits se traduit par une génération de preuves et une vérification plus rapides, ce qui en fait un choix idéal pour les applications nécessitant un débit élevé et une latence minimale.

L'expansion et le développement du Caire ont été remarquables, témoignant d'une augmentation extraordinaire du nombre de développeurs à plein temps au cours des deux dernières années. Cette augmentation met en évidence l'adaptabilité du Caire, car son utilisation n'est pas limitée à la blockchain mais est significative dans tout contexte nécessitant une vérification computationnelle. Par conséquent, nous pouvons anticiper une croissance significative supplémentaire des développeurs adoptant le Caire.

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

Zinc par ZkSync

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

L'unicité de Zinc réside dans sa convivialité. Vous pouvez écrire un code sécurisé sans avoir besoin de plonger dans tous les détails complexes du système de contrainte de premier ordre (R1CS). Zinc met l'accent sur l'immutabilité, lui conférant des caractéristiques fonctionnelles inhérentes. Cela signifie qu'il privilégie les données immuables et l'évaluation des fonctions, réduisant ainsi les effets secondaires et facilitant l'écriture d'un code de contrat intelligent plus propre et moins sujet aux erreurs.

De plus, Zinc comprend des opérations mathématiques sécurisées pour éviter les débordements potentiels, garantissant la sécurité de toutes les opérations. Malgré certaines limitations, telles que l'absence de boucles infinies et de récursivité, Zinc simplifie le processus de débogage grâce au suivi des journaux de console. Ces journaux facilitent le suivi et la résolution des problèmes transactionnels sur les réseaux de test ou le réseau principal, améliorant ainsi l'expérience de débogage.

Noir By Aztec

Noir, un DSL open source développé par Aztec et basé sur Rust, vise à simplifier la création de circuits ZK et de programmes ZK sans nécessiter de connaissances cryptographiques approfondies. Il est considéré comme l'une des langues les plus accessibles pour écrire des applications ZK compatibles avec n'importe quel système de preuve. Noir met l'accent sur la sécurité, la simplicité et les performances, offrant une syntaxe de haut niveau similaire à Rust. Il abstrait la sécurité cryptographique, simplifiant l'utilisation de primitives cryptographiques tout en maintenant des performances élevées.

Noir présente des avantages significatifs dans l'expansion de la gamme d'applications pouvant tirer parti des capacités de protection de la vie privée offertes par ZKP, améliorant ainsi l'efficacité de la vie privée et de la vérification. Il se compile en une représentation intermédiaire appelée Abstract Circuit Intermediate Representation (Acer), qui peut ensuite être compilée plus avant en R1CS. La séparation du système de preuve backend du langage lui-même permet à Noir de prendre en charge divers systèmes de preuve, y compris Aztec Brettenberg, Turbo Plonk, et des intégrations futures potentielles telles que Groth16 et Halo2.

Le langage comprend une bibliothèque standard dotée de fonctionnalités efficaces telles que SHA-256 (une fonction de hachage cryptographique produisant une sortie de taille fixe) et des vérifications de Pedersen-Merkle (une technique de vérification cryptographique utilisant les engagements de Pedersen et les arbres de Merkle pour garantir l’intégrité et la cohérence des données). La conception de Noir, semblable à Rust, englobe des fonctionnalités familières pour les développeurs d’applications, telles que des fonctions, des sous-modules, des types définis par l’utilisateur (structs), des instructions conditionnelles, des boucles et des constantes globales. De plus, des efforts continus sont déployés pour développer des génériques et des fonctions de premier ordre afin d’améliorer encore l’expressivité de Noir.

Il est important de noter que Noir est encore en évolution, avec des limitations potentielles et des bugs. Cependant, l'équipe de développement s'engage à son amélioration continue et à son optimisation.

o1js by 0(1) Labs

o1js, anciennement connu sous le nom de SnarkyJS, est une bibliothèque TypeScript développée par 0(1) Labs pour créer des contrats intelligents en utilisant le langage de programmation SNARK. Elle exploite pleinement des technologies établies telles que Node.js et la compatibilité avec les navigateurs pour garantir un accès facile et pratique aux développeurs.

o1js s'intègre parfaitement aux bibliothèques et outils JavaScript et TypeScript, offrant aux développeurs un écosystème robuste et un vaste soutien communautaire. Cette intégration simplifie le processus de développement et réduit la courbe d'apprentissage associée à l'adoption de nouveaux environnements de développement. De plus, il prend en charge pleinement Visual Studio Code (VS Code), un éditeur de code largement utilisé, permettant aux développeurs de tirer pleinement parti de fonctionnalités telles que l'achèvement de code, la mise en évidence de la syntaxe et le débogage pour améliorer l'expérience de développement.

Essentiellement, o1js est un cadre ZK multifonctionnel offrant des outils clés nécessaires pour créer des preuves ZK. Il prend en charge une gamme diversifiée de programmes ZK, couvrant une variété d'opérations prouvables intégrées telles que l'arithmétique de base, le hachage, la signature, les opérations booléennes, les comparaisons, et plus encore. Avec le cadre o1js, vous pouvez construire des zkApps sur le protocole Mina, ces contrats intelligents s'exécutent côté client avec des entrées privées.

Notamment, début septembre 2023, l'équipe de 0(1) Labs a annoncé la transition de SnarkyJS à o1js, soulignant leur engagement à améliorer les performances. Il est particulièrement remarquable de constater leur réussite dans la réduction du temps de chargement de la bibliothèque de 3 à 4 fois, ce qui correspond au temps nécessaire pour importer o1js, un processus qui pourrait bloquer le thread principal. Pour les applications web, le temps de chargement est crucial pour la synchronisation de l'exécution de JavaScript et le rendu global de la page. De plus, l'équipe a également mis à jour la CLI Mina zkApp, améliorant l'expérience de construction de l'interface utilisateur, et a annoncé d'autres améliorations à l'API Archive Node pour en renforcer la fiabilité et la clarté.

Leo by Aleo

La blockchain Aleo se distingue dans le domaine des contrats intelligents par un fort accent sur la protection de la vie privée. À sa base se trouve le langage de programmation Leo, un langage à typage statique inspiré de Rust. Conçu spécifiquement pour le développement d'applications privées, Leo soutient les créateurs qui visent à construire des écosystèmes décentralisés sécurisés et confidentiels. Ce qui distingue vraiment Leo, c'est son rôle pionnier dans l'introduction d'une trousse à outils complète pour les applications universelles à connaissance zéro. Cette trousse à outils comprend un cadre de test, un registre de packages, un analyseur d'importations, un compilateur à distance et un générateur de théorèmes.

Le concept de Leo trouve son origine dans une équipe de développement dirigée par Howard Wu, imaginant un système qui permet aux développeurs de construire des applications décentralisées avec une priorité sur la confidentialité et la sécurité. S'inspirant des principes de Rust, la conception de Leo intègre également des éléments similaires à JavaScript, facilitant un sentiment de familiarité et de simplicité durant le processus de développement. De plus, Leo vise à accélérer et simplifier le développement en offrant une plateforme 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 ralentis par des problèmes infrastructurels.

Une caractéristique notable de Leo est son compilateur, qui transforme les programmes en format de preuve R1CS de bas niveau. L'unicité du compilateur Leo réside dans son processus de vérification formelle rigoureux. Cette vérification est cruciale car des vulnérabilités peuvent survenir à plusieurs étapes, de la programmation initiale à l'audit et à la compilation. En effectuant des vérifications mathématiques strictes pour garantir que le compilateur est conforme à l'intention du programmeur, Leo vise à minimiser le risque d'erreurs non détectées ou de vulnérabilités potentielles, en particulier dans les contextes L2, ZK-rollups ou les programmes privés sur la plateforme Leo.

Circom par iden3

Circom, un langage spécifique à un domaine (DSL) méticuleusement conçu pour le développement de circuits ZK, est une création collaborative de Jordi Baylina et de l'équipe iden3. Le compilateur Circom, écrit en Rust, fonctionne principalement pour compiler des circuits développés en utilisant le langage Circom. Notamment, Circom est devenu le choix préféré pour les applications ZK exceptionnelles dans le monde réel, telles que Dark Forest et Tornado Cash. Sa popularité est attribuée à ses performances impressionnantes, qui incluent des temps de preuve rapides dans le navigateur grâce à des preuves WASM optimisées, des preuves efficaces côté serveur via rapidsnark, et une vérification efficace on-chain.

Cependant, il est important de reconnaître que la fonctionnalité de Circom est principalement axée sur le développement de circuits ZK, ce qui peut le rendre moins adapté aux tâches computationnelles plus larges. Les développeurs recherchant des capacités plus polyvalentes pour répondre à un plus large éventail de besoins de développement pourraient trouver les capacités de Circom quelque peu limitées. Dans de tels cas, les développeurs pourraient avoir besoin d'intégrer d'autres langages de programmation ou frameworks pour répondre à des exigences de développement plus complètes.


Source de l'image : Circom

La compatibilité de Circom se concentre principalement sur des systèmes de preuve à divulgation nulle (ZKP) largement utilisés tels que snarkjs et libsnark. Cette compatibilité garantit une intégration transparente avec ces systèmes couramment utilisés, mais cela signifie également que les circuits Circom héritent de fonctionnalités spécifiques et de limitations associées à ces dépendances. Les développeurs qui préfèrent ou ont besoin de systèmes ZKP alternatifs pourraient rencontrer des défis de compatibilité ou avoir besoin de déployer 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.

Lurk by Lurk Lab

Lurk est un dialecte Lisp à portée statique influencé par Scheme et Common Lisp, avec une caractéristique unique : il permet la preuve directe de la correction de l'exécution du programme en utilisant zk-SNARKs, permettant une vérification compacte et efficace. Les principaux usages de Lurk incluent :

Calcul vérifiable : Lurk permet de prouver l’exactitude de ses expressions dans des conditions de connaissance nulle, ce qui renforce la confiance dans les résultats de calcul.

Zero Knowledge: Les utilisateurs peuvent prouver leur connaissance sans révéler des informations spécifiques au-delà des entrées publiques, protégeant ainsi la vie privée.

Données adressables par contenu : Chaque programme Lurk est équipé d'un identifiant de contenu unique (CID), le rendant compatible avec IPFS et IPLD.

Turing Completeness: Gate prend en charge la création et la preuve d'énoncés computationnels arbitraires.

Les fonctions d'ordre supérieur : Les fonctions de Lurk peuvent accepter et renvoyer d'autres fonctions, facilitant la programmation fonctionnelle expressive.

Calculs avec des données privées: Lurk permet de manipuler des données privées tout en garantissant une sortie correcte de manière prouvable sans fuites de confidentialité.

Dans la construction de circuits polyvalents, Lurk utilise largement l'allocateur de mémoire "cons" de Lisp, qui combine des expressions et génère des références par hachage. La clé réside dans la preuve que deux expressions hachent effectivement vers la même référence. Cette vérification permet à Lurk d'effectuer des calculs au sein de circuits de snark.

La fonctionnalité de Lurk est riche, y compris le support pour une récursivité infinie, des boucles, des flux de contrôle conditionnels, et plusieurs systèmes de preuve back-end comme Groth16, SnarkPack+, et Nova. Cette polyvalence ouvre des portes à diverses applications, y compris des calculs vérifiables, la manipulation de données privées, et l'exécution de programmes complets dans des circuits snark.

Conclusion

A mesure que la diversité des applications ZK augmente, les perspectives des DSL dans le domaine ZK sont vastes. La clé du succès d'un DSL réside dans l'établissement d'une communauté prospère et d'une riche bibliothèque pour enrichir l'expérience des développeurs. Les DSL qui donnent la priorité à la compatibilité avec les bibliothèques existantes peuvent pleinement tirer parti des connaissances et des ressources d'une communauté de développeurs plus large. Cette approche facilite l'intégration, accélère le développement et offre une plus grande flexibilité dans la mise en œuvre des applications ZK. De tels efforts collaboratifs sont cruciaux pour favoriser un écosystème plus robuste autour des DSL, offrant des avantages tangibles aux développeurs et stimulant davantage l'adoption et l'efficacité de la technologie ZK.

Clause de non-responsabilité :

  1. Cet article est repris de [Gatepanewslab]. Tous les droits d'auteur appartiennent à l'auteur original [ScalingX]. Si vous avez des objections à cette réimpression, veuillez contacter l'équipe Gate Learn, et ils s'en occuperont rapidement.
  2. Clause de non-responsabilité : Les points de vue et opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent aucun conseil en investissement.
  3. Les traductions de l'article dans d'autres langues sont effectuées par l'équipe Gate Learn. Sauf mention contraire, il est interdit de copier, distribuer ou plagier les articles traduits.

Exploration des langages de programmation ZK

Débutant12/24/2023, 3:04:47 PM
Cet article présente le champ d'application des différents langages de programmation ZK, ainsi que leurs avantages et inconvénients respectifs.

Les preuves de zéro connaissance (ZKP) sont un outil cryptographique puissant qui peut valider l'exactitude des calculs tout en protégeant la confidentialité des données d'entrée. Les langages spécifiques à un domaine (DSL) jouent un rôle crucial dans le cadre de cette infrastructure clé, simplifiant le développement et le processus de vérification des circuits ZKP. Ils agissent comme un pont important entre les concepts abstraits et la représentation précise du circuit requise par les systèmes de preuve.

Un des défis clés auxquels sont confrontés les systèmes de preuve est de traduire des concepts abstraits de haut niveau en circuits pratiques. Cependant, l'émergence des DSL a résolu ce problème en facilitant la structuration de ces concepts abstraits de manière plus concrète et implémentable, répondant ainsi à ce défi.

Au cours de la dernière décennie, nous avons constaté une augmentation significative de la quantité et de la diversité des DSL. Cette vitalité dans le domaine est évidente dans le développement de divers langages de circuit, notamment Noir, Leo et Zinc. Que vous ayez besoin d'une option polyvalente comme Circom ou d'une solution personnalisée pour une plateforme spécifique comme Cairo, vous pouvez choisir parmi de nombreux langages et cadres pour écrire des circuits ZKP.

Dans cet article, nous explorerons les principaux langages de programmation ZK activement utilisés par les développeurs et analyserons les meilleures fonctionnalités de chaque langue.

Caire par StarkWare

Le Caire est le langage de base pour les programmes de calcul général prenant en charge les preuves STARK. Il a joué un rôle clé dans le succès de StarkNet et StarkEx, en favorisant la scalabilité des applications sur le mainnet Ethereum. Notamment, Cairo a contribué de manière significative à prendre en charge diverses applications, notamment dYdX, Sorare et Immutable X. Le nom “Cairo” est dérivé de l'abréviation de “CPU Algebraic Intermediate Representation”. Dans le domaine des preuves de connaissance nulle, il fonctionne de manière similaire à un langage d'assemblage, permettant aux développeurs familiers avec les langages de programmation de bas niveau tels que C, C++ ou Solidity de commencer plus facilement.

Inspiré par Rust, Cairo permet aux développeurs de créer des contrats intelligents Starknet en mettant l'accent sur la sécurité et le développement convivial. Cairo se vante d'une syntaxe puissante qui simplifie la création de circuits ZK, permettant aux utilisateurs d'effectuer diverses tâches au sein des programmes Cairo. De plus, l'un des avantages significatifs de Cairo est sa capacité de mise à l'échelle, permettant l'intégration flexible de nouvelles fonctionnalités et fonctionnalités.

Dans les systèmes ZK, l'efficacité et la scalabilité sont des facteurs cruciaux, et Le Caire répond à ces exigences en les mettant en avant tous les deux. Le langage intègre des stratégies d'optimisation, notamment la réduction des contraintes et l'élimination des boucles, pour soulager la charge de calcul généralement associée aux circuits ZK. L'optimisation dans la conception des circuits se traduit par une génération de preuves et une vérification plus rapides, ce qui en fait un choix idéal pour les applications nécessitant un débit élevé et une latence minimale.

L'expansion et le développement du Caire ont été remarquables, témoignant d'une augmentation extraordinaire du nombre de développeurs à plein temps au cours des deux dernières années. Cette augmentation met en évidence l'adaptabilité du Caire, car son utilisation n'est pas limitée à la blockchain mais est significative dans tout contexte nécessitant une vérification computationnelle. Par conséquent, nous pouvons anticiper une croissance significative supplémentaire des développeurs adoptant le Caire.

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

Zinc par ZkSync

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

L'unicité de Zinc réside dans sa convivialité. Vous pouvez écrire un code sécurisé sans avoir besoin de plonger dans tous les détails complexes du système de contrainte de premier ordre (R1CS). Zinc met l'accent sur l'immutabilité, lui conférant des caractéristiques fonctionnelles inhérentes. Cela signifie qu'il privilégie les données immuables et l'évaluation des fonctions, réduisant ainsi les effets secondaires et facilitant l'écriture d'un code de contrat intelligent plus propre et moins sujet aux erreurs.

De plus, Zinc comprend des opérations mathématiques sécurisées pour éviter les débordements potentiels, garantissant la sécurité de toutes les opérations. Malgré certaines limitations, telles que l'absence de boucles infinies et de récursivité, Zinc simplifie le processus de débogage grâce au suivi des journaux de console. Ces journaux facilitent le suivi et la résolution des problèmes transactionnels sur les réseaux de test ou le réseau principal, améliorant ainsi l'expérience de débogage.

Noir By Aztec

Noir, un DSL open source développé par Aztec et basé sur Rust, vise à simplifier la création de circuits ZK et de programmes ZK sans nécessiter de connaissances cryptographiques approfondies. Il est considéré comme l'une des langues les plus accessibles pour écrire des applications ZK compatibles avec n'importe quel système de preuve. Noir met l'accent sur la sécurité, la simplicité et les performances, offrant une syntaxe de haut niveau similaire à Rust. Il abstrait la sécurité cryptographique, simplifiant l'utilisation de primitives cryptographiques tout en maintenant des performances élevées.

Noir présente des avantages significatifs dans l'expansion de la gamme d'applications pouvant tirer parti des capacités de protection de la vie privée offertes par ZKP, améliorant ainsi l'efficacité de la vie privée et de la vérification. Il se compile en une représentation intermédiaire appelée Abstract Circuit Intermediate Representation (Acer), qui peut ensuite être compilée plus avant en R1CS. La séparation du système de preuve backend du langage lui-même permet à Noir de prendre en charge divers systèmes de preuve, y compris Aztec Brettenberg, Turbo Plonk, et des intégrations futures potentielles telles que Groth16 et Halo2.

Le langage comprend une bibliothèque standard dotée de fonctionnalités efficaces telles que SHA-256 (une fonction de hachage cryptographique produisant une sortie de taille fixe) et des vérifications de Pedersen-Merkle (une technique de vérification cryptographique utilisant les engagements de Pedersen et les arbres de Merkle pour garantir l’intégrité et la cohérence des données). La conception de Noir, semblable à Rust, englobe des fonctionnalités familières pour les développeurs d’applications, telles que des fonctions, des sous-modules, des types définis par l’utilisateur (structs), des instructions conditionnelles, des boucles et des constantes globales. De plus, des efforts continus sont déployés pour développer des génériques et des fonctions de premier ordre afin d’améliorer encore l’expressivité de Noir.

Il est important de noter que Noir est encore en évolution, avec des limitations potentielles et des bugs. Cependant, l'équipe de développement s'engage à son amélioration continue et à son optimisation.

o1js by 0(1) Labs

o1js, anciennement connu sous le nom de SnarkyJS, est une bibliothèque TypeScript développée par 0(1) Labs pour créer des contrats intelligents en utilisant le langage de programmation SNARK. Elle exploite pleinement des technologies établies telles que Node.js et la compatibilité avec les navigateurs pour garantir un accès facile et pratique aux développeurs.

o1js s'intègre parfaitement aux bibliothèques et outils JavaScript et TypeScript, offrant aux développeurs un écosystème robuste et un vaste soutien communautaire. Cette intégration simplifie le processus de développement et réduit la courbe d'apprentissage associée à l'adoption de nouveaux environnements de développement. De plus, il prend en charge pleinement Visual Studio Code (VS Code), un éditeur de code largement utilisé, permettant aux développeurs de tirer pleinement parti de fonctionnalités telles que l'achèvement de code, la mise en évidence de la syntaxe et le débogage pour améliorer l'expérience de développement.

Essentiellement, o1js est un cadre ZK multifonctionnel offrant des outils clés nécessaires pour créer des preuves ZK. Il prend en charge une gamme diversifiée de programmes ZK, couvrant une variété d'opérations prouvables intégrées telles que l'arithmétique de base, le hachage, la signature, les opérations booléennes, les comparaisons, et plus encore. Avec le cadre o1js, vous pouvez construire des zkApps sur le protocole Mina, ces contrats intelligents s'exécutent côté client avec des entrées privées.

Notamment, début septembre 2023, l'équipe de 0(1) Labs a annoncé la transition de SnarkyJS à o1js, soulignant leur engagement à améliorer les performances. Il est particulièrement remarquable de constater leur réussite dans la réduction du temps de chargement de la bibliothèque de 3 à 4 fois, ce qui correspond au temps nécessaire pour importer o1js, un processus qui pourrait bloquer le thread principal. Pour les applications web, le temps de chargement est crucial pour la synchronisation de l'exécution de JavaScript et le rendu global de la page. De plus, l'équipe a également mis à jour la CLI Mina zkApp, améliorant l'expérience de construction de l'interface utilisateur, et a annoncé d'autres améliorations à l'API Archive Node pour en renforcer la fiabilité et la clarté.

Leo by Aleo

La blockchain Aleo se distingue dans le domaine des contrats intelligents par un fort accent sur la protection de la vie privée. À sa base se trouve le langage de programmation Leo, un langage à typage statique inspiré de Rust. Conçu spécifiquement pour le développement d'applications privées, Leo soutient les créateurs qui visent à construire des écosystèmes décentralisés sécurisés et confidentiels. Ce qui distingue vraiment Leo, c'est son rôle pionnier dans l'introduction d'une trousse à outils complète pour les applications universelles à connaissance zéro. Cette trousse à outils comprend un cadre de test, un registre de packages, un analyseur d'importations, un compilateur à distance et un générateur de théorèmes.

Le concept de Leo trouve son origine dans une équipe de développement dirigée par Howard Wu, imaginant un système qui permet aux développeurs de construire des applications décentralisées avec une priorité sur la confidentialité et la sécurité. S'inspirant des principes de Rust, la conception de Leo intègre également des éléments similaires à JavaScript, facilitant un sentiment de familiarité et de simplicité durant le processus de développement. De plus, Leo vise à accélérer et simplifier le développement en offrant une plateforme 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 ralentis par des problèmes infrastructurels.

Une caractéristique notable de Leo est son compilateur, qui transforme les programmes en format de preuve R1CS de bas niveau. L'unicité du compilateur Leo réside dans son processus de vérification formelle rigoureux. Cette vérification est cruciale car des vulnérabilités peuvent survenir à plusieurs étapes, de la programmation initiale à l'audit et à la compilation. En effectuant des vérifications mathématiques strictes pour garantir que le compilateur est conforme à l'intention du programmeur, Leo vise à minimiser le risque d'erreurs non détectées ou de vulnérabilités potentielles, en particulier dans les contextes L2, ZK-rollups ou les programmes privés sur la plateforme Leo.

Circom par iden3

Circom, un langage spécifique à un domaine (DSL) méticuleusement conçu pour le développement de circuits ZK, est une création collaborative de Jordi Baylina et de l'équipe iden3. Le compilateur Circom, écrit en Rust, fonctionne principalement pour compiler des circuits développés en utilisant le langage Circom. Notamment, Circom est devenu le choix préféré pour les applications ZK exceptionnelles dans le monde réel, telles que Dark Forest et Tornado Cash. Sa popularité est attribuée à ses performances impressionnantes, qui incluent des temps de preuve rapides dans le navigateur grâce à des preuves WASM optimisées, des preuves efficaces côté serveur via rapidsnark, et une vérification efficace on-chain.

Cependant, il est important de reconnaître que la fonctionnalité de Circom est principalement axée sur le développement de circuits ZK, ce qui peut le rendre moins adapté aux tâches computationnelles plus larges. Les développeurs recherchant des capacités plus polyvalentes pour répondre à un plus large éventail de besoins de développement pourraient trouver les capacités de Circom quelque peu limitées. Dans de tels cas, les développeurs pourraient avoir besoin d'intégrer d'autres langages de programmation ou frameworks pour répondre à des exigences de développement plus complètes.


Source de l'image : Circom

La compatibilité de Circom se concentre principalement sur des systèmes de preuve à divulgation nulle (ZKP) largement utilisés tels que snarkjs et libsnark. Cette compatibilité garantit une intégration transparente avec ces systèmes couramment utilisés, mais cela signifie également que les circuits Circom héritent de fonctionnalités spécifiques et de limitations associées à ces dépendances. Les développeurs qui préfèrent ou ont besoin de systèmes ZKP alternatifs pourraient rencontrer des défis de compatibilité ou avoir besoin de déployer 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.

Lurk by Lurk Lab

Lurk est un dialecte Lisp à portée statique influencé par Scheme et Common Lisp, avec une caractéristique unique : il permet la preuve directe de la correction de l'exécution du programme en utilisant zk-SNARKs, permettant une vérification compacte et efficace. Les principaux usages de Lurk incluent :

Calcul vérifiable : Lurk permet de prouver l’exactitude de ses expressions dans des conditions de connaissance nulle, ce qui renforce la confiance dans les résultats de calcul.

Zero Knowledge: Les utilisateurs peuvent prouver leur connaissance sans révéler des informations spécifiques au-delà des entrées publiques, protégeant ainsi la vie privée.

Données adressables par contenu : Chaque programme Lurk est équipé d'un identifiant de contenu unique (CID), le rendant compatible avec IPFS et IPLD.

Turing Completeness: Gate prend en charge la création et la preuve d'énoncés computationnels arbitraires.

Les fonctions d'ordre supérieur : Les fonctions de Lurk peuvent accepter et renvoyer d'autres fonctions, facilitant la programmation fonctionnelle expressive.

Calculs avec des données privées: Lurk permet de manipuler des données privées tout en garantissant une sortie correcte de manière prouvable sans fuites de confidentialité.

Dans la construction de circuits polyvalents, Lurk utilise largement l'allocateur de mémoire "cons" de Lisp, qui combine des expressions et génère des références par hachage. La clé réside dans la preuve que deux expressions hachent effectivement vers la même référence. Cette vérification permet à Lurk d'effectuer des calculs au sein de circuits de snark.

La fonctionnalité de Lurk est riche, y compris le support pour une récursivité infinie, des boucles, des flux de contrôle conditionnels, et plusieurs systèmes de preuve back-end comme Groth16, SnarkPack+, et Nova. Cette polyvalence ouvre des portes à diverses applications, y compris des calculs vérifiables, la manipulation de données privées, et l'exécution de programmes complets dans des circuits snark.

Conclusion

A mesure que la diversité des applications ZK augmente, les perspectives des DSL dans le domaine ZK sont vastes. La clé du succès d'un DSL réside dans l'établissement d'une communauté prospère et d'une riche bibliothèque pour enrichir l'expérience des développeurs. Les DSL qui donnent la priorité à la compatibilité avec les bibliothèques existantes peuvent pleinement tirer parti des connaissances et des ressources d'une communauté de développeurs plus large. Cette approche facilite l'intégration, accélère le développement et offre une plus grande flexibilité dans la mise en œuvre des applications ZK. De tels efforts collaboratifs sont cruciaux pour favoriser un écosystème plus robuste autour des DSL, offrant des avantages tangibles aux développeurs et stimulant davantage l'adoption et l'efficacité de la technologie ZK.

Clause de non-responsabilité :

  1. Cet article est repris de [Gatepanewslab]. Tous les droits d'auteur appartiennent à l'auteur original [ScalingX]. Si vous avez des objections à cette réimpression, veuillez contacter l'équipe Gate Learn, et ils s'en occuperont rapidement.
  2. Clause de non-responsabilité : Les points de vue et opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent aucun conseil en investissement.
  3. Les traductions de l'article dans d'autres langues sont effectuées par l'équipe Gate Learn. Sauf mention contraire, il est interdit de copier, distribuer ou plagier les articles traduits.
Lancez-vous
Inscrivez-vous et obtenez un bon de
100$
!