Guia completo de otimização de Gas para contratos inteligentes Ethereum Gota Custo de transação aumento de eficiência

Guia Prático de Otimização de Gas para Contratos Inteligentes Ethereum

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

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

Oito melhores práticas para otimização de Gas em contratos inteligentes 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 EVM, o consumo de Gas é dividido em três partes: execução de operações, chamadas de mensagens externas e leitura e escrita de memória e armazenamento.

Devido à necessidade de recursos computacionais para a execução de cada transação, será cobrada uma certa taxa para prevenir ciclos infinitos e ataques de negação de serviço (DoS). A taxa necessária para completar uma transação é chamada de "taxa de Gas".

Desde a ativação do hard fork de Londres EIP-1559( ), a taxa de Gas é calculada pela seguinte fórmula:

Gas = unidades de Gas utilizadas * ( taxa base + taxa de prioridade )

A taxa básica será destruída, enquanto a taxa prioritária servirá como um 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 os usuários pagam aos validadores.

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 execuçã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 Gas reconhecido, que está registrado no livro amarelo do Ethereum.

Após várias modificações no EIP, alguns custos de Gas para códigos de operação foram ajustados, podendo diferir do que está no livro amarelo.

Conceito básico de otimização de Gas

A ideia central da otimização de Gas é priorizar operações de alto custo-eficiência 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 de calldata
  • Chamada de função interna

As operações com custos mais elevados incluem:

  • Ler e escrever variáveis de estado armazenadas no armazenamento do contrato
  • Chamada de função externa
  • Operação em loop

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

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

Com base nos conceitos básicos acima, elaboramos 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 reduzir 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 escreve dados do 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, os comandos OPcodesmload e mstore consomem apenas 3 unidades de Gas, enquanto as operações de armazenamento como sload e sstore, mesmo nas melhores circunstâncias, 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.

Oito Melhores Práticas para Otimização de Gas em Contratos Inteligentes Ethereum

( 2. Variáveis empacotadas

O número de armazenamento de slots ) usados em contratos inteligentes e a forma como os desenvolvedores representam os dados influenciarão significativamente o consumo de Gas.

O compilador Solidity agrupa variáveis de armazenamento contínuas durante o processo de compilação, usando um slot de armazenamento de 32 bytes como a unidade básica de armazenamento para variáveis. O empacotamento de variáveis refere-se à disposição adequada das variáveis, permitindo que várias variáveis se ajustem a 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 consome 20.000 Gas, mas agora são necessários apenas 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.

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

) 3. Otimizar tipos de dados

Uma variável pode ser representada por vários tipos de dados, mas os custos de operação correspondentes a diferentes tipos de dados também são diferentes. Escolher o tipo de dado adequado ajuda a otimizar o uso de 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.

Visto isoladamente, aqui o uso de uint256 é mais barato do que uint8. No entanto, se usarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, será diferente. Se o desenvolvedor conseguir empacotar quatro variáveis uint8 em um slot de armazenamento, o custo total de iterá-las será menor do que o de quatro variáveis uint256. Assim, o contrato inteligente pode ler e escrever em um slot de armazenamento uma única vez e colocar quatro variáveis uint8 na memória/armazenamento em uma única operação.

Ethereum contratos inteligentes Gas otimização das dez melhores práticas

( 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 um modo 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 comprimento mínimo de bytes1 a bytes32.

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

( 5. Mapeamentos e Arrays

As listas de dados do Solidity podem ser representadas por dois tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.

Mapas são geralmente mais eficientes e têm custos mais baixos na maioria dos casos, mas arrays têm a capacidade de serem iteráveis e suportam o empacotamento de tipos de dados. Portanto, recomenda-se priorizar o uso de mapas ao gerenciar listas de dados, a menos que seja necessário iterar ou que o consumo de Gas possa ser otimizado através do empacotamento de tipos de dados.

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

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

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

( 7. Utilize 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.

![Práticas recomendadas para otimização de Gas em contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(

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

Quando os desenvolvedores podem garantir que as operações aritméticas não causarão 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 não precisa mais da biblioteca SafeMath, pois o próprio compilador já possui proteção contra estouros e subfluxos.

![Oito Melhores Práticas de Otimização de Gas para Contratos Inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(

) 9. Otimizador de Modificações

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 os custos de Gas reestruturando a lógica em funções internas, permitindo que essa função interna seja reutilizada no modificador.

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

) 10. Otimização de curto-circuito

Para os operadores || e &&, a avaliação lógica ocorre por 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 custos de cálculo baixos devem ser colocadas primeiro, pois isso pode permitir pular cálculos dispendiosos.

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

Sugestões gerais adicionais

) 1. Remover código desnecessário

Se houver funções ou variáveis não utilizadas no contrato, é aconselhável removê-las. 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 de 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 defini-la como valor 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 oferecem 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, o gás necessário é menor. Usar contratos pré-compilados pode economizar gás ao reduzir a carga 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 em 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 em linha também pode trazer riscos e tolerância.

ETH3.31%
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
  • 4
  • Compartilhar
Comentário
0/400
DaoGovernanceOfficervip
· 19h atrás
*suspiro* mais um post sobre gás que ignora a pesquisa de escalabilidade l2...
Ver originalResponder0
ApeShotFirstvip
· 19h atrás
A taxa de gás é tão alta que estou falido
Ver originalResponder0
BottomMisservip
· 19h atrás
Otimização de Gas? Melhor esperar pela Bear Market.
Ver originalResponder0
Rekt_Recoveryvip
· 20h atrás
rip Taxa de gás... ainda a recuperar do ptsd de 2021 ngl
Ver originalResponder0
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)