Deploy de Smart Contract com HardHat e MetaMask

Cripto

Deploy de Smart Contract com HardHat e MetaMask

Luiz Duarte
Escrito por Luiz Duarte em 07/04/2024
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Atualizado em 19/04/24!

Recentemente escrevi alguns tutoriais sobre como criar Smart Contracts usando a linguagem Solidity e o toolkit HardHat, 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 HardHat, de testes (chamada HardHat Network). Agora, para enviar a um provider de blockchain existem várias formas mas a que escolhi para este tutorial aqui é usando a carteira de criptomoedas MetaMask.

Se preferir, pode assistir ao vídeo abaixo ao invés de ler.

Atenção: esse tutorial utiliza scripts HardHat para o deploy. Se estiver procurando aprender a usar HardHat Ignition, use este outro tutorial.

#1 – Preparando a Carteira

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.

A MetaMask não é um provider, ela é uma carteira, mas funciona conectada a um provider da Infura, uma empresa irmã provedora de blockchain em nuvem (ambas são projetos da ConsenSys). 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 Smart Chain (BSC, também conhecida como “blockchain da Binance”). Isso porque a taxa de rede dos deploys costuma ficar alta e como é apenas um contrato para fins didáticos não faz sentido gastar criptomoedas reais com ele. Sendo assim, recomendo que configure a rede de teste da Binance mas você pode usar a rede EVM-compatível que preferir (lista extensa de redes e configurações neste link).

Os dados da rede de teste da Binance (BSC Testnet) são (obtidos no site oficial):

  • Nome da Rede: Smart Chain – Testnet
  • Novo URL do RPC: https://data-seed-prebsc-1-s1.binance.org:8545/
  • ID da chain: 97
  • Símbolo da moeda: BNB
  • 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, tipo direito) 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 Binance 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.

Agora com saldo na carteira e ela apontada para a Testnet, podemos avançar para o deploy em si.

#2 – Fazendo o Deploy

Uma vez que sua carteira esteja devidamente configurada no seu browser, volte ao VS Code para fazermos o deploy. Você vai precisar da frase mnemônica da sua carteira MetaMask, a fim de que o deploy seja todo automatizado usando HardHat. Esta frase são aqueles famosas 12 palavras secretas que você recebe quando cria a sua carteira e muito cuidado com ela pois quem a tiver tem controle total sobre sua carteira.

Vamos salvar estas palavras em um arquivo .env na raiz do projeto com uma única chave SECRET, sendo que este arquivo não deve ser versionado então é de bom tom colocá-lo no .gitignore caso esteja usando Git. Para que possamos usar arquivos .env para configurações do projeto instale a dependência do DotEnv no projeto.

Crie o arquivo .env, preencha a chave SECRET e vamos em frente.

Agora é importante você entender que o script que vai fazer o deploy do seu contrato na blockchain é o deploy.ts que deve existir na pasta scripts. Crie ele se não existir e coloque o seguinte conteúdo que vou explicar na sequência.

Esse script importa a biblioteca Ethers e com ela carrega o nosso contrato Solidity que deve estar com o mesmo nome presente na pasta contracts (BookDatabase no meu exemplo). Com o factory desse contrato carregado nós chamamos as funções necessárias ao deploy e imprimimos o resultado no console, que será o endereço do contrato na blockchain. O último trecho de código é padrão e serve para sermos avisados de quaisquer erros que ocorrerem.

Agora, vamos nos focar no seu hardhat.config.ts. Por padrão estávamos usando uma rede default de teste e agora devemos apontar para a rede onde faremos o deploy, configurando corretamente os dados do nosso nó de blockchain, que no nosso caso é um nó da Testnet da BNB Smart Chain (BSC). Os dados de rede a serem utilizados são os mesmos que citei anteriormente, na etapa de configuração da carteira MetaMask.

Estes dados são de um full node da rede da Binance. O mais comum é que os full nodes sejam pagos, mas a Binance e outras redes que querem ser mais “dev friendly” oferecem full nodes gratuitos para serem usados em desenvolvimento. Repare que o .env está sendo carregado logo no início para que process.env.SECRET possa ser chamado mais tarde. Se quiser, pode colocar a URL da rede no .env também, a fim de não deixar nenhuma configuração diretamente no código.

Com isso, estamos com tudo configurado para o deploy e para fazê-lo de fato, basta rodar o comando abaixo do HardHat em nosso projeto.

Este comando vai compilar o seu contrato definido no deploy.ts, vai assinar a transação usando a conta da sua carteira (definida pela frase mnemônica) e vai enviar os bytescodes nessa transação para a blockchain configurada no hardhat.config.js. Ao término de todo o processo, você terá as informações do deploy bem sucedido, como abaixo.

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 todos os detalhes das transações que já aconteceram com esse contrato, como abaixo.

Quando a transação de deploy estiver marcada como concluída/bem sucedida o seu contrato já está live na blockchain, ou seja, 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.

Um próximo passo possível e opcional é você verificar o seu contrato, o que ensino neste tutorial.

Até a próxima!

Curso Bot

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *