10 grandes pratiques pour optimiser les frais de Gas des smart contracts et Goutte le Coût de transaction d'Ethereum

Guide d'optimisation du Gas des smart contracts : 10 pratiques pour Goutte le Coût de transaction

La question des frais de Gas sur le réseau principal d'Ethereum a toujours été une préoccupation majeure, surtout en période de congestion du réseau. Pendant les pics d'activité, 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 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 de 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 que ces contenus pourront inspirer et aider les développeurs, tout en aidant les utilisateurs ordinaires à 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 des 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 requise pour exécuter des opérations spécifiques.

Dans la structure EVM, la consommation de Gas se divise principalement 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.

Chaque exécution de transaction nécessite des ressources de calcul, donc des frais sont appliqués pour prévenir 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 pour encourager les validateurs à ajouter des transactions à la blockchain. En fixant 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 10 meilleures pratiques pour l'optimisation du Gas des contrats intelligents Ethereum

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 des opcodes.

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

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

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, tout en évitant les opérations coûteuses en Gas.

Dans l'EVM, les opérations suivantes ont un coût réduit :

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

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

  • Lire et écrire des 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 des smart contracts Ethereum

Meilleures pratiques pour l'optimisation des frais de gaz EVM

Basé sur les concepts fondamentaux ci-dessus, nous avons compilé une liste des meilleures pratiques pour l'optimisation des frais de Gas pour la communauté des développeurs. En suivant ces pratiques, les développeurs peuvent Goutte la consommation de Gas des smart contracts, Goutte le Coût de transaction et créer des applications plus efficaces et conviviales.

1. Goutte l'utilisation du stockage

Dans Solidity, Storage( est une ressource limitée, dont la consommation de Gas est bien plus élevée que celle de Memory). Chaque fois qu'un smart contract lit ou écrit des données à partir du stockage, cela entraîne un coût de Gas élevé.

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 comme 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
  • Goutte 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 pour l'optimisation du Gas des 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 expriment les données auront un impact majeur sur la consommation de Gas.

Le compilateur Solidity va empaqueter les variables de stockage consécutives pendant le processus de compilation et utiliser 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 dans un même emplacement de stockage.

Grâce à cet ajustement de détail, les développeurs peuvent économiser 20 000 unités de Gas ###. Stocker un emplacement de stockage inutilisé nécessite 20 000 Gas (, mais maintenant, seuls deux emplacements de stockage sont nécessaires.

Étant donné que chaque emplacement de stockage consomme du Gas, le regroupement de variables optimise l'utilisation du Gas en réduisant le nombre d'emplacements de stockage requis.

![Les dix meilleures pratiques d'optimisation de Gas pour les 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 correspondant à 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 de l'essence supplémentaire.

Pris isolément, utiliser uint256 est moins cher que uint8. Cependant, cela change si l'optimisation par emballage de variables est utilisée. Si les développeurs peuvent empaqueter quatre variables uint8 dans un seul emplacement de stockage, le coût total pour les parcourir sera inférieur à celui de quatre variables uint256. De cette manière, les smart contracts peuvent lire et écrire un emplacement de stockage en une seule fois et placer les quatre variables uint8 dans la mémoire/le stockage en une seule opération.

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

4. Utiliser des variables de taille fixe à la place de variables dynamiques

Si les données peuvent être contenues dans 32 octets, il est recommandé d'utiliser le type de données bytes32 plutôt que 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 de bytes1 à bytes32.

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

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 conseillé de privilégier l'utilisation de mappages lors de la gestion des listes de données, sauf si une itération est nécessaire ou si le coût du Gas peut être optimisé par le regroupement des types de données.

![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.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.

N'oubliez pas ce principe : si les paramètres de la fonction sont en lecture seule, vous devez privilégier l'utilisation de calldata plutôt que de memory. Cela permet d'éviter des opérations de copie inutiles de calldata de la fonction vers memory.

Les dix meilleures pratiques d'optimisation du Gas pour les 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 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.

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

8. Utiliser Unchecked en s'assurant qu'il n'y aura pas de débordement/sous-dépassement

Lorsque les développeurs peuvent s'assurer que les opérations arithmétiques ne provoqueront pas de débordement ou de sous-débordement, ils peuvent utiliser le mot-clé unchecked introduit dans Solidity v0.8.0 pour éviter les vérifications de débordement ou de sous-débordement inutiles, permettant ainsi d'économiser le Coût de transaction.

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 sous-dépassements.

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

9. Optimiser le 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 reconstruisant la logique en une fonction interne _checkOwner(), permettant de réutiliser cette fonction interne dans le modificateur, cela peut réduire la taille du bytecode et Goutte le Coût de transaction.

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

) 10. Optimisation de court-circuit

Pour les opérateurs || et &&, l'évaluation logique subit une évaluation de 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 gaz, les conditions à faible coût de calcul doivent être placées en premier, ce qui peut permettre de sauter les calculs coûteux.

Les 10 meilleures pratiques pour l'optimisation du Gas des 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 recommandé de les supprimer. C'est le moyen le plus direct de réduire le Coût de transaction et de maintenir la taille du contrat petite.

Voici quelques conseils pratiques :

  • Utilisez les algorithmes les plus efficaces pour le calcul. Si certaines résultats de calcul sont directement utilisés dans le contrat, alors ces processus de calcul redondants devraient être supprimés. En essence, tout calcul non utilisé devrait être supprimé.

  • Sur 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 faut utiliser le mot-clé delete pour la supprimer ou la définir sur une 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 smart contracts précompilés

Les contrats précompilés fournissent des fonctions de bibliothèque complexes, telles que les opérations de cryptage et de hachage. Comme 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 peut économiser du Gas en réduisant la charge de calcul requise pour exécuter 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 Goutte le coût de transaction et améliorer l'efficacité des applications.

3. Utilisation du code d'assemblage en ligne

L'assemblage en ligne ( in-line assembly ) permet aux développeurs d'écrire du code bas niveau mais efficace pouvant être exécuté directement par l'EVM, sans avoir à utiliser des 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 encore les coûts de Gas. De plus, l'assemblage en ligne peut exécuter certaines fonctionnalités difficiles à réaliser uniquement avec Solidity.

GAS0.59%
ETH1.91%
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
  • 4
  • Partager
Commentaire
0/400
SilentObservervip
· 07-20 19:53
gas si cher, je pleure de pauvreté 555
Voir l'originalRépondre0
ConfusedWhalevip
· 07-20 19:53
Si c'est comme ça le jour, comment jouer la nuit ?
Voir l'originalRépondre0
NightAirdroppervip
· 07-20 19:48
eth c'est juste pour se faire prendre pour des cons que ça hausse le gas.
Voir l'originalRépondre0
SybilSlayervip
· 07-20 19:40
gas brûle de l'argent, qui peut supporter ça ?
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)