10 prácticas clave para optimizar los costos de Gas de los contratos inteligentes y soltar el costo de la transacción de Ethereum

Guía de optimización de Gas para contratos inteligentes: 10 prácticas para ayudar a Soltar el Costo de la transacción

El problema de las tarifas de Gas en la red principal de Ethereum ha sido objeto de gran atención, especialmente cuando la red está congestionada. Durante los picos, los usuarios a menudo deben pagar costosas tarifas de transacción. Por lo tanto, es crucial optimizar los costos de Gas durante la fase de desarrollo de contratos inteligentes. Optimizar el consumo de Gas no solo puede reducir efectivamente el costo de la 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 centrales relacionados con la optimización de tarifas de Gas, así como las mejores prácticas para optimizar tarifas de Gas al desarrollar contratos inteligentes. Se espera que este contenido pueda inspirar y ayudar a los desarrolladores, y al mismo tiempo, facilitar a los usuarios comunes una mejor comprensión del funcionamiento de las tarifas de Gas de EVM, enfrentando juntos los desafíos en el ecosistema blockchain.

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

Introducción al mecanismo de tarifas de Gas de EVM

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

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

Cada ejecución de transacción requiere recursos computacionales, por lo tanto, se cobrará una cierta tarifa para prevenir ciclos infinitos y ataques de denegación de servicio (DoS). La tarifa necesaria para completar una transacción se conoce como "tarifa de Gas".

Desde la entrada en vigor de EIP-1559, 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 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. 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 el usuario paga a los validadores.

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

Comprender la optimización de Gas en EVM

Cuando se compilan contratos inteligentes 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 crear contratos, realizar llamadas de mensajes, acceder al almacenamiento de cuentas y ejecutar operaciones en la máquina virtual ), tiene un costo de Gas reconocido; estos costos están registrados en el libro amarillo de Ethereum.

Después de múltiples modificaciones de EIP, el costo de Gas de algunos códigos de operación ha sido ajustado, lo que puede diferir del libro amarillo.

Conceptos básicos de la optimización de Gas

La idea central de la optimización de Gas es seleccionar operaciones de alto costo eficiente en la blockchain EVM, evitando operaciones 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 arreglo y la estructura calldata.
  • Llamada a funciones internas

Las operaciones de alto costo incluyen:

  • Leer y escribir variables de estado almacenadas en contratos inteligentes
  • Llamada a funciones externas
  • Operación cíclica

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

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

Basado en los conceptos básicos mencionados, hemos compilado una lista de mejores prácticas para la optimización de tarifas de Gas para la comunidad de desarrolladores. Siguiendo estas prácticas, los desarrolladores pueden Soltar el consumo de Gas de los contratos inteligentes, Soltar el Costo de la transacción y crear aplicaciones más eficientes y amigables para el usuario.

1. Intenta Soltar el uso de almacenamiento

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

Según la definición del libro blanco 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
  • Soltar el número de modificaciones de almacenamiento: al guardar los resultados intermedios en la memoria, y después de que se completen todos los cálculos, asignar los resultados a las variables de almacenamiento.

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

2. Empaquetado de variables

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

El compilador de Solidity empaqueta las variables de almacenamiento continuas durante el proceso de compilación y utiliza un slot de almacenamiento de 32 bytes como 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 ajustarse 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 requeridas.

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

) 3. Optimizar el tipo de datos

Una variable puede representarse con varios 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 pueden subdividirse 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 debe convertirlo primero a uint256, y esta conversión consumirá Gas adicional.

Por sí solo, usar uint256 es más barato que uint8. Sin embargo, si se optimiza el empaquetado de variables, la situación cambia. Si el desarrollador puede empaquetar cuatro variables uint8 en un solo espacio de almacenamiento, entonces el costo total de iterarlas será más bajo que el de cuatro variables uint256. De esta manera, los contratos inteligentes pueden leer y escribir en un solo espacio de almacenamiento 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]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(

) 4. Utilizar 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 de bytes1 a bytes32.

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

) 5. Mapeos 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, los mapas son más eficientes y tienen un costo más bajo, pero los arreglos son iterables y admiten el empaquetado de tipos de datos. Por lo tanto, se recomienda priorizar el uso de mapas al gestionar listas de datos, a menos que se necesite iterar o se pueda optimizar el consumo de Gas mediante el empaquetado de tipos de datos.

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

) 6. Usar calldata en lugar de memory

Las variables declaradas en los parámetros de la función pueden almacenarse en calldata o en memory. La principal diferencia entre ambos 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 priorizar el uso de calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias de calldata a memory.

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

7. Utilizar 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 tiempo de 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, se recomienda utilizar las palabras clave Constant o Immutable siempre que sea posible.

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

8. Al usar Unchecked, asegúrese de que no ocurra desbordamiento/subdesbordamiento.

Cuando los desarrolladores pueden asegurar que las operaciones aritméticas no conducirán a desbordamientos o subdesbordamientos, pueden usar la palabra clave unchecked introducida en Solidity v0.8.0 para evitar comprobaciones redundantes de desbordamiento o subdesbordamiento, ahorrando así el Costo de la transacción.

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

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

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 aumentará el consumo de Gas.

Al reestructurar la lógica en la función interna _checkOwner(), que permite reutilizar esa función interna en el modificador, se puede reducir el tamaño del bytecode y Soltar el Costo de la transacción.

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

) 10. Optimización de cortocircuito

Para los operadores || y &&, la evaluación lógica se realiza con 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 para la optimización de Gas en contratos inteligentes de Ethereum

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 el costo de la transacción 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 los 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 de 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. Usar 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 el nodo del cliente, se requiere menos Gas. Utilizar contratos precompilados puede ahorrar Gas al reducir la carga 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. Al utilizar estos contratos precompilados en contratos inteligentes, los desarrolladores pueden Soltar el Costo de la transacción y mejorar la eficiencia de ejecución de las aplicaciones.

3. Uso de código de ensamblaje en línea

El ensamblaje 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. El ensamblaje 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 el costo del Gas. Además, el ensamblaje en línea puede ejecutar algunas funciones que son difíciles de implementar solo con Solidity.

GAS0.59%
ETH1.91%
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
  • 4
  • Compartir
Comentar
0/400
SilentObservervip
· 07-20 19:53
gas tan caro, me he quedado sin dinero 555
Ver originalesResponder0
ConfusedWhalevip
· 07-20 19:53
¿Así de agotador durante el día, cómo se supone que vamos a jugar por la noche?
Ver originalesResponder0
NightAirdroppervip
· 07-20 19:48
eth es subir porque toman a la gente por tonta el gas.
Ver originalesResponder0
SybilSlayervip
· 07-20 19:40
gas quema dinero, ¿quién puede soportarlo?
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)