SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
04.12.2024

Aula 225: Integrando Contratos Solidity com Hardhat

Nesta aula, vamos explorar como integrar contratos inteligentes Solidity com o Hardhat, um ambiente de desenvolvimento popular para Ethereum. O Hardhat oferece ferramentas poderosas para implantar, testar e interagir com contratos inteligentes de forma eficiente. Ao final desta aula, você deverá ser capaz de configurar um projeto Hardhat, escrever e compilar contratos Solidity, implantá-los em uma blockchain local e executar testes.

Pré-requisitos

Antes de começarmos, certifique-se de que você tem o seguinte instalado:

  • Node.js (v12 ou posterior)
  • npm (acompanha o Node.js)
  • Conhecimento básico de Solidity e contratos inteligentes

Configurando um Projeto Hardhat

Primeiro, vamos criar um novo diretório para o nosso projeto Hardhat e inicializá-lo.

mkdir integracao-hardhat-solidity
cd integracao-hardhat-solidity
npm init -y

Em seguida, instale o Hardhat e as dependências necessárias.

npm install --save-dev hardhat

Agora, inicialize o Hardhat na raiz do seu projeto.

npx hardhat

Siga as instruções para criar um novo projeto Hardhat. Você pode selecionar a opção para criar um projeto de exemplo, que incluirá alguns arquivos e configurações básicas.

Escrevendo um Contrato Solidity

Vamos criar um contrato Solidity simples. Crie um novo arquivo no diretório contracts chamado SimpleStorage.sol.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private storedData;

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

Este contrato possui uma variável de estado storedData e duas funções: set para armazenar um valor e get para recuperá-lo.

Compilando o Contrato

Para compilar seu contrato Solidity, execute o seguinte comando:

npx hardhat compile

Você deverá ver os artefatos compilados nos diretórios artifacts e cache gerados pelo Hardhat.

Implantando o Contrato

A seguir, vamos criar um script de implantação. Crie um novo diretório chamado scripts, se ele ainda não existir, e então crie um novo arquivo chamado deploy.js no diretório scripts:

async function main() {
    const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
    const simpleStorage = await SimpleStorage.deploy();

    await simpleStorage.deployed();

    console.log("SimpleStorage implantado em:", simpleStorage.address);
}

// Recomendamos este padrão para poder usar async/await em todo lugar
// e tratar erros adequadamente.
main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

Este script implanta o contrato SimpleStorage na rede Ethereum local.

Para implantar o contrato, primeiro vamos iniciar uma rede local do Hardhat:

npx hardhat node

Em uma nova janela do terminal, implante o contrato:

npx hardhat run scripts/deploy.js --network localhost

Você deverá ver o endereço onde o contrato foi implantado.

Interagindo com o Contrato

Você pode interagir com seu contrato usando outro script. Crie um novo arquivo chamado interact.js no diretório scripts:

async function main() {
    const [owner] = await ethers.getSigners();

    const contractAddress = "SEU_ENDERECO_CONTRATO"; // Substitua pelo seu endereço de contrato implantado
    const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
    const simpleStorage = SimpleStorage.attach(contractAddress);

    // Definir valor
    const tx = await simpleStorage.set(42);
    await tx.wait();

    // Obter valor
    const storedValue = await simpleStorage.get();
    console.log("O valor armazenado é:", storedValue.toString());
}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

Certifique-se de substituir SEU_ENDERECO_CONTRATO pelo endereço real exibido quando você implantou o contrato.

Agora, podemos executar o script para interagir com nosso contrato:

npx hardhat run scripts/interact.js --network localhost

Você deverá ver o valor armazenado sendo exibido no seu terminal.

Executando Testes

O Hardhat vem com suporte embutido para testes. Crie um novo arquivo de teste no diretório test chamado simpleStorage.test.js.

const { expect } = require("chai");

describe("SimpleStorage", function () {
    let SimpleStorage;
    let simpleStorage;
    let owner;

    beforeEach(async function() {
        SimpleStorage = await ethers.getContractFactory("SimpleStorage");
        simpleStorage = await SimpleStorage.deploy();
        await simpleStorage.deployed();
        [owner] = await ethers.getSigners();
    });

    it("Deve armazenar e recuperar o valor correto", async function () {
        await simpleStorage.set(100);
        expect(await simpleStorage.get()).to.equal(100);
    });
});

Para executar seus testes, execute o seguinte comando:

npx hardhat test

O Hardhat irá compilar seus contratos e executar os testes, oferecendo uma saída sobre o sucesso deles.

Conclusão

Nesta aula, cobrimos como integrar contratos Solidity com o Hardhat. Criamos um contrato Solidity simples, o compilamos, o implantamos em uma blockchain local, interagimos com ele e escrevemos testes automatizados. O Hardhat fornece um conjunto poderoso de ferramentas que facilita o desenvolvimento e teste de contratos inteligentes em um ambiente local, garantindo um processo de desenvolvimento mais tranquilo.

À medida que você continua sua jornada no desenvolvimento Ethereum, considere explorar recursos mais avançados do Hardhat, como plugins, scripts personalizados e integração com frameworks de front-end. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!