Leçon 5

Final de otimização de contrato inteligente - dicas e truques avançados

Em nossas lições anteriores, cobrimos os conceitos básicos e as ferramentas necessárias para otimizar o gás em contratos inteligentes Ethereum, especialmente usando o Remix IDE. Ao encerrarmos este curso, vamos nos aprofundar em algumas técnicas avançadas e práticas recomendadas. Esta lição final combinará o conhecimento que acumulamos, garantindo que você tenha uma compreensão completa da otimização de gás em contratos inteligentes Ethereum.

Refatorando e reduzindo a complexidade do código

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.

Exemplo prático

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];
    }
}

Reutilizar dados

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.

Usar bibliotecas

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);
    }
}

Exclua armazenamento desnecessário

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.

Considere os logs de eventos

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.

Evite usar operações caras

Algumas operações consomem mais gás do que outras. Por exemplo:

  • As chamadas de função externas são mais caras que as internas.
  • Interagir com armazenamento é mais caro do que interagir com memória.
  • Às vezes, os arrays dinâmicos podem custar mais gás do que os arrays de tamanho fixo.

Conclusão

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!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 5

Final de otimização de contrato inteligente - dicas e truques avançados

Em nossas lições anteriores, cobrimos os conceitos básicos e as ferramentas necessárias para otimizar o gás em contratos inteligentes Ethereum, especialmente usando o Remix IDE. Ao encerrarmos este curso, vamos nos aprofundar em algumas técnicas avançadas e práticas recomendadas. Esta lição final combinará o conhecimento que acumulamos, garantindo que você tenha uma compreensão completa da otimização de gás em contratos inteligentes Ethereum.

Refatorando e reduzindo a complexidade do código

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.

Exemplo prático

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];
    }
}

Reutilizar dados

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.

Usar bibliotecas

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);
    }
}

Exclua armazenamento desnecessário

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.

Considere os logs de eventos

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.

Evite usar operações caras

Algumas operações consomem mais gás do que outras. Por exemplo:

  • As chamadas de função externas são mais caras que as internas.
  • Interagir com armazenamento é mais caro do que interagir com memória.
  • Às vezes, os arrays dinâmicos podem custar mais gás do que os arrays de tamanho fixo.

Conclusão

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!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.