Guide d'optimisation des frais de Gas pour les smart contracts Ethereum : Dix meilleures pratiques et astuces

Meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum

Les frais de Gas sur le réseau principal Ethereum ont toujours été un problème épineux, surtout en période de congestion du réseau. Pendant les heures de pointe, les utilisateurs doivent souvent payer des frais de transaction élevés. Par conséquent, il est crucial d'optimiser les frais de Gas lors de la phase de développement des smart contracts. L'optimisation de la consommation de Gas peut non seulement réduire efficacement le coût des transactions, mais aussi améliorer l'efficacité des transactions, offrant aux utilisateurs une expérience d'utilisation de la blockchain plus économique et efficace.

Cet article présentera le mécanisme des frais de Gas de la machine virtuelle Ethereum (EVM), les concepts clés liés à l'optimisation des frais de Gas, ainsi que les meilleures pratiques pour optimiser les frais de Gas lors du développement de smart contracts. Nous espérons qu'à travers ces contenus, nous pourrons apporter inspiration et aide pratique aux développeurs, tout en aidant les utilisateurs ordinaires à mieux comprendre le fonctionnement des frais de Gas de l'EVM, et à relever ensemble les défis de l'écosystème blockchain.

smart contracts d'optimisation Gas des meilleures pratiques

Introduction au mécanisme des frais de Gas de l'EVM

Dans un réseau compatible avec EVM, "Gas" désigne l'unité utilisée pour mesurer la puissance de calcul requise pour exécuter une opération spécifique.

Dans la structure de l'EVM, la consommation de Gas se divise en trois parties : l'exécution des opérations, les appels de messages externes et les lectures/écritures en mémoire et en stockage.

En raison des ressources de calcul nécessaires à l'exécution de chaque transaction, des frais sont facturés pour prévenir les boucles infinies et les attaques par déni de service (DoS). Les frais nécessaires pour accomplir une transaction sont appelés "frais de Gas".

Depuis l'entrée en vigueur de l'EIP-1559, les frais de Gas sont calculés selon la formule suivante :

Frais de gaz = unités de gaz utilisées * (frais de base + frais de priorité)

Les frais de base seront détruits, tandis que les frais prioritaires serviront d'incitation, encourageant les validateurs à ajouter des transactions à la blockchain. En réglant des frais prioritaires plus élevés lors de l'envoi d'une transaction, cela augmente la probabilité que la transaction soit incluse dans le prochain bloc. Cela ressemble à un "pourboire" que l'utilisateur paie aux validateurs.

1. Comprendre l'optimisation du Gas dans l'EVM

Lorsque vous compilez des smart contracts avec Solidity, le contrat est converti en une série de "codes d'opération", c'est-à-dire opcodes.

Toute séquence de code opérationnel (, comme la création de contrats, l'appel de messages, l'accès au stockage des comptes et l'exécution d'opérations sur la machine virtuelle ), a un coût de consommation de Gas reconnu, ces coûts étant consignés dans le livre jaune d'Ethereum.

Après plusieurs modifications de l'EIP, le coût en Gas de certaines opcodes a été ajusté, ce qui peut différer de celui du livre jaune.

2. Concepts de base de l'optimisation du gaz

Le principe central de l'optimisation du Gas est de privilégier les opérations à coût d'efficacité élevé sur la blockchain EVM, en évitant les opérations coûteuses en Gas.

Dans l'EVM, les opérations suivantes coûtent moins cher :

  • Lire et écrire des variables en mémoire
  • Lire des constantes et des variables immuables
  • Lire et écrire des variables locales
  • Lire les variables calldata, par exemple les tableaux et les structures calldata
  • Appel de fonction interne

Les opérations coûteuses comprennent :

  • Lire et écrire les variables d'état stockées dans le stockage des contrats
  • Appel de fonction externe
  • Opérations en boucle

Ethereum smart contracts : les 10 meilleures pratiques pour l'optimisation du Gas

Meilleures pratiques d'optimisation des frais de gas EVM

Sur la base des concepts fondamentaux mentionnés ci-dessus, nous avons élaboré une liste des meilleures pratiques pour optimiser les frais de Gas pour la communauté des développeurs. En suivant ces pratiques, les développeurs peuvent réduire la consommation de Gas de leurs smart contracts, diminuer les coûts de transaction et créer des applications plus efficaces et conviviales.

1. Essayez de réduire au minimum l'utilisation de l'espace de stockage

Dans Solidity, le stockage( est une ressource limitée, dont la consommation en Gas est bien supérieure à celle de la mémoire). Chaque fois qu'un smart contract lit ou écrit des données dans le stockage, cela engendre des coûts élevés en Gas.

Selon la définition du livre blanc d'Ethereum, le coût des opérations de stockage est plus de 100 fois supérieur à celui des opérations en mémoire. Par exemple, les instructions OPcodesmload et mstore ne consomment que 3 unités de Gas, tandis que les opérations de stockage telles que sload et sstore nécessitent au moins 100 unités, même dans les meilleures conditions.

Les méthodes pour limiter l'utilisation du stockage incluent :

  • Stocker des données non permanentes en mémoire
  • Réduire le nombre de modifications de stockage : en conservant les résultats intermédiaires en mémoire, puis en attribuant les résultats aux variables de stockage une fois tous les calculs terminés.

Les 10 meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum

( 2. Emballage des variables

Le nombre de slots de stockage) utilisés dans les smart contracts et la manière dont les développeurs représentent les données auront un impact considérable sur la consommation de Gas.

Le compilateur Solidity empaquette les variables de stockage consécutives pendant le processus de compilation, utilisant des emplacements de stockage de 32 octets comme unité de base pour le stockage des variables. L'empaquetage des variables signifie organiser les variables de manière à ce que plusieurs variables puissent s'adapter à un seul emplacement de stockage.

Grâce à cet ajustement de détail, les développeurs peuvent économiser 20 000 unités de Gas. Pour stocker un emplacement de stockage inutilisé, il faut consommer 20 000 Gas, mais maintenant, seulement deux emplacements de stockage sont nécessaires.

Puisque chaque emplacement de stockage consomme du Gas, l'emballage des variables optimise l'utilisation du Gas en réduisant le nombre d'emplacements de stockage nécessaires.

![Optimisation des Gas pour les smart contracts Ethereum : dix meilleures pratiques]###https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(

) 3. Optimiser les types de données

Une variable peut être représentée par plusieurs types de données, mais le coût des opérations correspondant à chaque type de données est différent. Choisir le type de données approprié aide à optimiser l'utilisation du Gas.

Par exemple, dans Solidity, les entiers peuvent être subdivisés en différentes tailles : uint8, uint16, uint32, etc. Comme l'EVM exécute des opérations par unités de 256 bits, l'utilisation de uint8 signifie que l'EVM doit d'abord le convertir en uint256, et cette conversion consomme du Gas supplémentaire.

D'un point de vue isolé, l'utilisation de uint256 est moins coûteuse que celle de uint8. Cependant, si l'on applique l'optimisation de regroupement de variables que nous avons suggérée précédemment, la situation change. Si le développeur peut regrouper quatre variables uint8 dans un même emplacement de stockage, alors le coût total de l'itération sur celles-ci sera inférieur à celui de quatre variables uint256. Ainsi, le smart contract pourra lire et écrire dans un emplacement de stockage une seule fois et placer les quatre variables uint8 en mémoire/stockage en une seule opération.

Gas optimisation des 10 meilleures pratiques des smart contracts Ethereum

( 4. Utiliser des variables de taille fixe au lieu de variables dynamiques

Si les données peuvent être contrôlées dans 32 octets, il est conseillé d'utiliser le type de données bytes32 à la place de bytes ou strings. En général, les variables de taille fixe consomment moins de Gas que les variables de taille variable. Si la longueur des octets peut être limitée, essayez de choisir la longueur minimale allant de bytes1 à bytes32.

![Optimisation des Gas des smart contracts Ethereum : dix meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp###

( 5. Mappage et tableaux

Les listes de données en Solidity peuvent être représentées par deux types de données : les tableaux )Arrays ### et les mappages (Mappings ), mais leur syntaxe et leur structure sont complètement différentes.

Dans la plupart des cas, les mappages sont plus efficaces et moins coûteux, mais les tableaux sont itérables et prennent en charge le regroupement des types de données. Par conséquent, il est recommandé de privilégier les mappages lors de la gestion des listes de données, sauf si une itération est nécessaire ou si le regroupement des types de données peut optimiser la consommation de Gas.

![Ethereum smart contracts optimisations de Gas : dix meilleures pratiques]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6. Utiliser calldata au lieu de memory

Les variables déclarées dans les paramètres de la fonction peuvent être stockées dans calldata ou memory. La principale différence entre les deux est que memory peut être modifié par la fonction, tandis que calldata est immuable.

Rappelez-vous ce principe : si les paramètres de la fonction sont en lecture seule, il est préférable d'utiliser calldata plutôt que memory. Cela permet d'éviter les opérations de copie inutiles de calldata de la fonction vers memory.

Optimisation des Gas pour les smart contracts Ethereum : dix meilleures pratiques

( 7. Utilisez autant que possible le mot-clé Constant/Immutable

Les variables Constant/Immutable ne sont pas stockées dans le stockage du contrat. Ces variables sont calculées au moment de la compilation et stockées dans le bytecode du contrat. Par conséquent, leur coût d'accès est beaucoup plus faible par rapport au stockage, il est recommandé d'utiliser les mots-clés Constant ou Immutable autant que possible.

![Optimisation des Gas des contrats intelligents Ethereum : les 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###

( 8. Utilisez Unchecked en vous assurant qu'aucun dépassement/sous-dépassement ne se produise.

Lorsque les développeurs peuvent s'assurer que les opérations arithmétiques ne provoqueront pas de débordement ou de sous-dépassement, ils peuvent utiliser le mot-clé unchecked introduit dans Solidity v0.8.0 pour éviter des vérifications de débordement ou de sous-dépassement superflues, économisant ainsi des frais de Gas.

De plus, les compilateurs de version 0.8.0 et supérieures n'ont plus besoin d'utiliser la bibliothèque SafeMath, car le compilateur lui-même a intégré des fonctionnalités de protection contre les dépassements et les sous-dépassements.

![Optimisation du Gas des smart contracts Ethereum : les 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###

( 9. Optimisation du modificateur

Le code du modificateur est intégré dans la fonction modifiée, et chaque fois que le modificateur est utilisé, son code est copié. Cela augmente la taille du bytecode et augmente la consommation de Gas.

En restructurant la logique en une fonction interne _checkOwner)###, cela permet de réutiliser cette fonction interne dans le modificateur, ce qui peut réduire la taille du bytecode et diminuer les coûts en Gas.

Optimisation des Gas des smart contracts Ethereum : les 10 meilleures pratiques

10. Optimisation de court-circuit

Pour les opérateurs || et &&, l'évaluation logique subit une évaluation par court-circuit, c'est-à-dire que si la première condition peut déjà déterminer le résultat de l'expression logique, la seconde condition ne sera pas évaluée.

Pour optimiser la consommation de Gas, les conditions à faible coût de calcul doivent être placées en premier, ce qui peut permettre de sauter les calculs coûteux.

Optimisation des Gas des smart contracts Ethereum : les dix meilleures pratiques

Suggestions générales supplémentaires

( 1. Supprimer le code inutile

Si le contrat contient des fonctions ou des variables inutilisées, il est recommandé de les supprimer. C'est la manière la plus directe de réduire le coût de déploiement du contrat et de maintenir la taille du contrat petite.

Voici quelques conseils pratiques:

Utilisez les algorithmes les plus efficaces pour le calcul. Si les résultats de certains calculs sont utilisés directement dans le contrat, alors ces processus de calcul redondants doivent être éliminés. En essence, tout calcul non utilisé doit être supprimé.

Dans Ethereum, les développeurs peuvent obtenir des récompenses en Gas en libérant de l'espace de stockage. Si une variable n'est plus nécessaire, il convient d'utiliser le mot-clé delete pour la supprimer ou de la définir sur sa valeur par défaut.

Optimisation des boucles : éviter les opérations de boucle coûteuses, fusionner les boucles autant que possible et déplacer les calculs répétitifs en dehors du corps de la boucle.

) 2. Utiliser des contrats précompilés

Les contrats précompilés offrent des fonctions de bibliothèque complexes, telles que des opérations de chiffrement et de hachage. Comme le code ne s'exécute pas sur l'EVM, mais localement sur le nœud client, moins de Gas est requis. L'utilisation de contrats précompilés permet d'économiser du Gas en réduisant la charge de calcul nécessaire à l'exécution des smart contracts.

Des exemples de contrats précompilés incluent l'algorithme de signature numérique à courbe elliptique ###ECDSA( et l'algorithme de hachage SHA2-256. En utilisant ces contrats précompilés dans des smart contracts, les développeurs peuvent réduire les coûts de Gas et améliorer l'efficacité de l'exécution des applications.

ETH0.47%
GAS-1.46%
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • 8
  • Reposter
  • Partager
Commentaire
0/400
SerumDegenvip
· 07-23 04:02
mdr le gaz me vide le portefeuille en ce moment... rekt par
Voir l'originalRépondre0
WalletDivorcervip
· 07-21 18:08
Il suffit d'avoir des mains pour voir l'optimisation des contrats.
Voir l'originalRépondre0
ProofOfNothingvip
· 07-20 15:12
On ne parle pas de gas sans argent.
Voir l'originalRépondre0
AlphaBrainvip
· 07-20 04:31
Laisse tomber, je ne veux pas optimiser le gas, allons sur L2.
Voir l'originalRépondre0
ImpermanentLossEnjoyervip
· 07-20 04:29
Qui se souvient de l'affaire tragique d'une transaction de 2000u ?
Voir l'originalRépondre0
OvertimeSquidvip
· 07-20 04:19
Pour échanger, il faut rembourser l'hypothèque.
Voir l'originalRépondre0
DeFiVeteranvip
· 07-20 04:17
Il vaut mieux se taire.
Voir l'originalRépondre0
IronHeadMinervip
· 07-20 04:08
Les frais de gas sont vraiment insoutenables.
Voir l'originalRépondre0
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)