Una de las formas más sencillas de ahorrar gasolina es simplificar el código. Cuanto menos código haya que ejecutar, menos gas se consumirá.
Considere la siguiente función:
Solidez
pragma solidez ^0.8.9;
contratos Ejemplo de optimización {
direcciones[] administradores públicos;
función isUserAdmin (usuario de dirección) vista pública devuelve (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
devuelve falso;
}
}
La función anterior utiliza un bucle, que se vuelve más costoso a medida que se agregan más administradores. Una estructura más eficiente en términos de gas utilizaría un mapeo:
Solidez
contrato OptimizationExampleOptimized {
mapeo (dirección => bool) administradores públicos;
función isUserAdmin (usuario de dirección) vista pública devuelve (bool) {
return admins[user];
}
}
Cuando trabaje con Ethereum, recuerde que está pagando por cada bit de almacenamiento. Si se encuentra almacenando los mismos datos en varios lugares, considere cómo podría almacenarlos una vez y consultarlos en otro lugar.
Las bibliotecas en Solidity son piezas de código reutilizables. Pueden ayudarle a escribir código modular y, dado que se implementan solo una vez y están vinculados a otros contratos, pueden ahorrar combustible a largo plazo.
Biblioteca Solidity
SafeMath {
función agregar(uint a, uint b) retornos puros internos (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... otras funciones matemáticas
}
contrato UsandoSafeMath {
usando SafeMath para uint;
valor público uint;
incremento de función (uint _value) público {
value = value.add(_value);
}
}
La palabra clave delete
en Solidity le permite anular variables, lo que reembolsa parte del gas. Si ha terminado con un elemento de almacenamiento en particular, elimínelo para reclamar este reembolso.
Si bien almacenar datos en blockchain puede resultar costoso, registrar eventos es comparativamente más barato. Si tiene datos que no es necesario leer del contrato pero que deben ser verificables, considere utilizar registros de eventos.
Algunas operaciones consumen más gas que otras. Por ejemplo:
La optimización de contratos inteligentes para el gas es tanto un arte como una ciencia. Los enfoques analizados en este curso, cuando se combinan, tienen el potencial de reducir drásticamente los costos del gas de sus contratos. Tenga en cuenta que el ecosistema Ethereum y sus herramientas, incluido Remix, siempre están cambiando. Manténgase actualizado y pruebe y mejore sus contratos periódicamente para optimizarlos. La comunidad Ethereum es grande y útil, así que nunca temas buscar orientación o mejores prácticas. ¡Diviértete codificando!
Una de las formas más sencillas de ahorrar gasolina es simplificar el código. Cuanto menos código haya que ejecutar, menos gas se consumirá.
Considere la siguiente función:
Solidez
pragma solidez ^0.8.9;
contratos Ejemplo de optimización {
direcciones[] administradores públicos;
función isUserAdmin (usuario de dirección) vista pública devuelve (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
devuelve falso;
}
}
La función anterior utiliza un bucle, que se vuelve más costoso a medida que se agregan más administradores. Una estructura más eficiente en términos de gas utilizaría un mapeo:
Solidez
contrato OptimizationExampleOptimized {
mapeo (dirección => bool) administradores públicos;
función isUserAdmin (usuario de dirección) vista pública devuelve (bool) {
return admins[user];
}
}
Cuando trabaje con Ethereum, recuerde que está pagando por cada bit de almacenamiento. Si se encuentra almacenando los mismos datos en varios lugares, considere cómo podría almacenarlos una vez y consultarlos en otro lugar.
Las bibliotecas en Solidity son piezas de código reutilizables. Pueden ayudarle a escribir código modular y, dado que se implementan solo una vez y están vinculados a otros contratos, pueden ahorrar combustible a largo plazo.
Biblioteca Solidity
SafeMath {
función agregar(uint a, uint b) retornos puros internos (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... otras funciones matemáticas
}
contrato UsandoSafeMath {
usando SafeMath para uint;
valor público uint;
incremento de función (uint _value) público {
value = value.add(_value);
}
}
La palabra clave delete
en Solidity le permite anular variables, lo que reembolsa parte del gas. Si ha terminado con un elemento de almacenamiento en particular, elimínelo para reclamar este reembolso.
Si bien almacenar datos en blockchain puede resultar costoso, registrar eventos es comparativamente más barato. Si tiene datos que no es necesario leer del contrato pero que deben ser verificables, considere utilizar registros de eventos.
Algunas operaciones consumen más gas que otras. Por ejemplo:
La optimización de contratos inteligentes para el gas es tanto un arte como una ciencia. Los enfoques analizados en este curso, cuando se combinan, tienen el potencial de reducir drásticamente los costos del gas de sus contratos. Tenga en cuenta que el ecosistema Ethereum y sus herramientas, incluido Remix, siempre están cambiando. Manténgase actualizado y pruebe y mejore sus contratos periódicamente para optimizarlos. La comunidad Ethereum es grande y útil, así que nunca temas buscar orientación o mejores prácticas. ¡Diviértete codificando!