Introdução
Neste tutorial, vamos explorar o desenvolvimento de contratos inteligentes utilizando Solidity, com a ajuda de ferramentas populares como Hardhat, OpenZeppelin e Truffle. Aprenderemos desde a configuração do ambiente até a implementação e testes de contratos inteligentes. A crescente popularidade das finanças descentralizadas (DeFi) e dos tokens não fungíveis (NFTs) tem impulsionado a demanda por desenvolvedores que saibam criar e testar soluções em blockchain. Este guia prático é ideal para iniciantes e desenvolvedores que desejam aprofundar seus conhecimentos em Solidity e em suas ferramentas de desenvolvimento, proporcionando um entendimento abrangente e mãos na massa do ciclo de vida de contratos inteligentes.
Etapas
Configuração do Ambiente de Desenvolvimento
Certifique-se de que você tenha o Node.js instalado em sua máquina. Para verificar, execute o comando `node -v` na linha de comando. Em seguida, instale o Hardhat globalmente com o seguinte comando.
commands# Verifique se o Node.js está instalado
node -v
# Instale o Hardhat globalmente
npm install -g hardhatInicializando um Novo Projeto Hardhat
Crie uma nova pasta para o seu projeto e inicialize o Hardhat. O comando `npm init` cria um arquivo package.json que gerencia as dependências do projeto.
commands# Crie uma nova pasta para seu projeto
mkdir meu-projeto-solidity
cd meu-projeto-solidity
# Inicialize um novo projeto Node
npm init -y
# Inicie o Hardhat
npx hardhatInstalação do OpenZeppelin
O OpenZeppelin fornece bibliotecas seguras e auditadas. Instale o OpenZeppelin utilizando o npm.
commands# Instale o OpenZeppelin
npm install @openzeppelin/contractsCriando um Contrato Inteligente Simples
Crie um arquivo Solidity em `contracts/MiContrato.sol`. Neste contrato, usaremos um exemplo simples de armazenamento de números.
MiContrato.sol// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract MiContrato { uint256 numero; function setNumero(uint256 _numero) public { numero = _numero; } function getNumero() public view returns (uint256) { return numero; } }
Compilando o Contrato Inteligente
Compile o contrato que você acabou de criar. O Hardhat irá gerar os arquivos necessários na pasta `artifacts`.
commands# Compile o contrato
npx hardhat compileCriando um Script de Teste
Crie um novo arquivo de teste em `test/MiContrato-test.js` para testar as funções do contrato. Usaremos a biblioteca Chai para asserções.
MiContrato-test.jsconst { expect } = require('chai'); const { ethers } = require('hardhat'); describe('MiContrato', function () { let miContrato; beforeEach(async function () { const MiContrato = await ethers.getContractFactory('MiContrato'); miContrato = await MiContrato.deploy(); await miContrato.deployed(); }); it('Deve armazenar e recuperar um número', async function () { await miContrato.setNumero(42); expect(await miContrato.getNumero()).to.equal(42); }); });
Executando os Testes
Utilize os comandos a seguir para executar os testes que você criou. Os resultados indicarão se todos os testes passaram com sucesso.
commands# Execute os testes
npx hardhat testInteragindo com o Contrato na Rede Local
Use o Hardhat para criar um ambiente de rede local e interagir com os contratos. Em primeiro lugar, inicie a rede de desenvolvimento local.
commands# Inicie a rede de desenvolvimento local do Hardhat
npx hardhat node
# Em uma nova aba do terminal, você pode executar o próximo comando para interagir com seu contratoImplantando em uma Rede de Teste
Para implantar o contrato em uma rede de teste como a Rinkeby, crie um script de implantação em `scripts/deploy.js` e use a configuração adequada na conta de desenvolvedor.
deploy.jsasync function main() { const MiContrato = await ethers.getContractFactory('MiContrato'); const miContrato = await MiContrato.deploy(); await miContrato.deployed(); console.log('Contrato implantado para:', miContrato.address); } main().catch((error) => { console.error(error); process.exitCode = 1; });
Testes de Integração com Truffle
Caso queira realizar testes mais avançados, você pode usar a Truffle. Primeiro, instale a Truffle e mesmo que ela seja opcional, ela adiciona funcionalidades interessantes em termos de testes.
commands# Instale o Truffle
npm install -g truffle
# Inicialize um novo projeto Truffle (opcional)
truffle init
Conclusão
Neste tutorial, você aprendeu a desenvolver contratos inteligentes utilizando Solidity e as ferramentas Hardhat, OpenZeppelin e Truffle. Desde a criação do ambiente de desenvolvimento até a realização de testes de integração, passamos por várias etapas importantes para a construção de contratos seguros e eficazes. Com este conhecimento, você está preparado para explorar mais sobre blockchain e desenvolver dApps (aplicações descentralizadas). Não hesite em experimentar e arriscar-se, pois o aprendizado contínuo é a chave para se tornar um desenvolvedor proficientes em contratos inteligentes.