Meilleures pratiques pour optimiser les frais de Gas des 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 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 également améliorer l'efficacité des transactions, offrant aux utilisateurs une expérience 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 lors du développement de smart contracts. J'espère que ces contenus 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.
Introduction au mécanisme des frais de Gas de l'EVM
Dans les réseaux compatibles avec l'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 de l'EVM, la consommation de Gas se divise en trois parties : l'exécution des opérations, les appels de messages externes et la lecture/écriture en mémoire et dans le stockage.
Étant donné que l'exécution de chaque transaction nécessite des ressources de calcul, des frais sont donc facturés pour prévenir les boucles infinies et les attaques par déni de service (DoS). Le coût nécessaire pour compléter une transaction est appelé "frais de Gas".
Depuis l'entrée en vigueur du hard fork de Londres 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, cela peut augmenter la probabilité que la transaction soit incluse dans le prochain bloc. C'est similaire à un "pourboire" que l'utilisateur paie au validateur.
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 d'opcodes (, comme 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 consommation de Gas reconnu, ces coûts étant inscrits dans le livre jaune d'Ethereum.
Après plusieurs modifications des EIP, certains coûts en Gas de codes d'opération ont été ajustés et peuvent différer de ceux du livre jaune.
![Meilleures pratiques pour l'optimisation du Gas des contrats intelligents Ethereum])https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
) 2. Concepts de base de l'optimisation du gaz
Le principe fondamental 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 des variables d'état stockées dans le stockage des contrats
Appel de fonction externe
opérations en boucle
Meilleures pratiques d'optimisation des frais de gaz EVM
Sur la base des concepts fondamentaux mentionnés ci-dessus, nous avons dressé une liste des meilleures pratiques pour l'optimisation des frais de Gas à l'intention de la communauté des développeurs. En suivant ces pratiques, les développeurs peuvent réduire la consommation de Gas des smart contracts, diminuer les coûts de transaction et créer des applications plus efficaces et conviviales.
![Gas optimisation des dix meilleures pratiques des contrats intelligents Ethereum]###https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 1. Essayez de réduire au maximum l'utilisation du stockage.
Dans Solidity, le stockage ### est une ressource limitée, dont la consommation de Gaz est bien plus élevée que 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 élevés en Gaz.
Selon la définition du livre jaune 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 de limitation 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.
![Optimisation des Gas des smart contracts Ethereum : les dix meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Emballage de variables
Le nombre de slots de stockage ( utilisés dans les smart contracts ainsi que 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 disposer les variables de manière à ce que plusieurs variables puissent s'adapter à un seul emplacement de stockage.
En ajustant ce 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, il ne faut que deux emplacements de stockage.
Puisque 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 nécessaires.
![Optimisation des Gas pour les smart contracts Ethereum : dix meilleures pratiques])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 correspondantes varie selon le type de données. Choisir le type de données approprié aide à optimiser l'utilisation du Gas.
Par exemple, dans Solidity, les entiers peuvent être divisés en différentes tailles : uint8, uint16, uint32, etc. Étant donné que l'EVM exécute des opérations par paquets 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, utiliser uint256 ici est moins cher 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 emplacement de stockage, alors le coût total de l'itération sur elles sera inférieur à celui de quatre variables uint256. Ainsi, les smart contracts peuvent lire et écrire un seul emplacement de stockage et placer quatre variables uint8 en mémoire/stockage en une seule opération.
![Optimisation des Gas des smart contracts Ethereum : 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 de bytes1 à 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 ont l'itérabilité 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 de listes de données, sauf si une itération est nécessaire ou si le coût en gaz peut être optimisé par le regroupement des types de données.
![Optimisation des Gas pour les smart contracts Ethereum : les dix meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
( 6. Utiliser calldata au lieu de mémoire
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 au lieu de memory. Cela permet d'éviter des opérations de copie inutiles de calldata de la fonction vers memory.
![Optimisation du Gas des smart contracts Ethereum : les 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 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 conseillé d'utiliser les mots-clés Constant ou Immutable autant que possible.
8. Utiliser Unchecked en s'assurant qu'il n'y aura pas de débordement/sous-dépassement.
Lorsqu'un développeur peut s'assurer que les opérations arithmétiques ne provoqueront pas de débordement ou de sous-débordement, il peut utiliser le mot-clé unchecked introduit dans Solidity v0.8.0 pour éviter des vérifications de débordement ou de sous-débordement inutiles, ce qui permet d'économiser des frais 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 protections contre les débordements et les sous-débordements.
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(), permettant de réutiliser cette fonction interne dans le modificateur, cela peut réduire la taille du bytecode et diminuer les coûts en Gas.
![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 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 seconde condition ne sera pas évaluée.
Pour optimiser la consommation de Gas, il est conseillé de placer les conditions à faible coût de calcul en premier, ce qui peut permettre de sauter les calculs coûteux.
Conseils généraux supplémentaires
1. Supprimer le code inutile
Si le contrat contient des fonctions ou des variables non utilisées, il est recommandé de les supprimer. C'est le moyen le plus direct 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 effectuer des calculs. 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, elle doit être supprimée à l'aide du mot-clé delete ou être réinitialisée à 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 contrats 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 localement sur le nœud client, cela nécessite moins de Gas. L'utilisation de contrats précompilés peut permettre d'économiser du Gas en réduisant le volume de calcul requis pour 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 les smart contracts, les développeurs peuvent réduire les coûts en Gaz et améliorer l'efficacité d'exécution des applications.
3. Utiliser 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 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 plus les frais de Gas. De plus, l'assemblage en ligne peut
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 J'aime
Récompense
16
7
Partager
Commentaire
0/400
AlgoAlchemist
· Il y a 4h
Le gas va me tuer.
Voir l'originalRépondre0
BearEatsAll
· Il y a 15h
Des frais de gas élevés, n'est-ce pas un chemin sans retour pour ceux qui veulent profiter des avantages ?
Voir l'originalRépondre0
MEVHunterWang
· 07-11 05:59
le gas a encore augmenté, ça fait mal au cœur
Voir l'originalRépondre0
CoffeeNFTrader
· 07-11 05:55
le gas est encore optimisé, c'est un piège, il vaut mieux aller sur layer2
Voir l'originalRépondre0
StrawberryIce
· 07-11 05:54
Coincé à un gas élevé, on fonce !
Voir l'originalRépondre0
OffchainWinner
· 07-11 05:50
J'en ai marre d'utiliser L2...
Voir l'originalRépondre0
HalfBuddhaMoney
· 07-11 05:31
Il faut toujours payer les frais de gas, mon frère.
13 pratiques d'optimisation des frais de Gas pour les smart contracts Ethereum
Meilleures pratiques pour optimiser les frais de Gas des 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 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 également améliorer l'efficacité des transactions, offrant aux utilisateurs une expérience 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 lors du développement de smart contracts. J'espère que ces contenus 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.
Introduction au mécanisme des frais de Gas de l'EVM
Dans les réseaux compatibles avec l'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 de l'EVM, la consommation de Gas se divise en trois parties : l'exécution des opérations, les appels de messages externes et la lecture/écriture en mémoire et dans le stockage.
Étant donné que l'exécution de chaque transaction nécessite des ressources de calcul, des frais sont donc facturés pour prévenir les boucles infinies et les attaques par déni de service (DoS). Le coût nécessaire pour compléter une transaction est appelé "frais de Gas".
Depuis l'entrée en vigueur du hard fork de Londres 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, cela peut augmenter la probabilité que la transaction soit incluse dans le prochain bloc. C'est similaire à un "pourboire" que l'utilisateur paie au validateur.
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 d'opcodes (, comme 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 consommation de Gas reconnu, ces coûts étant inscrits dans le livre jaune d'Ethereum.
Après plusieurs modifications des EIP, certains coûts en Gas de codes d'opération ont été ajustés et peuvent différer de ceux du livre jaune.
![Meilleures pratiques pour l'optimisation du Gas des contrats intelligents Ethereum])https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
) 2. Concepts de base de l'optimisation du gaz
Le principe fondamental 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 :
Les opérations à coût élevé comprennent :
Meilleures pratiques d'optimisation des frais de gaz EVM
Sur la base des concepts fondamentaux mentionnés ci-dessus, nous avons dressé une liste des meilleures pratiques pour l'optimisation des frais de Gas à l'intention de la communauté des développeurs. En suivant ces pratiques, les développeurs peuvent réduire la consommation de Gas des smart contracts, diminuer les coûts de transaction et créer des applications plus efficaces et conviviales.
![Gas optimisation des dix meilleures pratiques des contrats intelligents Ethereum]###https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 1. Essayez de réduire au maximum l'utilisation du stockage.
Dans Solidity, le stockage ### est une ressource limitée, dont la consommation de Gaz est bien plus élevée que 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 élevés en Gaz.
Selon la définition du livre jaune 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 de limitation de l'utilisation du stockage comprennent :
![Optimisation des Gas des smart contracts Ethereum : les dix meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Emballage de variables
Le nombre de slots de stockage ( utilisés dans les smart contracts ainsi que 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 disposer les variables de manière à ce que plusieurs variables puissent s'adapter à un seul emplacement de stockage.
En ajustant ce 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, il ne faut que deux emplacements de stockage.
Puisque 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 nécessaires.
![Optimisation des Gas pour les smart contracts Ethereum : dix meilleures pratiques])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 correspondantes varie selon le type de données. Choisir le type de données approprié aide à optimiser l'utilisation du Gas.
Par exemple, dans Solidity, les entiers peuvent être divisés en différentes tailles : uint8, uint16, uint32, etc. Étant donné que l'EVM exécute des opérations par paquets 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, utiliser uint256 ici est moins cher 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 emplacement de stockage, alors le coût total de l'itération sur elles sera inférieur à celui de quatre variables uint256. Ainsi, les smart contracts peuvent lire et écrire un seul emplacement de stockage et placer quatre variables uint8 en mémoire/stockage en une seule opération.
![Optimisation des Gas des smart contracts Ethereum : 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 de bytes1 à 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 ont l'itérabilité 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 de listes de données, sauf si une itération est nécessaire ou si le coût en gaz peut être optimisé par le regroupement des types de données.
![Optimisation des Gas pour les smart contracts Ethereum : les dix meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
( 6. Utiliser calldata au lieu de mémoire
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 au lieu de memory. Cela permet d'éviter des opérations de copie inutiles de calldata de la fonction vers memory.
![Optimisation du Gas des smart contracts Ethereum : les 10 meilleures pratiques])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 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 conseillé d'utiliser les mots-clés Constant ou Immutable autant que possible.
8. Utiliser Unchecked en s'assurant qu'il n'y aura pas de débordement/sous-dépassement.
Lorsqu'un développeur peut s'assurer que les opérations arithmétiques ne provoqueront pas de débordement ou de sous-débordement, il peut utiliser le mot-clé unchecked introduit dans Solidity v0.8.0 pour éviter des vérifications de débordement ou de sous-débordement inutiles, ce qui permet d'économiser des frais 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 protections contre les débordements et les sous-débordements.
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(), permettant de réutiliser cette fonction interne dans le modificateur, cela peut réduire la taille du bytecode et diminuer les coûts en Gas.
![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 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 seconde condition ne sera pas évaluée.
Pour optimiser la consommation de Gas, il est conseillé de placer les conditions à faible coût de calcul en premier, ce qui peut permettre de sauter les calculs coûteux.
Conseils généraux supplémentaires
1. Supprimer le code inutile
Si le contrat contient des fonctions ou des variables non utilisées, il est recommandé de les supprimer. C'est le moyen le plus direct 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 effectuer des calculs. 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, elle doit être supprimée à l'aide du mot-clé delete ou être réinitialisée à 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 contrats 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 localement sur le nœud client, cela nécessite moins de Gas. L'utilisation de contrats précompilés peut permettre d'économiser du Gas en réduisant le volume de calcul requis pour 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 les smart contracts, les développeurs peuvent réduire les coûts en Gaz et améliorer l'efficacité d'exécution des applications.
3. Utiliser 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 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 plus les frais de Gas. De plus, l'assemblage en ligne peut