Top 10 pratiques d'optimisation des frais de Gas pour les smart contracts, aidant à améliorer l'efficacité du développement EVM.

Les dix meilleures pratiques pour optimiser les frais de Gas des smart contracts

Les frais de Gas sur le réseau principal d'Ethereum ont toujours été un problème, 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, l'optimisation des frais de Gas lors du développement de smart contracts est essentielle. Optimiser la consommation de Gas peut non seulement réduire les coûts de transaction, mais aussi améliorer l'efficacité des transactions, offrant ainsi aux utilisateurs une expérience blockchain plus économique et efficace.

Cet article donnera un aperçu du mécanisme des frais de Gas de la machine virtuelle Ethereum (EVM), des concepts clés de l'optimisation des frais de Gas, ainsi que des meilleures pratiques pour optimiser les frais de Gas lors du développement de smart contracts. Nous espérons que ces informations pourront inspirer et aider les développeurs, tout en permettant aux utilisateurs ordinaires de mieux comprendre le fonctionnement des frais de Gas de l'EVM, afin de relever ensemble les 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 les réseaux compatibles EVM, le "Gas" est l'unité utilisée pour mesurer la puissance de calcul nécessaire à l'exécution d'opérations spécifiques.

Dans la structure EVM, la consommation de Gas est divisée en trois parties : l'exécution des opérations, les appels de messages externes et la lecture/écriture de la mémoire et du stockage.

En raison du fait que l'exécution de chaque transaction nécessite des ressources de calcul, des frais seront donc facturés pour éviter les boucles infinies et les attaques par déni de service ( DoS ). Les frais nécessaires pour compléter 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 définissant des frais prioritaires plus élevés lors de l'envoi d'une transaction, il est possible d'augmenter la probabilité que la transaction soit incluse dans le prochain bloc. Cela ressemble à un "pourboire" que l'utilisateur paie aux validateurs.

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

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

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

Toute séquence d'opcode (, par exemple, la création de smart contracts, l'appel de messages, l'accès au stockage de compte et l'exécution d'opérations sur la machine virtuelle ), a un coût de consommation de Gas reconnu, ces coûts étant enregistrés dans le livre jaune d'Ethereum.

Après plusieurs modifications des EIP, certains coûts en Gas des opcodes ont été ajustés, ce qui peut différer de ceux du livre jaune.

2. Concepts de base de l'optimisation du gaz

Le concept central de l'optimisation du Gas est de privilégier les opérations à coût efficace 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 les variables calldata, comme les tableaux et les structures calldata.
  • Appel de fonction interne

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

  • Lire et écrire les variables d'état stockées dans le stockage du contrat
  • Appel de fonction externe
  • opérations en boucle

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

Meilleures pratiques pour l'optimisation des frais de gaz 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 frais 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 du stockage.

Dans Solidity, le stockage( est une ressource limitée, dont la consommation de Gaz 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 entraîne des coûts en Gaz élevés.

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 Gaz, tandis que les opérations de stockage comme sload et sstore nécessitent au moins 100 unités, même dans les meilleures conditions.

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

  • Stocker des données non permanentes en mémoire
  • Réduire le nombre de modifications de stockage : en sauvegardant 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 dix meilleures pratiques d'optimisation de Gas pour les smart contracts Ethereum

( 2. Emballage de 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 regroupe les variables de stockage consécutives lors du processus de compilation et utilise des emplacements de stockage de 32 octets comme unité de base pour le stockage des variables. Le regroupement des variables signifie arranger les variables de manière à ce que plusieurs variables puissent tenir dans un seul emplacement de stockage.

Grâce à cet ajustement de détail, les développeurs peuvent économiser 20 000 unités de Gas. ### Stocker un slot de stockage inutilisé nécessite 20 000 Gas (, mais maintenant, il ne faut que deux slots de stockage.

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

![Top 10 meilleures pratiques d'optimisation du Gas des smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.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 correspondants à ces différents types de données est également 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. Étant donné que 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.

À première vue, l'utilisation de uint256 est moins chère que uint8. Cependant, cela change si l'on utilise l'optimisation de regroupement de variables que nous avons suggérée précédemment. Si le développeur peut regrouper quatre variables uint8 dans un seul slot de stockage, le coût total pour les itérer sera inférieur à celui de quatre variables uint256. Ainsi, les smart contracts pourront lire et écrire dans un slot de stockage en une seule opération et placer les quatre variables uint8 en mémoire/stockage.

Les dix meilleures pratiques d'optimisation du Gas pour les 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 une taille de 32 octets, il est recommandé 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 en octets peut être limitée, essayez de choisir la longueur minimale entre bytes1 et bytes32.

( 5. Mappages 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 de types de données. Par conséquent, il est conseillé de privilégier l'utilisation de mappages lors de la gestion de listes de données, sauf si une itération est nécessaire ou si le regroupement de types de données peut optimiser la consommation de gas.

![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])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 d'une 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.

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

Les variables Constant/Immutable ne seront pas stockées dans le stockage du contrat. Ces variables seront 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 bas par rapport au stockage, il est conseillé d'utiliser les mots-clés Constant ou Immutable autant que possible.

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

8. Utiliser Unchecked en s'assurant qu'il n'y aura 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, ce qui permet d'économiser des coûts de Gas.

De plus, les compilateurs 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.

( 9. Optimiser les modificateurs

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

En restructurant la logique en une fonction interne _checkOwner)###, permettant de réutiliser cette fonction interne dans le modificateur, la taille du bytecode peut être réduite et le coût en gaz diminué.

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

) 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 des 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

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

Voici quelques conseils pratiques :

  • Utilisez l'algorithme le plus efficace pour le calcul. Si le contrat utilise directement les résultats de certains calculs, alors ces processus de calcul redondants doivent être supprimé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, elle doit être supprimée à l'aide du mot-clé delete ou être définie 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é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. Comme le code n'est pas exécuté sur l'EVM, mais s'exécute localement sur le nœud, cela nécessite moins de Gas. L'utilisation de contrats précompilés peut permettre d'économiser du Gas en réduisant la charge de calcul nécessaire à l'exécution des smart contracts.

Les exemples de contrats précompilés incluent l'algorithme de signature numérique par 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é d'exécution des applications.

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

) 3. Utilisation du code d'assemblage en ligne

L'assemblage en ligne permet aux développeurs d'écrire du code bas niveau mais efficace, pouvant ê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 certaines 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 d'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 Layer 2 peut réduire la quantité de données qui doivent être stockées et calculées sur la chaîne principale d'Ethereum.

des solutions Layer 2 telles que les rollups, les sidechains et les canaux d'état

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
  • 7
  • Partager
Commentaire
0/400
AirdropATMvip
· 07-17 09:37
les frais de gas peuvent encore baisser, cex est en faillite
Voir l'originalRépondre0
CommunityJanitorvip
· 07-17 02:30
En tant que vieux pigeons, ces frais de gas sont vraiment exorbitants.
Voir l'originalRépondre0
GhostWalletSleuthvip
· 07-15 15:28
Goutte des frais de gas n'est pas utile, Vitalik Buterin ne veut pas dire que c'est pour prendre les pigeons.
Voir l'originalRépondre0
GasFeeNightmarevip
· 07-15 07:31
gas vraiment fatal~
Voir l'originalRépondre0
BrokenDAOvip
· 07-15 07:23
Un autre exemple d'inertie de gouvernance. Avez-vous pris en compte la distorsion des incitations lors de l'optimisation des frais off-chain ? Les utilisateurs ordinaires effectuant des transactions fréquentes sont toujours ceux qui paient.
Voir l'originalRépondre0
DoomCanistervip
· 07-15 07:12
ne fais pas l'économie de la sensation de destruction
Voir l'originalRépondre0
PumpBeforeRugvip
· 07-15 07:07
L'argent du gas serait suffisant pour acheter une bouteille de Maotai.
Voir l'originalRépondre0
  • Épingler
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)