Guia de otimização de Gas para contratos inteligentes Ethereum
As taxas de Gas na mainnet do Ethereum sempre foram um problema complicado, especialmente durante períodos de congestionamento da rede. Durante os picos, os usuários geralmente precisam pagar taxas de transação caras. Portanto, otimizar as taxas de Gas na fase de desenvolvimento de contratos inteligentes torna-se crucial. A otimização do consumo de Gas não apenas pode reduzir efetivamente os custos 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 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. Esperamos que este conteúdo possa inspirar e ajudar os desenvolvedores, ao mesmo tempo que ajuda os usuários comuns a compreender melhor como funcionam as 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 usada para medir a capacidade de computação necessária para executar operações específicas.
Na estrutura do EVM, o consumo de Gas é principalmente 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, uma certa taxa será cobrada 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 entrada em vigor do hard fork de Londres EIP-1559( ), a taxa de Gas é calculada pela seguinte fórmula:
Taxa de Gas = Unidade de Gas utilizada * ( 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. 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. Isto é semelhante a uma "gorjeta" que o usuário paga aos validadores.
Compreendendo 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 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 branco 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 de otimização de Gas
O conceito central da otimização de Gas é priorizar operações de custo eficiente 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, por exemplo, o array e a estrutura calldata
Chamada de função interna
Operações de custo mais elevado incluem:
Ler e escrever variáveis de estado armazenadas no armazenamento do contrato.
Chamada de função externa
Operação em loop
Melhores Práticas para Otimização dos Custos de Gas EVM
Com base nos conceitos básicos acima, organizamos uma lista de melhores práticas para otimização de taxas de Gas para a comunidade de desenvolvedores. Ao seguir essas práticas, os desenvolvedores podem reduzir o consumo de Gas dos contratos inteligentes, diminuir os custos de transação e criar aplicativos mais eficientes e amigáveis para os usuários.
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, incorrerá em 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 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 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.
( 2. Variáveis empacotadas
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 e utiliza slots de armazenamento de 32 bytes como a unidade básica para o armazenamento de 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 requer 20.000 Gas, mas agora só 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 reduzindo o número de slots de armazenamento necessários.
![Ethereum contratos inteligentes Gas otimização das dez 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 o custo das operações associadas a diferentes tipos de dados também varia. 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.
Isoladamente, usar uint256 aqui é mais barato do que uint8. No entanto, se usarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação muda. Se o desenvolvedor conseguir empacotar quatro variáveis uint8 em um slot de armazenamento, então o custo total de iterá-las será menor do que o de quatro variáveis uint256. Assim, o contrato inteligente poderá ler e gravar 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 dentro de 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, escolha, sempre que possível, o comprimento mínimo de bytes1 a bytes32.
![Gas otimização das dez melhores práticas de contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp###
( 5. Mapeamento e Arrays
A lista de dados em Solidity pode ser representada por dois tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Mapas são geralmente mais eficientes e menos custosos na maioria dos casos, mas arrays têm iterabilidade e suportam o empacotamento de tipos de dados. Portanto, é recomendado priorizar o uso de mapas ao gerenciar listas de dados, a menos que seja necessário iterar ou se possa otimizar o consumo de Gas através do empacotamento de tipos de dados.
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 alterada pela função, enquanto calldata é imutável.
Lembre-se deste princípio: se os parâmetros da função forem apenas de 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.
![Ethereum contratos inteligentes de otimização de Gas: as dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Usar Unchecked garantindo que não haja 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 na Solidity v0.8.0 para evitar verificações desnecessárias de overflow ou underflow, economizando assim custos de Gas.
Além disso, a partir da versão 0.8.0 e superiores, o compilador já não necessita do uso da biblioteca SafeMath, pois o próprio compilador já incorpora funções de proteção contra overflow e underflow.
![Gas otimização das dez melhores práticas de contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. otimizador de modificações
O código do modificador é inserido 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 reconstruir a lógica como uma função interna _checkOwner###(, permite-se reutilizar essa função interna nos modificadores, o que pode reduzir o tamanho do bytecode e diminuir os custos de Gas.
![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 operação lógica ocorre uma avaliação 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, as condições de baixo custo de cálculo 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, é recomendável removê-las. Esta é a forma mais direta de reduzir o custo 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 o resultado de certos cálculos for utilizado 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 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 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. Utilizar contratos 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 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 reduzir os custos de Gas e aumentar a eficiência da execução das aplicações.
( 3. Usar código de assembly inline
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, oferecendo mais flexibilidade na otimização do consumo de Gas.
No entanto, o uso de assembly em linha também pode trazer ventos
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.
7 Curtidas
Recompensa
7
3
Compartilhar
Comentário
0/400
Deconstructionist
· 12h atrás
Este custo de gás está demasiado caro, não aguento.
Ver originalResponder0
MissedTheBoat
· 12h atrás
Comer noodles economiza duas gotas de óleo, ainda economiza que gás.
Guia de otimização de Gas para contratos inteligentes Ethereum: Gota de Custo de transação e aumento de eficiência
Guia de otimização de Gas para contratos inteligentes Ethereum
As taxas de Gas na mainnet do Ethereum sempre foram um problema complicado, especialmente durante períodos de congestionamento da rede. Durante os picos, os usuários geralmente precisam pagar taxas de transação caras. Portanto, otimizar as taxas de Gas na fase de desenvolvimento de contratos inteligentes torna-se crucial. A otimização do consumo de Gas não apenas pode reduzir efetivamente os custos 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 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. Esperamos que este conteúdo possa inspirar e ajudar os desenvolvedores, ao mesmo tempo que ajuda os usuários comuns a compreender melhor como funcionam as 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 usada para medir a capacidade de computação necessária para executar operações específicas.
Na estrutura do EVM, o consumo de Gas é principalmente 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, uma certa taxa será cobrada 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 entrada em vigor do hard fork de Londres EIP-1559( ), a taxa de Gas é calculada pela seguinte fórmula:
Taxa de Gas = Unidade de Gas utilizada * ( 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. 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. Isto é semelhante a uma "gorjeta" que o usuário paga aos validadores.
Compreendendo 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 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 branco 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 de otimização de Gas
O conceito central da otimização de Gas é priorizar operações de custo eficiente na blockchain EVM, evitando operações com custos de Gas elevados.
No EVM, as seguintes operações têm um custo mais baixo:
Operações de custo mais elevado incluem:
Melhores Práticas para Otimização dos Custos de Gas EVM
Com base nos conceitos básicos acima, organizamos uma lista de melhores práticas para otimização de taxas de Gas para a comunidade de desenvolvedores. Ao seguir essas práticas, os desenvolvedores podem reduzir o consumo de Gas dos contratos inteligentes, diminuir os custos de transação e criar aplicativos mais eficientes e amigáveis para os usuários.
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, incorrerá em 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 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:
( 2. Variáveis empacotadas
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 e utiliza slots de armazenamento de 32 bytes como a unidade básica para o armazenamento de 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 requer 20.000 Gas, mas agora só 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 reduzindo o número de slots de armazenamento necessários.
![Ethereum contratos inteligentes Gas otimização das dez 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 o custo das operações associadas a diferentes tipos de dados também varia. 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.
Isoladamente, usar uint256 aqui é mais barato do que uint8. No entanto, se usarmos a otimização de empacotamento de variáveis que sugerimos anteriormente, a situação muda. Se o desenvolvedor conseguir empacotar quatro variáveis uint8 em um slot de armazenamento, então o custo total de iterá-las será menor do que o de quatro variáveis uint256. Assim, o contrato inteligente poderá ler e gravar 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 dentro de 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, escolha, sempre que possível, o comprimento mínimo de bytes1 a bytes32.
![Gas otimização das dez melhores práticas de contratos inteligentes Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp###
( 5. Mapeamento e Arrays
A lista de dados em Solidity pode ser representada por dois tipos de dados: Arrays) e Mappings###, mas sua sintaxe e estrutura são completamente diferentes.
Mapas são geralmente mais eficientes e menos custosos na maioria dos casos, mas arrays têm iterabilidade e suportam o empacotamento de tipos de dados. Portanto, é recomendado priorizar o uso de mapas ao gerenciar listas de dados, a menos que seja necessário iterar ou se possa otimizar o consumo de Gas através do empacotamento de tipos de dados.
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 alterada pela função, enquanto calldata é imutável.
Lembre-se deste princípio: se os parâmetros da função forem apenas de 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.
![Ethereum contratos inteligentes de otimização de Gas: as dez melhores práticas])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Usar Unchecked garantindo que não haja 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 na Solidity v0.8.0 para evitar verificações desnecessárias de overflow ou underflow, economizando assim custos de Gas.
Além disso, a partir da versão 0.8.0 e superiores, o compilador já não necessita do uso da biblioteca SafeMath, pois o próprio compilador já incorpora funções de proteção contra overflow e underflow.
![Gas otimização das dez melhores práticas de contratos inteligentes Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. otimizador de modificações
O código do modificador é inserido 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 reconstruir a lógica como uma função interna _checkOwner###(, permite-se reutilizar essa função interna nos modificadores, o que pode reduzir o tamanho do bytecode e diminuir os custos de Gas.
![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 operação lógica ocorre uma avaliação 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, as condições de baixo custo de cálculo 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, é recomendável removê-las. Esta é a forma mais direta de reduzir o custo 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 o resultado de certos cálculos for utilizado 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 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 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. Utilizar contratos 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 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 reduzir os custos de Gas e aumentar a eficiência da execução das aplicações.
( 3. Usar código de assembly inline
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, oferecendo mais flexibilidade na otimização do consumo de Gas.
No entanto, o uso de assembly em linha também pode trazer ventos