10 práticas principais para ajudar na otimização das taxas de Gas dos contratos inteligentes e Gota o custo de transação do Ethereum

Guia de otimização de Gas para contratos inteligentes: 10 práticas para ajudar a Gota o Custo de transação

O problema das taxas de Gas na mainnet do Ethereum tem recebido muita atenção, 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 o custo de transação, mas também aumentar 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 da Máquina Virtual Ethereum (EVM), os conceitos centrais relacionados à otimização das taxas de Gas, bem como as melhores práticas para otimizar as 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 do EVM, enfrentando juntos os desafios do ecossistema blockchain.

Gas otimização dos contratos inteligentes do Ethereum - 10 melhores práticas

Introdução ao mecanismo de Gas da 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 EVM, o consumo de Gas é principalmente dividido em três partes: execução de operações, chamadas de mensagens externas e leitura e gravação de memória e armazenamento.

A execução de cada transação requer recursos de computação, portanto será cobrada uma certa taxa para evitar loops infinitos e ataques de negação de serviço (DoS). O custo necessário para completar uma transação é conhecido como "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 básica 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 aos validadores.

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

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 código de operação (, como a criação de contratos, a realização de chamadas de mensagens, o acesso ao armazenamento da conta 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, o custo de Gas de alguns códigos de operação foi ajustado, podendo diferir do que está no livro amarelo.

Conceitos básicos da otimização de gás

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 o array e a estrutura de calldata
  • Chamada de função interna

Operações com custos 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 Custos de Gas EVM

Com base nos conceitos básicos acima, organizamos uma lista de melhores práticas de otimização de Gas para a comunidade de desenvolvedores. Ao seguir estas práticas, os desenvolvedores podem Gota o consumo de Gas dos contratos inteligentes, Gota o Custo de transação e criar aplicações mais eficientes e amigáveis para o usuário.

1. Tente reduzir ao máximo o uso de armazenamento

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

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

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

2. Variáveis empacotadas

A quantidade de slots de armazenamento ( usados em contratos inteligentes e a maneira como os desenvolvedores representam os dados terão um grande impacto no consumo de Gas.

O compilador Solidity empacota variáveis de armazenamento consecutivas durante o processo de compilação, utilizando slots 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.

Através deste 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 são necessários 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.

![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 o custo de operação correspondente a diferentes tipos de dados também é diferente. Escolher o tipo de dado adequado ajuda a otimizar o uso do 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, usar uint256 é mais caro 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 slot de armazenamento, então o custo total para 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 vez, e inserir quatro variáveis uint8 na memória/armazenamento em uma única operação.

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

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

Se os dados puderem ser controlados em 32 bytes, é recomendável usar o tipo de dado 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, escolha o menor comprimento possível de bytes1 a bytes32.

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

) 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 mapeação é, na maioria dos casos, mais eficiente e menos custosa, mas os arrays têm iterabilidade e suportam a embalagem de tipos de dados. Portanto, é aconselhável priorizar o uso de mapeações ao gerenciar listas de dados, a menos que seja necessário iterar ou que a embalagem de tipos de dados possa otimizar o consumo de Gas.

![As 10 melhores práticas de otimização de Gas para contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.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 preferir 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.

Gas otimização dos contratos inteligentes Ethereum Top 10 Melhores Práticas

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, recomendando-se o uso das palavras-chave Constant ou Immutable sempre que possível.

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

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 estouro ou subfluxo, podem usar a palavra-chave unchecked, introduzida no Solidity v0.8.0, para evitar verificações desnecessárias de estouro ou subfluxo, economizando assim Custo de transação.

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 proteção contra estouros e subfluxos.

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

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 Gás.

Ao reconstruir a lógica como a função interna _checkOwner(), permite-se reutilizar essa função interna dentro do modificador, o que pode reduzir o tamanho do bytecode e o Custo de transação.

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

) 10. Otimização de curto-circuito

Para os operadores || e &&, a avaliação lógica ocorre com avaliação de curtos-circuitos, ou seja, se a primeira condição já pode 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 custo de cálculo baixo devem ser colocadas primeiro, assim é possível evitar cálculos caros.

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

Sugestões gerais adicionais

1. Remover código inútil

Se existirem funções ou variáveis não utilizadas no contrato, recomenda-se que sejam eliminadas. Esta é a forma mais direta de reduzir o Gota de implantação do contrato e manter o tamanho do contrato pequeno.

Aqui estão algumas sugestões úteis:

  • Utilize os algoritmos mais eficientes para calcular. Se os resultados de determinados 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 excluídos.

  • No Ethereum, os desenvolvedores podem obter 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 a remover 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. Utilizar 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 executado localmente nos nós do cliente, é necessário menos Gas. O uso de contratos pré-compilados pode economizar Gas 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 em contratos inteligentes, os desenvolvedores podem Gota o Custo de transação e aumentar a eficiência de execução das aplicações.

3. Utilizando código de montagem em linha

A montagem em linha ( in-line assembly ) permite que os desenvolvedores escrevam código de baixo nível, mas eficiente, que pode ser executado diretamente pelo EVM, sem a necessidade de usar os caros códigos de operação do Solidity. A montagem em linha também permite um controle mais preciso sobre o uso de memória e armazenamento, reduzindo ainda mais o Custo de transação. Além disso, a montagem em linha pode executar algumas operações que são difíceis de implementar apenas com Solidity.

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
SilentObservervip
· 12h atrás
gás tão caro que estou chorando de pobreza 555
Ver originalResponder0
ConfusedWhalevip
· 12h atrás
De dia já é assim, como vamos brincar à noite?
Ver originalResponder0
NightAirdroppervip
· 12h atrás
eth é que faz as pessoas de parvas para subir gás.
Ver originalResponder0
SybilSlayervip
· 12h atrás
gás queima dinheiro Quem aguenta?
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)