L'un des moyens peu discutés, mais néanmoins très importants, dont Ethereum assure la sécurité et la décentralisation est sa philosophie multi-clients. Ethereum n'a intentionnellement aucun « client de référence » que tout le monde exécute par défaut : il existe plutôt une spécification gérée de manière collaborative (écrite aujourd'hui en Python, très lisible par l'homme mais très lent) et plusieurs équipes mettent en œuvre la spécification (également appelée « clients »), c'est ce que les utilisateurs exécutent réellement.
Chaque nœud Ethereum gère un client de consensus et un client d'exécution. À ce jour, aucun client de consensus ou d'exécution ne représente plus des deux tiers du réseau. Si un client qui détient moins d'un tiers des parts de sa catégorie rencontre un bogue, le réseau continuera à fonctionner normalement. Si un client qui détient entre 1/3 et 2/3 des parts dans sa catégorie (Prysm, Lighthouse ou Geth, par exemple) rencontre un bogue, la chaîne continuera à ajouter des blocs, mais arrêtera de les finaliser, laissant le temps aux développeurs d'intervenir.
L'une des principales transitions à venir, peu discutée mais néanmoins très importante, dans la manière dont la chaîne Ethereum sera validée est la montée en puissance des zK-EVM. LesSNARKs prouvant l'exécution de l'EVM sont en cours de développement depuis des années déjà, et cette technologie est activement utilisée par des protocoles de couche 2 appelés ZK rollups. Certains de ces cumuls ZK sont actifs sur le réseau principal aujourd'hui, et d'autres seront bientôt disponibles. Mais à long terme, les zK-EVM ne seront pas uniquement destinés aux cumuls ; nous voulons également les utiliser pour vérifier l'exécution en couche 1 (voir aussi : the Verge).
Une fois cela fait, les zk-EVM deviendront de facto un troisième type de client Ethereum, tout aussi important pour la sécurité du réseau que le sont les clients d'exécution et les clients de consensus aujourd'hui. Et cela soulève naturellement une question : comment les zK-EVM interagiront-ils avec la philosophie multi-clients ? L'une des choses les plus difficiles est déjà terminée : nous avons déjà plusieurs implémentations de ZK-EVM qui sont activement développées. Mais d'autres difficultés demeurent : comment créer un écosystème « multi-clients » permettant à ZK de prouver l'exactitude des blocs Ethereum ? Cette question soulève des défis techniques intéressants et, bien entendu, la question imminente de savoir si les compromis en valent la peine.
La philosophie multi-clients d'Ethereum est une sorte de décentralisation, et à l'instar de la décentralisation < a href= " https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274 " > en général, on peut se concentrer soit sur les avantages techniques de la décentralisation architecturale, soit sur les avantages sociaux de la décentralisation politique. En fin de compte, la philosophie multi-clients a été motivée par les deux et sert les deux.
Le principal avantage de la décentralisation technique est simple : elle réduit le risque qu'un bogue dans un logiciel entraîne une panne catastrophique de l'ensemble du réseau. Une situation historique qui illustre ce risque est le bug de débordement de Bitcoin en 2010. À l'époque, le code client Bitcoin ne vérifiait pas que la somme des résultats d'une transaction ne dépassait pas (arrondissez à zéro en additionnant jusqu'à un entier supérieur à 264−1), et quelqu'un a donc effectué une transaction qui a fait exactement cela, en se donnant des milliards de bitcoins. Le bogue a été découvert en quelques heures, et un correctif a été rapidement adopté et rapidement déployé sur le réseau, mais s'il y avait eu un écosystème mature à l'époque, ces pièces auraient été acceptées par les bourses, les ponts et autres structures, et les attaquants auraient pu s'en tirer avec beaucoup d'argent. S'il y avait eu cinq clients Bitcoin différents, il aurait été très peu probable qu'ils aient tous le même bogue. Il y aurait donc eu une scission immédiate, et le côté bogué aurait probablement perdu.
Il y a un compromis à faire en utilisant l'approche multi-clients pour minimiser le risque de bugs catastrophiques : au lieu de cela, vous obtenez des bogues d'échec consensuels. En d'autres termes, si vous avez deux clients, ils risquent d'avoir des interprétations légèrement différentes de certaines règles protocolaires. Bien que les deux interprétations soient raisonnables et n'autorisent pas le vol d'argent, un désaccord provoquerait une division de la chaîne en deux. Une grave scission de ce type s'est produite une fois dans l'histoire d'Ethereum (il y a eu d'autres divisions beaucoup plus petites où de très petites parties du réseau utilisant d'anciennes versions du code ont été bifurquées). Les défenseurs de l'approche client unique invoquent l'échec du consensus pour expliquer l'absence de plusieurs implémentations : s'il n'y a qu'un seul client, celui-ci ne sera pas en désaccord avec lui-même. Leur modèle de la façon dont le nombre de clients se traduit en risque peut ressembler à ceci :
Bien entendu, je ne suis pas d'accord avec cette analyse. Le cœur de mon désaccord est que (i) les bugs catastrophiques de style 2010 sont également importants, et (ii) vous n'avez jamais qu'un seul client. Ce dernier point est mis en évidence par le fork du Bitcoin en 2013: une rupture de chaîne s'est produite à la suite d'un désaccord entre deux versions différentes du client Bitcoin, dont l'une a révélé une limite accidentelle et non documentée au nombre d'objets pouvant être modifiés dans un seul bloc. Ainsi, un client en théorie est souvent deux clients en cabinet, et cinq clients en théorie, cela peut faire six ou sept clients en cabinet. Nous devrions donc simplement franchir le pas et nous placer du bon côté de la courbe de risque, et avoir au moins quelques clients différents.
Les développeurs de clients Monopoly ont un pouvoir politique important. Si un développeur client propose une modification et que les utilisateurs ne sont pas d'accord, il peut théoriquement refuser de télécharger la version mise à jour ou créer un fork sans celle-ci, mais dans la pratique, c'est souvent difficile pour les utilisateurs de le faire. Et si un changement de protocole désagréable était associé à une mise à jour de sécurité nécessaire ? Et si l'équipe principale menace de démissionner si elle n'obtient pas ce qu'elle veut ? Ou, plus calmement, et si l'équipe cliente monopolistique finissait par être la seule à posséder la meilleure expertise en matière de protocoles, laissant le reste de l'écosystème mal placé pour évaluer les arguments techniques avancés par l'équipe client, laissant à l'équipe client une grande marge de manœuvre pour défendre ses propres objectifs et valeurs, ce qui pourrait ne pas correspondre à ceux de l'ensemble de la communauté ?
Les inquiétudes suscitées par la politique des protocoles, en particulier dans le contexte de la guerre OP_RETURN du Bitcoin en 2013-2014, au cours de laquelle certains participants se sont montrés ouvertement favorables à la discrimination à l'égard de certains usages de la chaîne, ont largement contribué à l'adoption précoce par Ethereum d'une philosophie multi-clients, visant à empêcher un petit groupe de prendre ce type de décisions. Les préoccupations spécifiques à l'écosystème Ethereum, à savoir éviter la concentration du pouvoir au sein de la Fondation Ethereum elle-même, ont contribué à renforcer cette orientation. En 2018, il a été décidé de demander intentionnellement à la Fondation de ne pas implémenter le protocole Ethereum PoS (c'est-à-dire ce que l'on appelle aujourd'hui un « client consensuel »), laissant cette tâche entièrement à des équipes extérieures.
Aujourd'hui, les zK-EVM sont utilisés dans le cadre de cumuls. Cela augmente la mise à l'échelle en ne permettant que quelques exécutions coûteuses d'EVM hors chaîne, les autres vérifiant simplement les SNARKs publiés sur la chaîne qui prouvent que l'exécution de l'EVM a été correctement calculée. Cela permet également de ne pas inclure certaines données (en particulier les signatures) dans la chaîne, ce qui permet d'économiser sur les frais de gaz. Cela nous apporte de nombreux avantages en termes d'évolutivité, et la combinaison d'un calcul évolutif avec zK-EVM et de données évolutives avec < a href= " https://hackmd.io/@vbuterin/sharding_proposal #ELI5 -data-availability-sampling " > data availability sampling pourrait nous permettre d'évoluer très loin.
Cependant, le réseau Ethereum est aujourd'hui confronté à un autre problème, qu'aucune mise à l'échelle de la couche 2 ne peut résoudre à elle seule : la couche 1 est difficile à vérifier, au point que peu d'utilisateurs gèrent leur propre nœud. Au lieu de cela, la plupart des utilisateurs font simplement confiance à des fournisseurs tiers. Les clients légers tels que Helios et Succinct prennent des mesures pour résoudre le problème, mais un client léger est loin d'être un nœud de vérification complet : un client léger vérifie simplement les signatures d'un sous-ensemble aléatoire de validateurs appelé comité de synchronisation, et ne vérifie pas si la chaîne respecte réellement les règles du protocole. Pour que les utilisateurs puissent réellement vérifier que la chaîne respecte les règles, il faudrait faire quelque chose de différent.
Au fil du temps, nous pourrions réduire l'objectif de gaz par bloc de la couche 1 de 15 millions à 1 million, soit assez pour qu'un bloc contienne un seul SNARK et quelques opérations de dépôt et de retrait, mais pas grand-chose d'autre, et obliger ainsi presque toutes les activités des utilisateurs à passer aux protocoles de couche 2. Une telle conception pourrait tout de même prendre en charge de nombreux cumuls dans chaque bloc : nous pourrions utiliser des protocoles d'agrégation hors chaîne gérés par des créateurs personnalisés pour rassembler les SNARK issus de plusieurs protocoles de couche 2 et les combiner en un seul SNARK. Dans un tel monde, la seule fonction de la couche 1 serait de servir de centre d'échange pour les protocoles de couche 2, de vérifier leurs preuves et de faciliter de temps en temps des transferts de fonds importants entre eux.
Cette approche peut fonctionner, mais elle présente plusieurs points faibles importants :
Il semble donc plus raisonnable d'essayer de trouver un moyen d'utiliser zk-SNARKS pour vérifier la couche 1 elle-même.
Un ZK-EVM de type 1 (totalement équivalent à Ethereum) peut être utilisé pour vérifier l'exécution par EVM d'un bloc Ethereum (couche 1). Nous pourrions écrire davantage de code SNARK pour vérifier également le côté consensus d'un bloc. Ce serait un problème d'ingénierie difficile : aujourd'hui, les zK-EVM mettent des minutes à des heures pour vérifier les blocs d'Ethereum, et pour générer des preuves en temps réel, il faudrait (i) améliorer Ethereum lui-même afin de supprimer les composants hostiles au SNARK, (ii) soit des gains d'efficacité importants grâce à du matériel spécialisé, soit (iii) des améliorations architecturales avec beaucoup plus de parallélisation. Cependant, il n'y a aucune raison technologique fondamentale pour laquelle cela ne peut pas être fait. Je pense donc que ce sera fait, même si cela prend de nombreuses années.
C'est là que nous voyons l'intersection avec le paradigme multi-clients : si nous utilisons des zK-EVM pour vérifier la couche 1, quel ZK-EVM utilisons-nous ?
Trois options s'offrent à moi :
Pour moi, (3) semble idéal, du moins jusqu'à ce que notre technologie s'améliore au point que nous puissions prouver officiellement que toutes les implémentations de ZK-EVM sont équivalentes les unes aux autres. À ce moment-là, nous pourrons simplement choisir celle qui est la plus efficace. (1) sacrifierait les avantages du paradigme multi-clients, et (2) supprimerait la possibilité de développer de nouveaux clients et conduirait à un écosystème plus centralisé. (3) présente des défis, mais ces défis semblent moindres que ceux des deux autres options, du moins pour l'instant.
Implémenter (3) ne serait pas trop difficile : il peut y avoir un sous-réseau p2p pour chaque type de preuve, et un client qui utilise un type de preuve écouterait le sous-réseau correspondant et attendrait de recevoir une preuve reconnue comme valide par son vérificateur.
Les deux principaux défis de (3) sont probablement les suivants :
Le problème de latence pourrait être résolu en faisant preuve de prudence lors de la conception du protocole de finalité à emplacement unique. Les protocoles de finalité à emplacement unique nécessiteront probablement plus de deux cycles de consensus par créneau. Il se peut donc que le premier tour inclue le bloc, et que les nœuds vérifient les preuves uniquement avant de signer au troisième (ou dernier) tour. Cela garantit qu'un laps de temps important est toujours disponible entre la date limite de publication d'un bloc et la date à laquelle les épreuves devraient être disponibles.
Le problème de l'efficacité des données devrait être résolu en mettant en place un protocole distinct pour l'agrégation des données liées à la vérification. Pour les signatures, nous pourrions utiliser l'agrégation BLS, que l'ERC-4337 prend déjà en charge. Les zk-SNARKS, utilisés pour des raisons de confidentialité, constituent une autre catégorie importante de données liées à la vérification. Heureusement, ils ont souvent leurs propres protocoles d'agrégation.
Il convient également de mentionner que la vérification SNARK de la couche 1 présente un avantage important : le fait que l'exécution des EVM en chaîne n'ait plus besoin d'être vérifiée par tous les nœuds permet d'augmenter considérablement le nombre d'exécutions d'EVM en cours. Cela peut se faire soit en augmentant considérablement la limite de gaz de la couche 1, soit en introduisant des rollups intégrés, soit les deux.
Faire fonctionner correctement un écosystème ZK-EVM multi-clients ouvert demandera beaucoup de travail. Mais la très bonne nouvelle, c'est qu'une grande partie de ce travail est en cours ou aura lieu de toute façon :
Avec ces technologies en place, l'avenir s'annonce très prometteur. Les blocs d'Ethereum seraient plus petits qu'aujourd'hui, n'importe qui pourrait exécuter un nœud de vérification complet sur son ordinateur portable, son téléphone ou dans une extension de navigateur, et tout cela tout en préservant les avantages de la philosophie multi-clients d'Ethereum.
À plus long terme, bien entendu, tout peut arriver. Peut-être que l'IA va renforcer la vérification formelle au point de pouvoir facilement prouver l'équivalence des implémentations de ZK-EVM et identifier tous les bogues qui les différencient. Il pourrait même être pratique de commencer à travailler sur un tel projet dès maintenant. Si une telle approche officielle basée sur la vérification est couronnée de succès, différents mécanismes devront être mis en place pour garantir la poursuite de la décentralisation politique du protocole ; peut-être qu'à ce moment-là, le protocole serait considéré comme « complet » et les normes d'immuabilité seraient renforcées. Mais même si c'est l'avenir à long terme, le monde ouvert et multi-clients de ZK-EVM semble être un tremplin naturel qui est susceptible de se produire de toute façon.
À court terme, le chemin sera encore long. Les ZK-EVM sont là, mais pour devenir vraiment viables en couche 1, il faudrait qu'ils passent au type 1, et qu'ils puissent être prouvés assez rapidement pour que cela puisse se produire en temps réel. Avec suffisamment de parallélisation, c'est faisable, mais il faudra encore beaucoup de travail pour y parvenir. Les changements de consensus, tels que l'augmentation du coût du gaz de KECCAK, SHA256 et d'autres précompilations de fonctions de hachage, occuperont également une place importante dans le tableau. Cela dit, les premières étapes de la transition pourraient avoir lieu plus tôt que prévu : une fois que nous serons passés aux arbres Verkle et aux clients apatrides, les clients pourraient commencer à utiliser zK-EVM progressivement, et la transition vers un monde « ouvert multi-ZK-EVM » pourrait commencer à se faire d'elle-même.
L'un des moyens peu discutés, mais néanmoins très importants, dont Ethereum assure la sécurité et la décentralisation est sa philosophie multi-clients. Ethereum n'a intentionnellement aucun « client de référence » que tout le monde exécute par défaut : il existe plutôt une spécification gérée de manière collaborative (écrite aujourd'hui en Python, très lisible par l'homme mais très lent) et plusieurs équipes mettent en œuvre la spécification (également appelée « clients »), c'est ce que les utilisateurs exécutent réellement.
Chaque nœud Ethereum gère un client de consensus et un client d'exécution. À ce jour, aucun client de consensus ou d'exécution ne représente plus des deux tiers du réseau. Si un client qui détient moins d'un tiers des parts de sa catégorie rencontre un bogue, le réseau continuera à fonctionner normalement. Si un client qui détient entre 1/3 et 2/3 des parts dans sa catégorie (Prysm, Lighthouse ou Geth, par exemple) rencontre un bogue, la chaîne continuera à ajouter des blocs, mais arrêtera de les finaliser, laissant le temps aux développeurs d'intervenir.
L'une des principales transitions à venir, peu discutée mais néanmoins très importante, dans la manière dont la chaîne Ethereum sera validée est la montée en puissance des zK-EVM. LesSNARKs prouvant l'exécution de l'EVM sont en cours de développement depuis des années déjà, et cette technologie est activement utilisée par des protocoles de couche 2 appelés ZK rollups. Certains de ces cumuls ZK sont actifs sur le réseau principal aujourd'hui, et d'autres seront bientôt disponibles. Mais à long terme, les zK-EVM ne seront pas uniquement destinés aux cumuls ; nous voulons également les utiliser pour vérifier l'exécution en couche 1 (voir aussi : the Verge).
Une fois cela fait, les zk-EVM deviendront de facto un troisième type de client Ethereum, tout aussi important pour la sécurité du réseau que le sont les clients d'exécution et les clients de consensus aujourd'hui. Et cela soulève naturellement une question : comment les zK-EVM interagiront-ils avec la philosophie multi-clients ? L'une des choses les plus difficiles est déjà terminée : nous avons déjà plusieurs implémentations de ZK-EVM qui sont activement développées. Mais d'autres difficultés demeurent : comment créer un écosystème « multi-clients » permettant à ZK de prouver l'exactitude des blocs Ethereum ? Cette question soulève des défis techniques intéressants et, bien entendu, la question imminente de savoir si les compromis en valent la peine.
La philosophie multi-clients d'Ethereum est une sorte de décentralisation, et à l'instar de la décentralisation < a href= " https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274 " > en général, on peut se concentrer soit sur les avantages techniques de la décentralisation architecturale, soit sur les avantages sociaux de la décentralisation politique. En fin de compte, la philosophie multi-clients a été motivée par les deux et sert les deux.
Le principal avantage de la décentralisation technique est simple : elle réduit le risque qu'un bogue dans un logiciel entraîne une panne catastrophique de l'ensemble du réseau. Une situation historique qui illustre ce risque est le bug de débordement de Bitcoin en 2010. À l'époque, le code client Bitcoin ne vérifiait pas que la somme des résultats d'une transaction ne dépassait pas (arrondissez à zéro en additionnant jusqu'à un entier supérieur à 264−1), et quelqu'un a donc effectué une transaction qui a fait exactement cela, en se donnant des milliards de bitcoins. Le bogue a été découvert en quelques heures, et un correctif a été rapidement adopté et rapidement déployé sur le réseau, mais s'il y avait eu un écosystème mature à l'époque, ces pièces auraient été acceptées par les bourses, les ponts et autres structures, et les attaquants auraient pu s'en tirer avec beaucoup d'argent. S'il y avait eu cinq clients Bitcoin différents, il aurait été très peu probable qu'ils aient tous le même bogue. Il y aurait donc eu une scission immédiate, et le côté bogué aurait probablement perdu.
Il y a un compromis à faire en utilisant l'approche multi-clients pour minimiser le risque de bugs catastrophiques : au lieu de cela, vous obtenez des bogues d'échec consensuels. En d'autres termes, si vous avez deux clients, ils risquent d'avoir des interprétations légèrement différentes de certaines règles protocolaires. Bien que les deux interprétations soient raisonnables et n'autorisent pas le vol d'argent, un désaccord provoquerait une division de la chaîne en deux. Une grave scission de ce type s'est produite une fois dans l'histoire d'Ethereum (il y a eu d'autres divisions beaucoup plus petites où de très petites parties du réseau utilisant d'anciennes versions du code ont été bifurquées). Les défenseurs de l'approche client unique invoquent l'échec du consensus pour expliquer l'absence de plusieurs implémentations : s'il n'y a qu'un seul client, celui-ci ne sera pas en désaccord avec lui-même. Leur modèle de la façon dont le nombre de clients se traduit en risque peut ressembler à ceci :
Bien entendu, je ne suis pas d'accord avec cette analyse. Le cœur de mon désaccord est que (i) les bugs catastrophiques de style 2010 sont également importants, et (ii) vous n'avez jamais qu'un seul client. Ce dernier point est mis en évidence par le fork du Bitcoin en 2013: une rupture de chaîne s'est produite à la suite d'un désaccord entre deux versions différentes du client Bitcoin, dont l'une a révélé une limite accidentelle et non documentée au nombre d'objets pouvant être modifiés dans un seul bloc. Ainsi, un client en théorie est souvent deux clients en cabinet, et cinq clients en théorie, cela peut faire six ou sept clients en cabinet. Nous devrions donc simplement franchir le pas et nous placer du bon côté de la courbe de risque, et avoir au moins quelques clients différents.
Les développeurs de clients Monopoly ont un pouvoir politique important. Si un développeur client propose une modification et que les utilisateurs ne sont pas d'accord, il peut théoriquement refuser de télécharger la version mise à jour ou créer un fork sans celle-ci, mais dans la pratique, c'est souvent difficile pour les utilisateurs de le faire. Et si un changement de protocole désagréable était associé à une mise à jour de sécurité nécessaire ? Et si l'équipe principale menace de démissionner si elle n'obtient pas ce qu'elle veut ? Ou, plus calmement, et si l'équipe cliente monopolistique finissait par être la seule à posséder la meilleure expertise en matière de protocoles, laissant le reste de l'écosystème mal placé pour évaluer les arguments techniques avancés par l'équipe client, laissant à l'équipe client une grande marge de manœuvre pour défendre ses propres objectifs et valeurs, ce qui pourrait ne pas correspondre à ceux de l'ensemble de la communauté ?
Les inquiétudes suscitées par la politique des protocoles, en particulier dans le contexte de la guerre OP_RETURN du Bitcoin en 2013-2014, au cours de laquelle certains participants se sont montrés ouvertement favorables à la discrimination à l'égard de certains usages de la chaîne, ont largement contribué à l'adoption précoce par Ethereum d'une philosophie multi-clients, visant à empêcher un petit groupe de prendre ce type de décisions. Les préoccupations spécifiques à l'écosystème Ethereum, à savoir éviter la concentration du pouvoir au sein de la Fondation Ethereum elle-même, ont contribué à renforcer cette orientation. En 2018, il a été décidé de demander intentionnellement à la Fondation de ne pas implémenter le protocole Ethereum PoS (c'est-à-dire ce que l'on appelle aujourd'hui un « client consensuel »), laissant cette tâche entièrement à des équipes extérieures.
Aujourd'hui, les zK-EVM sont utilisés dans le cadre de cumuls. Cela augmente la mise à l'échelle en ne permettant que quelques exécutions coûteuses d'EVM hors chaîne, les autres vérifiant simplement les SNARKs publiés sur la chaîne qui prouvent que l'exécution de l'EVM a été correctement calculée. Cela permet également de ne pas inclure certaines données (en particulier les signatures) dans la chaîne, ce qui permet d'économiser sur les frais de gaz. Cela nous apporte de nombreux avantages en termes d'évolutivité, et la combinaison d'un calcul évolutif avec zK-EVM et de données évolutives avec < a href= " https://hackmd.io/@vbuterin/sharding_proposal #ELI5 -data-availability-sampling " > data availability sampling pourrait nous permettre d'évoluer très loin.
Cependant, le réseau Ethereum est aujourd'hui confronté à un autre problème, qu'aucune mise à l'échelle de la couche 2 ne peut résoudre à elle seule : la couche 1 est difficile à vérifier, au point que peu d'utilisateurs gèrent leur propre nœud. Au lieu de cela, la plupart des utilisateurs font simplement confiance à des fournisseurs tiers. Les clients légers tels que Helios et Succinct prennent des mesures pour résoudre le problème, mais un client léger est loin d'être un nœud de vérification complet : un client léger vérifie simplement les signatures d'un sous-ensemble aléatoire de validateurs appelé comité de synchronisation, et ne vérifie pas si la chaîne respecte réellement les règles du protocole. Pour que les utilisateurs puissent réellement vérifier que la chaîne respecte les règles, il faudrait faire quelque chose de différent.
Au fil du temps, nous pourrions réduire l'objectif de gaz par bloc de la couche 1 de 15 millions à 1 million, soit assez pour qu'un bloc contienne un seul SNARK et quelques opérations de dépôt et de retrait, mais pas grand-chose d'autre, et obliger ainsi presque toutes les activités des utilisateurs à passer aux protocoles de couche 2. Une telle conception pourrait tout de même prendre en charge de nombreux cumuls dans chaque bloc : nous pourrions utiliser des protocoles d'agrégation hors chaîne gérés par des créateurs personnalisés pour rassembler les SNARK issus de plusieurs protocoles de couche 2 et les combiner en un seul SNARK. Dans un tel monde, la seule fonction de la couche 1 serait de servir de centre d'échange pour les protocoles de couche 2, de vérifier leurs preuves et de faciliter de temps en temps des transferts de fonds importants entre eux.
Cette approche peut fonctionner, mais elle présente plusieurs points faibles importants :
Il semble donc plus raisonnable d'essayer de trouver un moyen d'utiliser zk-SNARKS pour vérifier la couche 1 elle-même.
Un ZK-EVM de type 1 (totalement équivalent à Ethereum) peut être utilisé pour vérifier l'exécution par EVM d'un bloc Ethereum (couche 1). Nous pourrions écrire davantage de code SNARK pour vérifier également le côté consensus d'un bloc. Ce serait un problème d'ingénierie difficile : aujourd'hui, les zK-EVM mettent des minutes à des heures pour vérifier les blocs d'Ethereum, et pour générer des preuves en temps réel, il faudrait (i) améliorer Ethereum lui-même afin de supprimer les composants hostiles au SNARK, (ii) soit des gains d'efficacité importants grâce à du matériel spécialisé, soit (iii) des améliorations architecturales avec beaucoup plus de parallélisation. Cependant, il n'y a aucune raison technologique fondamentale pour laquelle cela ne peut pas être fait. Je pense donc que ce sera fait, même si cela prend de nombreuses années.
C'est là que nous voyons l'intersection avec le paradigme multi-clients : si nous utilisons des zK-EVM pour vérifier la couche 1, quel ZK-EVM utilisons-nous ?
Trois options s'offrent à moi :
Pour moi, (3) semble idéal, du moins jusqu'à ce que notre technologie s'améliore au point que nous puissions prouver officiellement que toutes les implémentations de ZK-EVM sont équivalentes les unes aux autres. À ce moment-là, nous pourrons simplement choisir celle qui est la plus efficace. (1) sacrifierait les avantages du paradigme multi-clients, et (2) supprimerait la possibilité de développer de nouveaux clients et conduirait à un écosystème plus centralisé. (3) présente des défis, mais ces défis semblent moindres que ceux des deux autres options, du moins pour l'instant.
Implémenter (3) ne serait pas trop difficile : il peut y avoir un sous-réseau p2p pour chaque type de preuve, et un client qui utilise un type de preuve écouterait le sous-réseau correspondant et attendrait de recevoir une preuve reconnue comme valide par son vérificateur.
Les deux principaux défis de (3) sont probablement les suivants :
Le problème de latence pourrait être résolu en faisant preuve de prudence lors de la conception du protocole de finalité à emplacement unique. Les protocoles de finalité à emplacement unique nécessiteront probablement plus de deux cycles de consensus par créneau. Il se peut donc que le premier tour inclue le bloc, et que les nœuds vérifient les preuves uniquement avant de signer au troisième (ou dernier) tour. Cela garantit qu'un laps de temps important est toujours disponible entre la date limite de publication d'un bloc et la date à laquelle les épreuves devraient être disponibles.
Le problème de l'efficacité des données devrait être résolu en mettant en place un protocole distinct pour l'agrégation des données liées à la vérification. Pour les signatures, nous pourrions utiliser l'agrégation BLS, que l'ERC-4337 prend déjà en charge. Les zk-SNARKS, utilisés pour des raisons de confidentialité, constituent une autre catégorie importante de données liées à la vérification. Heureusement, ils ont souvent leurs propres protocoles d'agrégation.
Il convient également de mentionner que la vérification SNARK de la couche 1 présente un avantage important : le fait que l'exécution des EVM en chaîne n'ait plus besoin d'être vérifiée par tous les nœuds permet d'augmenter considérablement le nombre d'exécutions d'EVM en cours. Cela peut se faire soit en augmentant considérablement la limite de gaz de la couche 1, soit en introduisant des rollups intégrés, soit les deux.
Faire fonctionner correctement un écosystème ZK-EVM multi-clients ouvert demandera beaucoup de travail. Mais la très bonne nouvelle, c'est qu'une grande partie de ce travail est en cours ou aura lieu de toute façon :
Avec ces technologies en place, l'avenir s'annonce très prometteur. Les blocs d'Ethereum seraient plus petits qu'aujourd'hui, n'importe qui pourrait exécuter un nœud de vérification complet sur son ordinateur portable, son téléphone ou dans une extension de navigateur, et tout cela tout en préservant les avantages de la philosophie multi-clients d'Ethereum.
À plus long terme, bien entendu, tout peut arriver. Peut-être que l'IA va renforcer la vérification formelle au point de pouvoir facilement prouver l'équivalence des implémentations de ZK-EVM et identifier tous les bogues qui les différencient. Il pourrait même être pratique de commencer à travailler sur un tel projet dès maintenant. Si une telle approche officielle basée sur la vérification est couronnée de succès, différents mécanismes devront être mis en place pour garantir la poursuite de la décentralisation politique du protocole ; peut-être qu'à ce moment-là, le protocole serait considéré comme « complet » et les normes d'immuabilité seraient renforcées. Mais même si c'est l'avenir à long terme, le monde ouvert et multi-clients de ZK-EVM semble être un tremplin naturel qui est susceptible de se produire de toute façon.
À court terme, le chemin sera encore long. Les ZK-EVM sont là, mais pour devenir vraiment viables en couche 1, il faudrait qu'ils passent au type 1, et qu'ils puissent être prouvés assez rapidement pour que cela puisse se produire en temps réel. Avec suffisamment de parallélisation, c'est faisable, mais il faudra encore beaucoup de travail pour y parvenir. Les changements de consensus, tels que l'augmentation du coût du gaz de KECCAK, SHA256 et d'autres précompilations de fonctions de hachage, occuperont également une place importante dans le tableau. Cela dit, les premières étapes de la transition pourraient avoir lieu plus tôt que prévu : une fois que nous serons passés aux arbres Verkle et aux clients apatrides, les clients pourraient commencer à utiliser zK-EVM progressivement, et la transition vers un monde « ouvert multi-ZK-EVM » pourrait commencer à se faire d'elle-même.