Implantação de um contrato no Hardhat
Implantação de um smart contract no Hardhat
1. Instalação
Primeiro, certifique-se de ter o Node.js e o npm instalados. Em seguida, crie um novo projeto e adicione o Hardhat:
mkdir my-hardhat-project
cd my-hardhat-project
npm init -y
npm install --save-dev hardhat
2. Criar um Projeto Hardhat
Inicialize um novo projeto Hardhat:
npx hardhat init
Siga as instruções para criar um arquivo hardhat.config.js
vazio.

Isso deixará apenas o arquivo hardhat.config.js
no seu repositório.
3. Tarefas e Plugins
O Hardhat funciona executando tarefas (tasks) e utilizando plugins. Você pode ver as tarefas disponíveis executando:
npx hardhat
Como exemplos de tarefas, temos: compilar, executar scripts, habilitar um servidor JSON-RPC, acessar o console, verificar um contrato no Etherscan, entre outras. Além disso, é possível utilizar plugins criados pelo Hardhat ou por terceiros que oferecem diversas ferramentas úteis para as diferentes etapas do desenvolvimento. Um plugin essencial é:
@nomicfoundation/hardhat-toolbox
,que contém praticamente tudo que é necessário para desenvolver:
Usar ethers.js para interagir com contratos
Fazer testes com Mocha e Chai
Implantar contratos com Hardhat Ignition
Interagir com a rede local de testes do Hardhat
Obter métricas do uso de gás
Medir a cobertura de testes
Para instalá-lo, execute o seguinte comando no diretório raiz do seu projeto:
npm install --save-dev @nomicfoundation/hardhat-toolbox
Você também deve adicionar a seguinte linha no início do seu arquivo hardhat.config.js
:
require("@nomicfoundation/hardhat-toolbox");
4. Escrever um Contrato Inteligente
Crie um diretório chamado contracts/
e dentro dele um arquivo Greeter.sol
com o seguinte código:
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "hardhat/console.sol";
contract Greeter {
string greeting;
constructor(string memory _greeting) {
console.log("Deploying a Greeter with greeting:", _greeting);
greeting = _greeting;
}
function greet() public view returns (string memory) {
return greeting;
}
function setGreeting(string memory _greeting) public {
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
greeting = _greeting;
}
}
5. Compilar Contratos
Para compilar seus contratos, execute:
npx hardhat compile
No nosso exemplo, a execução dessa tarefa criará um diretório chamado artifacts
.
O ABI do Greeter.sol
estará localizado em .artifacts/contracts/Greeter.sol/
e se chamará Greeter.json
.
6. Ativar uma Blockchain Local
Assim como o Remix, o Hardhat disponibiliza um blockchain local. Nessa rede, estarão disponíveis 20 contas (endereços com suas chaves privadas), cada uma com 10000 ETH de teste. Para ativar o blockchain local, execute no diretório raiz do seu repositório:
npx hardhat node
Lembre-se de que esses endereços e suas chaves privadas são públicas, pois todos os usuários do Hardhat têm acesso a elas. Se você usar esses endereços na mainnet ou em qualquer rede pública, perderá tudo que tiver neles. Esses endereços devem ser usados apenas no ambiente de testes do Hardhat.
7. Implantar um Contrato na Rede Local
Na raiz do seu repositório, crie um diretório chamado ignition
e dentro dele outro chamado modules
.
Depois, dentro de ignition/modules
, crie o script de implantação Greeter.js
com o seguinte conteúdo:
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const GreeterModule = buildModule("GreeterModule", (m) => {
const greet = m.contract("Greeter", ["Hola"]);
return { greet };
});
module.exports = GreeterModule;
Este código faz o seguinte:
Chama a função
buildModule
, que requer um ID de módulo e uma função callback. Nosso módulo se chamará"GreeterModule"
.A função callback é onde ocorre a definição do módulo. O parâmetro
m
passado ao callback é uma instância deModuleBuilder
, um objeto com métodos para definir e configurar instâncias de contratos.Ao chamar os métodos do
ModuleBuilder
, é criado um objetoFuture
, que representa o resultado da execução de uma etapa que o Hardhat Ignition precisa para implantar uma instância de contrato ou interagir com uma existente.Isso não executa nada na rede; apenas representa internamente.
Depois de criado o
Future
, ele é registrado no módulo e o método o retorna.Neste módulo, é criado um objeto
Future
chamando o métodocontract
, instruindo o Hardhat Ignition a implantar uma instância do contratoGreeter
, especificando"Hola"
como o único parâmetro do construtor.Por fim, o objeto
Future
que representa a instância do contratoGreeter
é retornado para ser acessível por outros módulos e para a realização de testes.
Para implantar o smart contract na rede local, execute o seguinte comando em um novo terminal:
npx hardhat ignition deploy ./ignition/modules/Greeter.js
Se tudo funcionar corretamente, você verá a mensagem com o endereço do contrato implantado na rede local.
Deployed Addresses
GreeterModule#Greeter - 0x5FbDB2315678afecb367f032d93F642f64180aa3
Last updated