Guía de optimización de Gas para contratos inteligentes: 10 mejores prácticas
Las tarifas de Gas de la red principal de Ethereum siempre han sido un problema complicado, especialmente evidente durante la congestión de la red. En períodos de alta demanda, los usuarios a menudo deben 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 efectivamente los costos de transacción, sino que también puede mejorar la eficiencia de las transacciones, brindando a los usuarios una experiencia de blockchain más económica y eficiente.
Este artículo ofrecerá una visión general del mecanismo de tarifas de Gas de la máquina virtual de Ethereum (EVM), los conceptos clave de la optimización de tarifas de Gas, así como las mejores prácticas para la optimización de tarifas de Gas al desarrollar contratos inteligentes. Se espera que este contenido inspire y brinde ayuda práctica a los desarrolladores, al mismo tiempo que ayude a los usuarios comunes a entender mejor cómo funcionan las tarifas de Gas del EVM, enfrentando juntos los desafíos del 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.
La estructura del EVM se divide en tres partes en cuanto al consumo de Gas: ejecución de operaciones, llamadas a 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 tarifa para prevenir bucles infinitos y ataques de denegación de servicio (DoS). La tarifa necesaria para completar una transacción se conoce como "Gas fee".
Desde que entró en vigor la bifurcación dura de Londres EIP-1559( ), las tarifas de Gas se calculan mediante la siguiente fórmula:
Tarifa de gas = unidades de gas utilizadas * (tarifa base + tarifa de prioridad)
La tarifa base será destruida, mientras que la tarifa prioritaria se usará como incentivo para alentar a los validadores a agregar transacciones a la cadena de bloques. Establecer una tarifa prioritaria más alta al enviar una transacción puede aumentar la probabilidad de que la transacción se incluya 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
Al compilar contratos inteligentes con Solidity, el contrato se convierte en una serie de "códigos de operación", es decir, opcodes.
Cualquier fragmento de código de operación (, como la creación de contratos, la realización de llamadas a 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, y estos costos están registrados en el libro amarillo de Ethereum.
Después de múltiples modificaciones de EIP, los costos de Gas de algunos 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 priorizar las operaciones de alta eficiencia de costo en la blockchain EVM, evitando operaciones con altos costos de 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 de 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 en bucle
Mejores prácticas para la optimización de costos de Gas de EVM
Basado en los conceptos básicos mencionados, 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. Trate de 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, genera 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 de costo.
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 memoria y, una vez que todos los cálculos están completos, asignando los resultados a las variables de almacenamiento.
2. Empaquetado de variables
La cantidad de almacenamiento utilizado en el slot de almacenamiento ( en los contratos inteligentes y la forma en que los desarrolladores representan los datos afectará significativamente el consumo de Gas.
El compilador de Solidity empaqueta las variables de almacenamiento consecutivas 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 razonable para que múltiples variables puedan ajustarse a un único slot de almacenamiento.
A través de este ajuste de detalle, los desarrolladores pueden ahorrar 20,000 unidades de Gas. Almacenar un espacio de almacenamiento no utilizado requiere consumir 20,000 Gas, pero ahora solo se necesitan dos espacios 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.
![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. Optimización de tipos 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 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 debe convertirlo primero a uint256, y esta conversión consume Gas adicional.
Visto de forma aislada, usar uint256 es más caro que uint8. Sin embargo, si se optimiza el empaquetado de variables, esto cambia. Si el desarrollador puede empaquetar cuatro variables uint8 en una ranura de almacenamiento, entonces el costo total de iterar sobre ellas será más bajo que el de cuatro variables uint256. De esta manera, el contrato inteligente puede leer y escribir una ranura de almacenamiento una vez, y en una sola operación colocar las cuatro variables uint8 en memoria/almacenamiento.
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 usar 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, trate de elegir la longitud mínima desde bytes1 hasta bytes32.
( 5. Mapeos y arreglos
Las listas de datos de Solidity se pueden representar mediante dos tipos de datos: Arrays) y Mappings###, pero su sintaxis y estructura son completamente diferentes.
En la mayoría de los casos, los mapeos 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 utilizar 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.
![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.
Recuerda este principio: si los parámetros de la función son de solo lectura, se debe utilizar preferiblemente calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias de calldata de la función a memory.
Al leer valores directamente desde calldata, se omiten las operaciones de memoria intermedias. Esta forma de optimización puede mejorar significativamente la eficiencia del Gas.
( 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 tiempo de compilación y se almacenan en el bytecode del contrato. Por lo tanto, su costo de acceso es mucho más bajo en comparación con el almacenamiento, y se recomienda usar 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])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Utilizar Unchecked asegurando que no ocurrirá desbordamiento/subdesbordamiento.
Cuando los desarrolladores pueden determinar que las operaciones aritméticas no llevarán a un desbordamiento o subdesbordamiento, se puede 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, los compiladores de la versión 0.8.0 y superiores ya no requieren el uso de la biblioteca SafeMath, ya que el compilador en sí tiene integradas funciones de protección contra desbordamientos y subdesbordamientos.
9. Optimizador de modificaciones
El código del modificador se inserta en la función modificada; 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. Se puede reducir el tamaño del bytecode y disminuir los costos de Gas reestructurando la lógica en funciones internas, permitiendo la reutilización de esa función interna en el modificador.
10. Optimización de cortocircuito
Para los operadores || y &&, la evaluación lógica se realiza mediante una evaluación de 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 el cálculo costoso.
Sugerencias generales adicionales
1. Eliminar código innecesario
Si hay funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Esta es la forma más directa de reducir el costo 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 deberían eliminarse esos procesos de cálculo redundantes. En esencia, cualquier cálculo no utilizado debería ser eliminado.
En Ethereum, los desarrolladores pueden obtener recompensas de Gas liberando espacio de almacenamiento. Si ya no se necesita una variable, se debe eliminar con la palabra clave delete 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.
![Las 10 mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
( 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 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 reducir los costos de Gas y mejorar la eficiencia de ejecución de las aplicaciones.
( 3. Usar código de 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 los 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 reduce aún más las tarifas de Gas. Además, la asamblea en línea puede realizar 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 utilizarse con precaución y estar limitado a desarrolladores con experiencia.
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.
12 me gusta
Recompensa
12
6
Compartir
Comentar
0/400
AlwaysAnon
· 07-09 16:21
Tsk, otra vez la trampa de optimización de gas, ¿no es molesto?
Ver originalesResponder0
ForkTongue
· 07-07 17:09
gas es realmente bueno, quien lo usa en L2 lo sabe
Ver originalesResponder0
NonFungibleDegen
· 07-07 01:27
las tarifas de gas me están matando literalmente rn... ngmi ser
Ver originalesResponder0
AllTalkLongTrader
· 07-07 01:20
Cansado, cansado, el gas me está volviendo loco, directamente a L2.
Ver originalesResponder0
0xInsomnia
· 07-07 01:16
gas tan caro que se atreve a decir que es la mejor práctica
Ver originalesResponder0
CryptoTherapist
· 07-07 01:10
procesemos juntos esta ansiedad por el gas... siento un profundo trauma por las altas tarifas. la optimización consciente de contratos es clave para la estabilidad emocional en el trading.
Guía de optimización de tarifas Gas para contratos inteligentes EVM: 10 mejores prácticas y análisis de conceptos clave
Guía de optimización de Gas para contratos inteligentes: 10 mejores prácticas
Las tarifas de Gas de la red principal de Ethereum siempre han sido un problema complicado, especialmente evidente durante la congestión de la red. En períodos de alta demanda, los usuarios a menudo deben 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 efectivamente los costos de transacción, sino que también puede mejorar la eficiencia de las transacciones, brindando a los usuarios una experiencia de blockchain más económica y eficiente.
Este artículo ofrecerá una visión general del mecanismo de tarifas de Gas de la máquina virtual de Ethereum (EVM), los conceptos clave de la optimización de tarifas de Gas, así como las mejores prácticas para la optimización de tarifas de Gas al desarrollar contratos inteligentes. Se espera que este contenido inspire y brinde ayuda práctica a los desarrolladores, al mismo tiempo que ayude a los usuarios comunes a entender mejor cómo funcionan las tarifas de Gas del EVM, enfrentando juntos los desafíos del 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.
La estructura del EVM se divide en tres partes en cuanto al consumo de Gas: ejecución de operaciones, llamadas a 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 tarifa para prevenir bucles infinitos y ataques de denegación de servicio (DoS). La tarifa necesaria para completar una transacción se conoce como "Gas fee".
Desde que entró en vigor la bifurcación dura de Londres EIP-1559( ), las tarifas de Gas se calculan mediante la siguiente fórmula:
Tarifa de gas = unidades de gas utilizadas * (tarifa base + tarifa de prioridad)
La tarifa base será destruida, mientras que la tarifa prioritaria se usará como incentivo para alentar a los validadores a agregar transacciones a la cadena de bloques. Establecer una tarifa prioritaria más alta al enviar una transacción puede aumentar la probabilidad de que la transacción se incluya 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
Al compilar contratos inteligentes con Solidity, el contrato se convierte en una serie de "códigos de operación", es decir, opcodes.
Cualquier fragmento de código de operación (, como la creación de contratos, la realización de llamadas a 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, y estos costos están registrados en el libro amarillo de Ethereum.
Después de múltiples modificaciones de EIP, los costos de Gas de algunos 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 priorizar las operaciones de alta eficiencia de costo en la blockchain EVM, evitando operaciones con altos costos de Gas.
En EVM, las siguientes operaciones tienen un costo bajo:
Las operaciones de alto costo incluyen:
Mejores prácticas para la optimización de costos de Gas de EVM
Basado en los conceptos básicos mencionados, 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. Trate de 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, genera 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 de costo.
Los métodos para limitar el uso de almacenamiento incluyen:
2. Empaquetado de variables
La cantidad de almacenamiento utilizado en el slot de almacenamiento ( en los contratos inteligentes y la forma en que los desarrolladores representan los datos afectará significativamente el consumo de Gas.
El compilador de Solidity empaqueta las variables de almacenamiento consecutivas 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 razonable para que múltiples variables puedan ajustarse a un único slot de almacenamiento.
A través de este ajuste de detalle, los desarrolladores pueden ahorrar 20,000 unidades de Gas. Almacenar un espacio de almacenamiento no utilizado requiere consumir 20,000 Gas, pero ahora solo se necesitan dos espacios 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.
![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. Optimización de tipos 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 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 debe convertirlo primero a uint256, y esta conversión consume Gas adicional.
Visto de forma aislada, usar uint256 es más caro que uint8. Sin embargo, si se optimiza el empaquetado de variables, esto cambia. Si el desarrollador puede empaquetar cuatro variables uint8 en una ranura de almacenamiento, entonces el costo total de iterar sobre ellas será más bajo que el de cuatro variables uint256. De esta manera, el contrato inteligente puede leer y escribir una ranura de almacenamiento una vez, y en una sola operación colocar las cuatro variables uint8 en memoria/almacenamiento.
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 usar 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, trate de elegir la longitud mínima desde bytes1 hasta bytes32.
( 5. Mapeos y arreglos
Las listas de datos de Solidity se pueden representar mediante dos tipos de datos: Arrays) y Mappings###, pero su sintaxis y estructura son completamente diferentes.
En la mayoría de los casos, los mapeos 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 utilizar 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.
![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.
Recuerda este principio: si los parámetros de la función son de solo lectura, se debe utilizar preferiblemente calldata en lugar de memory. Esto puede evitar operaciones de copia innecesarias de calldata de la función a memory.
Al leer valores directamente desde calldata, se omiten las operaciones de memoria intermedias. Esta forma de optimización puede mejorar significativamente la eficiencia del Gas.
( 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 tiempo de compilación y se almacenan en el bytecode del contrato. Por lo tanto, su costo de acceso es mucho más bajo en comparación con el almacenamiento, y se recomienda usar 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])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Utilizar Unchecked asegurando que no ocurrirá desbordamiento/subdesbordamiento.
Cuando los desarrolladores pueden determinar que las operaciones aritméticas no llevarán a un desbordamiento o subdesbordamiento, se puede 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, los compiladores de la versión 0.8.0 y superiores ya no requieren el uso de la biblioteca SafeMath, ya que el compilador en sí tiene integradas funciones de protección contra desbordamientos y subdesbordamientos.
9. Optimizador de modificaciones
El código del modificador se inserta en la función modificada; 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. Se puede reducir el tamaño del bytecode y disminuir los costos de Gas reestructurando la lógica en funciones internas, permitiendo la reutilización de esa función interna en el modificador.
10. Optimización de cortocircuito
Para los operadores || y &&, la evaluación lógica se realiza mediante una evaluación de 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 el cálculo costoso.
Sugerencias generales adicionales
1. Eliminar código innecesario
Si hay funciones o variables no utilizadas en el contrato, se recomienda eliminarlas. Esta es la forma más directa de reducir el costo 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 deberían eliminarse esos procesos de cálculo redundantes. En esencia, cualquier cálculo no utilizado debería ser eliminado.
En Ethereum, los desarrolladores pueden obtener recompensas de Gas liberando espacio de almacenamiento. Si ya no se necesita una variable, se debe eliminar con la palabra clave delete 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.
![Las 10 mejores prácticas para la optimización de Gas en contratos inteligentes de Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
( 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 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 reducir los costos de Gas y mejorar la eficiencia de ejecución de las aplicaciones.
( 3. Usar código de 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 los 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 reduce aún más las tarifas de Gas. Además, la asamblea en línea puede realizar 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 utilizarse con precaución y estar limitado a desarrolladores con experiencia.
4. Uso de soluciones de Layer 2
hacer