Guía de optimización de tarifas Gas para contratos inteligentes EVM: 10 consejos prácticos

Guía de optimización de tarifas de Gas para contratos inteligentes EVM

En la red de Ethereum, las tarifas de Gas han sido un problema doloroso para los usuarios, especialmente en períodos de congestión de la red. Durante los picos de transacciones, los usuarios a menudo necesitan pagar tarifas elevadas para completar sus transacciones. Por lo tanto, es especialmente importante optimizar las tarifas de Gas durante la fase de desarrollo de contratos inteligentes. La optimización del consumo de Gas no solo puede reducir efectivamente los costos de transacción, sino que también puede mejorar la eficiencia de las transacciones, brindando a los usuarios una experiencia de uso de blockchain más económica y eficiente.

Este artículo describirá el mecanismo de tarifas de Gas de la máquina virtual de Ethereum (EVM), los conceptos clave de optimización de tarifas de Gas, así como las mejores prácticas para la optimización de tarifas de Gas en el desarrollo de contratos inteligentes. Esperamos que este contenido pueda proporcionar una referencia útil para los desarrolladores, al mismo tiempo que ayuda a los usuarios comunes a comprender mejor cómo funcionan las tarifas de Gas de EVM, enfrentando juntos los desafíos del ecosistema blockchain.

Las diez mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum

Introducción al mecanismo de tarifas de Gas del EVM

En las redes compatibles con EVM, el Gas es la unidad utilizada para medir la capacidad de cálculo necesaria para ejecutar operaciones específicas.

En la estructura del EVM, el consumo de Gas se divide principalmente en tres partes: ejecución de operaciones, llamadas a mensajes externos y lectura/escritura de memoria y almacenamiento.

La ejecución de cada transacción requiere el consumo de recursos computacionales, por lo que se cobrará una tarifa determinada para prevenir bucles infinitos y ataques de denegación de servicio (DoS). La tarifa necesaria para completar una transacción se denomina tarifa de Gas.

Desde la implementación de EIP-1559, la tarifa de Gas se calcula mediante la siguiente fórmula:

Gas = unidades de Gas utilizadas * ( tarifa base + tarifa prioritaria )

La tarifa base será destruida, mientras que la tarifa prioritaria se utilizará como incentivo para alentar a los validadores a agregar transacciones a la cadena de bloques. Establecer una tarifa prioritaria más alta puede aumentar la probabilidad de que la transacción se incluya en el siguiente bloque.

Entender la optimización de Gas en EVM

Al compilar contratos inteligentes con Solidity, el contrato se convierte en una serie de opcodes (.

Cada código de operación ), como la creación de contratos, la realización de llamadas de mensajes y el acceso al almacenamiento de cuentas, tiene un costo fijo de consumo de Gas. Estos costos están registrados en el libro amarillo de Ethereum, pero con varias modificaciones de EIP, los costos de Gas de algunas operaciones han sido ajustados.

( concepto básico de optimización de Gas

La idea central de la optimización de Gas es priorizar las operaciones de alto costo-eficiencia en la blockchain EVM, evitando operaciones con altos costos de Gas.

En EVM, las siguientes operaciones tienen un costo relativamente bajo:

  • Leer y escribir variables de memoria
  • Leer constantes y variables inmutables
  • Leer y escribir variables locales
  • Leer la variable calldata
  • Llamada a funciones internas

Las operaciones de alto costo incluyen:

  • Leer y escribir las variables de estado almacenadas en los contratos inteligentes
  • Llamada a funciones externas
  • Operaciones cíclicas

![Las 10 mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp###

Mejores prácticas para la optimización de tarifas de gas EVM

( 1. Intenta reducir el uso de almacenamiento

En Solidity, Storage) el almacenamiento### es un recurso limitado, cuyo consumo de Gas es mucho mayor que el de Memory( la memoria). Cada vez que un contrato inteligente lee o escribe datos desde el almacenamiento, se generan altos costos de Gas.

Según el libro blanco de Ethereum, el costo de las operaciones de almacenamiento es más de 100 veces mayor que el de las operaciones en memoria. Por ejemplo, las instrucciones mload y mstore solo consumen 3 unidades de Gas, mientras que sload y sstore requieren al menos 100 unidades de costo incluso en las mejores condiciones.

Los métodos para limitar el uso del almacenamiento incluyen:

  • Almacenar datos no permanentes en la memoria
  • Reducir el número de modificaciones de almacenamiento: guardar los resultados intermedios en la memoria y, una vez completados todos los cálculos, asignar los resultados a las variables de almacenamiento.

Las diez mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum

( 2. Empaquetado de variables

La cantidad y la forma de representación de los datos en el storage slot ) de los contratos inteligentes afectarán en gran medida el consumo de Gas.

El compilador de Solidity empaqueta las variables de almacenamiento contiguas durante el proceso de compilación, utilizando un slot de almacenamiento de 32 bytes como la unidad básica de almacenamiento de variables. El empaquetado de variables se refiere a organizar adecuadamente las variables para que múltiples variables puedan ajustarse a un solo slot de almacenamiento.

A través de este ajuste, los desarrolladores pueden ahorrar una gran cantidad de unidades de Gas. Dado que cada ranura de almacenamiento consume Gas, empaquetar variables optimiza el uso de Gas al reducir la cantidad de ranuras de almacenamiento necesarias.

![Diez mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(

) 3. Optimizar tipos de datos

Elegir el tipo de dato adecuado ayuda a optimizar el uso de Gas.

Por ejemplo, en Solidity, los enteros se pueden dividir en diferentes tamaños: uint8, uint16, uint32, etc. Dado que la EVM realiza operaciones en unidades de 256 bits, usar uint8 significa que la EVM debe convertirlo primero a uint256, y esta conversión consumirá Gas adicional.

Sin embargo, si se pueden empaquetar cuatro variables uint8 en una ranura de almacenamiento, el costo total de iterar sobre ellas será menor que el de cuatro variables uint256. De esta manera, el contrato inteligente puede leer y escribir una ranura de almacenamiento una vez y colocar las cuatro variables uint8 en memoria/almacenamiento en una sola operación.

Las 10 mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum

4. Usar variables de tamaño fijo en lugar de variables dinámicas

Si los datos se pueden controlar dentro de 32 bytes, se recomienda utilizar el tipo de datos bytes32 en lugar de bytes o strings. En general, las variables de tamaño fijo consumen menos Gas que las variables de tamaño variable. Si se puede limitar la longitud en bytes, intente elegir la longitud mínima desde bytes1 hasta bytes32.

Las 10 mejores prácticas de optimización de Gas en contratos inteligentes de Ethereum

5. Mapeos y arreglos

Las listas de datos de Solidity se pueden representar con dos tipos de datos: Arrays( y Mappings).

En la mayoría de los casos, los mapas son más eficientes y de menor costo, pero los arrays tienen iterabilidad y soportan el empaquetado de tipos de datos. Por lo tanto, se recomienda priorizar el uso de mapas al gestionar listas de datos, a menos que sea necesario iterar o se pueda optimizar el consumo de Gas mediante el empaquetado de tipos de datos.

![Las 10 mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6. Usar calldata en lugar de memory

Las variables declaradas en los parámetros de la función pueden almacenarse en calldata o memory. La principal diferencia entre ambos es que memory puede ser modificada por la función, mientras que calldata es inmutable.

Si los parámetros de la función son de solo lectura, se debe preferir el uso de calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias de calldata a memory.

Las 10 mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum

( 7. Utilizar la palabra clave Constant/Immutable siempre que sea posible.

Las variables Constant/Immutable no se almacenan en el almacenamiento del contrato. Estas variables se calculan en el momento de la compilación y se almacenan en el bytecode del contrato. Por lo tanto, su costo de acceso es mucho menor en comparación con el almacenamiento, y se recomienda usar las palabras clave Constant o Immutable siempre que sea posible.

![Las diez mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###

( 8. Usar Unchecked asegurando que no ocurrirá desbordamiento/subdesbordamiento.

Cuando los desarrolladores pueden asegurarse de que las operaciones aritméticas no causarán desbordamientos o subdesbordamientos, pueden utilizar la palabra clave unchecked introducida en Solidity v0.8.0 para evitar comprobaciones innecesarias de desbordamiento o subdesbordamiento, lo que ahorra costos de Gas.

Además, las versiones 0.8.0 y superiores del compilador ya no necesitan usar la biblioteca SafeMath, ya que el compilador en sí tiene incorporadas funciones de protección contra desbordamientos y subdesbordamientos.

![Las diez mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###

( 9. optimizador de modificaciones

El código del modificador se incrusta en la función modificada, y cada vez que se usa el modificador, su código se copia. Esto aumentará el tamaño del bytecode y elevará el consumo de Gas.

Al reestructurar la lógica en funciones internas, se permite reutilizar esa función interna en los modificadores, lo que puede reducir el tamaño del bytecode y disminuir los costos de Gas.

![Las 10 mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###

( 10. Optimización de cortocircuito

En el caso de los operadores || y &&, la evaluación lógica se realizará mediante un cortocircuito, es decir, si la primera condición ya puede determinar el resultado de la expresión lógica, no se evaluará la segunda condición.

Para optimizar el consumo de Gas, se deben colocar las condiciones de bajo costo de cálculo al principio, de esta manera se puede saltar el cálculo costoso.

![Diez mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp###

Sugerencias generales adicionales

( 1. Eliminar código innecesario

Si hay funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Este es el método más directo para reducir los costos de despliegue del contrato y mantener el tamaño del contrato pequeño.

Algunos consejos prácticos:

  • Utilizar el algoritmo más eficiente para los cálculos.
  • Eliminar los procesos de cálculo no utilizados.
  • Utiliza la palabra clave delete para eliminar variables que ya no son necesarias, o para establecerlas en su valor predeterminado.
  • Optimización de bucles: evitar operaciones de bucle costosas, combinar bucles siempre que sea posible y mover cálculos repetidos fuera del cuerpo del bucle.

) 2. Uso de contratos inteligentes precompilados

Los contratos precompilados ofrecen funciones de biblioteca complejas, como operaciones de cifrado y hash. Dado que el código no se ejecuta en la EVM, sino que se ejecuta localmente en los nodos del cliente, se necesita menos Gas. El uso de contratos precompilados puede ahorrar Gas al reducir la carga de trabajo computacional necesaria para ejecutar contratos inteligentes.

Los ejemplos de contratos precompilados incluyen el algoritmo de firma digital de curva elíptica ###ECDSA( y el algoritmo de hash SHA2-256.

) 3. Usar código de ensamblador en línea

La ensambladura en línea permite a los desarrolladores escribir código de bajo nivel pero eficiente que puede ser ejecutado directamente por la EVM, sin necesidad de utilizar costosos códigos de operación de Solidity. La ensambladura en línea también permite un control más preciso sobre el uso de la memoria y el almacenamiento, lo que reduce aún más las tarifas de Gas. Además, la ensambladura en línea puede ejecutar algunas operaciones complejas que son difíciles de implementar solo con Solidity, proporcionando más flexibilidad para optimizar el consumo de Gas.

Sin embargo, el uso de ensamblaje en línea también puede conllevar riesgos y ser propenso a errores. Por lo tanto, debe usarse con precaución y limitarse a desarrolladores con experiencia.

4. Uso de soluciones de Layer 2

El uso de soluciones de Capa 2 puede reducir la cantidad de datos que necesitan almacenarse y calcularse en la red principal de Ethereum.

Las soluciones de Layer 2, como rollups, cadenas laterales y canales de estado, pueden descargar el procesamiento de transacciones de la cadena principal de Ethereum, lo que permite transacciones más rápidas y económicas.

Al agrupar un gran número de transacciones, estas soluciones reducen la cantidad de transacciones en la cadena, lo que a su vez disminuye las tarifas de Gas. El uso de soluciones de Capa 2 también puede mejorar la escalabilidad de Ethereum, permitiendo que más usuarios y aplicaciones participen en la red sin causar congestión debido a la sobrecarga de la red.

5. Uso de herramientas y bibliotecas de optimización

Hay varias herramientas de optimización disponibles, como el optimizador solc, el optimizador de construcción de Truffle y el compilador Solidity de Remix.

Estas herramientas pueden ayudar a minimizar el tamaño del bytecode, eliminar código innecesario y reducir el número de operaciones necesarias para ejecutar contratos inteligentes. Combinadas con otras bibliotecas de optimización de Gas, como "solmate", los desarrolladores pueden reducir efectivamente los costos de Gas y mejorar la eficiencia de los contratos inteligentes.

Las 10 mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum

Conclusión

Optimizar el consumo de Gas es un paso importante para los desarrolladores.

GAS-2.28%
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 9
  • Republicar
  • Compartir
Comentar
0/400
NotGonnaMakeItvip
· 07-13 18:50
La comunidad blockchain de agua hirviendo lo entiende, el núcleo solo vende gas.
Ver originalesResponder0
DeFiGraylingvip
· 07-13 18:26
gas está muy caro, casi me arruino.
Ver originalesResponder0
BearMarketSurvivorvip
· 07-13 13:49
La tarifa de gas ha vuelto a arruinar a los pobres, ¡wu wu!
Ver originalesResponder0
WalletManagervip
· 07-12 02:38
gas está demasiado caro, mejor ir a L2 a comerciar
Ver originalesResponder0
RugDocDetectivevip
· 07-12 02:36
No te pongas con cosas raras, las tarifas de gas son el verdadero problema.
Ver originalesResponder0
BearMarketGardenervip
· 07-12 02:21
experto又整活儿 该买啥 Reducir pérdidas操作的来了
Ver originalesResponder0
DataChiefvip
· 07-12 02:18
¡Dios mío, otra vez en el gas! ¿Puedes decir algo nuevo?
Ver originalesResponder0
RektCoastervip
· 07-12 02:16
¿Quién puede decirme cómo salvar mi Billetera? Las tarifas de gas realmente son excesivas.
Ver originalesResponder0
MaticHoleFillervip
· 07-12 02:10
El gas es realmente atractivo, y además hizo que Vitalik Buterin ganara un montón.
Ver originalesResponder0
Ver más
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)