
Quando estamos desenvolvendo aplicações web3 ou somente smart contracts é comum a necessidade de testá-los em diferentes ambientes. O primeiro ambiente mais óbvio são em alguma suíte de testes unitários como o Foundry e outras. Depois, você precisa testar em uma blockchain para garantir que de fato o comportamento esperado se mantenha. É aí que começam nossos problemas.
Isso porque apesar de existirem as Testnets das redes famosas como BSC, Avalanche, Polygon e até mesmo da Ethereum, essas redes exigem que você tenha fundos de teste para conseguir fazer deploy do seu contrato, executar as transações, etc. Isso não seria um problema se não fosse o fato de TODAS as Testnets, sem exceção serem uma porcaria quando o assunto é fornecer fundos de teste, geralmente nos enviando para faucets bugados e com poucos recursos.
Sendo assim, o ideal é que você tenha uma solução local/privada de blockchain com fundos infinitos, a fim de que consiga realizar os seus testes sem qualquer limitação e com total controle do ambiente. E é justamente isso que vou ensinar hoje: como subir uma blockchain privada/local para desenvolvimento, na sua própria máquina. Mais tarde sim, deverá testar na Testnet “real” e por fim colocar em produção.
Neste artigo utilizaremos a solução Anvil, parte integrante do toolkit Foundry.
Vamos lá!
#1 – Executando uma blockchain
A primeira etapa é a criação de um projeto Foundry na sua máquina, um toolkit muito popular que, dentre outras ferramentas, fornece meios de rodar uma blockchain local/privada na sua máquina, justamente o que precisamos. Essencialmente, o Foundry é um conjunto de CLIs (aplicações de terminal) que você precisa instalar na sua máquina:
curl -L https://foundry.paradigm.xyz | bash
source ~/.bashrc / source ~/.zshrc
foundryupTalvez você tenha de reiniciar o seu terminal após essa instalação a fim de que o Foundry fique disponível no PATH do seu terminal. Com o Foundry instalado, o comando abaixo sobre o Anvil no terminal:
anvilSe tudo foi feito corretamente, o terminal vai subir uma VM de blockchain chamada Foundry Anvil e apresentar uma série de contas de teste cheias de fundos para usar, com seus respectivos endereços públicos e chaves privadas, como abaixo.

Muita atenção aqui: essas carteiras funcionam apenas na sua blockchain local, que acabou de subir. Não adianta querer transferir os fundos delas ou para elas que vai dar ruim, não vai funcionar.
Outra opção é subir o Anvil forkando alguma rede existente, para ter um clone do estado dela, incluindo a Mainnet da Ethereum. Para isso você deve fornecer o parâmetro –fork-url com o endereço do nó RPC a ser forkado.
anvil --fork-url https://eth.merkle.ioIsso é especialmente útil para testar contratos que já estão em produção, embora as carteiras são sempre somente aquelas 10 que você recebe quando o nó termina de subir. As contas das redes forkadas não são clonadas.
Independente se você subiu uma blockchain zerada ou um fork, basta manter este terminal funcionando, sem interrompê-lo e você terá uma blockchain local rodando em http://127.0.0.1:8545 na sua máquina com chainId 31337, seguindo todo o padrão Ethereum, apenas zerada, sem o histórico de blocos da mesma. Se precisar usar o terminal para alguma outra coisa, recomendo abrir outra janela.
Legal né!
#2 – Configurando uma carteira
Agora que você tem uma blockchain local rodando na sua máquina, outra dica é você configurar sua carteira MetaMask para algumas das contas de teste. Isso é especialmente útil se estiver testando uma aplicação web3 (dapp), pois ela vai precisar se conectar com sua carteira no browser. Sendo assim, a primeira coisa que deve fazer é configurar uma nova rede na MetaMask.
Se você não tem uma carteira MetaMask ainda, o vídeo abaixo ensina a criar uma.
Vá em redes, adicionar rede, adicionar manualmente, para ter acesso ao formulário de adição de redes. Preencha como abaixo:
- Nome da Rede: Anvil
- Novo URL da RPC: http://localhost:8545 ou http://127.0.0.1:8545
- ID da cadeia: 31337
- Símbolo da moeda: ETH
Salve e selecione a rede Anvil na sua MetaMask para ver a sua carteira zerada.
Agora o próximo e último passo é configurar alguma das contas de teste geradas pra gente pelo Anvil, de preferência a primeira para evitar confusão. Para isso, copie a chave privada dela que apareceu no terminal e volte na MetaMask, acessando a guia Contas no topo, adicionar contas ou carteiras, importar e informa a sua chave privada.
Pronto, você é o mais novo ricaço do mundo cripto. 😀

Com isso, agora você tem uma blockchain local rodando e sua carteira apontada para ela. Você irá reparar que vão aparecer alguns avisos no terminal da sua blockchain, indicando que ela recebeu alguns comandos (da MetaMask neste caso). Isso é especialmente útil para ver que ela está recebendo as calls e transactions corretamente.
Atenção: se você precisar reiniciar a Foundry Anvil depois de ter importado contas na MetaMask vai ter de remover e importar as contas novamente ou ao menos limpar o cache de atividades da carteira (Settings > Advanced > Clear Cache) porque ela se perde completamente.
Como próximo passo, recomendo que teste o deploy de algum smart contract, como ensinado neste tutorial. Em dado momento ele vai falar para configurar a MetaMask, pode pular esta etapa obviamente. Para executar o script de deploy, é da mesma forma que já deve estar acostumado, um exemplo abaixo com a primeira carteira do Anvil sendo a responsável por pagar as taxas.
forge script script/Contract.s.sol --broadcast --rpc-url http://127.0.0.1:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80Certifique-se de consultar o terminal do Anvil que você subiu para se certificar que o deploy ocorreu nele com sucesso.
A seguir, vou mostrar como rodar alguns comandos de teste nessa blockchain.
#3 – Testando com Foundry Cast
Outro recurso muito útil, uma vez que você esteja com um nó do Anvil rodando na sua máquina, é abrir outro terminal com o Foundry Cast. Com o Cast você pode enviar comandos para um nó de blockchain, como abaixo, onde envio o comando nativo para consulta de saldo de uma carteira (essa carteira tem de existir naquele nó, peguei essa do Anvil):
cast balance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -- ether --rpc-url http://127.0.0.1:8545E você pode enviar também transações diretamente pra blockchain, como abaixo onde estou transferindo 1 ether para o primeiro endereço, a partir da carteira da chave privada informada.
cast send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 --value 1ether --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80Além de chamadas diretamente ao nó da blockchain, podemos fazer chamadas a contratos na blockchain, coomo abaixo, onde chamo uma função getManager que deve existir no endereço informado.
cast call 0x5FbDB2315678afecb367f032d93F642f64180aa3 "getManager()" --rpc-url http://127.0.0.1:8545E o mesmo vale para transações/sends. No exemplo abaixo, o primeiro endereço é o contrato, seguido da assinatura da função e seus parâmetros (0xNOVO_MANAGER). Depois temos os já conhecidos rpc-url e private-key com o nó e chave privada da carteira que vai assinar a transação
cast send 0xENDERECO_DO_CONTRATO "setManager(address)" 0xNOVO_MANAGER --rpc-url http://127.0.0.1:8545 --private-key 0xSUA_PRIVATE_KEYLembre-se no entanto que cada sessão de Anvil é efêmera, os dados não são persistidos. Assim, se reiniciar o terminal do Anvil ou derrubar seu processo, todas alterações são perdidas.
E é isso por hoje, espero que tenha gostado!








