Auteur : The Mandalorian, protocole du réseau Manta
Au cours de la dernière année, de plus en plus de personnes ont pris conscience de la puissance des outils cryptographiques comme ZK (preuve à connaissance nulle), et nous avons également assisté à l'essor de nombreuses applications à preuve de connaissance nulle, telles que les réseaux sociaux privés, vote privé et DAO privé, etc. En fait, l’application de la preuve sans connaissance est très large, et toute application nécessitant une confidentialité en chaîne peut utiliser une preuve sans connaissance.
Lors de l'événement ETHGlobal Hackathon lors de l'ETHSanFrancisco 2022 qui vient de se terminer, les amis de l'équipe de développement de cryptographie de Manta Network ont créé un jeu de poker basé sur zkSNARK en seulement 36 heures et l'ont lancé avec succès sur ApeCoin, quatre unités de compétition organisées par l'ENS, SKALE et L'optimisme a remporté des prix.
Dark Forest, que beaucoup de gens connaissent, est un jeu de stratégie en temps réel (informations imparfaites) basé sur zkSNARK. Les jeux à informations incomplètes sont des jeux dans lesquels le joueur ne connaît pas tous les états. Par exemple, au poker, les cartes en main du joueur sont des informations privées, et le processus de tirage des cartes est également totalement privé. Ce qui est intéressant avec les informations incomplètes, c’est qu’elles peuvent conduire à une série de stratégies de jeu complexes.
Sur une blockchain publique, il est difficile de construire un jeu avec des informations incomplètes en raison de l'ouverture et de la transparence des données sur la chaîne. Cependant, grâce à une technologie de preuve sans connaissance, les joueurs peuvent soumettre publiquement des actions valides et vérifiables tout en préservant leur confidentialité.
Lors de cet événement hackathon, Manta Network a construit un système de mélange et de distribution de poker en chaîne basé sur zkSNARK. Ce système résout principalement deux problèmes existant dans les jeux de poker en chaîne : comment mélanger les cartes de manière équitable et comment distribuer les cartes entre les joueurs de manière secrète (sinon, le jeu pourrait ne pas être joué en raison de problèmes de MEV).
Essentiellement, le poker en chaîne basé sur une preuve de connaissance nulle décentralise le croupier de cartes, et le croupier ne peut pas contrôler le jeu de cartes en contrôlant le croupier de cartes.
Lorsque vous jouez au Texas Hold'em dans un client centralisé Web2, vous rencontrerez une situation dans laquelle la probabilité qu'une carte soit extrêmement faible vous sera simplement distribuée. Il y a une forte probabilité que vous puissiez obtenir les cartes, mais vous ne pourrez pas les retirer.
Le but est de manipuler le jeu en distribuant des cartes afin que votre adversaire puisse vous battre en ligne alors que la probabilité de gagner hors ligne est extrêmement faible.
C'est pourquoi nous avons besoin d'un poker décentralisé.
Le système ZKShuffle a trois fonctions :
ZKShuffle.setup : chaque joueur génère une paire de clés et rassemble les clés publiques correspondantes de chaque joueur pour générer une clé publique globale.
ZKShuffle.shuffle_encrypt : lors du mélange, chaque joueur doit appeler shuffle_encrypt à son tour.
Afin de garantir que le cryptage et le déchiffrement peuvent être effectués dans n'importe quel ordre, nous utilisons un schéma de cryptage homomorphe (schéma de cryptage homomorphe). Par exemple, il y a trois joueurs dans ce jeu. Après un tour de cryptage, chaque carte aura trois verrous de cryptage : Carte{Alice, Bob, Charlie}.
ZKShuffle.decrypt : Si vous souhaitez distribuer des cartes à un joueur spécifique, chaque joueur doit appeler la fonction de décryptage. Par exemple, si la logique du jeu est de distribuer des cartes à Charlie, la séquence correcte devrait être : Alice obtient la carte cryptée Card {Alice, Bob, Charlie}, utilise sa clé pour la déchiffrer, puis envoie la carte décryptée Card {Bob, Charlie} soumet sur la chaîne et soumet une preuve de connaissance nulle pour vérifier la validité du décryptage.
Une fois que Bob a obtenu la carte partiellement déchiffrée Card{Bob, Charlie} soumise par Alice sur la chaîne, il la déchiffre avec sa propre clé et soumet la carte Card{Charlie} et la clé pour vérifier la validité du décryptage sur la chaîne. Aucune preuve de connaissance. Enfin, Charlie obtient la carte {Charlie} et peut visualiser ses cartes en la déchiffrant avec sa propre clé.
L'équipe de développement de cryptographie de Manta Network a construit une démo de Texas Hold'em à l'aide de ZKShuffle, une application décentralisée basée sur Solidity, React et Ether.js. Dans cette démo, chaque fois qu'un nouveau tour de jeu commence, tous les joueurs doivent effectuer une série de réglages pour s'assurer que les cartes à jouer sur la chaîne sont équitablement mélangées. Ensuite, chaque joueur doit effectuer un tour de décryptage et obtenir deux cartes. Avec ceux-ci, les joueurs peuvent jouer au Texas Hold'em Poker sur une blockchain EVM.
Manta a actuellement déployé cette DApp sur les blockchains Optimism Goerli, Ethereum Goerli et Skale.
Principe de mise en œuvre
L'ensemble du projet se compose de 3 parties :
Circuit ZK ;
Contrats intelligents pour vérifier le décryptage et la brassage, y compris le contrat ZKShuffle et le contrat de logique de jeu DApp front-end, démo construite à l'aide de React et ether.js et de la bibliothèque Circomlib JS ;
JS cryptographique Circomlib.
Dans la mise en œuvre de Circom, le schéma de cryptage ElGamal est adopté et les bibliothèques Circom existantes telles que les hachages Poséidon sont utilisées.
Le circuit de chiffrement a des contraintes 87308 R1CS et le temps de génération de preuve dans le DApp est de 4,5 secondes. Le circuit de décryptage comporte 1522 contraintes R1CS et le temps de génération de preuve dans le DApp est de 0,1 seconde. Utilisez SnarkJs pour générer des preuves sans connaissance dans les DApps.
Le contrat intelligent se compose de deux parties : le contrat-cadre ZKShuffle et le contrat de logique de jeu de poker. Le contrat ZKShuffle encapsule simplement la logique de vérification ZKP et deux circuits. Le contrat logique déploie une machine à états pour obtenir l'étape actuelle du jeu et l'ordre du tour du joueur à partir du nœud RPC.
Le DApp est implémenté à l'aide du framework React et Ether.js pour afficher la table de poker et l'animation d'action de chaque joueur. Lorsqu'un joueur doit agir, il lui suffit de cliquer sur un bouton de l'interface utilisateur et d'utiliser un métamasque pour signer la transaction.
Regarder la démo
À propos du réseau Manta
Manta Network s'engage à construire un monde Web3 meilleur grâce à la protection de la vie privée. La conception des produits de Manta part des premiers principes et offre une protection de la vie privée de bout en bout aux utilisateurs de la blockchain grâce à des architectures cryptographiques de pointe telles que zkSNARK. Tout en garantissant la confidentialité, Manta combine interopérabilité, commodité, hautes performances et auditabilité, permettant aux utilisateurs d'effectuer des transferts et des transactions privés entre n'importe quel actif parachain. La vision de Manta est de fournir des services de protection de la vie privée plus pratiques pour l'ensemble du monde de la blockchain.
L’équipe fondatrice de Manta est composée de plusieurs vétérans, professeurs et universitaires de la crypto-monnaie dont l’expérience comprend l’Université Harvard, le MIT et Algorand. Les institutions d'investissement de Manta comprennent Polychain, ParaFi, Binance Labs, Multicoin, CoinFund, Alameda, DeFiance et Hypersphere, etc. Manta est également bénéficiaire officiel d'une subvention de la Fondation Polkadot Web3, membre du programme Substrate Builder et membre du Blockchain Accelerator de l'Université de Berkeley.
