Mejores prácticas para optimizar las tarifas de Gas en contratos inteligentes de Ethereum
Las tarifas de Gas en la red principal de Ethereum siempre han sido un problema complicado, especialmente evidente durante la congestión de la red. En los períodos pico, los usuarios deben pagar tarifas de transacción elevadas. 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 los costos de transacción, sino también mejorar la eficiencia de las transacciones, brindando a los usuarios una experiencia 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 de 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 inspire y brinde ayuda práctica a los desarrolladores, mientras que también ayuda 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.
Introducción al mecanismo de tarifas de Gas de EVM
En redes compatibles con EVM, "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 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 evitar 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 bifurcación dura de Londres 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 de prioridad servirá como incentivo, animando a los validadores a añadir transacciones a la cadena de bloques. Establecer una tarifa de prioridad más alta al enviar una transacción 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.
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 secuencia de código de operación (, como la creación de contratos, la realización de llamadas de mensajes, el acceso al almacenamiento de cuentas y la ejecución de operaciones en la máquina virtual ), tiene un costo de consumo de Gas reconocido, que está registrado en el libro amarillo de Ethereum.
Después de múltiples modificaciones del EIP, el costo de Gas de algunos códigos de operación ha sido ajustado, lo que puede diferir del libro amarillo.
2.Conceptos básicos de la optimización de Gas
La idea central de la optimización de Gas es priorizar las operaciones de alta eficiencia de costos en la blockchain EVM, evitando las operaciones con costos de Gas elevados.
En EVM, las siguientes operaciones tienen un bajo costo:
Leer y escribir variables de memoria
Leer constantes y variables inmutables
Leer y escribir variables locales
Leer la variable calldata, como el array calldata y las estructuras.
Llamadas a funciones internas
Las operaciones con un costo más alto incluyen:
Leer y escribir variables de estado almacenadas en el almacenamiento del contrato
Llamada a funciones externas
Operación en bucle
Mejores prácticas para la optimización de costos de gas EVM
Basado en los conceptos básicos mencionados anteriormente, hemos compilado 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 reducir 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 condiciones más ideales, requieren al menos 100 unidades.
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: al guardar los resultados intermedios en la memoria y, tras completar todos los cálculos, asignar los resultados a las variables de almacenamiento.
( 2. Empaquetado de variables
La cantidad de slots de almacenamiento ) utilizados en contratos inteligentes y la forma en que los desarrolladores indican los datos afectará 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 espacio de almacenamiento de 32 bytes como unidad básica para el almacenamiento de variables. El empaquetado de variables se refiere a la disposición adecuada de las variables para que múltiples variables puedan caber en un solo espacio 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.
![Gas optimización de los 10 mejores prácticas de contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.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 es diferente. 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.
Visto de forma aislada, aquí usar uint256 es más barato que uint8. Sin embargo, si usamos la optimización de empaquetado de variables que sugerimos anteriormente, la situación cambia. 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 solo espacio de almacenamiento y colocar las cuatro variables uint8 en memoria/almacenamiento en una sola operación.
( 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 de los bytes, intente elegir la longitud mínima de bytes1 a bytes32.
![Gas optimización de los 10 mejores prácticas de contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp###
( 5. Mapeo y arreglos
Las listas de datos en Solidity se pueden representar con dos tipos de datos: Arrays) y Mappings###, pero su sintaxis y estructura son completamente diferentes.
El mapeo es más eficiente y menos costoso en la mayoría de los casos, pero los arreglos son iterables y admiten el empaquetado de tipos de datos. Por lo tanto, se recomienda priorizar el uso de mapeos 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.
6. Usar calldata en lugar de memory
Las variables declaradas en los parámetros de la función se pueden almacenar en calldata o en memory. La principal diferencia entre ambos es que memory puede ser modificado 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 preferir el uso de calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias desde calldata de la función a memory.
( 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, se recomienda usar las palabras clave Constant o Immutable siempre que sea posible.
![Mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Usar Unchecked asegurando que no ocurran desbordamientos/subdesbordamientos.
Cuando los desarrolladores pueden asegurarse de que las operaciones aritméticas no causarán desbordamientos o subdesbordamientos, 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.
![Gas optimization de los diez mejores prácticas de contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. Optimizador
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 aumentará el tamaño del bytecode y aumentará el consumo de Gas.
Al reconstruir 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 bytecode y disminuir los costos de Gas.
![Gas optimización de los 10 mejores prácticas de 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 mediante 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 evitar potencialmente cálculos costosos.
Sugerencias generales adicionales
) 1. Eliminar código inútil
Si hay funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Esta es la forma más directa de reducir los costos de implementació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 cálculos. Si el contrato utiliza directamente los resultados de ciertos cálculos, entonces se deben eliminar estos procesos de cálculo redundantes. En esencia, 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.
![Optimización del Gas en contratos inteligentes de Ethereum: las 10 mejores prácticas]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp(
) 2. Usar contratos inteligentes precompilados
Los contratos precompilados proporcionan 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. El uso de 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 reducir los costos de Gas y mejorar la eficiencia de ejecución de las aplicaciones.
3. Uso de código ensamblador en línea
La asamblea en línea ### in-line assembly ( permite a los desarrolladores escribir código de bajo nivel pero eficiente que puede ser ejecutado directamente por la EVM, sin necesidad de usar costosos códigos de operación de Solidity. La asamblea en línea también permite un control más preciso sobre el uso de la memoria y el almacenamiento, lo que a su vez reduce aún más las tarifas de Gas. Además, la asamblea en línea puede
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
13 me gusta
Recompensa
13
7
Compartir
Comentar
0/400
AlgoAlchemist
· Hace22m
gas me va a matar
Ver originalesResponder0
BearEatsAll
· hace10h
¿Acaso no es el alto costo del gas un camino sin salida para los que quieren sacar ventaja?
Ver originalesResponder0
MEVHunterWang
· 07-11 05:59
gas otra vez ha subido, me duele verlo
Ver originalesResponder0
CoffeeNFTrader
· 07-11 05:55
gas sigue siendo un problema incluso optimizado, realmente es mejor ir a layer2
Ver originalesResponder0
StrawberryIce
· 07-11 05:54
¡Atascado en un alto gas! ¡A por todas!
Ver originalesResponder0
OffchainWinner
· 07-11 05:50
No quiero usar L2...
Ver originalesResponder0
HalfBuddhaMoney
· 07-11 05:31
aunque las tarifas de gas sean altas, ¡hay que recargar, hermano!
13 prácticas de optimización de tarifas de Gas para contratos inteligentes de Ethereum
Mejores prácticas para optimizar las tarifas de Gas en contratos inteligentes de Ethereum
Las tarifas de Gas en la red principal de Ethereum siempre han sido un problema complicado, especialmente evidente durante la congestión de la red. En los períodos pico, los usuarios deben pagar tarifas de transacción elevadas. 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 los costos de transacción, sino también mejorar la eficiencia de las transacciones, brindando a los usuarios una experiencia 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 de 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 inspire y brinde ayuda práctica a los desarrolladores, mientras que también ayuda 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.
Introducción al mecanismo de tarifas de Gas de EVM
En redes compatibles con EVM, "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 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 evitar 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 bifurcación dura de Londres 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 de prioridad servirá como incentivo, animando a los validadores a añadir transacciones a la cadena de bloques. Establecer una tarifa de prioridad más alta al enviar una transacción 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.
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 secuencia de código de operación (, como la creación de contratos, la realización de llamadas de mensajes, el acceso al almacenamiento de cuentas y la ejecución de operaciones en la máquina virtual ), tiene un costo de consumo de Gas reconocido, que está registrado en el libro amarillo de Ethereum.
Después de múltiples modificaciones del EIP, el costo de Gas de algunos códigos de operación ha sido ajustado, lo que puede diferir del libro amarillo.
2.Conceptos básicos de la optimización de Gas
La idea central de la optimización de Gas es priorizar las operaciones de alta eficiencia de costos en la blockchain EVM, evitando las operaciones con costos de Gas elevados.
En EVM, las siguientes operaciones tienen un bajo costo:
Las operaciones con un costo más alto incluyen:
Mejores prácticas para la optimización de costos de gas EVM
Basado en los conceptos básicos mencionados anteriormente, hemos compilado 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 reducir 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 condiciones más ideales, requieren al menos 100 unidades.
Los métodos para limitar el uso del almacenamiento incluyen:
( 2. Empaquetado de variables
La cantidad de slots de almacenamiento ) utilizados en contratos inteligentes y la forma en que los desarrolladores indican los datos afectará 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 espacio de almacenamiento de 32 bytes como unidad básica para el almacenamiento de variables. El empaquetado de variables se refiere a la disposición adecuada de las variables para que múltiples variables puedan caber en un solo espacio 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.
![Gas optimización de los 10 mejores prácticas de contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.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 es diferente. 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.
Visto de forma aislada, aquí usar uint256 es más barato que uint8. Sin embargo, si usamos la optimización de empaquetado de variables que sugerimos anteriormente, la situación cambia. 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 solo espacio de almacenamiento y colocar las cuatro variables uint8 en memoria/almacenamiento en una sola operación.
( 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 de los bytes, intente elegir la longitud mínima de bytes1 a bytes32.
![Gas optimización de los 10 mejores prácticas de contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp###
( 5. Mapeo y arreglos
Las listas de datos en Solidity se pueden representar con dos tipos de datos: Arrays) y Mappings###, pero su sintaxis y estructura son completamente diferentes.
El mapeo es más eficiente y menos costoso en la mayoría de los casos, pero los arreglos son iterables y admiten el empaquetado de tipos de datos. Por lo tanto, se recomienda priorizar el uso de mapeos 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.
6. Usar calldata en lugar de memory
Las variables declaradas en los parámetros de la función se pueden almacenar en calldata o en memory. La principal diferencia entre ambos es que memory puede ser modificado 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 preferir el uso de calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias desde calldata de la función a memory.
( 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, se recomienda usar las palabras clave Constant o Immutable siempre que sea posible.
![Mejores prácticas de optimización de Gas para contratos inteligentes de Ethereum])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Usar Unchecked asegurando que no ocurran desbordamientos/subdesbordamientos.
Cuando los desarrolladores pueden asegurarse de que las operaciones aritméticas no causarán desbordamientos o subdesbordamientos, 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.
![Gas optimization de los diez mejores prácticas de contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. Optimizador
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 aumentará el tamaño del bytecode y aumentará el consumo de Gas.
Al reconstruir 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 bytecode y disminuir los costos de Gas.
![Gas optimización de los 10 mejores prácticas de 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 mediante 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 evitar potencialmente cálculos costosos.
Sugerencias generales adicionales
) 1. Eliminar código inútil
Si hay funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Esta es la forma más directa de reducir los costos de implementació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 cálculos. Si el contrato utiliza directamente los resultados de ciertos cálculos, entonces se deben eliminar estos procesos de cálculo redundantes. En esencia, 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.
![Optimización del Gas en contratos inteligentes de Ethereum: las 10 mejores prácticas]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp(
) 2. Usar contratos inteligentes precompilados
Los contratos precompilados proporcionan 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. El uso de 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 reducir los costos de Gas y mejorar la eficiencia de ejecución de las aplicaciones.
3. Uso de código ensamblador en línea
La asamblea en línea ### in-line assembly ( permite a los desarrolladores escribir código de bajo nivel pero eficiente que puede ser ejecutado directamente por la EVM, sin necesidad de usar costosos códigos de operación de Solidity. La asamblea en línea también permite un control más preciso sobre el uso de la memoria y el almacenamiento, lo que a su vez reduce aún más las tarifas de Gas. Además, la asamblea en línea puede