Melhores Práticas de Otimização de Gas para Contratos Inteligentes Ethereum
As taxas de Gas da mainnet Ethereum têm sido um problema complicado, especialmente quando a rede está congestionada. Durante os períodos de pico, os usuários precisam pagar altas taxas de transação. Portanto, é crucial otimizar as taxas de Gas na 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 melhorar a eficiência das transações, proporcionando aos usuários uma experiência de blockchain mais econômica e eficiente.
Este artigo irá resumir o mecanismo de taxas de Gas do Ethereum Virtual Machine (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. Espera-se que este conteúdo possa fornecer inspiração e ajuda prática aos desenvolvedores, ao mesmo tempo que permite aos usuários comuns 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 utilizada 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/escrita de memória e armazenamento.
Devido ao fato de que a execução de cada transação requer recursos de computação, 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 hard fork de Londres EIP-1559( entrou em vigor ), 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 a transação ser incluída no próximo bloco. Isso é semelhante a uma "gorjeta" que o usuário paga 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, chamadas de mensagens, acesso ao armazenamento de contas e 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 modificações no EIP, o custo de Gas de algumas operações foi ajustado, podendo divergir 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 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 custos mais baixos:
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
As operações de custo mais elevado incluem:
Ler e escrever variáveis de estado armazenadas no armazenamento do contrato
Chamada de funções externas
Operação em loop
Melhores Práticas para Otimização de Custos de Gas EVM
Com base nos conceitos fundamentais acima, organizamos uma lista de melhores práticas para a otimização das taxas de Gas para a comunidade de desenvolvedores. Ao seguir essas 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 o 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 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, 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.
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.
( 2. Empacotamento de variáveis
A quantidade de slots de armazenamento ) usados em contratos inteligentes e a forma como os desenvolvedores representam os dados afetarão significativamente o consumo de Gas.
O compilador Solidity agrupa variáveis de armazenamento contínuas durante o processo de compilação e utiliza um slot de armazenamento de 32 bytes como unidade básica de armazenamento das variáveis. O empacotamento de variáveis refere-se à disposição adequada das variáveis, permitindo que múltiplas variáveis se ajustem a um único slot de armazenamento.
Através deste ajuste de detalhes, 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.
![Oito 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 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 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 consumirá Gas adicional.
Isoladamente, usar uint256 é mais barato do que uint8. No entanto, se usarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação é diferente. Se o desenvolvedor puder empacotar quatro variáveis uint8 em um único 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.
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 dos bytes puder ser limitado, tente escolher o menor comprimento possível, de bytes1 a bytes32.
( 5. Mapeamento e arrays
As listas de dados do Solidity podem ser representadas por duas tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Na maioria dos casos, os mapeamentos são mais eficientes e têm custos mais baixos, mas os arrays têm iterabilidade e suportam empacotamento de tipos de dados. Portanto, recomenda-se usar 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.
![Práticas recomendadas para otimização de Gas em 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 usar preferencialmente 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 na memória do contrato. Essas variáveis são calculadas em tempo de compilação e armazenadas no bytecode do contrato. Portanto, em comparação com a memória, o custo de acesso a elas é muito menor, sendo recomendado usar as palavras-chave Constant ou Immutable sempre que possível.
![Ethereum contratos inteligentes Gas otimização das dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Usar Unchecked ao garantir que não haja overflow/underflow
Quando os desenvolvedores podem ter certeza de que as operações aritméticas não resultarão em overflow ou underflow, podem usar a palavra-chave unchecked, introduzida na Solidity v0.8.0, para evitar verificações desnecessárias 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, uma vez que o próprio compilador já possui proteção contra estouro e subfluxo embutida.
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.
Ao reestruturar a lógica como uma função interna _checkOwner###(, permite-se a reutilização dessa função interna nos modificadores, o que pode reduzir o tamanho do bytecode e diminuir os custos de Gas.
![Ethereum contratos inteligentes de Gas otimização dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###
10. otimização de curto-circuito
Para || e && operadores, 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 de baixo custo de computação devem ser colocadas na frente, assim é possível pular cálculos de alto custo.
Sugestõ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 sugestões úteis:
Utilize os algoritmos mais eficientes para realizar cálculos. Se os resultados de determinados 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 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 ciclos: evitar operações de ciclo de alto custo, combinar ciclos sempre que possível e mover cálculos repetidos para fora do corpo do ciclo.
![Ethereum contratos inteligentes de otimização de Gas: as 10 melhores práticas])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
( 2. Usar contratos 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 no nó 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 curva elíptica )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.
( 3. Usar código de montagem em linha
Assembly em linha ) 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 em linha 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 em linha pode executar algumas operações complexas que são difíceis de realizar apenas com Solidity, fornecendo mais flexibilidade para otimizar o consumo de Gas.
No entanto, o uso de assembly em linha também pode trazer riscos e ser propenso a erros. Portanto, deve ser usado com cautela, limitado a desenvolvedores experientes.
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.
12 gostos
Recompensa
12
6
Republicar
Partilhar
Comentar
0/400
MEVictim
· 8h atrás
Novamente a água com essas teorias inúteis, em vez disso, ensine-me diretamente a fazer arbitragem.
Ver originalResponder0
UnluckyValidator
· 11h atrás
Esta taxa de gás realmente está a dar trabalho, após a criação do bloco não consegui ganhar nada.
Ver originalResponder0
GasFeeCryer
· 11h atrás
como é que as taxas de gás estão a subir, ai ai
Ver originalResponder0
AlwaysAnon
· 11h atrás
Socorro, quando é que o gás vai descer?
Ver originalResponder0
0xSoulless
· 11h atrás
O alho-poró foi feito as pessoas de parvas pelo gás, ainda está a fazer estas coisas vazias.
Ver originalResponder0
SleepyValidator
· 11h atrás
As taxas de gás estão tão altas que não consigo pagar comida.
Detalhes sobre a otimização de Gas em contratos inteligentes Ethereum: 10 dicas úteis
Melhores Práticas de Otimização de Gas para Contratos Inteligentes Ethereum
As taxas de Gas da mainnet Ethereum têm sido um problema complicado, especialmente quando a rede está congestionada. Durante os períodos de pico, os usuários precisam pagar altas taxas de transação. Portanto, é crucial otimizar as taxas de Gas na 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 melhorar a eficiência das transações, proporcionando aos usuários uma experiência de blockchain mais econômica e eficiente.
Este artigo irá resumir o mecanismo de taxas de Gas do Ethereum Virtual Machine (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. Espera-se que este conteúdo possa fornecer inspiração e ajuda prática aos desenvolvedores, ao mesmo tempo que permite aos usuários comuns 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 utilizada 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/escrita de memória e armazenamento.
Devido ao fato de que a execução de cada transação requer recursos de computação, 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 hard fork de Londres EIP-1559( entrou em vigor ), 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 a transação ser incluída no próximo bloco. Isso é semelhante a uma "gorjeta" que o usuário paga 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, chamadas de mensagens, acesso ao armazenamento de contas e 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 modificações no EIP, o custo de Gas de algumas operações foi ajustado, podendo divergir 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 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 custos mais baixos:
As operações de custo mais elevado incluem:
Melhores Práticas para Otimização de Custos de Gas EVM
Com base nos conceitos fundamentais acima, organizamos uma lista de melhores práticas para a otimização das taxas de Gas para a comunidade de desenvolvedores. Ao seguir essas 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 o 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 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, 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.
Métodos para limitar o uso de armazenamento incluem:
( 2. Empacotamento de variáveis
A quantidade de slots de armazenamento ) usados em contratos inteligentes e a forma como os desenvolvedores representam os dados afetarão significativamente o consumo de Gas.
O compilador Solidity agrupa variáveis de armazenamento contínuas durante o processo de compilação e utiliza um slot de armazenamento de 32 bytes como unidade básica de armazenamento das variáveis. O empacotamento de variáveis refere-se à disposição adequada das variáveis, permitindo que múltiplas variáveis se ajustem a um único slot de armazenamento.
Através deste ajuste de detalhes, 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.
![Oito 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 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 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 consumirá Gas adicional.
Isoladamente, usar uint256 é mais barato do que uint8. No entanto, se usarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação é diferente. Se o desenvolvedor puder empacotar quatro variáveis uint8 em um único 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.
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 dos bytes puder ser limitado, tente escolher o menor comprimento possível, de bytes1 a bytes32.
( 5. Mapeamento e arrays
As listas de dados do Solidity podem ser representadas por duas tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Na maioria dos casos, os mapeamentos são mais eficientes e têm custos mais baixos, mas os arrays têm iterabilidade e suportam empacotamento de tipos de dados. Portanto, recomenda-se usar 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.
![Práticas recomendadas para otimização de Gas em 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 usar preferencialmente 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 na memória do contrato. Essas variáveis são calculadas em tempo de compilação e armazenadas no bytecode do contrato. Portanto, em comparação com a memória, o custo de acesso a elas é muito menor, sendo recomendado usar as palavras-chave Constant ou Immutable sempre que possível.
![Ethereum contratos inteligentes Gas otimização das dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Usar Unchecked ao garantir que não haja overflow/underflow
Quando os desenvolvedores podem ter certeza de que as operações aritméticas não resultarão em overflow ou underflow, podem usar a palavra-chave unchecked, introduzida na Solidity v0.8.0, para evitar verificações desnecessárias 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, uma vez que o próprio compilador já possui proteção contra estouro e subfluxo embutida.
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.
Ao reestruturar a lógica como uma função interna _checkOwner###(, permite-se a reutilização dessa função interna nos modificadores, o que pode reduzir o tamanho do bytecode e diminuir os custos de Gas.
![Ethereum contratos inteligentes de Gas otimização dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###
10. otimização de curto-circuito
Para || e && operadores, 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 de baixo custo de computação devem ser colocadas na frente, assim é possível pular cálculos de alto custo.
Sugestõ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 sugestões úteis:
Utilize os algoritmos mais eficientes para realizar cálculos. Se os resultados de determinados 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 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 ciclos: evitar operações de ciclo de alto custo, combinar ciclos sempre que possível e mover cálculos repetidos para fora do corpo do ciclo.
![Ethereum contratos inteligentes de otimização de Gas: as 10 melhores práticas])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
( 2. Usar contratos 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 no nó 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 curva elíptica )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.
( 3. Usar código de montagem em linha
Assembly em linha ) 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 em linha 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 em linha pode executar algumas operações complexas que são difíceis de realizar apenas com Solidity, fornecendo mais flexibilidade para otimizar o consumo de Gas.
No entanto, o uso de assembly em linha também pode trazer riscos e ser propenso a erros. Portanto, deve ser usado com cautela, limitado a desenvolvedores experientes.
4.