Um Guia Completo para Iniciantes sobre Solidity - Parte II

Um Guia Completo para Iniciantes sobre Solidity - Parte II

Preparando o ambiente com Hardhat e Node.js

Dando sequência à nossa série iremos neste artigo efetuar a instalação do Node.js e do Hardhat, bem como efetuar a inicialização de um projeto vazio.

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:

  1. Instalador do git para Windows
  2. 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

  1. Execute o comando sudo apt remove nodejs no terminal para remover o Node.js.
  2. Escolha a versão do Node.js que deseja instalar por meio deste link e siga as instruções.
  3. 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: Você pode criar suas 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 os plugins Ethers.js e Waffle. Eles serão utilizados para testar 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 @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

E para finalizar adicione require("@nomiclabs/hardhat-waffle"); ao seu arquivo hardhat.config.js ficando conforme abaixo.

require("@nomiclabs/hardhat-waffle");
/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  solidity: "0.7.3",
};

Conclusão

Chegamos ao final deste artigo com o nosso ambiente preparado para receber os nossos códigos que darão vida aos nossos Contratos Inteligentes. A partir de agora iremos efetivamente criar e testar diversos Contratos Inteligentes utilizando Solidity e JavaScript.

Isso é tudo para este artigo pessoal. Espero que você tenha achado este artigo útil, e que tenha contribuído de alguma forma para seu crescimento.

Se precisar de alguma ajuda, se tem alguma dúvida ou se tiver algum feedback, utilize o espaço para comentários e deixe um recado.

Vamos nos conectar no Twitter e LinkedIn.

👋 Obrigado por ler até o final e até o próximo artigo !!!

Did you find this article valuable?

Support Thiago (DukeFullStack) by becoming a sponsor. Any amount is appreciated!