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)
Abra o Terminal do Windows: Pressione as teclas Windows + R, digite "cmd" e pressione Enter.
Instale o Debian: Execute o seguinte comando no terminal:
wsl --install Debian
- 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
- Instale as extensões: Abra o Visual Studio Code e procure pelas extensões "Remote - WSL" e instale-as.
- Conecte-se ao WSL: Clique no ícone do Remote Explorer na barra lateral esquerda e selecione o seu ambiente Linux (Debian).
- 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
Passo 3: Instale o Git
-
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
- Configure o Git:
git config --global user.email "seu_email@example.com"
git config --global user.name "Seu Nome"
Passo 4: Instale o Foundry
- Instale o curl:
sudo apt-get install curl
- Instale o Foundry:
curl -L https://foundry.paradigm.xyz | bash
- Adicione o Foundry ao PATH:
source ~/.bashrc # ou ~/.zshrc dependendo do shell
- Atualize o Foundry:
foundryup
- Verifique a versão:
forge --version
Passo 5: Crie seu primeiro projeto Foundry
- Inicialize um novo projeto:
forge init meu-projeto
- Abra o projeto no VS Code:
cd meu-projeto
code .
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.
- Documentação oficial do Foundry: https://book.getfoundry.sh/
Pré-requisitos
- Conhecimento básico de programação e Solidity.
- Instalação do Foundry e suas dependências:
- Uma carteira Ethereum, para obter a chaves (como MetaMask).
Passo 1: Configurar um novo projeto
- Crie um novo projeto com o Foundry:
forge init my-smart-contract
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
- Entre no diretório do projeto:
cd my-smart-contract
- Instale dependências adicionais, se necessário (como OpenZeppelin):
forge install OpenZeppelin/openzeppelin-contracts
Passo 2: Escrever um Smart Contract
- 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;
}
}
- Salve o arquivo.
Passo 4: Testar o contrato com Foundry
- 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");
}
}
- Execute os testes:
forge test
Você verá a saída indicando se os testes passaram.
Passo 5: Implementar o script de implantação
- 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();
}
}
- Compile os contratos:
forge build
- Execute o script de implantação:
forge script script/Deploy.s.sol --rpc-url <YOUR_RPC_URL> --private-key <YOUR_PRIVATE_KEY> --broadcast
- 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
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
Comandos Essenciais
Aqui estão os principais comandos do Foundry para desenvolvimento, organizados com explicações e exemplos práticos:
Configuração Inicial
-
forge init
Inicializa um novo projeto Foundry. Exemplo:
forge init my-project
cd my-project
-
forge build
Compila os contratos no projeto. Exemplo:
forge build
- Os artefatos gerados são salvos na pasta
out/
.
-
forge clean
Remove os artefatos de compilação e limpa o cache. Exemplo:
forge clean
Testes
-
forge test
Executa testes automatizados em contratos. Exemplo:
forge test
-
Opções úteis:
- Aumentar verbosidade dos logs:
forge test -vvv
- Rodar um teste específico:
forge test --match-test testFunctionName
-
forge snapshot
Atualiza snapshots para testes baseados em valores fixos. Exemplo:
forge snapshot
Deploy e Interação
-
forge create
Implanta contratos em uma blockchain. Exemplo:
forge create ContractName --rpc-url <RPC_URL> --private-key <PRIVATE_KEY>
-
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
Auditoria e Segurança
-
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>
-
forge coverage
Gera relatórios de cobertura para os testes. Exemplo:
forge coverage
Utilitários
-
forge inspect
Mostra informações detalhadas sobre contratos, como ABI ou bytecode.
Exemplo:
forge inspect ContractName abi
-
forge update
Atualiza as dependências do projeto.
Exemplo:
forge update
-
forge fmt
Formata automaticamente os arquivos Solidity do projeto.
Exemplo:
forge fmt
Gerenciamento de Dependências
-
forge install
Adiciona uma dependência ao projeto.
Exemplo:
forge install OpenZeppelin/openzeppelin-contracts
-
forge remappings
Atualiza os remappings no arquivoremappings.txt
.
Exemplo:
forge remappings
Configuração Geral
-
forge config
Exibe as configurações do projeto.
Exemplo:
forge config
-
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
- Documentação oficial: https://book.getfoundry.sh/
- GitHub: https://github.com/foundry-rs/foundry
-
Comunidade: Participe do Discord ou fóruns para obter ajuda e compartilhar conhecimentos.
- OpenZeppelin Contracts: https://github.com/OpenZeppelin/openzeppelin-contracts
Top comments (0)