Como fazer uma aplicação em Node JS e realizar o deploy de Smart Contracts em Solidity em redes EVM (Ethereum).

Iora Labs
6 min readMay 23, 2022

--

Node JS + Blockchain + Smart Contracts

Com o desenvolvimento da Web3, vejo um cada vez mais desenvolvedores buscando instruções e treinamentos em tecnologias que envolvem blockchain. Considerando a maior parte dos materiais com contúdos em inglês. Gostaria de contribuir de uma forma bem simples, como montar uma aplicação em Node JS que interage e realizar o deploy de uma smart contract.

1 — Configurando um projeto em Node JS

Existem diversas formas de criar um projeto em Node JS. Considere realizar a instalação com o package manager oficial ou através dos instaladores oficiais.

Uma vez instalado, considere realizar um teste utilizar o comando:

node --version
v14.17.0

No meu caso, a versão instalada é a 14.17.0. Também utilizo a biblioteca NVM para gerenciar as versões em Node JS instaladas em meu mac.

2 — Criando um projeto

Projetos utilizando o Node JS utiliza uma bundled em pacotes dentro do arquivo package.json, que fica na raiz de seus aplicativos. É um arquivo extremamente importante para todas as aplicações em Node JS.

Primeiramente, vamos criar uma pasta com o nome do nosso projeto utilizando o terminal:

mkdir projeto_smartcontracts && cd projeto_smartcontracts

Agora, vamos iniciar um aplicativo em Node JS com NPM.

npm init -y

Após realizar esse comando, o npm criará um arquivo chamado package.json, que será responsável por organizar nossas dependências e seus respectivos versionamentos.

3 — Truffle e Hardhat

Essa é o famoso feijão com arroz dos desenvolvedores de dapps, é uma combinação perfeita que nos propoe uma infraestrutura em localhost para realizar nossos primeiros experimentos.

Truffle

Primeiramente, vamos instalar o Truffle. Segundo o site oficial, Truffle é o framework mais popular de desenvolvimento dentro do ambiente Ethereum. Proporciona um kickstart e helpers muito interessante para nosso projeto.

Para instalar o Truffle, rode o comando a seguir em seu terminal.

npm install truffle -g

Hardhat

Hardhat é nossa outra mão, que nos ajudar a compilar, implantar, testar e depurar nosso software Ethereum. Ele ajuda os desenvolvedores a gerenciar e automatizar as tarefas recorrentes inerentes ao processo de criação de contratos inteligentes e dApps, além de introduzir facilmente mais funcionalidades nesse fluxo de trabalho. Isso significa compilar, executar e testar contratos inteligentes em seu núcleo.

npm install hardhat -g

Git

É sempre muito importante criar o versionamento de nosso repositório afim de controlar nossos avanços e históricos do código fonte de nosso projeto. Nesse tutorial, iremos utilizar o Github famoso em nosso repositório.

4 — Iniciando com Hardhat

Uma vez configurando nosso ambiente, vamos dar o primeiro passo em nosso código fonte instalando o Hardhat em nosso projeto. Vamos rodar o seguinte comando:

npm install --save-dev hardhat

E agora, vamos rodar o npx para trazer pré-configurar nosso projeto com as principais libraries do hardhat, e ao finalizar, notaremos a criação de um novo arquivo com o nome de harthat.config.js

Notaremos que ao rodar esse comando, a seguinte resposta seguirá no terminal.

👷 Welcome to Hardhat v2.9.6 👷‍? What do you want to do?
❯ Create a basic sample project
Create an advanced sample project
Create an advanced sample project that uses TypeScript
Create an empty hardhat.config.js

Em nosso caso, vamos dar enter em todos as linhas.

O Hardhat também criará uma lista de arquivos e pasta a serem ignorados dentro do arquivo .gitignore

Ao finalizar essa parte, você notará que o Harthat adicionei diversos arquivos e pastas em nosso projeto, incluindo tests, contracts e scripts. Que explicaremos suas funções mais adiante.

5 — Primeiro Smart Contract a gente nunca esquece.

A instalação do Hardhat vem com um Smart Contract exemplo, que se chama, Greeter.sol dentro da pasta “contracts”, na raiz do nosso projeto. Ali são armazenados todos os nossos contratos inteligentes.

Greeter.sol

Utilizaremos esse exemplo pré-configurado como exemplo. E agora, vamos compilar nosso smart contracts para logo em seguida, realizar o deploy para a rede.

npx hardhat compile

Logo em seguida, ele vai sinalizar que realizou o compilado de dois arquivos.

Compiled 2 Solidity files successfully

Você notará o nosso compilador gerou uma nova pasta chamada artifacts, que armazenará os arquivos compilados, incluindo os ABIs (Contract Application Binary Interface), que é a maneira padrão de interagir com contratos no ecossistema Ethereum, tanto de fora do blockchain quanto para interação contrato a contrato. Os dados são codificados de acordo com seu tipo, conforme descrito nesta especificação.

ABI de nosso primeiro smart contract Greeter.

6 — Subindo uma blockchain em localhost com Harthat

Para realizar os testes de nosso smart contract, vamos considerar o harthat para subir uma pequena blockchain em localhost apenas para testes.

npx hardhat node

Após esse comando, o Harthat criará uma lista de wallet com suas respectivas chaves privadas que utilizaremos apenas para testes. Lembre-se, apenas em ambiente de testes e desenvolvimento podemos compartilhar as chaves privadas. Em produção, devemos proteger nossas chaves privadas a todo custo. É a chave principal que somente o proprietário da conta deve ter.

No meu caso, eu consegui subir as seguintes carteiras.

Harthat criou 10 contas para fins de testes e desenvolvimento.

7 — Realizando o deploy de nossa Smart Contract.

Para realizar o deploy de nossa smart contract, devemos adicionar ao nosso projeto um script que realizar os passos utilizando nossas libraries em Node JS.

No exemplo de pré configurado, o Hardhat veio com um arquivo chamado sample-script.js.

// We require the Hardhat Runtime Environment explicitly here. This is optional// but useful for running the script in a standalone fashion through `node <script>`.//// When running the script with `npx hardhat run <script>` you'll find the Hardhat// Runtime Environment's members available in the global scope.const hre = require("hardhat");async function main() {// Hardhat always runs the compile task when running scripts with its command// line interface.//// If this script is run directly using `node` you may want to call compile// manually to make sure everything is compiled// await hre.run('compile');// We get the contract to deployconst Greeter = await hre.ethers.getContractFactory("Greeter");const greeter = await Greeter.deploy("Hello, Hardhat!");await greeter.deployed();console.log("Greeter deployed to:", greeter.address);}// We recommend this pattern to be able to use async/await everywhere// and properly handle errors.main().then(() => process.exit(0)).catch((error) => {console.error(error);process.exit(1);});

E agora, vamos realizar o deploy desse Smart Contract utilizando o seguinte comando.

npx hardhat run --network localhost scripts/sample-script.js

Após realizar esse comando, você pode checar a seguinte mensagem:

Greeter deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3

Isso significa que o nosso Smart Contract realizou o deploy na rede blockchain, e retornou o endereço na rede com seu respectivo hash. No meu caso 0x5FbDB2315678afecb367f032d93F642f64180aa3. No seu caso, você com certeza verá outro hash, porque obviamente, conceitualmente, blockchains utilizam criptografia para criar e endereçar novas carteiras. Se você tiver dúvidas de como funciona, vale a pena olhar um artigo conceitual sobre blockchain e ethereum.

Voilà! Nosso smart contract está na rede blockchain.

Concluímos o nosso processo.

Em breve publicarei como interagir com o nosso smart contract e realizar nossos primeiros testes automatizados.

Veja nosso repositório no Github para mais informações.

--

--

Iora Labs

Iora Labs is a blockchain technology company specializing in custom solutions for clients seeking to leverage the power of decentralized systems.