8 astuces faciles d'optimisation du gaz pour la solidité

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é.

Écrit Par
Avigdor Sason Cohen

Avigdor est chercheur en sécurité web3 chez Sayfer. Il est passionné par les nouvelles technologies blockchain et comment nous pourrions nous assurer de les développer de manière sécurisée.

 

Passer au contenu