Une machine virtuelle est un système informatique simulé par un logiciel qui fournit un environnement d'exécution pour les programmes. Il peut émuler divers périphériques matériels, afin que les programmes puissent s'exécuter dans un environnement contrôlé et compatible. La machine virtuelle Ethereum (EVM) est une machine virtuelle basée sur une pile utilisée pour exécuter des contrats intelligents Ethereum.
zkEVM est un EVM qui intègre une technologie de preuve à connaissance zéro/validité. Il permet de vérifier l'exécution de l'EVM à l'aide de preuves à connaissance nulle sans exiger que tous les vérificateurs réexécutent l'EVM. Il existe différents produits zkEVM sur le marché, chacun avec sa propre approche et sa propre conception.
La raison de zkEVM est le besoin d'une machine virtuelle qui prend en charge l'exécution de contrats intelligents sur la couche 2. De plus, certains projets choisissent d'utiliser zkEVM pour tirer parti du vaste écosystème d'utilisateurs de l'EVM et concevoir un jeu d'instructions plus convivial pour les preuves à connaissance nulle.
Kakarot est zkEVM implémenté sur Starknet en utilisant le langage Cairo. Il simule la pile, la mémoire, l'exécution et d'autres aspects de l'EVM sous la forme de contrats intelligents Cairo. Kakarot a dû faire face à des défis tels que la compatibilité avec le système de compte Starknet, l'optimisation des coûts et la stabilité, car la langue du Caire était encore expérimentale.
Warp est un traducteur du code Solidity vers le code Cairo, offrant une compatibilité à un niveau de langage de haut niveau. Kakarot, d'autre part, offre une compatibilité au niveau EVM en implémentant les opcodes EVM et la précompilation.
Qu'est-ce qu'une machine virtuelle ?
Pour clarifier ce qu'est une machine virtuelle, nous devons d'abord parler du processus d'exécution informatique sous l'architecture actuelle de von Neumann. Divers programmes exécutés sur un ordinateur sont généralement transformés par des couches de langages de haut niveau et génèrent finalement des codes machine compréhensibles par la machine pour l'exécution. Selon le mode de conversion en code machine, les langages de haut niveau peuvent être grossièrement divisés en langages compilés et en langages interprétés.
Un langage compilé signifie qu'une fois le code écrit, il doit être traité par un compilateur pour convertir le code de langage de haut niveau en code machine et générer un fichier exécutable. Une fois compilé, il peut être exécuté plusieurs fois avec une plus grande efficacité. L'avantage d'un langage compilé est que le code a été converti en code machine lors de la compilation, de sorte que la vitesse d'exécution est rapide et que le programme peut être exécuté dans un environnement sans compilateur, ce qui est pratique pour les utilisateurs et n'a pas besoin pour installer un logiciel supplémentaire. Les langages compilés courants incluent C, C++, Go, etc.
Le pendant des langages compilés est les langages interprétés. Un langage interprété signifie que le code est interprété et exécuté ligne par ligne via un interpréteur, et qu'il s'exécute directement sur l'ordinateur, et que le processus de traduction doit être retraduit à chaque fois qu'il est exécuté. Les avantages des langages interprétés sont une efficacité de développement élevée et un débogage de code facile, mais la vitesse d'exécution est relativement lente. Les langages interprétés courants incluent Python, Java, Ruby, etc.
Il faut souligner que le langage ne fait pas de distinction entre les types compilés et interprétés par essence, mais il y aura quelques tendances dans la conception initiale. C/C++ est compilé et exécuté dans la plupart des cas, mais il peut aussi être interprété et exécuté (Cint, Cling). De nombreux langages interprétés au sens traditionnel sont désormais compilés en codes intermédiaires et exécutés sur des machines virtuelles (Python, Lua).
Connaissant le processus d'exécution de la machine physique, parlons maintenant de la machine virtuelle.
Les machines virtuelles fournissent généralement un environnement informatique virtuel en simulant différents périphériques matériels. Les périphériques matériels pouvant être simulés par différentes machines virtuelles sont différents, mais incluent généralement le processeur, la mémoire, le disque dur, l'interface réseau, etc.
Prenons l'exemple de la machine virtuelle Ethereum (EVM).EVM est une machine virtuelle basée sur une pile qui est utilisée pour exécuter des contrats intelligents Ethereum. EVM fournit un environnement informatique virtuel en simulant des périphériques matériels tels que le processeur, la mémoire, le stockage et la pile.
Plus précisément, l'EVM est une machine virtuelle basée sur une pile qui utilise une pile pour stocker des données et exécuter des instructions. Le jeu d'instructions de l'EVM comprend divers opcodes, tels que des opérations arithmétiques, des opérations logiques, des opérations de stockage, des opérations de saut, etc. Ces instructions peuvent être exécutées sur la pile de l'EVM pour terminer l'exécution de contrats intelligents.
La mémoire et le stockage émulés par l'EVM sont des dispositifs utilisés pour stocker l'état et les données des contrats intelligents. L'EVM traite la mémoire et le stockage comme deux zones distinctes et peut accéder à l'état et aux données des contrats intelligents en lisant et en écrivant dans la mémoire et le stockage.
La pile émulée par l'EVM est utilisée pour stocker les opérandes et les résultats des instructions. La plupart des instructions du jeu d'instructions de l'EVM sont basées sur la pile, lisant les opérandes de la pile et repoussant les résultats sur la pile.
En bref, EVM fournit un environnement informatique virtuel en simulant des périphériques matériels tels que le processeur, la mémoire, le stockage et la pile, qui peuvent exécuter les instructions des contrats intelligents et stocker l'état et les données des contrats intelligents. En fonctionnement réel, l'EVM chargera le bytecode du contrat intelligent en mémoire et exécutera la logique du contrat intelligent en exécutant le jeu d'instructions. Ce qu'EVM remplace en fait, c'est la partie système d'exploitation + matériel dans la figure ci-dessus.
Le processus de conception d'EVM est évidemment bottom-up.D'abord, l'environnement matériel simulé (pile, mémoire) est finalisé, puis un ensemble d'instructions d'assemblage (Opcode) et de bytecode (Bytecode) sont conçus en fonction de l'environnement correspondant. . Bien que le jeu d'instructions d'assemblage soit destiné à être lu par les gens, il implique beaucoup de connaissances de bas niveau, a des exigences élevées pour les développeurs et est lourd à développer. Par conséquent, un langage de haut niveau est nécessaire pour protéger les langages de bas niveau obscurs et encombrants. appels et offrent aux développeurs une meilleure expérience. En raison de la conception personnalisée du jeu d'instructions d'assemblage d'EVM, il est difficile d'utiliser directement les langages de haut niveau traditionnels et de simplement recréer un nouveau langage de haut niveau à adapter à la machine virtuelle. La communauté Ethereum a conçu deux langages compilés de haut niveau - Solidity et Vyper - pour l'efficacité de l'exécution EVM. La solidité n'a pas besoin d'être soulignée, Vyper est un langage EVM de haut niveau conçu par Vitalik après avoir amélioré certains des défauts de Solidity, mais il n'a pas été largement adopté dans la communauté, il disparaît donc progressivement de la scène de l'histoire.
Qu'est-ce que zkEVM
Pour le dire simplement, zkEVM est un EVM qui utilise la technologie de preuve à connaissance zéro/preuve de validité, de sorte que le processus d'exécution de l'EVM peut être vérifié plus efficacement et à moindre coût grâce à une preuve à connaissance zéro/preuve de validité sans exiger que tous les vérificateurs portent le processus d'exécution de l'EVM.
Il existe de nombreux produits zkEVM sur le marché, et la piste est chaude. Les principaux acteurs sont Starknet, zkSync, Scroll, Taiko, Linea, Polygon zkEVM (anciennement Polygon Hermez), etc., qui sont divisés en 5 catégories (1, 2 , 2.5, 3, 4) par vitalik . Le contenu spécifique peut être consulté sur le blog de Vitalik.
Pourquoi zkEVM est nécessaire
Cette question doit être examinée sous deux angles.
Les tentatives initiales de zk Rollup ne peuvent réaliser que des fonctions de transfert et de transaction relativement simples, telles que zkSync Lite, Loopring, etc. Mais une fois que la mer était devenue trop difficile, les gens utilisaient l'EVM complet de Turing sur Ethereum.Lorsqu'il était impossible de créer diverses applications par programmation, les gens ont commencé à faire appel à des machines virtuelles sur L2. La nécessité de rédiger des contrats intelligents en est une.
Étant donné que certaines conceptions de l'EVM ne permettent pas de générer une preuve de connaissance/validité sans connaissance, certains joueurs choisissent d'utiliser un jeu d'instructions compatible avec la preuve de connaissance/validité sans connaissance au niveau inférieur, comme l'assemblage du Caire de Starknet et celui de zkSync. Instruction de zinc. Mais en même temps, tout le monde ne veut pas abandonner l'énorme écologie des utilisateurs d'EVM, ils choisissent donc d'être compatibles avec EVM sur la couche supérieure, qui est de type 3 et 4 zkEVM. Certains joueurs insistent toujours sur le jeu d'instructions EVM traditionnel Opcode et se concentrent sur la génération de preuves plus efficaces pour Opcode, qui sont de type 1 et de type 2 zkEVM. L'énorme écologie de l'EVM est divisée en deux.
Kakarot : Une machine virtuelle sur une machine virtuelle ?
Pourquoi une autre machine virtuelle peut-elle être créée sur la machine virtuelle ? Cette chose est courante pour les praticiens de l'informatique, mais elle n'est peut-être pas si évidente pour les utilisateurs qui ne comprennent pas les ordinateurs. En fait, c'est facile à comprendre. C'est comme des blocs de construction. Tant que la couche inférieure est suffisamment solide (avec un environnement d'exécution Turing-complet), les blocs de construction peuvent être empilés sur la couche supérieure sans limite. Mais quel que soit le nombre de couches construites, l'exécution finale doit toujours être gérée par le matériel physique de niveau le plus bas, donc l'augmentation du nombre de couches entraînera une diminution de l'efficacité. Dans le même temps, en raison des différentes conceptions des différents blocs de construction (différentes conceptions de machines virtuelles), à mesure que les blocs de construction sont construits de plus en plus haut, la possibilité que les blocs de construction s'effondrent (erreurs d'exécution) est plus grande, ce qui nécessite un niveau plus élevé d'assistance technique.
Kakarot est un EVM implémenté en langage Cairo sur Starknet. Il utilise des contrats intelligents Cairo pour simuler la pile, la mémoire, l'exécution, etc. dans l'EVM. Relativement parlant, il n'est pas difficile d'implémenter EVM.En plus de l'EVM écrit en Golang dans Go-Ethereum, qui a le taux d'utilisation le plus élevé, il existe également des EVM écrits en Python, Java, Java et Rust.
La difficulté technique de Kakarot zkEVM est que le protocole existe sous forme de contrat sur la chaîne Starknet, ce qui entraîne deux problèmes clés.
Compatibilité Starknet utilise un système de compte complètement différent d'Ethereum. Les comptes dans Ethereum sont divisés en EOA (compte détenu en externe) et CA (compte contractuel). Cependant, Starknet prend en charge l'abstraction de compte natif, et tous les comptes sont des contrats. compte. Dans le même temps, en raison des différents algorithmes cryptographiques utilisés, les utilisateurs ne peuvent pas utiliser la même entropie pour générer la même adresse dans Starknet que dans Ethereum.
Coût Étant donné que kakarot zkEVM existe sur la chaîne en tant que contrat, il a des exigences élevées pour la mise en œuvre du code et doit être optimisé pour le gaz autant que possible afin de réduire les coûts d'interaction.
Stabilité Contrairement à l'utilisation de langages traditionnels de haut niveau tels que Golang, Rust, Python, etc., le langage Cairo est encore au stade expérimental, de Cairo 0 à Cairo 1 à Cairo 2 (ou si vous préférez, Cairo 1 version 2), l'équipe officielle est toujours Les fonctionnalités linguistiques sont constamment révisées. Dans le même temps, Cairo VM n'a pas été suffisamment testé et la possibilité de réécritures ultérieures à grande échelle ne peut être exclue.
Le protocole kakarot se compose de cinq composants principaux (quatre sont écrits dans le document GitHub, EOA n'est pas inclus, cet article a été ajusté pour la commodité des lecteurs) :
Kakarot (Core) : responsable de l'exécution des transactions sous la forme d'Ethereum et de la fourniture des comptes Starknet correspondants aux utilisateurs d'Ethereum
Contract Accounts : CA au sens d'Ethereum, chargé de stocker le bytecode du contrat et l'état des variables dans le contrat
Comptes détenus en externe : EOA au sens d'Ethereum, responsable de la transmission des transactions Ethereum à Kakarot Core
Registre des comptes : stocke la correspondance entre les comptes Ethereum et les comptes Starknet.
Registre Blockhash : en tant qu'opcode spécial, Blockhash a besoin de données de bloc passées, et Kakarot ne peut pas obtenir directement les données sur la chaîne. Ce composant stocke la relation de mappage de block_number -> block_hash, qui est écrite par l'administrateur et fournie à Kakarot Core.
Selon les commentaires du PDG de kakarot, Elias Tazartes, dans la dernière version de l'équipe, la conception de Account Resister a été abandonnée et, à la place, un mappage d'une adresse Starknet de 31 octets à une adresse EVM de 20 bits a été utilisé directement pour enregistrer la relation correspondante. . À l'avenir, pour améliorer l'interopérabilité et permettre aux contrats Starknet d'enregistrer leurs propres adresses EVM, la conception du registre des comptes pourra être réutilisée.
Compatible avec EVM sur Starknet : Quelle est la différence entre Warp et kakarot
Selon le type zkEVM défini par Vitalik, Warp appartient au Type-4, tandis que kakarot appartient actuellement au Type-2.5.
Warp est un traducteur qui convertit le code Solidity en code Cairo. La raison pour laquelle on ne l'appelle pas un compilateur est probablement que la sortie Cairo est toujours un langage de haut niveau. Grâce à Warp, les développeurs de Solidity peuvent conserver le statut de développement d'origine sans avoir à apprendre le nouveau langage Cairo. Pour de nombreuses parties du projet, Warp abaisse le seuil d'entrée dans l'écosystème Starknet et n'a pas besoin d'utiliser Cairo pour réécrire une grande quantité de code d'ingénierie.
Bien que l'idée de traduction soit simple, la compatibilité est également la pire. Certains codes Solidity ne peuvent pas être bien traduits au Caire. La logique de code impliquant le système de compte, l'algorithme cryptographique, etc. doit modifier le code source pour terminer la migration. Les fonctionnalités spécifiques non prises en charge peuvent être consultées dans la documentation Warp. Par exemple, de nombreux projets distingueront la logique d'exécution des comptes EOA et des comptes contractuels, mais tous les comptes dans Starknet sont des comptes contractuels, et cette partie du code doit être modifiée avant la traduction.
Warp est compatible au niveau du langage de haut niveau et kakarot est compatible au niveau EVM.
La réécriture complète d'EVM et l'implémentation un par un d'Opcode et de la pré-compilation permettent à kakarot d'avoir une compatibilité native plus élevée. Après tout, l'exécution dans la même machine virtuelle (EVM) est toujours plus compatible que l'exécution dans une autre machine virtuelle (Cairo VM). Le registre des comptes et le registre Blockhash protègent intelligemment les différences entre les différents systèmes et minimisent les frictions liées à la migration des utilisateurs.
Équipe Kakarot
Merci à l'équipe de kakarot pour leurs précieux commentaires sur cet article, en particulier à Elias Tazartes. Merci Monsieur!
Voir l'original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Kakarot : Explorer la route compatible EVM de Starknet
Auteur : Cynique
TL; DR
Qu'est-ce qu'une machine virtuelle ?
Pour clarifier ce qu'est une machine virtuelle, nous devons d'abord parler du processus d'exécution informatique sous l'architecture actuelle de von Neumann. Divers programmes exécutés sur un ordinateur sont généralement transformés par des couches de langages de haut niveau et génèrent finalement des codes machine compréhensibles par la machine pour l'exécution. Selon le mode de conversion en code machine, les langages de haut niveau peuvent être grossièrement divisés en langages compilés et en langages interprétés.
Un langage compilé signifie qu'une fois le code écrit, il doit être traité par un compilateur pour convertir le code de langage de haut niveau en code machine et générer un fichier exécutable. Une fois compilé, il peut être exécuté plusieurs fois avec une plus grande efficacité. L'avantage d'un langage compilé est que le code a été converti en code machine lors de la compilation, de sorte que la vitesse d'exécution est rapide et que le programme peut être exécuté dans un environnement sans compilateur, ce qui est pratique pour les utilisateurs et n'a pas besoin pour installer un logiciel supplémentaire. Les langages compilés courants incluent C, C++, Go, etc.
Le pendant des langages compilés est les langages interprétés. Un langage interprété signifie que le code est interprété et exécuté ligne par ligne via un interpréteur, et qu'il s'exécute directement sur l'ordinateur, et que le processus de traduction doit être retraduit à chaque fois qu'il est exécuté. Les avantages des langages interprétés sont une efficacité de développement élevée et un débogage de code facile, mais la vitesse d'exécution est relativement lente. Les langages interprétés courants incluent Python, Java, Ruby, etc.
Connaissant le processus d'exécution de la machine physique, parlons maintenant de la machine virtuelle.
Les machines virtuelles fournissent généralement un environnement informatique virtuel en simulant différents périphériques matériels. Les périphériques matériels pouvant être simulés par différentes machines virtuelles sont différents, mais incluent généralement le processeur, la mémoire, le disque dur, l'interface réseau, etc.
Prenons l'exemple de la machine virtuelle Ethereum (EVM).EVM est une machine virtuelle basée sur une pile qui est utilisée pour exécuter des contrats intelligents Ethereum. EVM fournit un environnement informatique virtuel en simulant des périphériques matériels tels que le processeur, la mémoire, le stockage et la pile.
Plus précisément, l'EVM est une machine virtuelle basée sur une pile qui utilise une pile pour stocker des données et exécuter des instructions. Le jeu d'instructions de l'EVM comprend divers opcodes, tels que des opérations arithmétiques, des opérations logiques, des opérations de stockage, des opérations de saut, etc. Ces instructions peuvent être exécutées sur la pile de l'EVM pour terminer l'exécution de contrats intelligents.
La mémoire et le stockage émulés par l'EVM sont des dispositifs utilisés pour stocker l'état et les données des contrats intelligents. L'EVM traite la mémoire et le stockage comme deux zones distinctes et peut accéder à l'état et aux données des contrats intelligents en lisant et en écrivant dans la mémoire et le stockage.
La pile émulée par l'EVM est utilisée pour stocker les opérandes et les résultats des instructions. La plupart des instructions du jeu d'instructions de l'EVM sont basées sur la pile, lisant les opérandes de la pile et repoussant les résultats sur la pile.
En bref, EVM fournit un environnement informatique virtuel en simulant des périphériques matériels tels que le processeur, la mémoire, le stockage et la pile, qui peuvent exécuter les instructions des contrats intelligents et stocker l'état et les données des contrats intelligents. En fonctionnement réel, l'EVM chargera le bytecode du contrat intelligent en mémoire et exécutera la logique du contrat intelligent en exécutant le jeu d'instructions. Ce qu'EVM remplace en fait, c'est la partie système d'exploitation + matériel dans la figure ci-dessus.
Le processus de conception d'EVM est évidemment bottom-up.D'abord, l'environnement matériel simulé (pile, mémoire) est finalisé, puis un ensemble d'instructions d'assemblage (Opcode) et de bytecode (Bytecode) sont conçus en fonction de l'environnement correspondant. . Bien que le jeu d'instructions d'assemblage soit destiné à être lu par les gens, il implique beaucoup de connaissances de bas niveau, a des exigences élevées pour les développeurs et est lourd à développer. Par conséquent, un langage de haut niveau est nécessaire pour protéger les langages de bas niveau obscurs et encombrants. appels et offrent aux développeurs une meilleure expérience. En raison de la conception personnalisée du jeu d'instructions d'assemblage d'EVM, il est difficile d'utiliser directement les langages de haut niveau traditionnels et de simplement recréer un nouveau langage de haut niveau à adapter à la machine virtuelle. La communauté Ethereum a conçu deux langages compilés de haut niveau - Solidity et Vyper - pour l'efficacité de l'exécution EVM. La solidité n'a pas besoin d'être soulignée, Vyper est un langage EVM de haut niveau conçu par Vitalik après avoir amélioré certains des défauts de Solidity, mais il n'a pas été largement adopté dans la communauté, il disparaît donc progressivement de la scène de l'histoire.
Qu'est-ce que zkEVM
Pour le dire simplement, zkEVM est un EVM qui utilise la technologie de preuve à connaissance zéro/preuve de validité, de sorte que le processus d'exécution de l'EVM peut être vérifié plus efficacement et à moindre coût grâce à une preuve à connaissance zéro/preuve de validité sans exiger que tous les vérificateurs portent le processus d'exécution de l'EVM.
Il existe de nombreux produits zkEVM sur le marché, et la piste est chaude. Les principaux acteurs sont Starknet, zkSync, Scroll, Taiko, Linea, Polygon zkEVM (anciennement Polygon Hermez), etc., qui sont divisés en 5 catégories (1, 2 , 2.5, 3, 4) par vitalik . Le contenu spécifique peut être consulté sur le blog de Vitalik.
Pourquoi zkEVM est nécessaire
Cette question doit être examinée sous deux angles.
Les tentatives initiales de zk Rollup ne peuvent réaliser que des fonctions de transfert et de transaction relativement simples, telles que zkSync Lite, Loopring, etc. Mais une fois que la mer était devenue trop difficile, les gens utilisaient l'EVM complet de Turing sur Ethereum.Lorsqu'il était impossible de créer diverses applications par programmation, les gens ont commencé à faire appel à des machines virtuelles sur L2. La nécessité de rédiger des contrats intelligents en est une.
Étant donné que certaines conceptions de l'EVM ne permettent pas de générer une preuve de connaissance/validité sans connaissance, certains joueurs choisissent d'utiliser un jeu d'instructions compatible avec la preuve de connaissance/validité sans connaissance au niveau inférieur, comme l'assemblage du Caire de Starknet et celui de zkSync. Instruction de zinc. Mais en même temps, tout le monde ne veut pas abandonner l'énorme écologie des utilisateurs d'EVM, ils choisissent donc d'être compatibles avec EVM sur la couche supérieure, qui est de type 3 et 4 zkEVM. Certains joueurs insistent toujours sur le jeu d'instructions EVM traditionnel Opcode et se concentrent sur la génération de preuves plus efficaces pour Opcode, qui sont de type 1 et de type 2 zkEVM. L'énorme écologie de l'EVM est divisée en deux.
Kakarot : Une machine virtuelle sur une machine virtuelle ?
Pourquoi une autre machine virtuelle peut-elle être créée sur la machine virtuelle ? Cette chose est courante pour les praticiens de l'informatique, mais elle n'est peut-être pas si évidente pour les utilisateurs qui ne comprennent pas les ordinateurs. En fait, c'est facile à comprendre. C'est comme des blocs de construction. Tant que la couche inférieure est suffisamment solide (avec un environnement d'exécution Turing-complet), les blocs de construction peuvent être empilés sur la couche supérieure sans limite. Mais quel que soit le nombre de couches construites, l'exécution finale doit toujours être gérée par le matériel physique de niveau le plus bas, donc l'augmentation du nombre de couches entraînera une diminution de l'efficacité. Dans le même temps, en raison des différentes conceptions des différents blocs de construction (différentes conceptions de machines virtuelles), à mesure que les blocs de construction sont construits de plus en plus haut, la possibilité que les blocs de construction s'effondrent (erreurs d'exécution) est plus grande, ce qui nécessite un niveau plus élevé d'assistance technique.
Kakarot est un EVM implémenté en langage Cairo sur Starknet. Il utilise des contrats intelligents Cairo pour simuler la pile, la mémoire, l'exécution, etc. dans l'EVM. Relativement parlant, il n'est pas difficile d'implémenter EVM.En plus de l'EVM écrit en Golang dans Go-Ethereum, qui a le taux d'utilisation le plus élevé, il existe également des EVM écrits en Python, Java, Java et Rust.
La difficulté technique de Kakarot zkEVM est que le protocole existe sous forme de contrat sur la chaîne Starknet, ce qui entraîne deux problèmes clés.
Le protocole kakarot se compose de cinq composants principaux (quatre sont écrits dans le document GitHub, EOA n'est pas inclus, cet article a été ajusté pour la commodité des lecteurs) :
Selon les commentaires du PDG de kakarot, Elias Tazartes, dans la dernière version de l'équipe, la conception de Account Resister a été abandonnée et, à la place, un mappage d'une adresse Starknet de 31 octets à une adresse EVM de 20 bits a été utilisé directement pour enregistrer la relation correspondante. . À l'avenir, pour améliorer l'interopérabilité et permettre aux contrats Starknet d'enregistrer leurs propres adresses EVM, la conception du registre des comptes pourra être réutilisée.
Compatible avec EVM sur Starknet : Quelle est la différence entre Warp et kakarot
Selon le type zkEVM défini par Vitalik, Warp appartient au Type-4, tandis que kakarot appartient actuellement au Type-2.5.
Warp est un traducteur qui convertit le code Solidity en code Cairo. La raison pour laquelle on ne l'appelle pas un compilateur est probablement que la sortie Cairo est toujours un langage de haut niveau. Grâce à Warp, les développeurs de Solidity peuvent conserver le statut de développement d'origine sans avoir à apprendre le nouveau langage Cairo. Pour de nombreuses parties du projet, Warp abaisse le seuil d'entrée dans l'écosystème Starknet et n'a pas besoin d'utiliser Cairo pour réécrire une grande quantité de code d'ingénierie.
Bien que l'idée de traduction soit simple, la compatibilité est également la pire. Certains codes Solidity ne peuvent pas être bien traduits au Caire. La logique de code impliquant le système de compte, l'algorithme cryptographique, etc. doit modifier le code source pour terminer la migration. Les fonctionnalités spécifiques non prises en charge peuvent être consultées dans la documentation Warp. Par exemple, de nombreux projets distingueront la logique d'exécution des comptes EOA et des comptes contractuels, mais tous les comptes dans Starknet sont des comptes contractuels, et cette partie du code doit être modifiée avant la traduction.
Warp est compatible au niveau du langage de haut niveau et kakarot est compatible au niveau EVM.
La réécriture complète d'EVM et l'implémentation un par un d'Opcode et de la pré-compilation permettent à kakarot d'avoir une compatibilité native plus élevée. Après tout, l'exécution dans la même machine virtuelle (EVM) est toujours plus compatible que l'exécution dans une autre machine virtuelle (Cairo VM). Le registre des comptes et le registre Blockhash protègent intelligemment les différences entre les différents systèmes et minimisent les frictions liées à la migration des utilisateurs.
Équipe Kakarot
Merci à l'équipe de kakarot pour leurs précieux commentaires sur cet article, en particulier à Elias Tazartes. Merci Monsieur!