Guia de Práticas de Otimização de Gas para Contratos Inteligentes Ethereum
As taxas de Gas na mainnet Ethereum têm sido uma questão preocupante, especialmente durante períodos de congestionamento da rede. Durante os picos, os usuários frequentemente precisam pagar altas taxas de transação. Portanto, é crucial otimizar as taxas de Gas durante a fase de desenvolvimento de contratos inteligentes. A otimização do consumo de Gas não apenas pode reduzir efetivamente os custos de transação, mas também pode aumentar a eficiência das transações, proporcionando aos usuários uma experiência de utilização de blockchain mais econômica e eficiente.
Este artigo irá apresentar uma visão geral do mecanismo de taxas de Gas da Máquina Virtual Ethereum (EVM), os conceitos centrais relacionados à otimização das taxas de Gas, bem como as melhores práticas para otimização das taxas de Gas ao desenvolver contratos inteligentes. Esperamos que, através deste conteúdo, possamos fornecer inspiração e ajuda prática aos desenvolvedores, ao mesmo tempo que ajudamos os usuários comuns a compreender melhor o funcionamento das taxas de Gas do EVM, enfrentando juntos os desafios do ecossistema blockchain.
Introdução ao mecanismo de taxas de Gas do EVM
Em redes compatíveis com EVM, "Gas" é a unidade usada para medir a capacidade de cálculo necessária para executar operações específicas.
Na estrutura do EVM, o consumo de Gas é dividido em três partes: execução de operações, chamadas de mensagens externas e leitura/escrita de memória e armazenamento.
Devido ao fato de que a execução de cada transação requer recursos computacionais, será cobrada uma certa taxa para prevenir ciclos infinitos e ataques de negação de serviço (DoS). O custo necessário para completar uma transação é chamado de "Taxa de Gas".
Desde a ativação do fork duro Londres EIP-1559(), a taxa de Gas é calculada pela seguinte fórmula:
Taxa de gás = unidades de gás usadas * (taxa base + taxa de prioridade)
A taxa base será destruída, enquanto a taxa prioritária servirá como incentivo, encorajando os validadores a adicionar transações à blockchain. Definir uma taxa prioritária mais alta ao enviar uma transação pode aumentar a probabilidade de que a transação seja incluída no próximo bloco. Isso é semelhante a uma "gorjeta" que o usuário paga ao validador.
1. Compreender a otimização de Gas no EVM
Quando um contrato inteligente é compilado com Solidity, o contrato é convertido em uma série de "códigos de operação", ou opcodes.
Qualquer sequência de código de operação (, como a criação de contratos, a realização de chamadas de mensagens, o acesso ao armazenamento de contas e a execução de operações na máquina virtual ), tem um custo de consumo de Gas reconhecido, que está registrado no livro amarelo do Ethereum.
Após várias alterações no EIP, o custo de Gas de alguns códigos de operação foi ajustado, o que pode divergir do que está no livro amarelo.
2.Conceitos básicos de otimização de Gas
A ideia central da otimização de Gas é priorizar operações com alta eficiência de custo na blockchain EVM, evitando operações com custos de Gas elevados.
No EVM, as seguintes operações têm um custo relativamente baixo:
Ler e escrever variáveis de memória
Ler constantes e variáveis imutáveis
Ler e escrever variáveis locais
Ler a variável calldata, como o array e a estrutura calldata
Chamada de função interna
Operações de custo mais elevado incluem:
Ler e escrever variáveis de estado armazenadas no armazenamento do contrato
Chamada de função externa
Operação em loop
Melhores Práticas para Otimização de Custos de Gas da EVM
Com base nos conceitos básicos acima, compilámos uma lista de melhores práticas para otimização de taxas de Gas para a comunidade de desenvolvedores. Ao seguir estas práticas, os desenvolvedores podem reduzir o consumo de taxas de Gas dos contratos inteligentes, diminuir os custos de transação e criar aplicações mais eficientes e amigáveis ao usuário.
1. Tente minimizar o uso de armazenamento.
No Solidity, o armazenamento ( é um recurso limitado, cujo consumo de Gas é muito superior ao da memória ). Cada vez que um contrato inteligente lê ou grava dados no armazenamento, gera altos custos de Gas.
De acordo com a definição do livro amarelo do Ethereum, o custo das operações de armazenamento é mais de 100 vezes superior ao das operações de memória. Por exemplo, os comandos OPcodes mload e mstore consomem apenas 3 unidades de Gas, enquanto as operações de armazenamento como sload e sstore, mesmo nas melhores condições, custam pelo menos 100 unidades.
Os métodos para restringir o uso de armazenamento incluem:
Armazenar dados não permanentes na memória
Reduzir o número de modificações de armazenamento: ao armazenar resultados intermediários na memória e, após todas as computações estarem concluídas, alocar os resultados às variáveis de armazenamento.
( 2. Empacotamento de variáveis
O número de slots de armazenamento ) usados em contratos inteligentes e a forma como os desenvolvedores representam os dados terão um grande impacto no consumo de Gas.
O compilador Solidity empacota variáveis de armazenamento contínuas durante o processo de compilação e usa slots de armazenamento de 32 bytes como a unidade básica para o armazenamento de variáveis. O empacotamento de variáveis refere-se a organizar as variáveis de forma adequada para que várias variáveis possam se ajustar a um único slot de armazenamento.
Através deste ajuste de detalhe, os desenvolvedores podem economizar 20.000 unidades de Gas### armazenar um slot de armazenamento não utilizado consome 20.000 Gas(, mas agora apenas requer dois slots de armazenamento.
Uma vez que cada slot de armazenamento consome Gas, a compactação de variáveis otimiza o uso de Gas ao reduzir o número de slots de armazenamento necessários.
![Ethereum contratos inteligentes de otimização de Gas: as dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Otimizar tipos de dados
Uma variável pode ser representada por vários tipos de dados, mas o custo das operações correspondentes a diferentes tipos de dados também é diferente. Escolher o tipo de dados adequado ajuda a otimizar o uso de Gas.
Por exemplo, em Solidity, os inteiros podem ser divididos em diferentes tamanhos: uint8, uint16, uint32, etc. Como a EVM executa operações em unidades de 256 bits, usar uint8 significa que a EVM deve primeiro convertê-lo para uint256, e essa conversão consome Gas adicional.
Visto isoladamente, aqui usar uint256 é mais barato do que uint8. No entanto, se utilizarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação muda. Se os desenvolvedores conseguirem empacotar quatro variáveis uint8 em um slot de armazenamento, o custo total para iterá-las será menor do que o de quatro variáveis uint256. Dessa forma, o contrato inteligente pode ler e escrever um slot de armazenamento uma única vez, e colocar as quatro variáveis uint8 na memória/armazenamento em uma única operação.
4. Usar variáveis de tamanho fixo em vez de variáveis dinâmicas
Se os dados puderem ser controlados dentro de 32 bytes, é recomendável usar o tipo de dados bytes32 em vez de bytes ou strings. Em geral, variáveis de tamanho fixo consomem menos Gas do que variáveis de tamanho variável. Se o comprimento dos bytes puder ser limitado, escolha sempre o menor comprimento possível, de bytes1 a bytes32.
( 5. Mapeamentos e Arrays
A lista de dados do Solidity pode ser representada por dois tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Mapas são geralmente mais eficientes e de menor custo na maioria dos casos, mas arrays têm iterabilidade e suportam empacotamento de tipos de dados. Portanto, é recomendável priorizar o uso de mapas ao gerenciar listas de dados, a menos que seja necessário iterar ou que o empacotamento de tipos de dados possa otimizar o consumo de Gas.
![Ethereum contratos inteligentes Gas otimização das dez melhores práticas]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Usar calldata em vez de memory
As variáveis declaradas nos parâmetros da função podem ser armazenadas em calldata ou memory. A principal diferença entre os dois é que a memory pode ser modificada pela função, enquanto a calldata é imutável.
Lembre-se deste princípio: se os parâmetros da função forem somente leitura, deve-se preferir o uso de calldata em vez de memory. Isso pode evitar operações desnecessárias de cópia de calldata para memory.
( 7. Tente usar as palavras-chave Constant/Immutable sempre que possível
As variáveis Constant/Immutable não são armazenadas no armazenamento do contrato. Essas variáveis são calculadas em tempo de compilação e armazenadas no bytecode do contrato. Portanto, em comparação com o armazenamento, o custo de acesso a elas é muito menor, sendo recomendado usar as palavras-chave Constant ou Immutable sempre que possível.
![Otimas práticas de otimização de Gas para contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Usar Unchecked garantindo que não ocorrerá overflow/underflow
Quando os desenvolvedores podem garantir que as operações aritméticas não causarão estouro ou subfluxo, podem usar a palavra-chave unchecked introduzida no Solidity v0.8.0 para evitar verificações excessivas de estouro ou subfluxo, economizando assim custos de Gas.
Além disso, a versão 0.8.0 e superior do compilador não requer mais o uso da biblioteca SafeMath, pois o próprio compilador já possui funcionalidades de proteção contra estouro e subfluxo integradas.
9. Otimizar modificador
O código do modificador é incorporado nas funções alteradas, e sempre que o modificador é utilizado, seu código é copiado. Isso aumenta o tamanho do bytecode e eleva o consumo de Gas.
Ao reestruturar a lógica como uma função interna, permitindo a reutilização dessa função interna dentro do modificador, é possível reduzir o tamanho do bytecode e diminuir os custos de Gas.
![Melhores práticas de otimização de Gas para contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Otimização de curto-circuito
Para os operadores || e &&, a operação lógica ocorre com avaliação de curto-circuito, ou seja, se a primeira condição já puder determinar o resultado da expressão lógica, a segunda condição não será avaliada.
Para otimizar o consumo de Gas, as condições de baixo custo de computação devem ser colocadas à frente, assim é possível pular cálculos de alto custo.
![Oito melhores práticas para otimização de Gas em contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
Recomendações gerais adicionais
( 1. Remover código inútil
Se houver funções ou variáveis não utilizadas no contrato, recomenda-se que sejam removidas. Esta é a forma mais direta de reduzir os custos de implantação do contrato e manter o tamanho do contrato pequeno.
Aqui estão algumas dicas úteis:
Utilize os algoritmos mais eficientes para realizar cálculos. Se os resultados de certos cálculos forem usados diretamente no contrato, então esses processos de cálculo redundantes devem ser eliminados. Essencialmente, qualquer cálculo não utilizado deve ser removido.
No Ethereum, os desenvolvedores podem obter recompensas em Gas liberando espaço de armazenamento. Se uma variável não for mais necessária, deve-se usar a palavra-chave delete para removê-la ou definir seu valor como padrão.
Otimização de loops: evite operações de loop de alto custo, combine loops sempre que possível e mova cálculos repetidos para fora do corpo do loop.
) 2. Usar contratos inteligentes pré-compilados
Os contratos pré-compilados fornecem funções de biblioteca complexas, como operações de criptografia e hash. Como o código não é executado na EVM, mas sim localmente nos nós do cliente, é necessário menos Gas. Usar contratos pré-compilados pode economizar Gas ao reduzir a carga computacional necessária para executar contratos inteligentes.
Exemplos de contratos pré-compilados incluem o algoritmo de assinatura digital de curvas elípticas ###ECDSA( e o algoritmo de hash SHA2-256. Ao utilizar esses contratos pré-compilados em contratos inteligentes, os desenvolvedores podem reduzir os custos de Gas e aumentar a eficiência da execução das aplicações.
![Ethereum contratos inteligentes de Gas otimização das dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
3. Usar código de montagem em linha
Assembly inline ( in-line assembly ) permite que os desenvolvedores escrevam código de baixo nível, mas eficiente, que pode ser executado diretamente pela EVM, sem a necessidade de usar códigos de operação Solidity caros. A assembly inline também permite um controle mais preciso sobre o uso de memória e armazenamento, reduzindo ainda mais as taxas de Gas. Além disso, a assembly inline pode executar algumas operações complexas que são difíceis de implementar apenas com Solidity, oferecendo mais flexibilidade para otimizar o consumo de Gas.
No entanto, o uso de assembly inline também pode trazer riscos e ser propenso a erros. Portanto, deve ser utilizado com cautela, limitado a desenvolvedores experientes.
( 4. Usar soluções de Layer 2
Usar soluções Layer 2 pode reduzir a necessidade de armazenar e calcular na rede principal do Ethereum.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
18 Curtidas
Recompensa
18
7
Compartilhar
Comentário
0/400
PrivacyMaximalist
· 19h atrás
gás tão caro, é melhor ir para L2.
Ver originalResponder0
0xSherlock
· 07-30 09:26
Quando o gás poderá ser tão barato como no L2?
Ver originalResponder0
SnapshotBot
· 07-30 04:26
Ainda é melhor jogar L2.
Ver originalResponder0
MetaverseLandlord
· 07-30 04:18
just hope to sell the expensive gás to earn a bit more, right?
Ver originalResponder0
BearMarketBuyer
· 07-30 04:17
gás muito caro, come pessoas!
Ver originalResponder0
LiquidityHunter
· 07-30 04:08
gás otimizado 0,7 vezes espaço de arbitragem acabei de pegar três transações de deslizamento
Guia prático de otimização de Gas para contratos inteligentes Ethereum: Gota de custos e aumento de eficiência
Guia de Práticas de Otimização de Gas para Contratos Inteligentes Ethereum
As taxas de Gas na mainnet Ethereum têm sido uma questão preocupante, especialmente durante períodos de congestionamento da rede. Durante os picos, os usuários frequentemente precisam pagar altas taxas de transação. Portanto, é crucial otimizar as taxas de Gas durante a fase de desenvolvimento de contratos inteligentes. A otimização do consumo de Gas não apenas pode reduzir efetivamente os custos de transação, mas também pode aumentar a eficiência das transações, proporcionando aos usuários uma experiência de utilização de blockchain mais econômica e eficiente.
Este artigo irá apresentar uma visão geral do mecanismo de taxas de Gas da Máquina Virtual Ethereum (EVM), os conceitos centrais relacionados à otimização das taxas de Gas, bem como as melhores práticas para otimização das taxas de Gas ao desenvolver contratos inteligentes. Esperamos que, através deste conteúdo, possamos fornecer inspiração e ajuda prática aos desenvolvedores, ao mesmo tempo que ajudamos os usuários comuns a compreender melhor o funcionamento das taxas de Gas do EVM, enfrentando juntos os desafios do ecossistema blockchain.
Introdução ao mecanismo de taxas de Gas do EVM
Em redes compatíveis com EVM, "Gas" é a unidade usada para medir a capacidade de cálculo necessária para executar operações específicas.
Na estrutura do EVM, o consumo de Gas é dividido em três partes: execução de operações, chamadas de mensagens externas e leitura/escrita de memória e armazenamento.
Devido ao fato de que a execução de cada transação requer recursos computacionais, será cobrada uma certa taxa para prevenir ciclos infinitos e ataques de negação de serviço (DoS). O custo necessário para completar uma transação é chamado de "Taxa de Gas".
Desde a ativação do fork duro Londres EIP-1559(), a taxa de Gas é calculada pela seguinte fórmula:
Taxa de gás = unidades de gás usadas * (taxa base + taxa de prioridade)
A taxa base será destruída, enquanto a taxa prioritária servirá como incentivo, encorajando os validadores a adicionar transações à blockchain. Definir uma taxa prioritária mais alta ao enviar uma transação pode aumentar a probabilidade de que a transação seja incluída no próximo bloco. Isso é semelhante a uma "gorjeta" que o usuário paga ao validador.
1. Compreender a otimização de Gas no EVM
Quando um contrato inteligente é compilado com Solidity, o contrato é convertido em uma série de "códigos de operação", ou opcodes.
Qualquer sequência de código de operação (, como a criação de contratos, a realização de chamadas de mensagens, o acesso ao armazenamento de contas e a execução de operações na máquina virtual ), tem um custo de consumo de Gas reconhecido, que está registrado no livro amarelo do Ethereum.
Após várias alterações no EIP, o custo de Gas de alguns códigos de operação foi ajustado, o que pode divergir do que está no livro amarelo.
2.Conceitos básicos de otimização de Gas
A ideia central da otimização de Gas é priorizar operações com alta eficiência de custo na blockchain EVM, evitando operações com custos de Gas elevados.
No EVM, as seguintes operações têm um custo relativamente baixo:
Operações de custo mais elevado incluem:
Melhores Práticas para Otimização de Custos de Gas da EVM
Com base nos conceitos básicos acima, compilámos uma lista de melhores práticas para otimização de taxas de Gas para a comunidade de desenvolvedores. Ao seguir estas práticas, os desenvolvedores podem reduzir o consumo de taxas de Gas dos contratos inteligentes, diminuir os custos de transação e criar aplicações mais eficientes e amigáveis ao usuário.
1. Tente minimizar o uso de armazenamento.
No Solidity, o armazenamento ( é um recurso limitado, cujo consumo de Gas é muito superior ao da memória ). Cada vez que um contrato inteligente lê ou grava dados no armazenamento, gera altos custos de Gas.
De acordo com a definição do livro amarelo do Ethereum, o custo das operações de armazenamento é mais de 100 vezes superior ao das operações de memória. Por exemplo, os comandos OPcodes mload e mstore consomem apenas 3 unidades de Gas, enquanto as operações de armazenamento como sload e sstore, mesmo nas melhores condições, custam pelo menos 100 unidades.
Os métodos para restringir o uso de armazenamento incluem:
( 2. Empacotamento de variáveis
O número de slots de armazenamento ) usados em contratos inteligentes e a forma como os desenvolvedores representam os dados terão um grande impacto no consumo de Gas.
O compilador Solidity empacota variáveis de armazenamento contínuas durante o processo de compilação e usa slots de armazenamento de 32 bytes como a unidade básica para o armazenamento de variáveis. O empacotamento de variáveis refere-se a organizar as variáveis de forma adequada para que várias variáveis possam se ajustar a um único slot de armazenamento.
Através deste ajuste de detalhe, os desenvolvedores podem economizar 20.000 unidades de Gas### armazenar um slot de armazenamento não utilizado consome 20.000 Gas(, mas agora apenas requer dois slots de armazenamento.
Uma vez que cada slot de armazenamento consome Gas, a compactação de variáveis otimiza o uso de Gas ao reduzir o número de slots de armazenamento necessários.
![Ethereum contratos inteligentes de otimização de Gas: as dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Otimizar tipos de dados
Uma variável pode ser representada por vários tipos de dados, mas o custo das operações correspondentes a diferentes tipos de dados também é diferente. Escolher o tipo de dados adequado ajuda a otimizar o uso de Gas.
Por exemplo, em Solidity, os inteiros podem ser divididos em diferentes tamanhos: uint8, uint16, uint32, etc. Como a EVM executa operações em unidades de 256 bits, usar uint8 significa que a EVM deve primeiro convertê-lo para uint256, e essa conversão consome Gas adicional.
Visto isoladamente, aqui usar uint256 é mais barato do que uint8. No entanto, se utilizarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação muda. Se os desenvolvedores conseguirem empacotar quatro variáveis uint8 em um slot de armazenamento, o custo total para iterá-las será menor do que o de quatro variáveis uint256. Dessa forma, o contrato inteligente pode ler e escrever um slot de armazenamento uma única vez, e colocar as quatro variáveis uint8 na memória/armazenamento em uma única operação.
4. Usar variáveis de tamanho fixo em vez de variáveis dinâmicas
Se os dados puderem ser controlados dentro de 32 bytes, é recomendável usar o tipo de dados bytes32 em vez de bytes ou strings. Em geral, variáveis de tamanho fixo consomem menos Gas do que variáveis de tamanho variável. Se o comprimento dos bytes puder ser limitado, escolha sempre o menor comprimento possível, de bytes1 a bytes32.
( 5. Mapeamentos e Arrays
A lista de dados do Solidity pode ser representada por dois tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Mapas são geralmente mais eficientes e de menor custo na maioria dos casos, mas arrays têm iterabilidade e suportam empacotamento de tipos de dados. Portanto, é recomendável priorizar o uso de mapas ao gerenciar listas de dados, a menos que seja necessário iterar ou que o empacotamento de tipos de dados possa otimizar o consumo de Gas.
![Ethereum contratos inteligentes Gas otimização das dez melhores práticas]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Usar calldata em vez de memory
As variáveis declaradas nos parâmetros da função podem ser armazenadas em calldata ou memory. A principal diferença entre os dois é que a memory pode ser modificada pela função, enquanto a calldata é imutável.
Lembre-se deste princípio: se os parâmetros da função forem somente leitura, deve-se preferir o uso de calldata em vez de memory. Isso pode evitar operações desnecessárias de cópia de calldata para memory.
( 7. Tente usar as palavras-chave Constant/Immutable sempre que possível
As variáveis Constant/Immutable não são armazenadas no armazenamento do contrato. Essas variáveis são calculadas em tempo de compilação e armazenadas no bytecode do contrato. Portanto, em comparação com o armazenamento, o custo de acesso a elas é muito menor, sendo recomendado usar as palavras-chave Constant ou Immutable sempre que possível.
![Otimas práticas de otimização de Gas para contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Usar Unchecked garantindo que não ocorrerá overflow/underflow
Quando os desenvolvedores podem garantir que as operações aritméticas não causarão estouro ou subfluxo, podem usar a palavra-chave unchecked introduzida no Solidity v0.8.0 para evitar verificações excessivas de estouro ou subfluxo, economizando assim custos de Gas.
Além disso, a versão 0.8.0 e superior do compilador não requer mais o uso da biblioteca SafeMath, pois o próprio compilador já possui funcionalidades de proteção contra estouro e subfluxo integradas.
9. Otimizar modificador
O código do modificador é incorporado nas funções alteradas, e sempre que o modificador é utilizado, seu código é copiado. Isso aumenta o tamanho do bytecode e eleva o consumo de Gas.
Ao reestruturar a lógica como uma função interna, permitindo a reutilização dessa função interna dentro do modificador, é possível reduzir o tamanho do bytecode e diminuir os custos de Gas.
![Melhores práticas de otimização de Gas para contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Otimização de curto-circuito
Para os operadores || e &&, a operação lógica ocorre com avaliação de curto-circuito, ou seja, se a primeira condição já puder determinar o resultado da expressão lógica, a segunda condição não será avaliada.
Para otimizar o consumo de Gas, as condições de baixo custo de computação devem ser colocadas à frente, assim é possível pular cálculos de alto custo.
![Oito melhores práticas para otimização de Gas em contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
Recomendações gerais adicionais
( 1. Remover código inútil
Se houver funções ou variáveis não utilizadas no contrato, recomenda-se que sejam removidas. Esta é a forma mais direta de reduzir os custos de implantação do contrato e manter o tamanho do contrato pequeno.
Aqui estão algumas dicas úteis:
Utilize os algoritmos mais eficientes para realizar cálculos. Se os resultados de certos cálculos forem usados diretamente no contrato, então esses processos de cálculo redundantes devem ser eliminados. Essencialmente, qualquer cálculo não utilizado deve ser removido.
No Ethereum, os desenvolvedores podem obter recompensas em Gas liberando espaço de armazenamento. Se uma variável não for mais necessária, deve-se usar a palavra-chave delete para removê-la ou definir seu valor como padrão.
Otimização de loops: evite operações de loop de alto custo, combine loops sempre que possível e mova cálculos repetidos para fora do corpo do loop.
) 2. Usar contratos inteligentes pré-compilados
Os contratos pré-compilados fornecem funções de biblioteca complexas, como operações de criptografia e hash. Como o código não é executado na EVM, mas sim localmente nos nós do cliente, é necessário menos Gas. Usar contratos pré-compilados pode economizar Gas ao reduzir a carga computacional necessária para executar contratos inteligentes.
Exemplos de contratos pré-compilados incluem o algoritmo de assinatura digital de curvas elípticas ###ECDSA( e o algoritmo de hash SHA2-256. Ao utilizar esses contratos pré-compilados em contratos inteligentes, os desenvolvedores podem reduzir os custos de Gas e aumentar a eficiência da execução das aplicações.
![Ethereum contratos inteligentes de Gas otimização das dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
3. Usar código de montagem em linha
Assembly inline ( in-line assembly ) permite que os desenvolvedores escrevam código de baixo nível, mas eficiente, que pode ser executado diretamente pela EVM, sem a necessidade de usar códigos de operação Solidity caros. A assembly inline também permite um controle mais preciso sobre o uso de memória e armazenamento, reduzindo ainda mais as taxas de Gas. Além disso, a assembly inline pode executar algumas operações complexas que são difíceis de implementar apenas com Solidity, oferecendo mais flexibilidade para otimizar o consumo de Gas.
No entanto, o uso de assembly inline também pode trazer riscos e ser propenso a erros. Portanto, deve ser utilizado com cautela, limitado a desenvolvedores experientes.
( 4. Usar soluções de Layer 2
Usar soluções Layer 2 pode reduzir a necessidade de armazenar e calcular na rede principal do Ethereum.