Aztec, un Layer 2 confidentiel - Censorship.wtf
Source : https://www.youtube.com/watch?v=FBAeTa7SWE0
Intro (0:40)
La vie privée est :
- Un droit de l'homme, et tout devrait être privé par défaut.
- Prévenir la discrimination et la censure fondées sur des informations qui ne devraient pas être révélées.
- Révéler uniquement les informations exactes nécessaires pour une application ou transaction particulière (comme les preuves ZK).
- Une prévention contre le fait que des tiers puissent censurer en accédant à des informations auxquelles ils ne devraient pas avoir accès.
- Prévenir la censure par les séquenceurs qui ne peuvent pas voir à l'intérieur des transactions (mempools encryptées).
Mettre en œuvre la confidentialité programmable (2:50)
Aztec Network est un Layer 2 axé sur la confidentialité qui fonctionne sur Ethereum et est entièrement programmable. Pour Aztec, la confidentialité signifie masquer l'identité de l'utilisateur, l'exécution de la fonction et l'état.
L'objectif d'Aztec est que toute tierce partie observant une transaction n'apprenne rien - juste que quelqu'un a fait quelque chose sur un certain état/fonction/contrat.
On doit s'assurer qu'aucune information n'est divulguée dans les transactions, tout en conservant une programmabilité complète.
Exécution confidentielle (3:45)
Aztec déplace l'exécution des séquenceurs/nœuds vers le côté client pour assurer la confidentialité :
- Lorsqu'un utilisateur envoie une transaction, elle est exécutée localement et une preuve de validité est générée.
- Les transactions dans le mempool sont des preuves à divulgation nulle de connaissance (zk-SNARKS précisément) qui prouvent la validité de l'exécution avec des changements d'état opaques.
- Pour chaque fonction de contrat, un circuit unique est généré pour le compiler en vue de la génération de preuves côté client.
Les circuits sont utilisés à la place d'une machine virtuelle pour permettre une génération de preuve efficace sur les appareils des utilisateurs
Chaque appel de fonction génère une preuve ZK qui est agrégée de manière récursive dans un kernel
Le kernel agrège la pile d'appels et masque les informations sur les fonctions/contrats spécifiques exécutés.
Cela produit une seule preuve succincte pour la transaction complète qui peut être générée sur un téléphone.
Pour permettre l'exécution privée côté client, l'état doit être représenté d'une manière appropriée.
État privé (5:50)
Aztec ne peut pas utiliser le stockage basé sur un compte comme dans la machine virtuelle d'Ethereum (EVM), car cela fuirait des informations avec plusieurs utilisateurs et mises à jour d'état.
Pour l'exécution privée, Aztec utilise un modèle de type UTXO pour représenter l'état.
Comme Zcash et Bitcoin, des nœuds d'état personnalisés représentent l'état. Les nœuds sont entièrement personnalisables pour représenter n'importe quel état d'application, pas seulement des paiements. Exemple : un jeu de cartes pourrait avoir des nœuds représentant les attributs de chaque carte.
Cette représentation de type UTXO de nœuds d'état personnalisés permet une exécution privée sans fuites.
Notes et arbres d'état globaux (7:25)
Les utilisateurs stockent localement des nœuds d'état dans leur wallet, représentant leur propre état privé.
Pour envoyer des informations à d'autres, les utilisateurs créent des nœuds chiffrés diffusés on-chain, prouvant de manière vérifiable l'envoi aux destinataires.
Lors de l'utilisation d'un nœud dans une preuve, l'appartenance à l'arbre doit être prouvée. Les nœuds s'engagent également à un arbre d'engagement de données globales pour prouver qu'ils ne sont pas créés à partir de rien.
La consommation/suppression d'un nœud se fait en émettant un nullificateur (un hachage du nœud mélangé avec un secret)
Le nullificateur n'a aucun lien avec l'engagement du nœud, permettant des mises à jour d'état sans transactions liées.
Aztec utilise un langage de domaine spécifique basé sur Rust appelé "Noir" pour écrire des circuits et des contrats interagissant avec l'état privé.
Mise à jour et lecture des données (09:30)
La mise à jour de l'état consomme l'ancien nœud et en crée un nouveau. Il n'y a pas de lien entre les deux. La lecture de la valeur d'un nœud nécessite de le détruire et de le recréer avec la même valeur.
Cela garantit que les utilisateurs disposent d'une version à jour de l'état puisqu'ils ne savent pas dans quel bloc leur transaction aboutit :
- S'ils lisent un ancien état, le nullificateur sera déjà dans l'arbre donc ce serait une double dépense.
- Les transactions valides nécessitent une preuve valide et aucun nullificateur en double.
Cela permet une exécution privée et des changements d'état par utilisateur. Cependant, la lecture de l'état invalide implicitement d'autres transactions se référant à cet état.
C'est pratique pour les carnets d'ordres privés, mais pas pour un état partagé comme les pools de liquidités sur des AMM (Automated Market Makers : Uniswap, Curve, Maverick...)
Donc Aztec utilise un modèle hybride où les transactions ont des changements d'état opaques et des demandes d'exécution publiques.
Exécution (sur la place) publique (12:15)
Les transactions peuvent émettre des demandes d'exécution publiques vers le séquenceur ainsi que des changements d'état opaques.
Les fonctions publiques utilisent un stockage basé sur le compte comme la Machine Virtuelle d'Ethereum, permettant des mises à jour concurrentes.
La combinaison d'un état privé et public permet des opérations comme :
- Rassembler/débloquer des fonds en privé, échanger en public, masquer à nouveau en privé.
- Chaque transaction privée peut mettre en file d'attente des demandes publiques.
Le développeur gère ce qui doit être privé ou public. Cependant, cela introduit un vecteur de censure en révélant certaines actions de transaction.
Décentraliser la décentralisation (13:30)
Aztec construit un réseau axé sur la confidentialité où la résistance à la censure est critique.
La promesse d'Aztec est d'avoir des séquenceurs et des prouveurs entièrement décentralisés dès le premier jour, donc sans décentralisation progressive.
Ils développent des mécanismes de gouvernance compatibles avec la décentralisation pour fournir la sécurité et les mises à jour tout en garantissant la résistance à la censure.
Séquençage (14:40)
Aztec converge vers un algorithme appelé "Fernet" pour l'élection aléatoire de séquenceurs basé sur un VRF pour promouvoir la décentralisation.
Pour les prouveurs, ils évaluent des réseaux coopératifs et compétitifs. Etre compétitif favorise l'innovation, et être coopératif favorise la diversité et un risque de censure réduit
La conception de rollup d'Aztec permet de paralléliser la preuve sur de nombreux petits nœuds qui peuvent fonctionner sur du matériel grand public pour atteindre une décentralisation élevée
En résumé, Aztec vise à construire des protocoles robustes, privés et résistants à la censure grâce à la participation de la communauté, et à générer des connaissances open source pour aider d'autres réseaux Ethereum.
Pour plus de renseignements, voici des liens ci-dessous 👇