Abordando os Gastos de Gas em Contratos Inteligentes do Ethereum
Um estudo sobre como reduzir as taxas de gás no Ethereum através da otimização de contratos inteligentes.
― 7 min ler
Índice
- Importância da Eficiência do Gás
- O que são Desperdícios de Gás?
- Desafios na Detecção de Desperdícios de Gás
- Nossa Abordagem
- Estudo Empírico de Desperdícios de Gás
- Principais Descobertas
- Desenvolvimento da Ferramenta: PeCatch
- Recursos do PeCatch
- Avaliação do PeCatch
- Resultados
- Economia de Gás
- Conclusão
- Trabalho Futuro
- Resumo
- Fonte original
Os Contratos Inteligentes rodam na Ethereum, um sistema de blockchain público. Quando esses contratos são executados, eles geram taxas de gás pelo uso dos recursos da rede. Programadores que escrevem contratos em Solidity muitas vezes incluem código que aumenta as taxas de gás desnecessariamente sem querer. Essas partes ineficientes do código, conhecidas como desperdícios de gás, podem causar custos significativos para os usuários. Apesar da importância desse assunto, não foi feito muito para estudar esses desperdícios de gás ou criar ferramentas para encontrá-los.
Este artigo tem como objetivo ajudar os usuários da Ethereum a economizar nas taxas de gás por meio de duas atividades principais: primeiro, exploramos as causas comuns dos desperdícios de gás em contratos populares de Solidity e propomos estratégias para corrigi-los. Depois, desenvolvemos uma ferramenta chamada PeCatch que ajuda a detectar esses desperdícios de gás e sugere correções simples.
Importância da Eficiência do Gás
As taxas de gás são essenciais para operar contratos inteligentes na Ethereum. Cada operação em um contrato inteligente requer gás, e as taxas totais podem aumentar rapidamente, custando milhões aos usuários diariamente. Portanto, é crucial escrever código que minimize o uso de gás. Entender onde surgem as ineficiências de gás é o primeiro passo para lidar com esse problema. As descobertas do nosso estudo podem ajudar futuras ferramentas de programação e melhorias na linguagem para reduzir desperdícios de gás.
O que são Desperdícios de Gás?
Desperdícios de gás se referem a segmentos de código em um programa Solidity que usam mais gás do que o necessário. Diferente de bugs de desempenho tradicionais que afetam a correção ou a velocidade de um programa, desperdícios de gás não influenciam a saída final, mas geram custos extras. Identificar e corrigir esses desperdícios pode levar a economias significativas para os usuários.
Desafios na Detecção de Desperdícios de Gás
Detectar desperdícios de gás é uma tarefa complicada por várias razões:
Custos de Gás Complexos: Cada operação em Solidity tem diferentes custos de gás. Entender como cada uma afeta o custo total pode ser complicado.
Características Únicas da Linguagem: Solidity tem características específicas que a tornam diferente de outras linguagens de programação, o que pode levar a ineficiências de gás que não estão presentes em outros lugares.
Ferramentas Limitadas: As técnicas atuais de detecção muitas vezes ignoram as complexidades do Solidity, levando a oportunidades perdidas de otimização.
Nossa Abordagem
Para lidar com desperdícios de gás em contratos inteligentes Solidity, seguimos um processo em duas etapas:
Estudo Empírico: Investigamos aplicações populares de Solidity para identificar desperdícios de gás comuns e suas causas raiz.
Desenvolvimento de Ferramenta: Com base em nossas descobertas, criamos o PeCatch, uma ferramenta de análise estática que detecta desperdícios de gás e sugere correções.
Estudo Empírico de Desperdícios de Gás
Nosso estudo envolveu cinco aplicações Solidity amplamente utilizadas. Examinamos manualmente seu código para identificar desperdícios de gás. Nossas descobertas incluem:
Categorias de Desperdícios de Gás: Categoriza os desperdícios de gás com base nas áreas do contrato onde as ineficiências ocorreram. Isso inclui stack, memória, armazenamento e calldata.
Causas Comuns: Programadores muitas vezes cometem erros que levam a desperdícios de gás, como entender mal as características de manipulação de dados do Solidity.
Principais Descobertas
A partir da nossa análise de desperdícios de gás, derivamos várias percepções:
Uso Indevido da Stack: Muitos desperdícios de gás surgem de como os programadores utilizam a stack, que é mais barata de acessar do que outros tipos de armazenamento.
Ignorando Características da Linguagem: Programadores frequentemente ignoram características únicas que poderiam ajudar a reduzir o uso de gás, como a palavra-chave
unchecked
, que pode evitar checagens que consomem gás.Acesso Repetitivo: Acessar os mesmos dados várias vezes sem armazená-los pode levar a custos desnecessários de gás.
No geral, descobrimos 100 instâncias específicas de desperdícios de gás em nossas aplicações selecionadas, muitas das quais podem ser corrigidas facilmente.
Desenvolvimento da Ferramenta: PeCatch
Desenvolvemos o PeCatch como uma solução para detectar desperdícios de gás em programas Solidity. A ferramenta funciona analisando o código Solidity e identificando padrões que são conhecidos por levar a ineficiências.
Recursos do PeCatch
Análise Estática: O PeCatch inspeciona o código do contrato inteligente sem executá-lo, identificando potenciais desperdícios de gás.
Verificadores Específicos: A ferramenta inclui diferentes verificadores, cada um focado em um tipo particular de desperdício de gás.
Relatórios Detalhados: O PeCatch fornece feedback detalhado sobre os problemas identificados, incluindo correções sugeridas que os programadores podem implementar diretamente em seu código.
Avaliação do PeCatch
Testamos o PeCatch tanto nas aplicações estudadas na nossa análise empírica quanto em projetos de código aberto adicionais. Nossa avaliação teve como objetivo avaliar a eficácia, precisão e eficiência da ferramenta.
Resultados
O PeCatch identificou com sucesso 383 desperdícios de gás nas aplicações, significativamente mais do que as ferramentas de detecção existentes. A ferramenta também mostrou uma baixa taxa de falsos positivos, confirmando sua confiabilidade.
Economia de Gás
Ao implementar as sugestões fornecidas pelo PeCatch, os usuários podem economizar quantias significativas em taxas de gás. Nossa análise indica que corrigir os desperdícios de gás identificados pode levar a custos reduzidos para os usuários em aplicações do mundo real.
Conclusão
Nosso estudo lança luz sobre a questão das ineficiências de gás em contratos inteligentes Solidity e apresenta o PeCatch como uma solução prática para detectar e corrigir esses problemas. As percepções obtidas a partir da análise de desperdícios de gás podem ajudar a melhorar a linguagem Solidity e inspirar o desenvolvimento de ferramentas de programação mais eficientes. O trabalho futuro se concentrará em expandir as capacidades do PeCatch para cobrir mais tipos de desperdícios de gás e refinar seus algoritmos de detecção.
Trabalho Futuro
Planejamos aprimorar a ferramenta PeCatch:
Expandindo Capacidades de Detecção: Podemos incluir métodos de detecção mais sofisticados para capturar uma gama mais ampla de desperdícios de gás.
Automatizando Correções: Versões futuras do PeCatch poderão sugerir correções automáticas para desperdícios de gás identificados.
Verificação Formal: Pretendemos explorar métodos formais para garantir que as correções preservem o comportamento pretendido dos contratos inteligentes enquanto reduzem o consumo de gás.
Resumo
À medida que a Ethereum continua a crescer, a pressão sobre os desenvolvedores para escrever contratos inteligentes eficientes se torna mais evidente. Entender e abordar desperdícios de gás é crucial para a viabilidade a longo prazo do ecossistema Ethereum. Por meio de nossa pesquisa e do desenvolvimento do PeCatch, esperamos contribuir para um futuro onde práticas de codificação eficientes em gás sejam o padrão entre os programadores Solidity.
Título: How to Save My Gas Fees: Understanding and Detecting Real-world Gas Issues in Solidity Programs
Resumo: The execution of smart contracts on Ethereum, a public blockchain system, incurs a fee called gas fee for its computation and data-store consumption. When programmers develop smart contracts (e.g., in the Solidity programming language), they could unknowingly write code snippets that unnecessarily cause more gas fees. These issues, or what we call gas wastes, could lead to significant monetary waste for users. Yet, there have been no systematic examination of them or effective tools for detecting them. This paper takes the initiative in helping Ethereum users reduce their gas fees in two important steps: we conduct the first empirical study on gas wastes in popular smart contracts written in Solidity by understanding their root causes and fixing strategies; we then develop a static tool, PeCatch, to effectively detect gas wastes with simple fixes in Solidity programs based on our study findings. Overall, we make seven insights and four suggestions from our gas-waste study, which could foster future tool development, language improvement, and programmer awareness, and develop eight gas-waste checkers, which pinpoint 383 previously unknown gas wastes from famous Solidity libraries.
Autores: Mengting He, Shihao Xia, Boqin Qin, Nobuko Yoshida, Tingting Yu, Linhai Song, Yiying Zhang
Última atualização: 2024-03-05 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2403.02661
Fonte PDF: https://arxiv.org/pdf/2403.02661
Licença: https://creativecommons.org/licenses/by-nc-sa/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.