Abordando los Desperdicios de Gas en los Contratos Inteligentes de Ethereum
Un estudio sobre cómo reducir las tarifas de gas en Ethereum a través de la optimización de contratos inteligentes.
― 6 minilectura
Tabla de contenidos
- Importancia de la Eficiencia de Gas
- ¿Qué son los Desperdicios de Gas?
- Desafíos en la Detección de Desperdicios de Gas
- Nuestro Enfoque
- Estudio Empírico de Desperdicios de Gas
- Hallazgos Clave
- Desarrollo de Herramientas: PeCatch
- Características de PeCatch
- Evaluación de PeCatch
- Resultados
- Ahorros en Gas
- Conclusión
- Trabajo Futuro
- Resumen
- Fuente original
Los Contratos Inteligentes corren en Ethereum, un sistema de blockchain público. Cuando estos contratos se ejecutan, generan Tarifas de gas por usar los recursos de la red. Los programadores que escriben contratos inteligentes en Solidity a menudo incluyen sin querer código que aumenta las tarifas de gas innecesariamente. Estas partes ineficientes del código, conocidas como desperdicios de gas, pueden generar costos significativos para los usuarios. A pesar de la importancia de este tema, no se ha hecho mucho para estudiar estos desperdicios de gas o crear herramientas para encontrarlos.
Este trabajo tiene como objetivo ayudar a los usuarios de Ethereum a ahorrar en tarifas de gas a través de dos actividades principales: primero, exploramos las causas comunes de los desperdicios de gas en contratos populares de Solidity y proponemos estrategias para corregirlos. Luego, desarrollamos una herramienta llamada PeCatch que ayuda a detectar estos desperdicios de gas y sugiere soluciones simples.
Importancia de la Eficiencia de Gas
Las tarifas de gas son esenciales para operar contratos inteligentes en Ethereum. Cada operación en un contrato inteligente requiere gas, y las tarifas totales pueden acumularse rápidamente, costando a los usuarios millones diariamente. Por lo tanto, es crucial escribir código que minimice el uso de gas. Entender de dónde provienen las ineficiencias de gas es el primer paso para abordar este problema. Los hallazgos de nuestro estudio pueden ayudar a futuras herramientas de programación y mejoras en el lenguaje para reducir los desperdicios de gas.
¿Qué son los Desperdicios de Gas?
Los desperdicios de gas se refieren a segmentos de código en un programa de Solidity que usan más gas del necesario. A diferencia de los errores de rendimiento tradicionales que afectan la corrección o la velocidad de un programa, los desperdicios de gas no influyen en el resultado final, pero generan costos adicionales. Identificar y solucionar estos desperdicios puede resultar en ahorros significativos para los usuarios.
Desafíos en la Detección de Desperdicios de Gas
Detectar desperdicios de gas es una tarea complicada por varias razones:
Costos de Gas Complejos: Cada operación en Solidity tiene diferentes costos de gas. Entender cómo cada uno afecta el costo total puede ser complicado.
Características Únicas del Lenguaje: Solidity tiene características específicas que lo hacen diferente de otros lenguajes de programación, lo que puede llevar a ineficiencias de gas que no están presentes en otros lugares.
Herramientas Limitadas: Las técnicas de detección actuales a menudo pasan por alto las complejidades de Solidity, lo que lleva a oportunidades perdidas para la optimización.
Nuestro Enfoque
Para abordar los desperdicios de gas en contratos inteligentes de Solidity, seguimos un proceso de dos pasos:
Estudio Empírico: Investigamos aplicaciones populares de Solidity para identificar desperdicios de gas comunes y sus causas raíz.
Desarrollo de Herramientas: Basándonos en nuestros hallazgos, creamos PeCatch, una herramienta de análisis estático que detecta desperdicios de gas y sugiere soluciones.
Estudio Empírico de Desperdicios de Gas
Nuestro estudio involucró cinco aplicaciones de Solidity ampliamente utilizadas. Examinamos manualmente su código para identificar desperdicios de gas. Nuestros hallazgos incluyen:
Categorías de Desperdicios de Gas: Clasificamos los desperdicios de gas según las áreas del contrato donde ocurrieron ineficiencias. Esto incluye la pila, memoria, almacenamiento y calldata.
Causas Comunes: A menudo, los programadores cometen errores que llevan a desperdicios de gas, como malentender las características de manejo de datos de Solidity.
Hallazgos Clave
A partir de nuestro análisis de desperdicios de gas, derivamos varias ideas:
Mal Uso de la Pila: Muchos desperdicios de gas surgen de cómo los programadores utilizan la pila, que es más barata de acceder que otros tipos de almacenamiento.
Ignorar Características del Lenguaje: Los programadores a menudo pasan por alto características únicas que podrían ayudar a reducir el uso de gas, como la palabra clave
unchecked
que puede omitir verificaciones que consumen gas.Acceso Repetitivo: Acceder a los mismos datos varias veces sin almacenarlos puede llevar a costos de gas innecesarios.
En general, descubrimos 100 instancias específicas de desperdicios de gas en nuestras aplicaciones seleccionadas, muchas de las cuales se pueden corregir fácilmente.
Desarrollo de Herramientas: PeCatch
Diseñamos PeCatch como una solución para detectar desperdicios de gas en programas de Solidity. La herramienta funciona analizando el código de Solidity e identificando patrones que son conocidos por llevar a ineficiencias.
Características de PeCatch
Análisis Estático: PeCatch inspecciona el código del contrato inteligente sin ejecutarlo, identificando posibles desperdicios de gas.
Verificadores Específicos: La herramienta incluye diferentes verificadores, cada uno enfocado en un tipo particular de desperdicio de gas.
Informes Detallados: PeCatch proporciona comentarios detallados sobre los problemas identificados, incluidas soluciones sugeridas que los programadores pueden implementar directamente en su código.
Evaluación de PeCatch
Probamos PeCatch tanto en las aplicaciones estudiadas en nuestro análisis empírico como en proyectos de código abierto adicionales. Nuestra evaluación tuvo como objetivo evaluar la efectividad, precisión y eficiencia de la herramienta.
Resultados
PeCatch identificó exitosamente 383 desperdicios de gas en las aplicaciones, significativamente más que las herramientas de detección existentes. La herramienta también mostró una baja tasa de falsos positivos, lo que confirma su fiabilidad.
Ahorros en Gas
Al implementar las sugerencias proporcionadas por PeCatch, los usuarios pueden ahorrar cantidades significativas en tarifas de gas. Nuestro análisis indica que corregir los desperdicios de gas identificados puede llevar a reducir costos para los usuarios en aplicaciones del mundo real.
Conclusión
Nuestro estudio ilumina el problema de las ineficiencias de gas en contratos inteligentes de Solidity y presenta a PeCatch como una solución práctica para detectar y corregir estos problemas. Los conocimientos obtenidos al analizar los desperdicios de gas pueden ayudar a mejorar el lenguaje Solidity e inspirar el desarrollo de herramientas de programación más eficientes. El trabajo futuro se centrará en expandir las capacidades de PeCatch para cubrir más tipos de desperdicios de gas y refinar sus algoritmos de detección.
Trabajo Futuro
Planeamos mejorar la herramienta PeCatch mediante:
Expandir Capacidades de Detección: Buscamos incluir métodos de detección más sofisticados para alcanzar una gama más amplia de desperdicios de gas.
Automatizar Soluciones: Las versiones futuras de PeCatch podrían ser capaces de sugerir soluciones automáticas para desperdicios de gas identificados.
Verificación Formal: Tenemos la intención de explorar métodos formales para asegurar que las soluciones preserven el comportamiento deseado de los contratos inteligentes mientras reducen el consumo de gas.
Resumen
A medida que Ethereum continúa creciendo, la presión sobre los desarrolladores para escribir contratos inteligentes eficientes se hace más evidente. Entender y abordar los desperdicios de gas es crucial para la viabilidad a largo plazo del ecosistema de Ethereum. A través de nuestra investigación y el desarrollo de PeCatch, esperamos contribuir a un futuro donde las prácticas de codificación eficientes en gas sean la norma entre los programadores de Solidity.
Título: How to Save My Gas Fees: Understanding and Detecting Real-world Gas Issues in Solidity Programs
Resumen: 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.
Autores: Mengting He, Shihao Xia, Boqin Qin, Nobuko Yoshida, Tingting Yu, Linhai Song, Yiying Zhang
Última actualización: 2024-03-05 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2403.02661
Fuente PDF: https://arxiv.org/pdf/2403.02661
Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.