Pour interagir avec une blockchain EVM (Ethereum Virtual Machine), vous devrez toujours payer des frais de gaz. Ces frais peuvent être frustrants car ils peuvent être très élevés. Voyons ce qu'ils sont exactement et comment nous pouvons optimiser notre code de contrat intelligent pour réduire les frais de gaz.
Qu'est-ce que le gaz dans Ethereum ?
Dans le Documentation Ethereum, le gaz est défini comme suit :
«Le gaz fait référence à l'unité qui mesure la quantité d'effort de calcul nécessaire pour exécuter des opérations spécifiques sur le réseau Ethereum. Étant donné que chaque transaction Ethereum nécessite des ressources de calcul pour s'exécuter, chaque transaction nécessite des frais. Le gaz fait référence aux frais requis pour mener à bien une transaction sur Ethereum.
En d'autres termes, plus votre code est complexe, plus il coûtera cher.
Détailler comment les frais de gaz sont calculés est complexe et pourrait faire l'objet d'un autre article à lui seul. La formule la plus importante à comprendre est :
Frais de gaz=Unités de gaz*Prix du gaz
Unités à gaz sont le coût total des opérations de calcul mesuré dans l'unité appelée gaz.
Prix du gaz est le prix du gaz en Gwei (10-9 éther). Le prix du gaz fluctue en fonction de l'utilisation du réseau Ethereum.
Vous ne pouvez pas affecter le prix du gaz, vous devez donc vous concentrer sur les unités de gaz de votre code pour les réduire autant que possible.
Comment optimiser les frais de gaz
L'optimisation du gaz consiste simplement à privilégier ce qui est "bon marché" à calculer comme les variables locales ou les constantes et à éviter autant que possible ce qui est "coûteux" à calculer comme les variables d'état stockées dans le stockage contractuel ou les boucles.
Voici quelques conseils pour commencer à optimiser votre gaz.
Conseil n° 1 : n'initialisez pas les variables
Si la variable n'est pas initialisée, elle est supposée avoir une valeur par défaut (0, faux, 0x0, …). Initialisation variables est alors juste un gaspillage de gaz.
Conseil n° 2 : utilisez des variables locales au lieu de variables d'état dans les boucles
Lire et écrire locales variable est pas cher, tandis que la lecture et l'écriture Etat les variables qui sont stockées dans le stockage de contrat sont cher.
Conseil n° 3 : utilisez externe et interne au lieu de public
external
signifie que vous pouvez appeler votre fonction depuis l'extérieur de votre contrat.internal
signifie que vous pouvez appeler votre fonction depuis votre contrat.public
est un mélange de external
ainsi que internal
, vous pouvez faire les deux.
As external
ainsi que internal
accorde moins d'accès que public
, elles sont moins chère.
Nous allons alors toujours préfère à utiliser external
or internal
d'abord et changez-le en public si besoin.
Conseil n° 4 : Stockez les données en mémoire, pas en stockage
Le choix de l'emplacement idéal des données est essentiel. Vous devez connaître ceux-ci :
- storage – la variable est stockée sur la blockchain. C'est une variable d'état persistante. Coûte du gaz pour le définir et le modifier.
- Mémoire – variable temporaire déclarée dans une fonction. Pas de gaz pour déclarer. Mais cela coûte du gaz pour changer les variables de mémoire (moins que le stockage)
- données d'appel – comme la mémoire mais non modifiable et uniquement disponible comme argument de fonctions externes
Si l'emplacement des données n'est pas spécifié, il s'agit du stockage par défaut.
Astuce n°5 : Ordonnez vos variables
L'ordre de vos variables est important dans les contrats intelligents. Solidity stocke les données dans un emplacement unique de 256 bits. Si votre variable est plus petite qu'un emplacement, elle est compressée avec une autre variable à placer dans un seul emplacement. Mais pour ce faire, nous devons placer ces variables les unes à côté des autres.
Conseil n° 6 : Supprimez vos variables pour obtenir un remboursement d'essence
C'est aussi une excellente fonctionnalité de solidité. Puisqu'il n'y a pas de récupération de place, vous devez jeter vous-même les données inutilisées. Le but ici est de gagner de la place sur la blockchain. La bonne nouvelle est que vous obtiendrez 75% de vos frais de stockage remboursés.
Utilisez simplement le mot-clé delete
.
Conseil n° 7 : utilisez des informations imbriquées if ou multiple exigent au lieu de && opérateur
D'abord pour définition, alors parce que c'est moins chère!
Conseil n° 8 : utilisez l'optimiseur de Solidity
Assure-toi Optimiseur de solidité is activé. Il réduit les coûts de gaz. Le nombre par défaut est 200.
Si vous souhaitez optimiser le gaz pour le déploiement d'un contrat (cela coûte moins cher de déployer un contrat), définissez l'optimiseur de solidité sur un nombre faible.
Si vous souhaitez optimiser les coûts de gaz d'exécution (lorsque les fonctions sont appelées sur un contrat), réglez l'optimiseur sur un nombre élevé.
Vous voulez en savoir plus ?
Une réunion de conseil gratuite incluse.