Uma das maneiras mais diretas de economizar combustível é simplificar seu código. Quanto menos código houver para executar, menos gás será consumido.
Considere a seguinte função:
Solidez
pragma solidez ^0,8,9;
contratos OptimizationExample {
endereços[] administradores públicos;
função isUserAdmin (endereço do usuário) visualização pública retorna (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
retorna falso;
}
}
A função acima usa um loop, que se torna mais caro à medida que mais administradores são adicionados. Uma estrutura mais eficiente em termos de gás usaria um mapeamento:
Contrato Solidity
OptimizationExampleOptimized {
mapeamento(address => bool) public admins;
função isUserAdmin (endereço do usuário) retornos de visualização pública (bool) {
return admins[user];
}
}
Ao trabalhar com Ethereum, lembre-se de que você está pagando por cada armazenamento. Se você estiver armazenando os mesmos dados em vários locais, considere como você pode armazená-los uma vez e referenciá-los em outro lugar.
Bibliotecas no Solidity são pedaços de código reutilizáveis. Eles podem ajudá-lo a escrever código modular e, como são implantados apenas uma vez e vinculados a outros contratos, podem economizar combustível no longo prazo.
Solidity
biblioteca SafeMath {
function add(uint a, uint b) retornos puros internos (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... outras funções matemáticas
}
contrato UsingSafeMath {
using SafeMath para uint;
uint de valor público;
incremento de função (uint _value) público {
value = value.add(_value);
}
}
A palavra-chave delete
no Solidity permite anular variáveis, que devolvem parte do gás. Se você tiver terminado um determinado armazenamento, exclua-o para solicitar o reembolso.
Embora o armazenamento de dados no blockchain possa ser caro, registrar eventos é comparativamente mais barato. Se você tiver dados que não precisam ser lidos no contrato, mas devem ser verificáveis, considere usar logs de eventos.
Algumas operações consomem mais gás do que outras. Por exemplo:
A otimização inteligente de contratos de gás é uma arte e uma ciência. As abordagens discutidas neste curso, quando combinadas, têm o potencial de reduzir drasticamente os custos do gás dos seus contratos. Tenha em mente que o ecossistema Ethereum e suas ferramentas, incluindo o Remix, estão sempre mudando. Mantenha-se atualizado e teste e melhore seus contratos regularmente para otimização. A comunidade Ethereum é grande e útil, por isso nunca tenha medo de procurar orientação ou melhores práticas. Divirta-se codificando!
Uma das maneiras mais diretas de economizar combustível é simplificar seu código. Quanto menos código houver para executar, menos gás será consumido.
Considere a seguinte função:
Solidez
pragma solidez ^0,8,9;
contratos OptimizationExample {
endereços[] administradores públicos;
função isUserAdmin (endereço do usuário) visualização pública retorna (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
retorna falso;
}
}
A função acima usa um loop, que se torna mais caro à medida que mais administradores são adicionados. Uma estrutura mais eficiente em termos de gás usaria um mapeamento:
Contrato Solidity
OptimizationExampleOptimized {
mapeamento(address => bool) public admins;
função isUserAdmin (endereço do usuário) retornos de visualização pública (bool) {
return admins[user];
}
}
Ao trabalhar com Ethereum, lembre-se de que você está pagando por cada armazenamento. Se você estiver armazenando os mesmos dados em vários locais, considere como você pode armazená-los uma vez e referenciá-los em outro lugar.
Bibliotecas no Solidity são pedaços de código reutilizáveis. Eles podem ajudá-lo a escrever código modular e, como são implantados apenas uma vez e vinculados a outros contratos, podem economizar combustível no longo prazo.
Solidity
biblioteca SafeMath {
function add(uint a, uint b) retornos puros internos (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... outras funções matemáticas
}
contrato UsingSafeMath {
using SafeMath para uint;
uint de valor público;
incremento de função (uint _value) público {
value = value.add(_value);
}
}
A palavra-chave delete
no Solidity permite anular variáveis, que devolvem parte do gás. Se você tiver terminado um determinado armazenamento, exclua-o para solicitar o reembolso.
Embora o armazenamento de dados no blockchain possa ser caro, registrar eventos é comparativamente mais barato. Se você tiver dados que não precisam ser lidos no contrato, mas devem ser verificáveis, considere usar logs de eventos.
Algumas operações consomem mais gás do que outras. Por exemplo:
A otimização inteligente de contratos de gás é uma arte e uma ciência. As abordagens discutidas neste curso, quando combinadas, têm o potencial de reduzir drasticamente os custos do gás dos seus contratos. Tenha em mente que o ecossistema Ethereum e suas ferramentas, incluindo o Remix, estão sempre mudando. Mantenha-se atualizado e teste e melhore seus contratos regularmente para otimização. A comunidade Ethereum é grande e útil, por isso nunca tenha medo de procurar orientação ou melhores práticas. Divirta-se codificando!