Introdução
No mundo das criptomoedas e da blockchain, os contratos inteligentes (smart contracts) são fundamentais para a criação de aplicações descentralizadas. Neste tutorial, vamos aprender a implementar um contrato inteligente utilizando o Solidity, a linguagem de programação mais popular para esse tipo de desenvolvimento. Utilizaremos o Hardhat, um ambiente de desenvolvimento que facilita a construção e testes de contratos inteligentes, e o Ethers.js, uma biblioteca JavaScript que facilita a interação com a blockchain Ethereum. O foco será em prover um guia prático e detalhado, desde o ambiente de desenvolvimento até a realização de testes automatizados, garantindo que você tenha uma compreensão completa do processo de implementação de contratos inteligentes.
Etapas
Configuração do Ambiente de Desenvolvimento
Primeiro, você precisa ter o Node.js e o npm (Node Package Manager) instalados em sua máquina. Você pode verificar se já os tem instalados rodando os comandos `node -v` e `npm -v`. Caso não os tenha, faça o download do instalador em https:/odejs.org/ e siga as instruções. Em seguida, crie uma nova pasta para o seu projeto e acesse-a através do terminal.
commands# Verificar versão do Node.js
node -v
# Verificar versão do npm
npm -v
# Criar uma nova pasta para o projeto
mkdir meu_projeto_solidity
cd meu_projeto_solidityInicializando o projeto e instalando dependências
Dentro da pasta do projeto, inicie um novo projeto Node.js com `npm init -y`. Após isso, instale o Hardhat e o Ethers.js utilizando o npm. O Hardhat permitirá que você compile, teste e execute seus contratos inteligentes, enquanto o Ethers.js facilitará a interação com a blockchain Ethereum.
commandsnpm init -y
npm install --save-dev hardhat
npm install --save ethersCriando um novo projeto Hardhat
Execute o comando `npx hardhat` e siga as instruções para criar um novo projeto. Escolha a opção ‘Create a basic sample project’. Esta ação criará várias pastas e arquivos que serão úteis para o desenvolvimento do contrato inteligente.
commandsnpx hardhat
Implementando o contrato inteligente
Navegue até a pasta `contracts` criada pelo Hardhat e crie um novo arquivo chamado `MeuContrato.sol`. Neste arquivo, você implementará um simples contrato inteligente que gerencia um valor. Vamos usar um contrato básico para armazenar e recuperar um número.
MeuContrato.solpragma solidity ^0.8.0; contract MeuContrato { uint256 private numero; function setNumero(uint256 _numero) public { numero = _numero; } function getNumero() public view returns (uint256) { return numero; } }
Compilando o contrato inteligente
Agora você precisa compilar seu contrato inteligente. No terminal, execute o comando `npx hardhat compile`. Isso irá gerar os arquivos necessários na pasta `artifacts`, que serão usados para a implantação e testes do contrato.
commandsnpx hardhat compile
Desenvolvendo os testes automatizados
Crie um novo arquivo na pasta `test` chamado `MeuContrato.test.js`. Neste arquivo, você escreverá testes para garantir que a lógica do seu contrato está funcionando como esperado. O Ethers.js será usado em conjunto com o Hardhat para realizar os testes.
MeuContrato.test.jsconst { expect } = require('chai'); const { ethers } = require('hardhat'); describe('MeuContrato', function () { let MeuContrato; let contrato; beforeEach(async function () { MeuContrato = await ethers.getContractFactory('MeuContrato'); contrato = await MeuContrato.deploy(); await contrato.deployed(); }); it('deve armazenar um número', async function () { await contrato.setNumero(42); expect(await contrato.getNumero()).to.equal(42); }); });
Executando os testes automatizados
Com os testes implementados, você agora pode executá-los usando o comando `npx hardhat test`. Isso irá rodar todos os testes definidos na pasta `test` e fornecer um feedback no terminal.
commandsnpx hardhat test
Implantando o contrato na rede local
Para implantar seu contrato em uma rede local, você pode usar o comando `npx hardhat run scripts/sample-script.js –network localhost`. Antes disso, você precisará iniciar uma rede local Hardhat com `npx hardhat node`.
commands# Iniciar a rede local
npx hardhat node
# Em uma nova aba do terminal, implantar o contrato
npx hardhat run scripts/sample-script.js --network localhostInteragindo com o contrato usando Ethers.js
Crie um novo arquivo JavaScript chamado `interagir.js`. Nesse arquivo, você irá interagir com o seu contrato implantado, definindo e recuperando o valor armazenado. Utilize o Ethers.js para se conectar ao contrato e chamá-lo.
interagir.jsconst { ethers } = require('ethers'); async function main() { const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545'); const signer = provider.getSigner(); const contratoAddress = 'ENDEREÇO_DO_CONTRATO'; // substitua pelo endereço do contrato const contratoABI = [ "function setNumero(uint256 _numero)", "function getNumero() view returns (uint256)" ]; const contrato = new ethers.Contract(contratoAddress, contratoABI, signer); await contrato.setNumero(123); const numero = await contrato.getNumero(); console.log(`Número armazenado é: ${numero.toString()}`); } main();
Conclusão
Neste tutorial, você aprendeu a implementar um contrato inteligente utilizando Solidity, Hardhat e Ethers.js. Passamos por todo o processo, desde a configuração do ambiente até a interação com um contrato implantado. Com o conhecimento adquirido, você agora pode expandir para contratos mais complexos, incluindo funcionalidades adicionais e interações com outras bibliotecas e ferramentas. A prática contínua e a exploração das características avançadas do Solidity serão essenciais para a sua jornada no desenvolvimento de blockchain.