DEV Community

Cover image for Foundry tutorial para inciantes
Valter Lobo
Valter Lobo

Posted on • Edited on

Foundry tutorial para inciantes

O Foundry é uma ferramenta poderosa para desenvolvedores Solidity, que agiliza o ciclo de desenvolvimento de contratos inteligentes, desde a concepção até a implantação em redes EVM.

Neste tutorial, você aprenderá a instalar o Foundry no Windows e criar seu primeiro projeto, iniciando no desenvolvimento de contratos inteligentes.

O que é o Foundry?

O Foundry é uma ferramenta de desenvolvimento de contratos inteligentes em Solidity, projetada para oferecer uma experiência de desenvolvimento mais eficiente e robusta. Ele fornece um conjunto completo de ferramentas, incluindo compilação, testes, depuração e implantação, tudo integrado em um único ambiente.

Por que usar o Foundry?

  • Velocidade: Compilação rápida e eficiente.
  • Facilidade de uso: Interface de linha de comando intuitiva e estrutura de projetos clara.
  • Testes: Framework de testes integrado para garantir a qualidade do código.
  • Extensibilidade: Personalize o Foundry com plugins e scripts personalizados.
  • Comunidade: Uma comunidade ativa e em constante crescimento.

Algumas das principais características do Foundry:

  • Gerenciamento de dependências: O Foundry permite gerenciar facilmente as dependências do seu projeto, incluindo contratos de outras bibliotecas.
  • Compilação: O Foundry compila seus contratos Solidity de forma rápida e eficiente, gerando bytecode otimizado.
  • Testes: O Foundry inclui um framework de teste integrado que permite escrever e executar testes unitários para seus contratos.
  • Implantação: O Foundry facilita a implantação de seus contratos em redes de teste ou redes principais.
  • Interação com a cadeia de blocos: O Foundry permite interagir com a cadeia de blocos diretamente do terminal, facilitando o desenvolvimento e o debug.

Podemos personalizar e extender o Foundry, permitindo que você adapte a ferramenta às suas necessidades específicas.

Instalando o Foundry no Windows

Passo a passo na instalação do Foundry, ferramenta para desenvolvimento de contratos inteligentes
em Solidity, no seu sistema Windows.
Utilizaremos o Windows Subsystem for Linux (WSL)
para criar um ambiente de desenvolvimento similar ao Linux,
ideal para o desenvolvimento de contratos inteligentes.

Pré-requisitos:

  • Um computador com Windows 10 ou superior.
  • Uma conexão com a internet.

Passo 1: Instale o WSL (Windows Subsystem for Linux)

  1. Abra o Terminal do Windows: Pressione as teclas Windows + R, digite "cmd" e pressione Enter.

  2. Instale o Debian: Execute o seguinte comando no terminal:

   wsl --install Debian
Enter fullscreen mode Exit fullscreen mode
  1. Configure o usuário: Durante a inicialização, você será solicitado a criar um nome de usuário e senha para o seu ambiente Linux.

Passo 2: Configure o Visual Studio Code para trabalhar com o WSL

  1. Instale as extensões: Abra o Visual Studio Code e procure pelas extensões "Remote - WSL" e instale-as.
  2. Conecte-se ao WSL: Clique no ícone do Remote Explorer na barra lateral esquerda e selecione o seu ambiente Linux (Debian).
  3. Crie um novo diretório: No terminal do VS Code, execute os seguintes comandos para criar um novo diretório para o seu projeto Foundry:
   mkdir foundry-project
   cd foundry-project
Enter fullscreen mode Exit fullscreen mode

Passo 3: Instale o Git

  1. Verifique se o Git está instalado: Execute o comando git --version no terminal. Se o Git não estiver instalado, execute:
   sudo apt-get install git
Enter fullscreen mode Exit fullscreen mode
  1. Configure o Git:
   git config --global user.email "seu_email@example.com"
   git config --global user.name "Seu Nome"
Enter fullscreen mode Exit fullscreen mode

Passo 4: Instale o Foundry

  1. Instale o curl:
   sudo apt-get install curl
Enter fullscreen mode Exit fullscreen mode
  1. Instale o Foundry:
   curl -L https://foundry.paradigm.xyz | bash
Enter fullscreen mode Exit fullscreen mode
  1. Adicione o Foundry ao PATH:
   source ~/.bashrc  # ou ~/.zshrc dependendo do shell
Enter fullscreen mode Exit fullscreen mode
  1. Atualize o Foundry:
   foundryup
Enter fullscreen mode Exit fullscreen mode
  1. Verifique a versão:
   forge --version
Enter fullscreen mode Exit fullscreen mode

Passo 5: Crie seu primeiro projeto Foundry

  1. Inicialize um novo projeto:
   forge init meu-projeto
Enter fullscreen mode Exit fullscreen mode
  1. Abra o projeto no VS Code:
   cd meu-projeto
   code .
Enter fullscreen mode Exit fullscreen mode

Começando a Desenvolver

Agora você tem o Foundry instalado e configurado para começar a desenvolver seus contratos inteligentes em Solidity. Explore a documentação oficial do Foundry para aprender mais sobre seus recursos e funcionalidades.

Pré-requisitos

  1. Conhecimento básico de programação e Solidity.
  2. Instalação do Foundry e suas dependências:
  3. Uma carteira Ethereum, para obter a chaves (como MetaMask).

Passo 1: Configurar um novo projeto

  1. Crie um novo projeto com o Foundry:
   forge init my-smart-contract
Enter fullscreen mode Exit fullscreen mode

Isso criará uma estrutura de pastas como esta:

   my-smart-contract/
   ├── lib/
   ├── src/
   │   └── Counter.sol
   ├── script/
   │   └── Deploy.s.sol
   ├── test/
   │   └── Counter.t.sol
   └── foundry.toml
Enter fullscreen mode Exit fullscreen mode
  1. Entre no diretório do projeto:
   cd my-smart-contract
Enter fullscreen mode Exit fullscreen mode
  1. Instale dependências adicionais, se necessário (como OpenZeppelin):
   forge install OpenZeppelin/openzeppelin-contracts
Enter fullscreen mode Exit fullscreen mode

Passo 2: Escrever um Smart Contract

  1. Criar um novo arquivo src/SimpleStorage.sol, programar um novo contrato. Por exemplo, um contrato simples de armazenamento:
   // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.0;

   contract SimpleStorage {
       uint256 private storedData;

       event DataStored(uint256 data);

       function set(uint256 x) public {
           storedData = x;
           emit DataStored(x);
       }

       function get() public view returns (uint256) {
           return storedData;
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Salve o arquivo.

Passo 4: Testar o contrato com Foundry

  1. Crie um arquivo de teste no diretório test/, por exemplo, SimpleStorage.t.sol:
   // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.0;

   import "forge-std/Test.sol";
   import "../src/SimpleStorage.sol";

   contract SimpleStorageTest is Test {
       SimpleStorage simpleStorage;

       function setUp() public {
           simpleStorage = new SimpleStorage();
       }

       function testSetAndGet() public {
           simpleStorage.set(42);
           uint256 value = simpleStorage.get();
           assertEq(value, 42, "Stored value is incorrect");
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Execute os testes:
   forge test
Enter fullscreen mode Exit fullscreen mode

Você verá a saída indicando se os testes passaram.


Passo 5: Implementar o script de implantação

  1. No arquivo script/Deploy.s.sol, crie um script para implantar o contrato:
   // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.0;

   import "forge-std/Script.sol";
   import "../src/SimpleStorage.sol";

   contract DeploySimpleStorage is Script {
       function run() external {
           vm.startBroadcast();
           SimpleStorage simpleStorage = new SimpleStorage();
           console.log("SimpleStorage deployed at:", address(simpleStorage));
           vm.stopBroadcast();
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Compile os contratos:
   forge build
Enter fullscreen mode Exit fullscreen mode
  1. Execute o script de implantação:
   forge script script/Deploy.s.sol --rpc-url <YOUR_RPC_URL> --private-key <YOUR_PRIVATE_KEY> --broadcast
Enter fullscreen mode Exit fullscreen mode
  • Substitua <YOUR_RPC_URL> pelo URL do seu nó Ethereum (por exemplo, Infura ou Alchemy).
  • Substitua <YOUR_PRIVATE_KEY> pela chave privada da sua carteira.

Passo 6: Interagir com o contrato

Após a implantação, você pode interagir com o contrato usando ferramentas como:

  • Ethers.js ou Web3.js ou Go-ethereum
  • forge para chamadas diretas.

Por exemplo, para chamar funções:

forge call --rpc-url <YOUR_RPC_URL> --to <DEPLOYED_CONTRACT_ADDRESS> --function "get()" --abi src/SimpleStorage.sol
Enter fullscreen mode Exit fullscreen mode

Passo 7: Melhorar e iterar

  • Adicione funcionalidades ao seu contrato.
  • Crie mais testes para cobrir casos de uso adicionais.
  • Experimente diferentes modos de Foundry para otimizar ou analisar o gás consumido:
   forge test --gas-report
Enter fullscreen mode Exit fullscreen mode

Comandos Essenciais

Aqui estão os principais comandos do Foundry para desenvolvimento, organizados com explicações e exemplos práticos:

Configuração Inicial

  1. forge init Inicializa um novo projeto Foundry. Exemplo:
   forge init my-project
   cd my-project
Enter fullscreen mode Exit fullscreen mode
  1. forge build Compila os contratos no projeto. Exemplo:
   forge build
Enter fullscreen mode Exit fullscreen mode
  • Os artefatos gerados são salvos na pasta out/.
  1. forge clean Remove os artefatos de compilação e limpa o cache. Exemplo:
   forge clean
Enter fullscreen mode Exit fullscreen mode

Testes

  1. forge test Executa testes automatizados em contratos. Exemplo:
   forge test
Enter fullscreen mode Exit fullscreen mode
  • Opções úteis:

    • Aumentar verbosidade dos logs:
       forge test -vvv
    
    • Rodar um teste específico:
       forge test --match-test testFunctionName
    
  1. forge snapshot Atualiza snapshots para testes baseados em valores fixos. Exemplo:
   forge snapshot
Enter fullscreen mode Exit fullscreen mode

Deploy e Interação

  1. forge create Implanta contratos em uma blockchain. Exemplo:
   forge create ContractName --rpc-url <RPC_URL> --private-key <PRIVATE_KEY>
Enter fullscreen mode Exit fullscreen mode
  1. forge call Faz chamadas para métodos de contratos já implantados. Exemplo:
   forge call --rpc-url <RPC_URL> --address <CONTRACT_ADDRESS> --sig "methodName(uint256)" 123
Enter fullscreen mode Exit fullscreen mode

Auditoria e Segurança

  1. forge verify-contract Verifica o contrato no Etherscan ou outro explorador. Exemplo:
   forge verify-contract 0x1234... MyContract --chain-id 1 --etherscan-api-key <API_KEY>
Enter fullscreen mode Exit fullscreen mode
  1. forge coverage Gera relatórios de cobertura para os testes. Exemplo:
   forge coverage
Enter fullscreen mode Exit fullscreen mode

Utilitários

  1. forge inspect

    Mostra informações detalhadas sobre contratos, como ABI ou bytecode.

    Exemplo:

    forge inspect ContractName abi
    
  2. forge update

    Atualiza as dependências do projeto.

    Exemplo:

    forge update
    
  3. forge fmt

    Formata automaticamente os arquivos Solidity do projeto.

    Exemplo:

    forge fmt
    

Gerenciamento de Dependências

  1. forge install

    Adiciona uma dependência ao projeto.

    Exemplo:

    forge install OpenZeppelin/openzeppelin-contracts
    
  2. forge remappings

    Atualiza os remappings no arquivo remappings.txt.

    Exemplo:

    forge remappings
    

Configuração Geral

  1. forge config

    Exibe as configurações do projeto.

    Exemplo:

    forge config
    
  2. forge cache

    Gerencia o cache do projeto.

    Exemplo:

    forge cache ls
    forge cache clean
    

Resumo dos comandos essenciais

Esses comandos são fundamentais para quem trabalha com Foundry no desenvolvimento de contratos inteligentes. Se precisar de ajuda com casos específicos ou detalhes adicionais, consultar a documentação.

  • forge init <nome-do-projeto>: Inicializa um novo projeto.
  • forge build: Compila os contratos Solidity.
  • forge test: Executa os testes.
  • forge create: Implanta um contrato em uma rede.
  • forge script: Executa scripts personalizados.
  • forge upgrade: Atualiza um contrato implantado.
  • forge inspect: Inspeciona o bytecode de um contrato.
  • forge inspect Greeter.sol:Greeter: Inspeciona o bytecode do contrato Greeter.
  • forge clean: Limpa os arquivos gerados pela compilação.
  • forge fmt: Formata o código Solidity.
  • forge verify: Verifica o contrato em uma blockchain exploradora.

Recursos

Top comments (0)