Para este artigo iremos utilizar como referência o tutorial para iniciantes oficial do Hardhat.
A partir do momento que avançamos no desenvolvimento de DApps criamos Smart Contracts mais complexos, passamos a necessitar de ferramentas que nos auxiliem no desenvolvimento e garantam a testabilidade e segurança de nossos contratos inteligentes, e é ai que entram os ambientes de desenvolvimento.
Assim como em outras linguagens, o Solidity também possui um ambiente de desenvolvimento o Hardhat que por sinal não é o único mas é o foco de nossos estudos.
Você encontra o código fonte do projeto neste respositório sob a branch #beginners-guide-part-ii
.
Por que o Hardhat?
Hardhat oferece uma série de benefícios para acelerar o processo de desenvolvimento e teste de Smart Contracts utilizando Solidity e JavaScript ou TypeScript.
Com ele podemos rapidamente compilar, testar, debugar e efetuar o delivery dos nossos Contratos Inteligentes em diversas Blockchains. Como ambiente de desenvolvimento ele nos auxilia na automação de tarefas recorrentes como a execução de testes unitários.
Por padrão o Hardhat vem com uma rede local do Ethereum para desenvolvimento, esta rede possui funcionalidades focadas no Solidity em específico debug, stack trace, console.log() e mensagens claras e explícitas quando as transações falham.
Seu ecossistema e comunidade ativa garantem a existência de muitos plugins disponibilizados pelos desenvolvedores para atribuir ainda mais recursos, como a cobertura de código, integração com Ganache, live reload com file watcher e muitos outros.
Utilizando o CLI podemos ainda criar tasks e plugins próprios para a execução de ações mais complexas, como por exemplo, efetuar o delivery do contrato em mais de uma Blockchain sequencialmente.
Setup do ambiente
Muitas bibliotecas e ferramentas para Ethereum são escritas em JavaScript e com Hardhat não é diferente. Desta forma iremos inicialmente instalar o Node.js que é o único pré-requisito para sua utilização.
Instalação do Node.js
Caso você já tenha instalado uma versão do Node.js >= 12.0, pode estar avançando em nosso artigo para o próximo item. Caso não estaremos agora efetuando a instalação para Ubuntu, MacOS e Windows.
Ubuntu
Execute os comandos abaixo no terminal:
$ sudo apt update
$ sudo apt install curl git
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt install nodejs
MacOS
Tenha certeza de possuir o git instalado, caso contrário siga estas instruções.
Existe muitas maneiras para efetuar a instalação do Node.js no MacOS. Neste artigo iremos utilizar o nvm. Execute os comandos abaixo no terminal:
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash
$ nvm install 12
$ nvm use 12
$ nvm alias default 12
$ npm install npm --global # Upgrade npm to the latest version
Windows
A instalação do Node.js no Windows requer a execução de alguns passos manualmente. Para isso iremos efetuar a instalação do git, Node.js 12.x e pm.
Efetue o download dos executáveis através dos links abaixo e a sua instalação ao término do download:
- Instalador do git para Windows
- Instalador do node-v12.XX.XX-x64.msi
Atualizando a versão do Node.js
Caso você ja tenha uma versão inferior à 12.0 do Node.js pode realizar o procedimento abaixo para efetuar a atualização de acordo com seu Sistema Operacional.
Ubuntu
- Execute o comando
$sudo apt remove nodejs
no terminal para remover o Node.js. - Escolha a versão do Node.js que deseja instalar por meio deste link e siga as instruções.
- Execute o comando sudo apt update && sudo apt install nodejs no terminal para instalar o Node.js novamente.
MacOS
Você pode utilizar o nvm instalado anteriormente para substituir a versão do Node.js que deseja utilizar. Para atualizar a versão do Node.js para 12.x execute os comandos abaixo no terminal:
$ nvm install 12
$ nvm use 12
$ nvm alias default 12
$ npm install npm --global #Atualiza o npm para a última versão
Windows
Você deve seguir as mesmas instruções de antes, só que agora selecionando uma versão mais atualizada. Você pode obter uma lista de versões disponíveis aqui.
Instalando o Hardhat e criando um projeto vazio
Para efetuar a instalação do Hardhat iremos utilizar o npm CLI. O Node.js package manager é um gerenciador de dependências para projetos que utilizem JavaScript.
Para isso vamos abra a terminal e digite os comandos abaixo:
$ mkdir beginners-guide-to-solidity
$ cd beginners-guide-to-solidity
$ npm init --yes
$ npm install --save-dev hardhat
ATENÇÃO: A instalação do Hardhat pode demorar um pouco pois requer a instalação de algumas dependências do Ethereum JavaScript.
Ao término da instalação do Hardhat e suas dependências, execute o comando abaixo no terminal para inicializar o wizard para criação de projetos.
$ npx hardhat
Na lista de opções selecione Create an empty hardhat.config.js com as setas do teclado e então pressione enter.
$ npx hardhat
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
Welcome to Hardhat v2.0.0
? What do you want to do? …
Create a sample project
❯ Create an empty hardhat.config.js
Quit
Assim que o CLI do Hardhat executa, ele procura pelo arquivo hardhat.config.js
. Este arquivo normalmente fica localizado na raiz do projeto e um arquivo vazio hardhat.config.js
é suficiente para o funcionamento do Hardhat.
Arquitetura do Hardhat
Hardhat é construído em torno dos conceitos de tasks e plugins. A maior parte das funcionalidades do Hardhat vem de plugins, como dito anteriormente existe uma grande quantidade de plugins disponíveis e você pode criar seus próprios plugins e disponibilizar para a comunidade agregando assim mais recursos e funcionalidades ao seu projeto.
Tasks
Toda vez que você executa o npx hardhat ...
no terminal automaticamente está utilizando o CLI do Hardhat para invocar uma task. Por exemplo, npx hardhat compile
é responsável por executar a task de compilação do projeto.
Cada projeto pode possuir uma quantidade de tarefas diferentes uma vez que podemos utilizar plugins diferentes em cada projeto, portanto para ver as tarefas atualmente disponíveis em seu projeto execute npx hardhat
. Para obter detalhes de utilização da task você pode executar no terminal npx hardhat help [task]
.
DICA: Podemos criar nossas próprias tasks.
Plugins
Por padrão toda vez que criamos um projeto com Hardhat alguns plugins vem instalados, porém podemos a qualquer momento efetuar a sua substituição.
Nesta série de artigos iremos utilizar o plugin hardhat-toolbox
. Ele traz consigo todas as ferramentas necessárias para realizar o desenvolvimento e teste dos nossos contratos e para interagirmos com eles. Sua utilização será abordada mais para frente quando efetivamente estivermos desenvolvendo nossos contratos inteligentes.
Para efetuar a instalação, abra o terminal no diretório raiz do projeto e execute:
$ npm install --save-dev @nomicfoundation/hardhat-toolbox
E para finalizar adicione require("@nomiclabs/hardhat-waffle");
ao seu arquivo hardhat.config.js ficando conforme abaixo.
require('@nomicfoundation/hardhat-toolbox');
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: '0.8.18',
};
Conclusão
Chegamos ao final deste artigo com o nosso ambiente pronto para iniciar o desenvolvimento e teste dos nossos Contratos Inteligentes. A partir de agora iremos efetivamente criar e testar diversos contratos utilizando Solidity e JavaScript.
E é isso por hoje, pessoal!
Chegamos ao final de mais um artigo, espero que tenha sido útil e que você tenha aprendido algo novo.
Caso tenha alguma dúvida, comentário ou tenha encontrado algum erro, por favor, envie-me um email. Ficarei feliz em ouvir de você.
Se desejar receber novos artigos diretamente em seu e-mail, por favor, assine a nossa Newsletter. E se você já é um assinante, muito obrigado!
Aproveito e deixo um convite para nos conectarmos no Twitter e LinkedIn.
👋 Obrigado por ler até o final e até o próximo artigo !!!