As 10 práticas de otimização de Gas para contratos inteligentes que ajudam a melhorar a eficiência do desenvolvimento EVM

As 10 Melhores Práticas para Otimizar as Taxas de Gas de Contratos Inteligentes

As taxas de Gas na mainnet do Ethereum têm sido um problema, especialmente em períodos de congestionamento da rede. Durante os picos, os usuários frequentemente precisam pagar altas taxas de transação. Portanto, otimizar as taxas de Gas ao desenvolver contratos inteligentes é crucial. A otimização do consumo de Gas não só pode reduzir os custos de transação, mas também melhorar a eficiência das transações, proporcionando aos usuários uma experiência em blockchain mais econômica e eficiente.

Este artigo irá descrever o mecanismo de taxas de Gas da Máquina Virtual Ethereum (EVM), os conceitos centrais da 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 este conteúdo possa inspirar e ajudar os desenvolvedores de forma prática, ao mesmo tempo que permite aos usuários comuns entender melhor a forma como operam as taxas de Gas do EVM, enfrentando juntos os desafios do ecossistema blockchain.

As 10 melhores práticas de otimização de Gas para contratos inteligentes Ethereum

Introdução ao mecanismo de taxas de Gas do EVM

Em redes compatíveis com EVM, "Gas" é a unidade usada para medir a capacidade computacional 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 evitar 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 que o EIP-1559 entrou em vigor, as taxas de Gas são calculadas pela seguinte fórmula:

Taxa de gás = unidades de gás utilizadas * (taxa base + taxa de prioridade)

A taxa base será destruída, enquanto a taxa prioritária servirá como um incentivo para encorajar os validadores a adicionar transações à blockchain. Ao definir uma taxa prioritária mais alta ao enviar uma transação, é possível aumentar a probabilidade de que a transação seja incluída no próximo bloco. Isso é semelhante a uma "gorjeta" que os usuários pagam aos validadores.

As 10 melhores práticas para otimização de Gas em contratos inteligentes do Ethereum

1. Compreender a otimização de Gas no EVM

Ao compilar contratos inteligentes 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 mensagem, 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, e esses custos estão registrados no livro amarelo do Ethereum.

Após várias modificações do EIP, o custo de Gas de alguns códigos de operação foi ajustado, podendo estar em desacordo com o 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 mais 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 arrays e estruturas calldata.
  • Chamada de função interna

As operações com custos mais elevados incluem:

  • Ler e escrever variáveis de estado armazenadas no armazenamento de contratos inteligentes
  • Chamada de função externa
  • operações em loop

As dez melhores práticas de otimização de Gas para contratos inteligentes Ethereum

Melhores Práticas para Otimização de Taxas de Gas EVM

Com base nos conceitos básicos acima, compilámos uma lista de melhores práticas para otimização de Gas fees para a comunidade de desenvolvedores. Ao seguir estas práticas, os desenvolvedores podem reduzir o consumo de Gas fees dos contratos inteligentes, diminuir os custos de transação e criar aplicações mais eficientes e amigáveis para os utilizadores.

1. Tente minimizar o uso de armazenamento.

Em Solidity, o Storage( é um recurso limitado, cujo consumo de Gas é muito superior ao da Memory). 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 maior do que o das operações de memória. Por exemplo, as instruções OPcodesmload 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 limitar o uso de armazenamento incluem:

  • Armazenar dados não permanentes na memória
  • Reduzir o número de modificações de armazenamento: ao armazenar os resultados intermediários na memória e, após a conclusão de todos os cálculos, atribuir os resultados às variáveis de armazenamento.

As 10 melhores práticas de otimização de Gas para contratos inteligentes do Ethereum

( 2. Variáveis empacotadas

O número de slots de armazenamento ) utilizados 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, usando slots de armazenamento de 32 bytes como a unidade básica de armazenamento das variáveis. O empacotamento de variáveis refere-se a organizar as variáveis de forma que múltiplas variáveis possam se ajustar em um único slot de armazenamento.

Com este ajuste de detalhe, os desenvolvedores podem economizar 20.000 unidades de Gas. ### Armazenar um slot de armazenamento não utilizado requer consumir 20.000 Gas (, mas agora apenas precisa de dois slots de armazenamento.

Uma vez que cada slot de armazenamento consome Gas, o empacotamento de variáveis otimiza o uso de Gas ao reduzir o número de slots de armazenamento necessários.

![As 10 melhores práticas de otimização de Gas para contratos inteligentes Ethereum])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 os custos das operações correspondentes a diferentes tipos de dados também variam. Escolher o tipo de dado apropriado ajuda a otimizar o uso do Gas.

Por exemplo, em Solidity, os inteiros podem ser divididos em tamanhos diferentes: 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.

Vistos isoladamente, usar uint256 é mais barato do que uint8. No entanto, se for utilizada 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 para quatro variáveis uint256. Assim, os contratos inteligentes poderão ler e gravar um slot de armazenamento de uma só vez, colocando quatro variáveis uint8 na memória/armazenamento em uma única operação.

As 10 melhores práticas de otimização de Gas para contratos inteligentes do Ethereum

4. Usar variáveis de tamanho fixo em vez de variáveis dinâmicas

Se os dados puderem ser controlados dentro de 32 bytes, recomenda-se usar o tipo de dado bytes32 em vez de bytes ou strings. De maneira geral, variáveis de tamanho fixo consomem menos Gas do que variáveis de tamanho variável. Se o comprimento em bytes puder ser limitado, escolha sempre o menor comprimento possível entre bytes1 e 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.

A mapeamento é geralmente mais eficiente e menos custoso na maioria dos casos, mas os arrays têm a capacidade de serem iteráveis e suportam o empacotamento de tipos de dados. Portanto, é recomendável priorizar o uso de mapeamentos 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.

![As 10 melhores práticas de otimização de Gas para contratos inteligentes do Ethereum]###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 são apenas leitura, deve-se dar prioridade ao uso de calldata em vez de memory. Isso pode evitar operações de cópia desnecessárias de calldata da função para memory.

( 7. Tente usar as palavras-chave Constant/Immutable sempre que possível

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.

![As 10 Melhores Práticas de Otimização de Gas para Contratos Inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(

) 8. Usar Unchecked para garantir que não ocorra overflow/underflow

Quando os desenvolvedores conseguem garantir que as operações aritméticas não resultarão em overflow ou underflow, podem usar a palavra-chave unchecked introduzida no Solidity v0.8.0 para evitar verificações desnecessárias de overflow ou underflow, economizando assim custos de Gas.

Além disso, a versão 0.8.0 e superior do compilador já não necessita do uso da biblioteca SafeMath, pois o próprio compilador já incorpora funcionalidades de proteção contra estouro e subfluxo.

9. otimizador de modificações

O código do modificador é incorporado à função modificada, e cada vez 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 _checkOwner###(, permite a reutilização dessa função interna em modificadores, o que pode reduzir o tamanho do bytecode e diminuir os custos de Gas.

![As 10 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 avaliação lógica ocorre com 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 com baixo custo de cálculo devem ser colocadas no início, assim é possível pular cálculos de alto custo.

As 10 melhores práticas de otimização de Gas para contratos inteligentes do Ethereum

Sugestões gerais adicionais

( 1. Remover código inútil

Se houver funções ou variáveis não utilizadas no contrato, é recomendável removê-las. Esta é a maneira 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 calcular. Se os resultados de certos cálculos forem usados diretamente no contrato, então esses processos de cálculo redundantes devem ser removidos. Essencialmente, qualquer cálculo não utilizado deve ser eliminado.

  • No Ethereum, os desenvolvedores podem ganhar recompensas em Gas ao liberar 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 defini-la como um valor padrão.

  • Otimização de loops: evitar operações de loop de alto custo, combinar loops sempre que possível e mover cálculos repetidos para fora do corpo do loop.

) 2. Utilizando contratos inteligentes pré-compilados

Os contratos pré-compilados oferecem funções de biblioteca complexas, como operações de criptografia e hashing. Como o código não é executado na EVM, mas sim localmente nos nós, requer menos Gas. O uso de contratos pré-compilados pode economizar Gas reduzindo a carga de trabalho computacional necessária para executar contratos inteligentes.

Exemplos de contratos pré-compilados incluem o algoritmo de assinatura digital de curva elíptica ###ECDSA( e o algoritmo de hash SHA2-256. Ao utilizar estes 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.

![As 10 melhores práticas para otimização de Gas em contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###

3. Usar código de montagem embutido

A montagem inline 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 montagem 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 montagem inline pode executar algumas operações complexas que seriam difíceis de realizar 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 usado com cautela, limitado a desenvolvedores experientes.

( 4. Uso de soluções Layer 2

Usar soluções de Layer 2 pode reduzir a quantidade de dados que precisam ser armazenados e processados na rede principal do Ethereum.

soluções Layer 2 como rollups, sidechains e canais de estado

Ver original
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.
  • Recompensa
  • 7
  • Compartilhar
Comentário
0/400
AirdropATMvip
· 07-17 09:37
o gás pode ficar mais baixo, as cex estão a perder dinheiro
Ver originalResponder0
CommunityJanitorvip
· 07-17 02:30
Como um velho idiota, essa taxa de gás realmente está a comer as pessoas.
Ver originalResponder0
GhostWalletSleuthvip
· 07-15 15:28
gás Gota também não adianta, Vitalik Buterin não é apenas alguém que quer fazer as pessoas de parvas
Ver originalResponder0
GasFeeNightmarevip
· 07-15 07:31
gás realmente é de matar~
Ver originalResponder0
BrokenDAOvip
· 07-15 07:23
Mais um exemplo de inércia na governança. Ao otimizar as taxas na cadeia, considerou-se a distorção de incentivos? Os usuários comuns que realizam transações frequentes são sempre os pagantes.
Ver originalResponder0
DoomCanistervip
· 07-15 07:12
não economize a sensação de destruição do gás
Ver originalResponder0
PumpBeforeRugvip
· 07-15 07:07
gás dinheiro já dá para comprar uma garrafa de Moutai
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)