tengo esta funcion:
function foo(uint256 _a, uint256 _b, uint256 _c) {
require(map[msg.sender].a == 1);
require(map[msg.sender].b < 1);
require(map[msg.sender].c > 1);
deposits[msg.sender].a = _a;
deposits[msg.sender].b = _b;
deposits[msg.sender].c = _c;
}
¿Es esto extremadamente derrochador?
¿Cómo podría hacerlo más eficiente en el consumo de combustible?
¿Cómo podría hacerlo más eficiente en el consumo de combustible?
Puede cambiar el tamaño de los bits de su uint
estructura.
Si está utilizando uint256
, está utilizando un fragmento completo de 32 bytes. Si estuviera usando uint128
, por ejemplo, podría incluir más datos en una sola SSTORE
operación (debido a la optimización del compilador de solidez).
Permítanme dar algunos ejemplos de consumo de gas:
Función:
function getVariables() public {
deposits[msg.sender].a = 1;
deposits[msg.sender].b = 1;
deposits[msg.sender].c = 1;
}
estructura uint256
struct demo {
uint256 a;
uint256 b;
uint256 c;
}
Costo de ejecución: 60455 gas
estructura uint128
struct demo {
uint128 a;
uint128 b;
uint128 c;
}
Costo de ejecución: 46264 gas
estructura uint64
struct demo {
uint64 a;
uint64 b;
uint64 c;
}
Costo de ejecución: 31314 gas
Si el compilador de Solidity puede determinar el tamaño de las variables de la tienda, simplemente las coloca una tras otra en el almacenamiento. Si es posible, el compilador empaqueta los datos de forma compacta en fragmentos de 32 bytes.