Guía de optimización de tarifas de Gas para contratos inteligentes de Ethereum: las diez mejores prácticas y consejos

Mejores prácticas de optimización de Gas en contratos inteligentes de Ethereum

Las tarifas de Gas de la red principal de Ethereum siempre han sido un problema complicado, especialmente en momentos de congestión de la red. Durante los picos, los usuarios a menudo tienen que pagar altas tarifas de transacción. Por lo tanto, es crucial optimizar las tarifas de Gas durante la fase de desarrollo de contratos inteligentes. Optimizar el consumo de Gas no solo puede reducir eficazmente 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 resumirá el mecanismo de tarifas de Gas del ( EVM) de Ethereum, los conceptos clave relacionados con la optimización de tarifas de Gas, así como las mejores prácticas para optimizar tarifas de Gas al desarrollar contratos inteligentes. Esperamos que a través de este contenido, podamos proporcionar inspiración y ayuda práctica a los desarrolladores, al mismo tiempo que ayudamos a los usuarios comunes a comprender mejor cómo funcionan las tarifas de Gas del EVM, enfrentando juntos los desafíos en el ecosistema blockchain.

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

Introducción al mecanismo de tarifas de Gas de EVM

En redes compatibles con EVM, "Gas" se refiere a la unidad utilizada para medir la capacidad computacional necesaria para ejecutar operaciones específicas.

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

Debido a que la ejecución de cada transacción requiere recursos de cálculo, se cobrará una cierta tarifa 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 que EIP-1559 entró en vigor, la tarifa de Gas se calcula mediante la siguiente fórmula:

La tarifa de gas = unidades de gas utilizadas * (tarifa base + tarifa de prioridad)

La tarifa básica será destruida, mientras que la tarifa prioritaria se utilizará como incentivo para alentar a los validadores a agregar transacciones a la cadena de bloques. Al establecer una tarifa prioritaria más alta al enviar una transacción, se puede aumentar la probabilidad de que la transacción sea incluida en el siguiente bloque. Esto es similar a una "propina" que los usuarios pagan a los validadores.

1. Entender la optimización de Gas en EVM

Cuando se compila un contrato inteligente con Solidity, el contrato se convierte en una serie de "códigos de operación", es decir, opcodes.

Cualquier segmento de código de operación (, como la creación de contratos, realizar llamadas de mensajes, acceder al almacenamiento de cuentas y ejecutar operaciones en la máquina virtual ), tiene un costo de consumo de Gas reconocido, y estos costos están registrados en el libro amarillo de Ethereum.

Después de múltiples modificaciones de EIP, algunos de los costos de Gas de los códigos de operación han sido ajustados, lo que puede diferir de lo que se indica en el libro amarillo.

2.Conceptos básicos de optimización de Gas

La idea central de la optimización de Gas es seleccionar en la blockchain EVM operaciones que tengan alta eficiencia en costos, evitando operaciones que sean costosas en Gas.

En EVM, las siguientes operaciones tienen un costo bajo:

  • Leer y escribir variables de memoria
  • Leer constantes y variables inmutables
  • Leer y escribir variables locales
  • Leer la variable calldata, como el array y la estructura de calldata
  • Llamada a funciones internas

Las operaciones de alto costo incluyen:

  • Leer y escribir variables de estado almacenadas en el almacenamiento del contrato
  • Llamada a funciones externas
  • Operación en bucle

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

Mejores Prácticas para la Optimización de Costos de Gas en EVM

Basado en los conceptos básicos anteriores, hemos recopilado una lista de mejores prácticas para la optimización de tarifas de Gas para la comunidad de desarrolladores. Al seguir estas prácticas, los desarrolladores pueden reducir el consumo de tarifas de Gas de los contratos inteligentes, disminuir los costos de transacción y crear aplicaciones más eficientes y amigables para el usuario.

1. Intenta minimizar el uso de almacenamiento.

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

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

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

  • Almacenar datos no permanentes en la memoria
  • Reducir el número de modificaciones de almacenamiento: guardando los resultados intermedios en la memoria y asignando los resultados a las variables de almacenamiento solo después de que se completen todos los cálculos.

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

( 2. Empaquetado de variables

La cantidad de los slots de almacenamiento ) utilizados en los contratos inteligentes y la forma en que los desarrolladores representan los datos influirán en gran medida en el consumo de Gas.

El compilador de Solidity empaquetará las variables de almacenamiento continuas durante el proceso de compilación y utilizará un slot de almacenamiento de 32 bytes como la unidad básica para el almacenamiento de variables. El empaquetado de variables se refiere a organizar las variables de manera que múltiples variables puedan adaptarse a un solo slot de almacenamiento.

A través de este ajuste de detalle, los desarrolladores pueden ahorrar 20,000 unidades de Gas. ### Almacenar una ranura de almacenamiento no utilizada requiere consumir 20,000 Gas (, pero ahora solo se necesitan dos ranuras de almacenamiento.

Dado que cada ranura de almacenamiento consume Gas, el empaquetado de variables optimiza el uso de Gas al reducir la cantidad de ranuras de almacenamiento necesarias.

![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

Una variable puede representarse con múltiples tipos de datos, pero el costo de operación correspondiente a diferentes tipos de datos también varía. 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 ejecuta operaciones en unidades de 256 bits, usar uint8 significa que la EVM primero debe convertirlo a uint256, y esta conversión consumirá Gas adicional.

Por sí solo, aquí usar uint256 es más barato que uint8. Sin embargo, si utilizamos la optimización de empaquetado de variables que sugerimos anteriormente, es diferente. Si los desarrolladores pueden empaquetar cuatro variables uint8 en un solo espacio de almacenamiento, entonces el costo total de iterarlas será menor que el de cuatro variables uint256. De esta manera, el contrato inteligente puede leer y escribir un espacio de almacenamiento una vez y colocar las cuatro variables uint8 en la memoria/almacenamiento en una sola operación.

Gas optimización de los diez mejores prácticas de 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 dato 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 de los bytes, intente elegir la longitud mínima desde bytes1 hasta bytes32.

Gas optimización de los diez mejores prácticas en contratos inteligentes de Ethereum

5. Mapeo y arreglos

Las listas de datos de Solidity se pueden representar con dos tipos de datos: Arrays( y Mappings), pero su sintaxis y estructura son completamente diferentes.

En la mayoría de los casos, el mapeo es más eficiente y tiene un costo menor, pero los arreglos son iterables y admiten la agrupación de tipos de datos. Por lo tanto, se recomienda usar mapeos prioritariamente al gestionar listas de datos, a menos que se necesite iterar o se pueda optimizar el consumo de Gas mediante la agrupación de tipos de datos.

![Gas optimización de los diez mejores prácticas de 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 ambas es que memory puede ser modificada por la función, mientras que calldata es inmutable.

Recuerda este principio: si los parámetros de la función son de solo lectura, se debe usar preferiblemente calldata en lugar de memory. Esto puede evitar la copia innecesaria de calldata a memory desde la función.

Mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum

( 7. Utiliza las palabras 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 utilizar las palabras clave Constant o Immutable siempre que sea posible.

![Optimización de Gas en contratos inteligentes de Ethereum: las 10 mejores prácticas])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###

( 8. Usar Unchecked asegurando que no ocurran desbordamientos/subdesbordamientos.

Cuando los desarrolladores pueden asegurarse de que las operaciones aritméticas no causarán desbordamiento o subdesbordamiento, pueden usar la palabra clave unchecked introducida en Solidity v0.8.0 para evitar comprobaciones innecesarias de desbordamiento o subdesbordamiento, ahorrando así 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í mismo tiene incorporadas funciones de protección contra desbordamientos y subdesbordamientos.

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

( 9. optimizador de modificaciones

El código del modificador se inserta en la función modificada, y cada vez que se utiliza el modificador, su código se copia. Esto aumenta el tamaño del bytecode y eleva el consumo de Gas.

Al reestructurar la lógica en la función interna _checkOwner)###, se permite reutilizar esta función interna en los modificadores, lo que puede reducir el tamaño del código de byte y disminuir el costo de Gas.

Mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum

10. Optimización de cortocircuito

Para los operadores || y &&, la evaluación lógica se produce con evaluación de cortocircuito, es decir, si la primera condición ya puede determinar el resultado de la expresión lógica, no se evalúa 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.

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

Sugerencias generales adicionales

( 1. Eliminar código innecesario

Si existen funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Esta es la forma más directa de reducir los costos de despliegue del contrato y mantener el tamaño del contrato pequeño.

A continuación se presentan algunos consejos prácticos:

Utilizar el algoritmo más eficiente para realizar cálculos. Si los resultados de ciertos cálculos se utilizan directamente en el contrato, entonces se deben eliminar estos procesos de cálculo redundantes. Esencialmente, cualquier cálculo no utilizado debe ser eliminado.

En Ethereum, los desarrolladores pueden obtener recompensas en Gas al liberar espacio de almacenamiento. Si ya no se necesita una variable, se debe usar la palabra clave delete para eliminarla o establecerla en su valor predeterminado.

Optimización de bucles: evitar operaciones de bucle de alto costo, combinar bucles siempre que sea posible y mover cálculos repetidos fuera del cuerpo del bucle.

) 2. Uso de contratos precompilados

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

Ejemplos de contratos precompilados incluyen el algoritmo de firma digital de curva elíptica ###ECDSA( y el algoritmo de hash SHA2-256. Al utilizar estos contratos precompilados en contratos inteligentes, los desarrolladores pueden reducir los costos de Gas y mejorar la eficiencia de las aplicaciones.

ETH5.2%
GAS3.99%
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
  • 8
  • Republicar
  • Compartir
Comentar
0/400
SerumDegenvip
· 07-23 04:02
lmao gas está vaciando mi billetera ahora mismo... rekt af
Ver originalesResponder0
WalletDivorcervip
· 07-21 18:08
Con manos se puede ver la optimización del contrato
Ver originalesResponder0
ProofOfNothingvip
· 07-20 15:12
¿De qué se puede hablar sin dinero para el gas?
Ver originalesResponder0
AlphaBrainvip
· 07-20 04:31
Está bien, no me molesto en optimizar el gas, voy a L2.
Ver originalesResponder0
ImpermanentLossEnjoyervip
· 07-20 04:29
¿Quién recuerda el trágico caso de una transacción de 2000u?
Ver originalesResponder0
OvertimeSquidvip
· 07-20 04:19
Para pagar las comisiones de trading, tendrás que pagar la hipoteca.
Ver originalesResponder0
DeFiVeteranvip
· 07-20 04:17
Es mejor mantenerse en silencio.
Ver originalesResponder0
IronHeadMinervip
· 07-20 04:08
La tarifa de gas realmente no se puede soportar más.
Ver originalesResponder0
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)