Uma das formas mais simples de poupar gás é simplificando o seu código. Quanto menos código houver para executar, menos gás é consumido.
Considere a seguinte função:
Solidez
solidez do pragma ^0.8.9;
exemplo de otimização do contrato {
endereço [] administradores públicos;
função isUserAdmin (endereço do utilizador) retornos de vista pública (bool) {
para (unidade i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
retorno 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:
Solidez
contracto OptimizationExampleOptimize {
mapeamento (endereço = > bool) administradores públicos;
função isUserAdmin (endereço do utilizador) retornos de vista pública (bool) {
return admins[user];
}
}
Ao trabalhar com o Ethereum, lembre-se que está a pagar por cada bit de armazenamento. Se estiver a armazenar os mesmos dados em vários locais, considere como pode armazená-los uma vez e referenciá-los noutro lugar.
As bibliotecas no Solidity são pedaços de código reutilizáveis. Podem ajudá-lo a escrever código modular e, uma vez que são implementados apenas uma vez e ligados a outros contratos, podem poupar gás a longo prazo.
Solidez
biblioteca SafeMath {
função 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 usando SafeMath {
usando SafeMath para unidade;
valor público da unidade;
incremento de função (uint _value) público {
value = value.add(_value);
}
}
A palavra-chave delete
no Solidity permite-lhe anular variáveis, que reembolsam parte do gás. Se tiver terminado com um determinado pedaço de armazenamento, elimine-o para reclamar este reembolso.
Embora o armazenamento de dados na cadeia de blocos possa ser caro, registar eventos é comparativamente mais barato. Se tiver dados que não precisam ser lidos do contrato mas devem ser verificáveis, considere usar registos de eventos.
Algumas operações são mais intensivas em gás do que outras. Por exemplo:
A otimização de contratos inteligentes para 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 as suas ferramentas, incluindo o Remix, estão sempre a mudar. Mantenha-se atualizado e teste e melhore os 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 a codificação!
Uma das formas mais simples de poupar gás é simplificando o seu código. Quanto menos código houver para executar, menos gás é consumido.
Considere a seguinte função:
Solidez
solidez do pragma ^0.8.9;
exemplo de otimização do contrato {
endereço [] administradores públicos;
função isUserAdmin (endereço do utilizador) retornos de vista pública (bool) {
para (unidade i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
retorno 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:
Solidez
contracto OptimizationExampleOptimize {
mapeamento (endereço = > bool) administradores públicos;
função isUserAdmin (endereço do utilizador) retornos de vista pública (bool) {
return admins[user];
}
}
Ao trabalhar com o Ethereum, lembre-se que está a pagar por cada bit de armazenamento. Se estiver a armazenar os mesmos dados em vários locais, considere como pode armazená-los uma vez e referenciá-los noutro lugar.
As bibliotecas no Solidity são pedaços de código reutilizáveis. Podem ajudá-lo a escrever código modular e, uma vez que são implementados apenas uma vez e ligados a outros contratos, podem poupar gás a longo prazo.
Solidez
biblioteca SafeMath {
função 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 usando SafeMath {
usando SafeMath para unidade;
valor público da unidade;
incremento de função (uint _value) público {
value = value.add(_value);
}
}
A palavra-chave delete
no Solidity permite-lhe anular variáveis, que reembolsam parte do gás. Se tiver terminado com um determinado pedaço de armazenamento, elimine-o para reclamar este reembolso.
Embora o armazenamento de dados na cadeia de blocos possa ser caro, registar eventos é comparativamente mais barato. Se tiver dados que não precisam ser lidos do contrato mas devem ser verificáveis, considere usar registos de eventos.
Algumas operações são mais intensivas em gás do que outras. Por exemplo:
A otimização de contratos inteligentes para 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 as suas ferramentas, incluindo o Remix, estão sempre a mudar. Mantenha-se atualizado e teste e melhore os 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 a codificação!