Recentemente escrevi alguns tutoriais sobre como criar Smart Contracts usando a linguagem Solidity e o toolkit Foundry, você confere um olá mundo neste link e um CRUD neste link. Uma coisa que não ensinei na ocasião é que é extremamente importante é o processo de deploy do seu smart contract na blockchain e este é o objetivo do tutorial de hoje.
O processo de fazer deploy consiste da compilação do seu contrato em bytecodes que possam ser interpretados pela EVM (Ethereum Virtual Machine) e envio esses bytecodes para um provedor distribuir aos demais nós da rede. Durante os tutoriais anteriores testamos tudo usando testes unitários automatizados e deploy em uma rede interna do Foundry, de testes (chamada Anvil). Agora, vamos fazer em uma testnet ou rede de testes, bastando depois você mudar os parâmetros para conseguir fazer o mesmo em uma rede de produção.
Se preferir, logo após a metade do vídeo abaixo eu mostro também como fazer.
Vamos lá!
#1 – Preparando a Carteira
Você vai precisar ter uma carteira cripto configurada e com saldo e eu recomendo a MetaMask. Já falei extensivamente da MetaMask, a principal carteira cripto de browser do mundo, tanto aqui no blog quanto no meu canal, sendo que se você não possui uma ainda, use o vídeo abaixo para aprender como criar e configurar a sua, é gratuita.

Usaremos a MetaMask para criarmos uma conta que será usada para o pagamento da taxa de rede (gas fee) necessária ao deploy e envio dos bytecodes para um nó da blockchain, que distribuirá nosso código pela rede.
Outro ponto importante a considerar é em qual rede você fará o seu deploy. Eu usarei aqui a Testnet da BNB Chain (também conhecida como “blockchain da Binance” ou BSC) mas pode ser em qualquer rede EVM (lista extensa de redes e configurações neste link).

Os dados da rede de teste da BNB são (obtidos no site oficial):
- Nome da Rede: BNB Chain Testnet
- Novo URL do RPC: https://data-seed-prebsc-1-s1.binance.org:8545/
- ID da chain: 97
- Símbolo da moeda: tBNB
- URL do Block Explorer: https://testnet.bscscan.com
Certifique-se de deixar a rede de testes selecionada como principal na sua MetaMask (repare na imagem abaixo, fica no topo superior esquerdo da carteira) para que nosso desenvolvimento seja realizado em cima dela a fim de não gastarmos fundos com os testes. Basta deixar ela aparecendo no topo da sua carteira e em seguida copie o endereço da sua carteira de testes, que fica logo abaixo do nome da sua conta, como na imagem abaixo.

Agora, antes de sairmos fazendo deploy, nosso próximo passo é adicionarmos fundos para os testes. Você pode fazê-lo usando o Faucet da BNB Chain neste link. Precisaremos sempre ter BNB já que é a moeda oficial da rede e é com ela que pagamos as taxas das transações. Note que você só pode fazer isso uma vez a cada 24h e que esse saldo é completamente fake, só funciona na testnet, não pode ser transacionado nas exchanges e não pode ser sacado mas pode ser transferido entre carteiras de teste, que é o que faremos aqui. Caso você seja aluno dos meus cursos, você pode usar o meu faucet também.
Uma vez que sua carteira esteja devidamente configurada no seu browser, volte ao VS Code para fazermos o deploy. Você vai precisar da chave privada da sua carteira MetaMask, a fim de que o deploy seja todo automatizado usando Foundry. Esta chave é aquela que fica oculta em Configurações > Detalhes da Conta > Detalhes > Show Private Key e muito cuidado com ela pois quem a tiver tem controle total sobre sua carteira.
Por uma questão de segurança o Foundry não permite usar chaves privadas em texto plano, então você vai precisar criar um keystore criptografado, o que você faz com o comando abaixo, onde “deployer” é o nome do seu keystore.
|
1 2 3 |
cast wallet import deployer --interactive |
O assistente de criação vai te pedir sua chave privada da carteira e depois uma senha, para garantir que só você tenha acesso a ela.
Agora com saldo na carteira e keystore configurada, podemos avançar para o deploy em si.
#2 – Fazendo o Deploy
O primeiro passo é você escrever o script de deploy que fica na pasta script. Abaixo um exemplo usando o contrato BookDatabase.sol que criamos no tutorial anterior.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; import {Script} from "forge-std/Script.sol"; import {BookDatabase} from "../src/BookDatabase.sol"; contract BookDatabaseScript is Script { BookDatabase public instance; function setUp() public {} function run() public { vm.startBroadcast(); instance = new BookDatabase(); vm.stopBroadcast(); } } |
Esse script inicializa uma instância do contrato BookDatabase, mas graças ao comando vm.startBroadcast(), essa inicialização não será simulada, mas sim executada contra um nó real de blockchain, incorrerá em taxas, etc.
Para usar o script de deploy acima com a keystore chamada deployer, executamos o comando abaixo sendo o parâmetro rpc-url é o endereço do nó RPC que será utilizado no deploy.
|
1 2 3 |
forge script script/BookDatabase.s.sol --account deployer --broadcast --rpc-url https://data-seed-prebsc-1-s1.binance.org:8545/ |
O comando acima vai se conectar no nó RPC fornecido usando a carteira da keystore, vai compilar o seu contrato e vai enviar a transação de deploy, apenas lhe pedindo a senha da keystore como confirmação.
Se você tiver erro de ” -32000: transaction gas price below minimum” ou algo do tipo, indica que o gas price usado pelo Forge foi muito baixo para as exigências da blockchain em questão. Aí nesse caso você tem duas alternativas, ou usa o modo legacy, que resolve na BSC Testnet, ou ajusta o gas price manualmente.
|
1 2 3 |
forge script script/BookDatabase.s.sol --account deployer --broadcast --legacy --rpc-url https://data-seed-prebsc-1-s1.binance.org:8545/ |
Se você estiver em uma rede que realmente seja necessário setar o gas price manualmente, use o parâmetro –priority-gas-price 100000000, ajustando de acordo com a exigência mínima. Outra flag opcional é a –verify para verificação do contrato no EtherScan e tem ainda flag específica para passar parâmetro de construtor, se precisar.
Tudo dando certo, você terá uma saída no terminal como abaixo.

Repare que ali veio o endereço gerado para o contrato e também o endereço da transação de deploy. Para conferir se a transação foi um sucesso basta você pegar o hash que recebeu e ir conferir no site da BSC Scan, lembrando que como é um teste, deve usar o BSC Scan Testnet que fica neste endereço. Colando o endereço/hash do seu contrato (ou da transação) você verá se o deploy dele já foi finalizado e no futuro todos os detalhes das transações que já aconteceram com esse contrato, como abaixo.

Ou seja, seu contrato agora pode ser usado normal e publicamente por qualquer pessoa que possua o endereço dele, invocando todas as funções e propriedades públicas do mesmo.
Agora se você não fez a verificação automática do contrato com –verify, você pode executar o comando abaixo para fazê-lo manualmente. Aqui estou fazendo verificação na EtherScan, por isso a necessidade de incluir sua API Key obtida no site oficial. Substitua também o endereço e nome do contrato corretamente.
|
1 2 3 |
forge verify-contract 0x4D7E5cae5567627E156ef9823236cc901DC9aaac src/BookDatabase.sol:BookDatabase --chain bsc-testnet --etherscan-api-key <api_key> |
Tudo dando certo, a saída deve ser como abaixo.

Caso você erre o nome da rede, não se preocupe, o próprio forge te lista os nomes corretos das redes suportadas se você errar ao preencher.
Até a próxima!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.


