Guide d'optimisation des frais de Gas pour les smart contracts EVM : 10 astuces pratiques

Guide d'optimisation des frais de Gas des smart contracts EVM

Sur le réseau Ethereum, les frais de Gas ont toujours été un problème épineux pour les utilisateurs, en particulier en période de congestion du réseau. Lors des pics de transaction, les utilisateurs doivent souvent payer des frais élevés pour finaliser leurs transactions. Par conséquent, il est particulièrement important d'optimiser les frais de Gas lors de la phase de développement des smart contracts. Optimiser la consommation de Gas peut non seulement réduire efficacement les coûts de transaction, mais aussi améliorer l'efficacité des transactions, offrant ainsi 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 de l'optimisation des frais de Gas, ainsi que les meilleures pratiques pour optimiser les frais de Gas dans le développement de smart contracts. Nous espérons que ces informations seront utiles aux développeurs et aideront également les utilisateurs ordinaires à mieux comprendre le fonctionnement des frais de Gas de l'EVM, afin de faire face ensemble aux défis de l'écosystème blockchain.

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

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

Dans un réseau compatible avec l'EVM, le Gas est l'unité utilisée pour mesurer la capacité de calcul requise pour exécuter des opérations spécifiques.

La structure de l'EVM se compose principalement de trois parties pour la consommation de Gas : l'exécution des opérations, les appels de messages externes et la lecture/écriture de la mémoire et du stockage.

Chaque exécution de transaction nécessite des ressources de calcul, c'est pourquoi des frais sont facturés pour prévenir les boucles infinies et les attaques de déni de service (DoS). Les frais nécessaires pour compléter une transaction sont appelés frais de Gas.

Depuis la mise en œuvre de l'EIP-1559, les frais de Gas sont calculés selon la formule suivante :

Frais de Gas = unités de Gas utilisées * ( frais de base + frais prioritaires )

Les frais de base seront détruits, tandis que les frais prioritaires serviront d'incitation pour encourager les validateurs à ajouter des transactions à la blockchain. Fixer des frais prioritaires plus élevés peut augmenter la probabilité que la transaction soit intégrée dans le prochain bloc.

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 (opcodes).

Chaque opcode (, tel que la création de contrats, l'appel de messages, l'accès au stockage de comptes, etc., ) a un coût fixe en Gas. Ces coûts sont consignés dans le livre blanc d'Ethereum, mais avec plusieurs modifications d'EIP, le coût en Gas de certaines opcodes a été ajusté.

Concepts de base de l'optimisation des 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 ont un coût relativement bas :

  • Lire et écrire des variables en mémoire
  • Lire des constantes et des variables immuables
  • Lire et écrire des variables locales
  • Lire la variable calldata
  • Appel de fonction interne

Les opérations à coût élevé incluent :

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

Les 10 meilleures pratiques pour l'optimisation du Gas des smart contracts Ethereum

Meilleures pratiques pour l'optimisation des frais de gaz EVM

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

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

Selon le 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 mload et mstore ne consomment que 3 unités de Gas, tandis que sload et sstore nécessitent au moins 100 unités même dans les conditions les plus idéales.

Les méthodes de restriction de l'utilisation du stockage incluent :

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

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

( 2. Emballage de variables

Le nombre de slots de stockage ) et la manière dont les données sont représentées dans les smart contracts auront un impact significatif sur la consommation de frais de Gas.

Le compilateur Solidity regroupe les variables de stockage continues pendant le processus de compilation, en utilisant des emplacements de stockage de 32 octets comme unité de base pour le stockage des variables. Le regroupement des variables signifie organiser raisonnablement les variables afin que plusieurs d'entre elles puissent s'adapter à un seul emplacement de stockage.

Grâce à cet ajustement, les développeurs peuvent économiser une grande quantité d'unités de Gas. Étant donné que chaque emplacement de stockage consomme du Gas, le regroupement des variables optimise l'utilisation du Gas en réduisant le nombre d'emplacements de stockage nécessaires.

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

) 3. Optimiser les types de données

Choisir le bon type de données 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.

Cependant, si l'on peut regrouper quatre variables uint8 dans un espace de stockage, le coût total pour les itérer sera inférieur à celui de quatre variables uint256. De cette façon, les smart contracts peuvent lire et écrire un seul espace de stockage et placer les quatre variables uint8 en mémoire/stockage en une seule opération.

Les dix meilleures pratiques pour l'optimisation du Gas des smart contracts Ethereum

4. Utiliser des variables de taille fixe à la place des 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 au lieu 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.

Les dix meilleures pratiques d'optimisation du Gas pour les contrats intelligents Ethereum

5. Mappages et tableaux

Les listes de données de Solidity peuvent être représentées par deux types de données : les tableaux (Arrays) et les mappages ###Mappings(.

Les mappings sont généralement plus efficaces et moins coûteux dans la plupart des cas, mais les tableaux sont itérables et prennent en charge le regroupement des types de données. Par conséquent, il est conseillé de privilégier les mappings 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.

![Les 10 meilleures pratiques d'optimisation de Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6. Utiliser calldata au lieu de mémoire

Les variables déclarées dans les paramètres de 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.

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 des opérations de copie inutiles de calldata vers memory.

Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum

7. Utilisez autant que possible les mots clés Constant/Immutable

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

Les dix meilleures pratiques d'optimisation de Gas pour les smart contracts Ethereum

8. Utiliser Unchecked en s'assurant qu'il n'y a pas de débordement/souffrance.

Lorsque les développeurs peuvent s'assurer que les opérations arithmétiques ne provoqueront pas de dépassement 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épassement 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ébordements et les sous-débordements.

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

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 tant que fonction interne, ce qui permet de réutiliser cette fonction interne dans le modificateur, on peut réduire la taille du bytecode et diminuer les coûts de Gas.

Les dix meilleures pratiques pour l'optimisation du Gas des smart contracts Ethereum

10. Optimisation de court-circuit

Pour les opérateurs || et &&, l'évaluation logique se fait 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 deuxième condition ne sera pas évaluée.

Pour optimiser la consommation de Gas, il convient de placer les conditions à faible coût de calcul en premier, ce qui peut permettre de sauter les calculs coûteux.

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

Conseils généraux supplémentaires

1. Supprimer le code inutile

S'il y a des fonctions ou des variables non utilisées dans le contrat, il est conseillé de les supprimer. C'est la méthode la plus directe pour réduire les coûts de déploiement du contrat et maintenir la taille du contrat petite.

Quelques conseils pratiques :

  • Utiliser les algorithmes les plus efficaces pour effectuer des calculs.
  • Supprimer les processus de calcul inutilisés.
  • Utilisez le mot-clé delete pour supprimer les variables dont vous n'avez plus besoin, ou pour les réinitialiser à leur 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étés en dehors du corps de la boucle.

( 2. Utiliser des smart contracts précompilés

Les contrats précompilés fournissent des fonctions de bibliothèque complexes, telles que des opérations de cryptage et de hachage. Étant donné que le code n'est pas exécuté sur l'EVM, mais localement sur le nœud client, moins de Gas est nécessaire. 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.

3. Utiliser le code d'assemblage en ligne

L'assemblage en ligne permet aux développeurs d'écrire un code bas niveau mais efficace, qui peut être exécuté directement par l'EVM, sans avoir à utiliser les opcodes Solidity coûteux. L'assemblage en ligne permet également un contrôle plus précis de l'utilisation de la mémoire et du stockage, réduisant ainsi davantage les frais de Gas. De plus, l'assemblage en ligne peut exécuter des opérations complexes qui seraient difficiles à réaliser uniquement avec Solidity, offrant ainsi plus de flexibilité pour optimiser la consommation de Gas.

Cependant, l'utilisation de l'assemblage en ligne peut également comporter des risques et être sujette à des erreurs. Par conséquent, elle doit être utilisée avec prudence et réservée aux développeurs expérimentés.

( 4. Utiliser des solutions Layer 2

L'utilisation de solutions de Layer 2 peut réduire la quantité de données devant être stockées et calculées sur la blockchain principale d'Ethereum.

Les solutions Layer 2 telles que les rollups, les sidechains et les state channels peuvent décharger le traitement des transactions de la chaîne principale Ethereum, permettant ainsi des transactions plus rapides et moins coûteuses.

En regroupant un grand nombre de transactions, ces solutions réduisent le nombre de transactions sur la chaîne, ce qui diminue les frais de Gas. L'utilisation de solutions de Layer 2 peut également améliorer l'évolutivité d'Ethereum, permettant à plus d'utilisateurs et d'applications de participer au réseau sans provoquer de congestion due à une surcharge du réseau.

) 5. Utiliser des outils et des bibliothèques d'optimisation

Il existe plusieurs outils d'optimisation disponibles, tels que l'optimiseur solc, l'optimiseur de construction de Truffle et le compilateur Solidity de Remix.

Ces outils peuvent aider à minimiser la taille du bytecode, à supprimer le code inutile et à réduire le nombre d'opérations nécessaires pour exécuter des smart contracts. En combinant d'autres bibliothèques d'optimisation du Gas, comme "solmate", les développeurs peuvent efficacement réduire les coûts en Gas et améliorer l'efficacité des smart contracts.

![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp###

Conclusion

L'optimisation de la consommation de Gas est une étape importante pour les développeurs.

GAS-1.16%
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
  • 9
  • Reposter
  • Partager
Commentaire
0/400
NotGonnaMakeItvip
· 07-13 18:50
La Communauté Blockchain de l'eau bouillie comprend tout. Le cœur n'est que de vendre du gas.
Voir l'originalRépondre0
DeFiGraylingvip
· 07-13 18:26
gas est si cher que j'ai failli faire faillite.
Voir l'originalRépondre0
BearMarketSurvivorvip
· 07-13 13:49
Les frais de gas ont encore piégé les pauvres gens, ouin ouin.
Voir l'originalRépondre0
WalletManagervip
· 07-12 02:38
le gas est trop cher, autant aller trader sur L2
Voir l'originalRépondre0
RugDocDetectivevip
· 07-12 02:36
Ne faites pas de chichis, les frais de gas sont le vrai problème.
Voir l'originalRépondre0
BearMarketGardenervip
· 07-12 02:21
pro a encore fait quelque chose, qu'est-ce qu'on doit acheter pour une opération de Cut Loss?
Voir l'originalRépondre0
DataChiefvip
· 07-12 02:18
Mon Dieu, encore des frais de gas, pourriez-vous dire quelque chose de nouveau ?
Voir l'originalRépondre0
RektCoastervip
· 07-12 02:16
Qui peut me dire comment sauver mon Portefeuille, les frais de gas sont vraiment exorbitants.
Voir l'originalRépondre0
MaticHoleFillervip
· 07-12 02:10
Les frais de gaz sont vraiment attrayants, et cela a encore fait gagner beaucoup d'argent à Vitalik Buterin.
Voir l'originalRépondre0
Afficher plus
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)