Guia de otimização de taxas de Gas para contratos inteligentes EVM: 10 melhores práticas e análise de conceitos-chave

Guia de otimização de Gas para contratos inteligentes: 10 melhores práticas

As taxas de Gas na mainnet do Ethereum têm sido um problema complicado, especialmente em momentos de congestionamento da rede. Durante os períodos de pico, 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 só pode reduzir efetivamente os custos de transação, mas também aumentar a eficiência da transação, proporcionando aos usuários uma experiência em blockchain mais económica e eficiente.

Este artigo irá resumir o mecanismo de taxas de Gas da Máquina Virtual Ethereum (EVM), os conceitos centrais da otimização de taxas de Gas, bem como as melhores práticas para otimização de taxas de Gas ao desenvolver contratos inteligentes. Esperamos que este conteúdo possa inspirar e ajudar os desenvolvedores, ao mesmo tempo que ajuda os usuários comuns a entender melhor como funcionam as taxas de Gas da EVM, enfrentando juntos os desafios do ecossistema blockchain.

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

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

Em redes compatíveis com EVM, "Gas" é a unidade usada para medir a capacidade de computação necessária para executar operações específicas.

Na estrutura do layout do EVM, o consumo de Gas é dividido em três partes: execução de operações, chamadas de mensagens externas e leitura e escrita em memória e armazenamento.

Devido ao fato de que a execução de cada transação requer recursos computacionais, uma certa taxa será cobrada 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 a ativação da hard fork de Londres EIP-1559(), a taxa de Gas é calculada 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 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 a transação ser incluída no próximo bloco. Isso é semelhante a um "gorjeta" que o usuário paga ao validador.

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

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 trecho de código de operação (, como criar contratos, realizar chamadas de mensagens, acessar armazenamento de contas e executar 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 no EIP, o custo de Gas de alguns códigos de operação foi ajustado, podendo 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 com custos mais elevados incluem:

  • Ler e escrever variáveis de estado armazenadas em contratos inteligentes
  • Chamada de função externa
  • Operação em loop

As 10 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, organizámos uma lista de melhores práticas para a otimização das 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 para os utilizadores.

1. Tente minimizar o uso de armazenamento.

Em 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, isso gera altos custos de Gas.

De acordo com a definição do livro branco do Ethereum, o custo das operações de armazenamento é mais de 100 vezes superior ao 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, têm um custo de 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 manter 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 dez melhores práticas de otimização de Gas para contratos inteligentes do Ethereum

( 2. Embalagem 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 agrupa variáveis de armazenamento contínuas durante o processo de compilação, utilizando um slot de armazenamento de 32 bytes como a unidade básica de armazenamento das variáveis. O empacotamento de variáveis refere-se à disposição adequada das variáveis, permitindo que várias variáveis se encaixem em um único slot de armazenamento.

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

Como 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.

![Gas otimização dos contratos inteligentes do Ethereum - 10 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 os custos das operações correspondentes a diferentes tipos de dados também variam. Escolher o tipo de dados adequado ajuda a otimizar o uso de Gas.

Por exemplo, em Solidity, os inteiros podem ser subdivididos 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, usar uint256 é mais barato do que uint8. No entanto, se a otimização de empacotamento de variáveis for utilizada, a situação muda. Se o desenvolvedor puder empacotar quatro variáveis uint8 em um único slot de armazenamento, o custo total para iterá-las será menor do que para quatro variáveis uint256. Assim, o contrato inteligente pode ler e gravar um único slot de armazenamento, colocando as 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 Ethereum

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

Se os dados puderem ser controlados em 32 bytes, recomenda-se 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 em bytes puder ser limitado, tente escolher o menor comprimento possível de bytes1 a bytes32.

( 5. Mapeamento 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 na maioria dos casos é mais eficiente e tem custos mais baixos, mas os arrays possuem iterabilidade e suportam o empacotamento de tipos de dados. Portanto, recomenda-se dar prioridade ao uso de mapeamento ao gerenciar listas de dados, a menos que seja necessário iterar ou seja possível otimizar o consumo de Gas através do empacotamento de tipos de dados.

![As 10 melhores práticas de otimização de Gas para contratos inteligentes 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 memory pode ser modificada pela função, enquanto calldata é imutável.

Lembre-se deste princípio: se os parâmetros da função forem somente leitura, deve-se priorizar o uso de calldata em vez de memory. Isso pode evitar operações de cópia desnecessárias de calldata da função para memory.

Ao ler valores diretamente do calldata, salte as operações de memória intermediárias. Esta forma de otimização pode aumentar significativamente a eficiência do Gas.

( 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, o custo de acesso a elas é muito menor em comparação com o armazenamento, sendo recomendável 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 garantindo que não ocorrerá overflow/underflow

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

Além disso, as versões 0.8.0 e superiores do compilador não precisam mais da biblioteca SafeMath, pois o próprio compilador já possui funcionalidades de proteção contra estouro e subfluxo.

9. otimizador

O código do modificador é incorporado na 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. É possível reduzir o tamanho do bytecode e diminuir o custo de Gas ao reestruturar a lógica para funções internas, permitindo que essa função interna seja reutilizada dentro do modificador.

10. Otimização de curto-circuito

Para os operadores || e &&, a avaliação lógica ocorre de forma 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, deve-se colocar as condições de baixo custo de cálculo primeiro, assim é possível pular cálculos de alto custo.

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

Sugestões gerais adicionais

1. Remover código inútil

Se houver funções ou variáveis não utilizadas no contrato, é aconselhá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:

  • Utilizar os algoritmos mais eficientes para realizar cálculos. Se os resultados de certos cálculos forem usados diretamente no contrato, então deve-se eliminar esses processos de cálculo redundantes. Essencialmente, quaisquer cálculos não utilizados devem ser removidos.

  • 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 o 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.

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

( 2. Usar 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 clientes, o gás necessário é menor. Usar contratos pré-compilados pode economizar gás ao reduzir 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 usar esses contratos pré-compilados nos contratos inteligentes, os desenvolvedores podem reduzir os custos de Gas e aumentar a eficiência da execução das aplicações.

( 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 os caros códigos de operação Solidity. 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 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.

Melhores práticas de otimização de Gas para contratos inteligentes do Ethereum

4. Usar soluções Layer 2

fazer

GAS-6.02%
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • 6
  • Partilhar
Comentar
0/400
AlwaysAnonvip
· 07-09 16:21
啧 Outra vez esta armadilha de otimização de gás, que chato.
Ver originalResponder0
ForkTonguevip
· 07-07 17:09
gás é realmente bom, quem usa L2 sabe
Ver originalResponder0
NonFungibleDegenvip
· 07-07 01:27
Taxa de gás r literalmente a matar-me rn... ngmi ser
Ver originalResponder0
AllTalkLongTradervip
· 07-07 01:20
Cansado, cansado, o gás está uma confusão, vamos diretamente para o L2.
Ver originalResponder0
0xInsomniavip
· 07-07 01:16
gás tão caro que se atreve a dizer melhores práticas
Ver originalResponder0
CryptoTherapistvip
· 07-07 01:10
vamos processar essa ansiedade de gás juntos... sinto um trauma profundo devido às altas taxas. a otimização consciente de contratos é a chave para a estabilidade emocional nas negociações
Ver originalResponder0
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)