En discussion sur la machine virtuelle Ethereum (EVM)

Auteur: Gimer Cervera, Ethereum Smart Contract Developer Traduction: Shan Ouba, Bitchain Vision World

introduire

Cet article explore dans les machines virtuelles Ethereum (EVM) et l’assemblage de solidité pour réaliser l’optimisation et la sécurité des contrats intelligents.

Ethereum Virtual Machine (EVM) est le composant central du réseau Ethereum.EVM est un logiciel qui permet le déploiement et l’exécution de contrats intelligents écrits dans un langage avancé (comme la solidité).Après avoir écrit le contrat, compilez-le dans ByteCode et déployez-le sur EVM.EVM fonctionne sur chaque nœud du réseau Ethereum.

Solidity Assembly est un langage de programmation à bas niveau qui permet aux développeurs d’écrire du code au niveau plus proche de l’EVM lui-même.Il fournit un contrôle plus détaillé sur l’exécution des contrats intelligents, permettant une optimisation et une personnalisation qui ne peuvent pas être réalisées via le code de solidité de niveau supérieur.

Le langage utilisé dans la solidité pour la compilation conjointe intérieure est appelé yul.Le langage de programmation est compilé comme un intermédiaire de l’EVM Bytecode.Il est conçu comme un langage de niveau bas qui permet aux développeurs de contrôler plus finement l’exécution des contrats intelligents.Il peut être utilisé en mode indépendant ou en soliditéCompilation syndicale interneEssenceYul est conçu comme un langage de pile à bas niveau, permettant aux développeurs d’écrire du code plus optimisé et plus efficace.Avant d’expliquer l’assemblage de solidité, nous devons comprendre comment fonctionnent les composants EVM.

EVM est un准 图 灵 灵 灵Machine d’état.Dans ce cas, le terme« permettre »Cela signifie que l’exécution du processus est limitée aux étapes de calcul du nombre limité, selon toutes les quantités de gaz qui peuvent être exécutées par un contrat intelligent donné.C’est la façon de gérer la suspension de l’arrêt et la possibilité d’exécution (malveillant ou accident) pour toujours.De cette façon, la plate-forme Ethereum est évitée.

Le gaz est un concept de calcul du calcul requis pour terminer la transaction dans Ethereum.Le coût de transaction est payé par Ethereum et est lié au prix du gaz et du gaz.Notre objectif dans ce processus est d’apprendre à minimiser la quantité totale de gaz consommée sans affecter la sécurité.

Problème d’optimisation du code

L’assemblage conjoint interne est une méthode pour accéder à EVM à un niveau inférieur.Il contourne plusieurs fonctions de sécurité importantes et inspections de la solidité.L’utilisation correcte de l’assemblage conjoint intérieur peut réduire considérablement le coût de mise en œuvre.Cependant, vous ne devez l’utiliser que pour avoir besoin de sa tâche, et uniquement lorsque vous savez ce que vous faites.L’utilisation du code d’optimisation intérieur lianhui peut apporter de nouveaux problèmes de sécurité à votre code.Pour maîtriser l’assemblage interne, nous devons comprendre les principes de travail de l’EVM et de ses composants.

Dans EVM, vous devez payer chaque fois que vous visitez toute variable de stockage pour la première fois.« froid »Visites, il faut 2100 gaz.Le deuxième ou le temps consécutif est appelé« chaud »Accès, il faut 100 gaz.

Le code suivant est un exemple de la façon dont nous optimisons le code avec yul.fonctionSetData1Utilisez la solidité de manière traditionnelle comme variable globaleDéfinissez la nouvelle valeur.Nous devons dépenser 22 514 gaz lorsqu’il alloue d’abord cette nouvelle valeur.Le deuxième coût est beaucoup moins, c’est-à-dire 5414 gaz.

>

fonctionsetData2Réalisez l’assemblage interne.Le bloc de change intérieur est marqué par l’assemblage {…}, où le code dans le support est le code de la langue Yul.Il n’est pas nécessaire de comprendre le code source pour le moment, n’oubliez pas que le logiciel accéde à l’espace de stockage à un niveau inférieur.Par conséquent, le coût d’exécution sera inférieur.

Dans notre exemple, la première modification de cette valeur coûtera 22 484 gaz.Plusieurs fois de suite, le coût est de 5384 gaz.La différence peut ne pas sembler significative, mais nous devons considérer que ce code peut être exécuté des milliers de fois.

>

Pourquoi est-ce si cher?N’oubliez pas que nous sommes dans un monde décentralisé.Si les transactions futures doivent être accessibles ou modifiées, elle doit également être facilement utilisée pour chaque nœud du réseau.Le coût global des données est égal à l’espace de stockage qu’il a consommé et à la somme du calcul des données sur l’ensemble du réseau.

Pile EVM, stockage et mémoire

EVM est une machine basée sur la pile qui s’exécute sur la structure de données appelée pile, ce qui enregistre la valeur et exécute l’opération.EVM a son propre ensemble d’instructions (appelées codes d’exploitation) pour effectuer des tâches telles que la lecture et l’écriture de stockage, l’appel d’autres contrats et l’exécution d’opérations mathématiques.Empiler en fonction dePlus tard, d’abord (LIFO)Exécutez le chemin, voir la figure 1, ce qui signifie que l’élément récemment inséré est stocké en haut de la pile, et c’est le premier élément à être supprimé.

>

Lors de l’exécution de contrats intelligents, EVM crée un contexte d’exécution contenant diverses structures de données et variables d’état.Une fois l’exécution terminée, le contexte sera jeté et préparera le prochain contrat.Pendant l’exécution, EVM conservera une mémoire temporaire et il n’y aura pas d’existence continue entre l’existence de transactions.EVM exécute une machine de pile avec une profondeur de 1024 éléments.Chaque projet est un mot à 256 bits.

EVM a les composants suivants, comme le montre la figure 2:

  • Stack: La pile d’EVM est une structure de données en cours d’exécution (LIFO) en cours d’exécution (LIFO), qui est utilisée pour stocker des valeurs temporaires lors de l’exécution de contrats intelligents.

  • Stockage: le stockage permanent fait partie de l’état d’Ethereum, qui n’est initialisé à zéro que pour la première fois.

  • Mémoire: un tableau d’octets de taille dynamique facile à perdre est utilisé pour stocker des données intermédiaires lors de l’exécution des contrats.Chaque fois que vous créez un nouveau contexte d’exécution, la mémoire est initialisée à zéro.

  • CallData: Il s’agit également d’une zone de stockage de données facile-to-loss, similaire à la mémoire.Cependant, il stocke les données variables incapables.Il vise à enregistrer les données envoyées dans le cadre d’une transaction de contrat intelligent.

  • Counter de programme: le compteur de programmes (PC) pointe vers les instructions suivantes à exécuter par EVM.PC ajoute généralement un octet après l’exécution d’une instruction.

  • ROM virtuel: les contrats intelligents sont stockés dans la région sous forme de bytecode.La ROM virtuelle est uniquement lue.

>

Pile EVM

Dans cette architecture, les instructions et les données du programme sont stockées en mémoire, et l’exécution du programme estContrôle du pointeur de pile.Le pointeur de pile suivant la valeur ou l’instruction suivante sera enregistrée ou récupérée sur la pile.Lorsque le programme est en cours d’exécution, il ajoute la valeur à la pile et effectue la valeur existante.Lorsque le code veut ajouter les deux nombres, il appuie le nombre dans la pile, puis effectue les deux valeurs en haut.Revenez ensuite à la pile.

>

L’une des fonctionnalités les plus importantes basées sur l’architecture de pile est qu’elle permet une exécution de fonctionnement très simple et efficace.Parce que la pile est une structure de données LIFO, les données et les instructions peuvent être facilement traitées aux données et aux instructions.

EVM possède son propre ensemble d’instructions, appelé le code d’exploitation.Le code d’opération est utilisé pour effectuer des tâches telles que la lecture et l’écriture de stockage, l’appel d’autres contrats et l’exécution des opérations mathématiques.L’ensemble d’instructions EVM fournit la plupart des opérations auxquelles vous pouvez vous attendre, notamment:

  • Fonctionnement de la pile: pop, push, dup, échange

  • Arithmétique / comparaison / prescription: ajouter, sub, gt, lt et, ou

  • Environnement: appelant, callvalue, numéro

  • Fonctionnement de la mémoire: Mload, Mstore, Mstore8, MSIze

  • Opération de stockage: Sload, sstore

  • Code d’exploitation lié au compteur du programme: Jump, Jumpi, PC, JumpDest

  • Arrêter le code de fonctionnement: arrêter, retourner, revenir, non valide, autodestruction

Stockage EVM

Le stockage EVM est un espace non ponctuel, enregistrant la paire de valeurs de clé de 256-bit – & gt;Le nombre total de créneaux de stockage dans le contrat est de 2, ce qui est un très grand nombre de créneaux.Chaque contrat intelligent sur la blockchain a son propre espace de stockage.

Pendant l’appel de fonction, le stockage est utilisé pour les données qui doivent être rappelées entre les appels de fonction.Il est utilisé pour stocker des variables et des structures de données disponibles qui peuvent être disponibles même après l’exécution de contrats intelligents.

>

Le code d’exploitation pour accéder au stockage est: Sload et Sstore

Ce stockage de compte est un stockage de données permanente, qui n’est utilisé que par les contrats intelligents.Le compte (EOA) n’a pas de code et l’espace de stockage est vide.

Mémoire EVM

La mémoire est une mémoire facile-To-Loss dans l’architecture, et ses données ne durent pas dans la blockchain.La mémoire est une structure de données d’accès aléatoire qui stocke les données temporaires lors de l’exécution de contrats intelligents.

>

La mémoire est divisée en quatre parties: 2 rainures sont utilisées pour l’espace de stockage temporaire, 1 fente est utilisé pour des pointeurs de mémoire libre, 0 rainures et 1 point de fente à la mémoire libre disponible.Le premier espace du 64e octet sera utilisé par la méthode de laiité.

Le pointeur de mémoire libre n’est qu’un pointeur vers le début de la mémoire libre.Il garantit quelles positions de mémoire sont suivies dans des contrats intelligents et lesquels sont toujours disponibles.Cela empêche la couverture contractuelle de certaines mémoire qui a été attribuée à une autre variable.La figure 6 montre comment la mémoire est divisée:

>

La mémoire est utilisée pour stocker des variables et des structures de données qui n’ont pas besoin d’être stockées en mémoire.La taille de la mémoire peut être ajustée lors de l’exécution du contrat intelligent, mais la vitesse d’accès est plus lente et le coût est plus élevé que la pile.

Considérant que la mémoire est zéro-initialisation, le code de fonctionnement pour l’accès à la mémoire est: Mload, Mstore, MSTORE8

Résumer

Dans cet article, nous passons en revue certains concepts de base liés à la machine virtuelle Ethereum (EVM).Pour réaliser le code d’assemblage interne, vous devez comprendre EVM en -pth.En effet, nous interagissons avec certaines composantes de l’EVM.Dans les cours futurs, nous analyserons en détail d’autres éléments EVM, tels que: stockage, mémoire et calldata.De plus, nous passerons en revue les concepts importants tels que Bytecode, Gas et Interface binaire d’application (ABI).Enfin, nous discuterons du principe de travail du code d’exploitation et des exemples plus internes et de change pour optimiser en toute sécurité l’exécution des contrats intelligents.

  • Related Posts

    Vue rapide du dernier réseau de particules de projet aérien de Binance Hodler

    Source: Site Web officiel de Binance, site Web officiel du réseau de particules, Livre blanc; Compilé: Vision de Bitchain Le 24 mars 2025, selon l’annonce officielle de Binance, Binance Hodler…

    Ethereum diminue, PvP prévaut, manque l’été 2020

    Jessy (@ Susanliu33), Vision de Bitchain Vitalik a disparu sur X pendant plus de 20 jours. Au cours de ces 20 jours, le prix d’Ethereum est tombé à plusieurs reprises…

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    You Missed

    Tendance historique: Bitcoin est un actif en toute sécurité

    • By jakiro
    • avril 19, 2025
    • 0 views
    Tendance historique: Bitcoin est un actif en toute sécurité

    Qu’est-ce qui fait que les événements de traction de tapis de crypto-monnaie se produisent fréquemment?

    • By jakiro
    • avril 18, 2025
    • 4 views
    Qu’est-ce qui fait que les événements de traction de tapis de crypto-monnaie se produisent fréquemment?

    Wintermute Ventures: Pourquoi investissons-nous dans Euler?

    • By jakiro
    • avril 18, 2025
    • 3 views
    Wintermute Ventures: Pourquoi investissons-nous dans Euler?

    Trump peut-il tirer Powell? Quels risques économiques cela apportera-t-il?

    • By jakiro
    • avril 18, 2025
    • 2 views
    Trump peut-il tirer Powell? Quels risques économiques cela apportera-t-il?

    Glassnode: Sommes-nous en train de vivre une transition de taureau?

    • By jakiro
    • avril 18, 2025
    • 3 views
    Glassnode: Sommes-nous en train de vivre une transition de taureau?

    Le premier lot de 8 projets sélectionnés de l’accélérateur Web Post

    • By jakiro
    • avril 17, 2025
    • 2 views
    Le premier lot de 8 projets sélectionnés de l’accélérateur Web Post
    Home
    News
    School
    Search