SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
21.11.2024

Aula 095: Depurando Contratos no Remix

Depurar contratos inteligentes é uma habilidade crucial para qualquer desenvolvedor de Solidity. Nesta aula, vamos explorar como depurar efetivamente contratos inteligentes na Ethereum usando o Remix IDE. O Remix fornece ferramentas poderosas que podem ajudar a identificar problemas no seu código e melhorar a qualidade geral dos seus contratos inteligentes.

Começando com o Remix

O Remix é um IDE baseado em navegador que permite escrever, compilar e testar contratos Solidity. Para começar, abra o Remix acessando remix.ethereum.org. Você notará que a interface está dividida em vários painéis, incluindo um editor de código, terminal e explorador de arquivos.

Escrevendo um Contrato Inteligente de Exemplo

Vamos começar escrevendo um contrato inteligente simples que iremos depurar posteriormente. Aqui está um exemplo de um contrato que rastreia o saldo de usuários.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract BancoSimples {
    mapping(address => uint) private saldos;

    function depositar() public payable {
        require(msg.value > 0, "O depósito deve ser maior que 0");
        saldos[msg.sender] += msg.value;
    }

    function sacar(uint valor) public {
        require(saldos[msg.sender] >= valor, "Saldo insuficiente");
        saldos[msg.sender] -= valor;
        payable(msg.sender).transfer(valor);
    }

    function consultarSaldo() public view returns (uint) {
        return saldos[msg.sender];
    }
}

Este contrato permite que os usuários depositem e sacam Ether, além de consultar seu saldo.

Erros Comuns em Solidity

Antes de mergulharmos na depuração, vamos apresentar alguns erros comuns que talvez queiramos rastrear. Para demonstração, vamos introduzir dois erros:

  1. Esquecer de incluir o modificador payable na função sacar.
  2. Uma verificação de saldo incorreta na função sacar que leva a um comportamento indesejado.

Passo 1: Simulando um Erro

Vamos introduzir intencionalmente um erro na função sacar:

function sacar(uint valor) public {
    require(saldos[msg.sender] >= valor, "Saldo insuficiente");
    // Palavra-chave payable faltando
    saldos[msg.sender] -= valor;
    // Erro: Verificação de saldo incorreta
    require(saldos[msg.sender] >= 0, "Erro de saldo negativo");
    payable(msg.sender).transfer(valor);
}

Passo 2: Compilando e Implantando

Para testar nosso contrato, primeiro compile-o clicando na aba "Compilador Solidity" no painel à esquerda. Após a compilação bem-sucedida, mude para a aba "Implantar e Executar Transações". Implemente o contrato em uma VM JavaScript para teste local.

Passo 3: Depurando com o Remix

  1. Usando o Depurador: Após implantar seu contrato, interaja com ele por meio da interface. Se você chamar a função sacar com um valor maior que seu saldo, encontrará um erro. Clique no ícone "Depurador" na barra lateral esquerda quando um erro ocorrer. Isso abrirá o ambiente de depuração.

  2. Passo a Passo pelo Código: O depurador permite que você avance pela execução do contrato. Use os comandos de passo a passo para navegar por cada linha da função sacar. Isso ajuda a identificar a falha nas cálculos de saldo e as consequências da verificação de saldo incorreta.

  3. Visualizar a Pilha de Chamadas: A pilha de chamadas mostra a série de chamadas de função que levaram ao erro. Pode ser bastante útil ver qual função foi chamada antes que a falha ocorresse.

Corrigindo os Erros

Agora, vamos corrigir nossos erros.

Função sacar Atualizada

function sacar(uint valor) public {
    require(saldos[msg.sender] >= valor, "Saldo insuficiente");
    saldos[msg.sender] -= valor;

    // Certifique-se de não permitir saldo negativo
    require(saldos[msg.sender] >= 0, "Erro de saldo negativo");

    // Torne a função payable
    payable(msg.sender).transfer(valor);
}
  1. Certifique-se que a função sacar tem a palavra-chave payable.
  2. A segunda verificação require que assegura que os saldos não devem ser negativos pode ser removida, pois a primeira verificação já garante que o usuário só pode sacar se tiver fundos suficientes.

Passo 4: Testando Novamente

Após fazer as correções necessárias, recompile e reimplante o contrato. Teste a função sacar novamente para garantir que os erros foram resolvidos.

Conclusão

A depuração é uma parte essencial do desenvolvimento de contratos inteligentes. O Remix fornece um ambiente abrangente para testar e depurar seus contratos Solidity. Familiarizar-se com suas funcionalidades de depuração permitirá que você escreva contratos inteligentes mais robustos e livres de erros.

Nesta aula, escrevemos um contrato inteligente simples, introduzimos e descobrimos erros, e aprendemos como corrigi-los usando as ferramentas de depuração do Remix. Continue praticando e boas codificações!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!