Traiter les gas wastes dans les contrats intelligents Ethereum
Une étude sur la réduction des frais de gas sur Ethereum grâce à l'optimisation des smart contracts.
― 7 min lire
Table des matières
- Importance de l'Efficacité du Gas
- Qu'est-ce que les Gas Wastes ?
- Défis dans la Détection des Gas Wastes
- Notre Approche
- Étude Empirique des Gas Wastes
- Principales Conclusions
- Développement de l'Outil : PeCatch
- Caractéristiques de PeCatch
- Évaluation de PeCatch
- Résultats
- Économies de Gas
- Conclusion
- Travaux Futurs
- Résumé
- Source originale
Les Contrats intelligents fonctionnent sur Ethereum, un système de blockchain public. Quand ces contrats s'exécutent, ils entraînent des frais de gas pour utiliser les ressources du réseau. Les programmeurs qui écrivent des contrats intelligents en Solidity incluent souvent sans le vouloir du code qui augmente inutilement les frais de gas. Ces parties inefficaces du code, appelées gas wastes, peuvent entraîner des coûts significatifs pour les utilisateurs. Malgré l'importance de ce sujet, pas grand-chose n'a été fait pour étudier ces gas wastes ou créer des outils pour les trouver.
Ce document vise à aider les utilisateurs d'Ethereum à économiser sur les frais de gas à travers deux activités principales : d'abord, on explore les causes courantes des gas wastes dans des contrats Solidity populaires et on propose des stratégies pour les corriger. Ensuite, on développe un outil appelé PeCatch qui aide à détecter ces gas wastes et suggère des corrections simples.
Importance de l'Efficacité du Gas
Les frais de gas sont essentiels pour faire fonctionner des contrats intelligents sur Ethereum. Chaque opération dans un contrat intelligent nécessite du gas, et les frais totaux peuvent s'accumuler rapidement, coûtant des millions aux utilisateurs chaque jour. Par conséquent, il est crucial d'écrire du code qui minimise l'utilisation de gas. Comprendre où surgissent les inefficacités de gas est la première étape pour s'attaquer à ce problème. Les résultats de notre étude peuvent aider les futurs outils de programmation et les améliorations de langage à réduire les gas wastes.
Qu'est-ce que les Gas Wastes ?
Les gas wastes désignent des segments de code dans un programme Solidity qui utilisent plus de gas que nécessaire. Contrairement aux bugs de performance traditionnels qui affectent la correction ou la vitesse d'un programme, les gas wastes n'influencent pas le résultat final mais entraînent des coûts supplémentaires. Identifier et corriger ces gas wastes peut mener à des économies significatives pour les utilisateurs.
Défis dans la Détection des Gas Wastes
Détecter les gas wastes est une tâche compliquée pour plusieurs raisons :
Coûts de Gas Complexes : Chaque opération en Solidity a des coûts de gas différents. Comprendre comment chacun affecte le coût total peut être délicat.
Caractéristiques Uniques du Langage : Solidity a des caractéristiques spécifiques qui le rendent différent des autres langages de programmation, ce qui peut entraîner des inefficacités de gas qui ne sont pas présentes ailleurs.
Outils Limités : Les techniques de détection actuelles négligent souvent les subtilités de Solidity, entraînant des occasions manquées pour l'optimisation.
Notre Approche
Pour s'attaquer aux gas wastes dans les contrats intelligents en Solidity, nous suivons un processus en deux étapes :
Étude Empirique : Nous examinons des applications Solidity populaires pour identifier les gas wastes courants et leurs causes profondes.
Développement d'Outil : Basé sur nos résultats, nous créons PeCatch, un outil d'analyse statique qui détecte les gas wastes et propose des corrections.
Étude Empirique des Gas Wastes
Notre étude a impliqué cinq applications Solidity largement utilisées. Nous avons examiné manuellement leur code pour identifier les gas wastes. Nos résultats incluent :
Catégories de Gas Wastes : Nous avons catégorisé les gas wastes en fonction des zones du contrat où les inefficacités se produisaient. Cela inclut la pile, la mémoire, le stockage, et le calldata.
Causes Courantes : Les programmeurs font souvent des erreurs qui entraînent des gas wastes, comme mal comprendre les fonctionnalités de gestion des données de Solidity.
Principales Conclusions
De notre analyse des gas wastes, nous avons tiré plusieurs enseignements :
Mauvaise Utilisation de la Pile : Beaucoup de gas wastes proviennent de la manière dont les programmeurs utilisent la pile, qui est moins chère à accéder que d'autres types de stockage.
Ignorer les Caractéristiques du Langage : Les programmeurs négligent souvent des caractéristiques uniques qui pourraient aider à réduire l'utilisation de gas, comme le mot-clé
unchecked
qui peut contourner des vérifications qui consomment du gas.Accès Répétitif : Accéder plusieurs fois aux mêmes données sans les stocker peut entraîner des coûts de gas inutiles.
Dans l'ensemble, nous avons découvert 100 instances spécifiques de gas wastes dans nos applications sélectionnées, dont beaucoup peuvent être facilement corrigées.
Développement de l'Outil : PeCatch
Nous avons conçu PeCatch comme une solution pour détecter les gas wastes dans les programmes Solidity. L'outil fonctionne en analysant le code Solidity et en identifiant des motifs qui sont connus pour mener à des inefficacités.
Caractéristiques de PeCatch
Analyse Statique : PeCatch inspecte le code des contrats intelligents sans l'exécuter, identifiant les gas wastes potentiels.
Vérificateurs Spécifiques : L'outil inclut différents vérificateurs, chacun axé sur un type particulier de gas waste.
Rapports Detaillés : PeCatch fournit un retour détaillé sur les problèmes identifiés, y compris des corrections suggérées que les programmeurs peuvent appliquer directement dans leur code.
Évaluation de PeCatch
Nous avons testé PeCatch à la fois sur les applications étudiées dans notre analyse empirique et sur d'autres projets open-source. Notre évaluation visait à évaluer l'efficacité, la précision et l'efficacité de l'outil.
Résultats
PeCatch a réussi à identifier 383 gas wastes à travers les applications, bien plus que les outils de détection existants. L'outil a également montré un faible taux de faux positifs, confirmant sa fiabilité.
Économies de Gas
En mettant en œuvre les suggestions fournies par PeCatch, les utilisateurs peuvent économiser des montants significatifs sur les frais de gas. Notre analyse indique que corriger les gas wastes identifiés peut réduire les coûts pour les utilisateurs dans des applications réelles.
Conclusion
Notre étude met en lumière le problème des inefficacités de gas dans les contrats intelligents en Solidity et présente PeCatch comme une solution pratique pour détecter et corriger ces problèmes. Les enseignements tirés de l'analyse des gas wastes peuvent aider à améliorer le langage Solidity et inspirer le développement d'outils de programmation plus efficaces. Les travaux futurs se concentreront sur l'expansion des capacités de PeCatch pour couvrir plus de types de gas wastes et affiner ses algorithmes de détection.
Travaux Futurs
Nous prévoyons d'améliorer l'outil PeCatch en :
Élargissant les Capacités de Détection : Nous visons à inclure des méthodes de détection plus sophistiquées pour attraper une plus large gamme de gas wastes.
Automatisant les Corrections : Les futures versions de PeCatch pourraient être capables de suggérer des corrections automatiques pour les gas wastes identifiés.
Vérification Formelle : Nous avons l'intention d'explorer des méthodes formelles pour s'assurer que les corrections préservent le comportement prévu des contrats intelligents tout en réduisant la consommation de gas.
Résumé
À mesure qu'Ethereum continue de croître, la pression sur les développeurs pour écrire des contrats intelligents efficaces devient plus marquée. Comprendre et s'attaquer aux gas wastes est crucial pour la viabilité à long terme de l'écosystème Ethereum. Grâce à notre recherche et au développement de PeCatch, nous espérons contribuer à un avenir où les pratiques de codage efficaces en gas seront la norme parmi les programmeurs Solidity.
Titre: How to Save My Gas Fees: Understanding and Detecting Real-world Gas Issues in Solidity Programs
Résumé: The execution of smart contracts on Ethereum, a public blockchain system, incurs a fee called gas fee for its computation and data-store consumption. When programmers develop smart contracts (e.g., in the Solidity programming language), they could unknowingly write code snippets that unnecessarily cause more gas fees. These issues, or what we call gas wastes, could lead to significant monetary waste for users. Yet, there have been no systematic examination of them or effective tools for detecting them. This paper takes the initiative in helping Ethereum users reduce their gas fees in two important steps: we conduct the first empirical study on gas wastes in popular smart contracts written in Solidity by understanding their root causes and fixing strategies; we then develop a static tool, PeCatch, to effectively detect gas wastes with simple fixes in Solidity programs based on our study findings. Overall, we make seven insights and four suggestions from our gas-waste study, which could foster future tool development, language improvement, and programmer awareness, and develop eight gas-waste checkers, which pinpoint 383 previously unknown gas wastes from famous Solidity libraries.
Auteurs: Mengting He, Shihao Xia, Boqin Qin, Nobuko Yoshida, Tingting Yu, Linhai Song, Yiying Zhang
Dernière mise à jour: 2024-03-05 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2403.02661
Source PDF: https://arxiv.org/pdf/2403.02661
Licence: https://creativecommons.org/licenses/by-nc-sa/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.