Guide de pratique pour l'optimisation des Gas des smart contracts Ethereum
Les frais de Gas du réseau principal Ethereum ont toujours été un problème difficile à résoudre, 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 essentiel 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 les coûts de transaction, mais aussi améliorer l'efficacité des transactions, offrant aux utilisateurs une expérience d'utilisation de la blockchain à la fois é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 d'optimisation des frais de Gas dans le 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 faire face ensemble aux défis de l'écosystème blockchain.
Introduction au mécanisme de 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 requise pour exécuter des opérations spécifiques.
Dans la structure de la disposition de l'EVM, la consommation de Gas est divisée en trois parties : l'exécution des opérations, les appels de messages externes et les lectures/écritures en mémoire et en stockage.
Puisque chaque exécution de transaction nécessite des ressources de calcul, des frais seront facturés pour éviter 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 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 pour encourager les validateurs à ajouter des transactions à la blockchain. En définissant des frais prioritaires plus élevés lors de l'envoi d'une transaction, on peut augmenter la probabilité que la transaction soit incluse dans le prochain bloc. Cela ressemble à un "pourboire" que l'utilisateur paie au validateurs.
Comprendre l'optimisation du Gas dans l'EVM
Lors de la compilation des smart contracts en Solidity, le contrat est converti en une série "d'opcodes", c'est-à-dire des codes d'opération.
Toute opération de code (, 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 consommation de Gas reconnu, ces coûts étant enregistrés dans le livre blanc d'Ethereum.
Après plusieurs modifications des EIP, le coût en Gas de certaines instructions a été ajusté, ce qui peut différer de ce qui est indiqué dans le livre jaune.
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 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, 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ération en boucle
Meilleures pratiques d'optimisation des frais de gaz EVM
Sur la base des concepts fondamentaux mentionnés ci-dessus, nous avons compilé une liste des meilleures pratiques d'optimisation des frais de Gas pour 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.
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 de Gaz est bien supérieure à celle de la mémoire). Chaque fois qu'un smart contract lit ou écrit des données à partir du stockage, des coûts de Gaz élevés sont générés.
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 OPcodes mload et mstore consomment seulement 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 comprennent :
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.
( 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 Gaz.
Le compilateur Solidity regroupe les variables de stockage continues pendant le 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 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. ### Stocker un emplacement de stockage inutilisé nécessite 20 000 Gas (, mais maintenant, il ne faut que deux emplacements de stockage.
Comme 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 le type de données
Une variable peut être représentée par plusieurs types de données, mais le coût d'opération associé à 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. Puisque 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.
Individuellement, il est moins cher d’utiliser le UINT256 que l’UINT8. Cependant, l’optimisation de l’emballage avec des variables est différente. Si un développeur est en mesure d’intégrer quatre variables uint8 dans un seul emplacement de stockage, le coût total de l’itération sur celles-ci sera inférieur à celui de quatre variables uint256. De cette façon, le contrat intelligent peut lire et écrire une fois l’emplacement de stockage et mettre quatre variables uint8 dans la mémoire/le stockage en une seule opération.
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 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 des octets peut être limitée, choisissez autant que possible 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 sont itérables et prennent en charge l'emballage des types de données. Par conséquent, il est recommandé d'utiliser des mappages en priorité lors de la gestion des listes de données, sauf si une itération est nécessaire ou si l'emballage des types de données peut optimiser la consommation de Gas.
![Optimisation des Gas pour les smart contracts Ethereum : les 10 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 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 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 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 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 donc recommandé d'utiliser les mots-clés Constant ou Immutable autant que possible.
![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
8. Utilisez Unchecked en vous assurant qu'il n'y aura pas de dépassement/débordement.
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 les vérifications de débordement ou de sous-dépassement inutiles, 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 fonctions de protection contre les dépassements et les sous-dépassements.
( 9. Optimisation des modificateurs
Le code du modificateur est intégré dans la fonction modifiée. À chaque utilisation du modificateur, 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 de Gas.
![Optimisation des Gas pour les smart contracts Ethereum : les dix meilleures pratiques]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 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 deuxième condition ne sera pas évaluée.
Pour optimiser la consommation de Gaz, il convient de placer les conditions à faible coût de calcul en premier, ce qui permettrait de sauter les calculs coûteux.
Conseils généraux supplémentaires
1. Supprimer le code inutile
Si des fonctions ou des variables non utilisées existent dans le contrat, il est recommandé de les supprimer. C'est la méthode la plus directe pour réduire les coûts de déploiement du contrat et maintenir une taille de contrat réduite.
Voici quelques conseils pratiques :
Utiliser les algorithmes les plus efficaces pour effectuer les calculs. Si les résultats de certains calculs sont utilisés directement dans le contrat, alors il convient d'éliminer ces processus de calcul redondants. En essence, tout calcul non utilisé devrait ê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 en utilisant le mot-clé delete, ou être réinitialisée à sa valeur par défaut.
Optimisation des boucles : éviter les opérations de boucle coûteuses, combiner 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 les opérations de cryptage et de hachage. Comme le code n'est pas exécuté sur l'EVM, mais sur le nœud client local, 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 requise pour exécuter des contrats intelligents.
Les 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é des applications.
3. Utiliser du code d'assemblage en ligne
L'assemblage en ligne ( in-line assembly ) permet aux développeurs d'écrire du code de bas niveau mais efficace qui peut ê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 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 plus de flexibilité pour optimiser la consommation de Gas.
Cependant, l'utilisation d'assemblage en ligne peut également présenter des risques et être sujette à des erreurs. Par conséquent, cela doit être utilisé avec prudence et réservé aux développeurs expérimentés.
![Optimisation des Gas des smart contracts Ethereum : dix meilleures pratiques]###
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.
14 J'aime
Récompense
14
8
Partager
Commentaire
0/400
WalletInspector
· Il y a 17h
Les frais de gas sont trop élevés, mieux vaut L2.
Voir l'originalRépondre0
CryptoCross-TalkClub
· 07-11 01:06
Rire aux larmes, les frais de Gas sont en hausse, le portefeuille des pigeons est en train de brûler
Voir l'originalRépondre0
liquiditea_sipper
· 07-11 01:03
Le gas est vraiment devenu exorbitant.
Voir l'originalRépondre0
AirdropChaser
· 07-11 01:03
Maintenant, le gas peut-il devenir un peu plus humain ! Dépenser de l'argent comme de l'eau.
Voir l'originalRépondre0
MEVSandwichVictim
· 07-11 01:02
Je suis encore en train d'optimiser, chaque jour je suis épuisé par le Gas.
Voir l'originalRépondre0
LiquidityNinja
· 07-11 01:01
Je suis un ninja du monde du chiffrement. Des frais de Gas trop élevés me brisent le cœur. Faire des transactions opportunes est la clé.
Veuillez générer un commentaire en chinois pour cet article.
Voir l'originalRépondre0
DaoDeveloper
· 07-11 00:56
je viens de déployer un contrat intelligent optimisé pour le gas... vous n'allez pas croire les économies fr
Guide de pratique pour l'optimisation des frais de Gas des smart contracts Ethereum
Guide de pratique pour l'optimisation des Gas des smart contracts Ethereum
Les frais de Gas du réseau principal Ethereum ont toujours été un problème difficile à résoudre, 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 essentiel 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 les coûts de transaction, mais aussi améliorer l'efficacité des transactions, offrant aux utilisateurs une expérience d'utilisation de la blockchain à la fois é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 d'optimisation des frais de Gas dans le 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 faire face ensemble aux défis de l'écosystème blockchain.
Introduction au mécanisme de 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 requise pour exécuter des opérations spécifiques.
Dans la structure de la disposition de l'EVM, la consommation de Gas est divisée en trois parties : l'exécution des opérations, les appels de messages externes et les lectures/écritures en mémoire et en stockage.
Puisque chaque exécution de transaction nécessite des ressources de calcul, des frais seront facturés pour éviter 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 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 pour encourager les validateurs à ajouter des transactions à la blockchain. En définissant des frais prioritaires plus élevés lors de l'envoi d'une transaction, on peut augmenter la probabilité que la transaction soit incluse dans le prochain bloc. Cela ressemble à un "pourboire" que l'utilisateur paie au validateurs.
Comprendre l'optimisation du Gas dans l'EVM
Lors de la compilation des smart contracts en Solidity, le contrat est converti en une série "d'opcodes", c'est-à-dire des codes d'opération.
Toute opération de code (, 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 consommation de Gas reconnu, ces coûts étant enregistrés dans le livre blanc d'Ethereum.
Après plusieurs modifications des EIP, le coût en Gas de certaines instructions a été ajusté, ce qui peut différer de ce qui est indiqué dans le livre jaune.
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 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 :
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 compilé une liste des meilleures pratiques d'optimisation des frais de Gas pour 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.
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 de Gaz est bien supérieure à celle de la mémoire). Chaque fois qu'un smart contract lit ou écrit des données à partir du stockage, des coûts de Gaz élevés sont générés.
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 OPcodes mload et mstore consomment seulement 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 comprennent :
( 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 Gaz.
Le compilateur Solidity regroupe les variables de stockage continues pendant le 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 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. ### Stocker un emplacement de stockage inutilisé nécessite 20 000 Gas (, mais maintenant, il ne faut que deux emplacements de stockage.
Comme 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 le type de données
Une variable peut être représentée par plusieurs types de données, mais le coût d'opération associé à 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. Puisque 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.
Individuellement, il est moins cher d’utiliser le UINT256 que l’UINT8. Cependant, l’optimisation de l’emballage avec des variables est différente. Si un développeur est en mesure d’intégrer quatre variables uint8 dans un seul emplacement de stockage, le coût total de l’itération sur celles-ci sera inférieur à celui de quatre variables uint256. De cette façon, le contrat intelligent peut lire et écrire une fois l’emplacement de stockage et mettre quatre variables uint8 dans la mémoire/le stockage en une seule opération.
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 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 des octets peut être limitée, choisissez autant que possible 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 sont itérables et prennent en charge l'emballage des types de données. Par conséquent, il est recommandé d'utiliser des mappages en priorité lors de la gestion des listes de données, sauf si une itération est nécessaire ou si l'emballage des types de données peut optimiser la consommation de Gas.
![Optimisation des Gas pour les smart contracts Ethereum : les 10 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 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 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 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 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 donc recommandé d'utiliser les mots-clés Constant ou Immutable autant que possible.
![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
8. Utilisez Unchecked en vous assurant qu'il n'y aura pas de dépassement/débordement.
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 les vérifications de débordement ou de sous-dépassement inutiles, 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 fonctions de protection contre les dépassements et les sous-dépassements.
( 9. Optimisation des modificateurs
Le code du modificateur est intégré dans la fonction modifiée. À chaque utilisation du modificateur, 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 de Gas.
![Optimisation des Gas pour les smart contracts Ethereum : les dix meilleures pratiques]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 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 deuxième condition ne sera pas évaluée.
Pour optimiser la consommation de Gaz, il convient de placer les conditions à faible coût de calcul en premier, ce qui permettrait de sauter les calculs coûteux.
Conseils généraux supplémentaires
1. Supprimer le code inutile
Si des fonctions ou des variables non utilisées existent dans le contrat, il est recommandé de les supprimer. C'est la méthode la plus directe pour réduire les coûts de déploiement du contrat et maintenir une taille de contrat réduite.
Voici quelques conseils pratiques :
Utiliser les algorithmes les plus efficaces pour effectuer les calculs. Si les résultats de certains calculs sont utilisés directement dans le contrat, alors il convient d'éliminer ces processus de calcul redondants. En essence, tout calcul non utilisé devrait ê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 en utilisant le mot-clé delete, ou être réinitialisée à sa valeur par défaut.
Optimisation des boucles : éviter les opérations de boucle coûteuses, combiner 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 les opérations de cryptage et de hachage. Comme le code n'est pas exécuté sur l'EVM, mais sur le nœud client local, 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 requise pour exécuter des contrats intelligents.
Les 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é des applications.
3. Utiliser du code d'assemblage en ligne
L'assemblage en ligne ( in-line assembly ) permet aux développeurs d'écrire du code de bas niveau mais efficace qui peut ê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 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 plus de flexibilité pour optimiser la consommation de Gas.
Cependant, l'utilisation d'assemblage en ligne peut également présenter des risques et être sujette à des erreurs. Par conséquent, cela doit être utilisé avec prudence et réservé aux développeurs expérimentés.
![Optimisation des Gas des smart contracts Ethereum : dix meilleures pratiques]###
Veuillez générer un commentaire en chinois pour cet article.