Stratégies d'optimisation des frais de Gas dans le développement de smart contracts
Le problème des frais de Gas sur le réseau principal Ethereum est toujours au centre des préoccupations des développeurs et des utilisateurs, surtout en période de congestion du réseau. Lors des pics de transactions, les utilisateurs doivent souvent payer des frais élevés. Par conséquent, il est particulièrement important d'optimiser les frais de Gas durant la phase de développement des smart contracts. L'optimisation de la consommation de Gas permet non seulement de réduire efficacement les coûts de transaction, mais aussi d'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), ainsi que les concepts clés associés et 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 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 un réseau compatible 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 principalement en trois parties : l'exécution des opérations, les appels de messages externes et la lecture/écriture en mémoire et 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 ). 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, 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.
Comprendre l'optimisation du Gas dans l'EVM
Lorsque vous compilez des smart contracts avec Solidity, le contrat sera converti en une série d'opcodes (.
Toute séquence d'opcodes ), comme la création de contrats, l'appel de messages, l'accès au stockage des comptes et l'exécution d'opérations sur la machine virtuelle ( a un coût de consommation de Gas reconnu, ces coûts sont enregistrés dans le livre blanc d'Ethereum.
Après plusieurs modifications des EIP, le coût en Gas de certaines opcodes a été ajusté, ce qui pourrait différer de celui du 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, tout en évitant les opérations coûteuses en Gas.
Dans l'EVM, les opérations suivantes ont un coût relativement faible :
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é incluent :
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]###https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
Meilleures pratiques pour l'optimisation des frais de gaz EVM
Sur la base des concepts fondamentaux 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 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 depuis le stockage, des coûts de Gaz élevés sont engendré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 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 incluent :
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.
![Top 10 meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 2. Emballage de variables
Le nombre de slots de stockage ( utilisés dans les smart contracts et la façon 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 continues 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 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 ###.
Comme chaque emplacement de stockage consomme du Gas, l'emballage des variables optimise l'utilisation du Gas en réduisant le nombre d'emplacements de stockage nécessaires.
( 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 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 Gaz supplémentaire.
Pris isolément, utiliser uint256 est moins cher que uint8. Cependant, cela change avec l'optimisation du bundling des variables. Si le développeur peut regrouper quatre variables uint8 dans un seul emplacement de stockage, le coût total de leur itération sera inférieur à celui de quatre variables uint256. Ainsi, les smart contracts peuvent lire et écrire un emplacement de stockage en une seule fois, et placer les quatre variables uint8 en mémoire/stocker en une seule opération.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.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 recommandé d'utiliser le type de données bytes32 à la place 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 de bytes1 à bytes32.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 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 l'emballage des types de données peut optimiser la consommation de Gas.
( 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.
Souvenez-vous de ce principe : si les paramètres de la fonction sont en lecture seule, privilégiez l'utilisation de calldata plutôt que de memory. Cela permet d'éviter les opérations de copie inutiles de calldata à memory.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 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 faible par rapport au stockage, il est recommandé d'utiliser les mots-clés Constant ou Immutable autant que possible.
![Les dix meilleures pratiques d'optimisation du Gas des contrats intelligents Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 8. Utilisez Unchecked en vous assurant qu'il n'y aura pas de dépassement/sous-dépassement.
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 inutiles de dépassement ou de sous-dépassement, 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 de la bibliothèque SafeMath, car le compilateur lui-même intègre déjà des fonctions de protection contre les débordements et les sous-débordements.
![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 9. Optimiser le modificateur
Le code du modificateur est intégré dans la fonction modifiée. 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, permettant la réutilisation de cette fonction interne dans les modificateurs, on peut réduire la taille du bytecode et diminuer les coûts en Gas.
![Les dix meilleures pratiques d'optimisation de Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.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 pour l'optimisation du Gas des smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(
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 la méthode la plus directe pour réduire les coûts de déploiement du contrat et maintenir la taille du contrat petite.
Voici quelques conseils pratiques :
Utilisez les algorithmes les plus efficaces pour effectuer des calculs. Si le résultat de certains calculs est utilisé directement dans le contrat, alors ces processus de calcul redondants doivent être supprimés. En essence, tout calcul non utilisé doit ê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 convient d'utiliser le mot-clé delete pour la supprimer ou de la définir à 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 offrent 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, 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 requise pour exécuter 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 de Gas et améliorer l'efficacité d'exécution 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 davantage les frais de Gas. De plus, l'assemblage en ligne peut exécuter certaines opérations complexes qui sont 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 comporter des risques et être sujette à des erreurs. Par conséquent, elle doit être utilisée avec prudence, réservée aux développeurs expérimentés.
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.
20 J'aime
Récompense
20
8
Partager
Commentaire
0/400
DancingCandles
· 08-01 22:01
Les frais de gaz sont vraiment trop élevés.
Voir l'originalRépondre0
MEVEye
· 07-31 20:06
L'optimisation spécialisée est désormais une nécessité.
Voir l'originalRépondre0
P2ENotWorking
· 07-31 11:30
Le gas est vraiment cher.
Voir l'originalRépondre0
ReverseFOMOguy
· 07-31 01:52
Les frais de gaz sont vraiment exagérés.
Voir l'originalRépondre0
BearMarketBard
· 07-31 01:51
L'optimisation est un sujet éternel.
Voir l'originalRépondre0
MetaMisfit
· 07-31 01:49
Les frais de gaz sont vraiment cruels.
Voir l'originalRépondre0
OldLeekMaster
· 07-31 01:35
piège à poupées, c'est si profond.
Voir l'originalRépondre0
BlockchainTherapist
· 07-31 01:26
Rapport de première ligne sur la transmission de la vérité
Stratégies d'optimisation des frais de Gas et meilleures pratiques pour les smart contracts Ethereum
Stratégies d'optimisation des frais de Gas dans le développement de smart contracts
Le problème des frais de Gas sur le réseau principal Ethereum est toujours au centre des préoccupations des développeurs et des utilisateurs, surtout en période de congestion du réseau. Lors des pics de transactions, les utilisateurs doivent souvent payer des frais élevés. Par conséquent, il est particulièrement important d'optimiser les frais de Gas durant la phase de développement des smart contracts. L'optimisation de la consommation de Gas permet non seulement de réduire efficacement les coûts de transaction, mais aussi d'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), ainsi que les concepts clés associés et 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 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 un réseau compatible 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 principalement en trois parties : l'exécution des opérations, les appels de messages externes et la lecture/écriture en mémoire et 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 ). 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, 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.
Comprendre l'optimisation du Gas dans l'EVM
Lorsque vous compilez des smart contracts avec Solidity, le contrat sera converti en une série d'opcodes (.
Toute séquence d'opcodes ), comme la création de contrats, l'appel de messages, l'accès au stockage des comptes et l'exécution d'opérations sur la machine virtuelle ( a un coût de consommation de Gas reconnu, ces coûts sont enregistrés dans le livre blanc d'Ethereum.
Après plusieurs modifications des EIP, le coût en Gas de certaines opcodes a été ajusté, ce qui pourrait différer de celui du 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, tout en évitant les opérations coûteuses en Gas.
Dans l'EVM, les opérations suivantes ont un coût relativement faible :
Les opérations à coût élevé incluent :
![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
Meilleures pratiques pour l'optimisation des frais de gaz EVM
Sur la base des concepts fondamentaux 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 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 depuis le stockage, des coûts de Gaz élevés sont engendré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 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 incluent :
![Top 10 meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 2. Emballage de variables
Le nombre de slots de stockage ( utilisés dans les smart contracts et la façon 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 continues 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 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 ###.
Comme chaque emplacement de stockage consomme du Gas, l'emballage des variables optimise l'utilisation du Gas en réduisant le nombre d'emplacements de stockage nécessaires.
( 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 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 Gaz supplémentaire.
Pris isolément, utiliser uint256 est moins cher que uint8. Cependant, cela change avec l'optimisation du bundling des variables. Si le développeur peut regrouper quatre variables uint8 dans un seul emplacement de stockage, le coût total de leur itération sera inférieur à celui de quatre variables uint256. Ainsi, les smart contracts peuvent lire et écrire un emplacement de stockage en une seule fois, et placer les quatre variables uint8 en mémoire/stocker en une seule opération.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.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 recommandé d'utiliser le type de données bytes32 à la place 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 de bytes1 à bytes32.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 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 l'emballage des types de données peut optimiser la consommation de Gas.
( 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.
Souvenez-vous de ce principe : si les paramètres de la fonction sont en lecture seule, privilégiez l'utilisation de calldata plutôt que de memory. Cela permet d'éviter les opérations de copie inutiles de calldata à memory.
![Les dix meilleures pratiques d'optimisation du Gas des smart contracts Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 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 faible par rapport au stockage, il est recommandé d'utiliser les mots-clés Constant ou Immutable autant que possible.
![Les dix meilleures pratiques d'optimisation du Gas des contrats intelligents Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 8. Utilisez Unchecked en vous assurant qu'il n'y aura pas de dépassement/sous-dépassement.
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 inutiles de dépassement ou de sous-dépassement, 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 de la bibliothèque SafeMath, car le compilateur lui-même intègre déjà des fonctions de protection contre les débordements et les sous-débordements.
![Les dix meilleures pratiques d'optimisation du Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 9. Optimiser le modificateur
Le code du modificateur est intégré dans la fonction modifiée. 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, permettant la réutilisation de cette fonction interne dans les modificateurs, on peut réduire la taille du bytecode et diminuer les coûts en Gas.
![Les dix meilleures pratiques d'optimisation de Gas pour les smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.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 pour l'optimisation du Gas des smart contracts Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(
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 la méthode la plus directe pour réduire les coûts de déploiement du contrat et maintenir la taille du contrat petite.
Voici quelques conseils pratiques :
Utilisez les algorithmes les plus efficaces pour effectuer des calculs. Si le résultat de certains calculs est utilisé directement dans le contrat, alors ces processus de calcul redondants doivent être supprimés. En essence, tout calcul non utilisé doit ê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 convient d'utiliser le mot-clé delete pour la supprimer ou de la définir à 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 offrent 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, 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 requise pour exécuter 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 de Gas et améliorer l'efficacité d'exécution 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 davantage les frais de Gas. De plus, l'assemblage en ligne peut exécuter certaines opérations complexes qui sont 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 comporter des risques et être sujette à des erreurs. Par conséquent, elle doit être utilisée avec prudence, réservée aux développeurs expérimentés.
) 4. Utiliser des solutions Layer 2
faire