Ir para o conteúdo

Usando Hardhat para implantar na sua rede EVM

Introdução

Hardhat é um ambiente de desenvolvimento Ethereum que ajuda a gerenciar e automatizar as tarefas recorrentes inerentes à criação de contratos inteligentes e dApps. Ele funciona com qualquer rede EVM, incluindo as redes compatíveis com a Tanssi, para compilar e implantar contratos de forma transparente.

Este guia mostra como compilar, implantar e interagir com contratos inteligentes Ethereum na rede EVM de demonstração da Tanssi. Você pode adaptar para sua própria rede Tanssi adicionando a URL RPC dela à sua carteira EVM e alternando para essa rede.

Verificando pré-requisitos

Para este guia, você precisará do MetaMask instalado e configurado para funcionar com sua rede EVM da Tanssi. Você pode seguir este guia para configurar o MetaMask para a rede EVM de demonstração.

Criando um projeto Hardhat

Se ainda não tiver um projeto Hardhat, crie um seguindo os passos:

  1. Crie um diretório para o projeto

    mkdir hardhat && cd hardhat
    
  2. Inicialize o projeto, o que criará um package.json

    npm init -y
    
  3. Instale o Hardhat

    npm install hardhat
    
  4. Crie o projeto

    npx hardhat init
    

    Nota

    npx executa binários instalados localmente no projeto. Embora seja possível instalar o Hardhat globalmente, é recomendável instalá-lo localmente para controlar a versão por projeto.

  5. Um menu aparecerá permitindo criar um novo projeto ou usar um exemplo. Para este guia, escolha Create an empty hardhat.config.js

npx hardhat init 888    888                      888 888               888 888    888                      888 888               888 888    888                      888 888               888 8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888 888    888     "88b 888P"  d88" 888 888 "88b     "88b 888 888    888 .d888888 888    888  888 888  888 .d888888 888 888    888 888  888 888    Y88b 888 888  888 888  888 Y88b. 888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
👷 Welcome to Hardhat v2.22.2 👷‍
 What do you want to do? …   Create a JavaScript project   Create a TypeScript project   Create a TypeScript project (with Viem)   Quit

Isso criará um arquivo de configuração Hardhat (hardhat.config.js) no diretório do projeto.

Quando o projeto estiver pronto, instale também o plugin Ethers para usar a biblioteca Ethers.js com a rede:

npm install @nomicfoundation/hardhat-ethers ethers

Além disso, instale o plugin hardhat-ignition-ethers para implantar contratos com o Hardhat Ignition:

npm install --save-dev @nomicfoundation/hardhat-ignition-ethers

O arquivo do contrato

Com o projeto vazio criado, crie o diretório contracts:

mkdir contracts && cd contracts

O contrato de exemplo que será implantado se chama Box e armazena um valor recuperável depois. No diretório contracts, crie o arquivo Box.sol:

touch Box.sol

Abra o arquivo e adicione o contrato:

// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract Box {
    uint256 private value;

    // Emitido quando o valor armazenado é alterado
    event ValueChanged(uint256 newValue);

    // Armazena um novo valor no contrato
    function store(uint256 newValue) public {
        value = newValue;
        emit ValueChanged(newValue);
    }

    // Lê o último valor armazenado
    function retrieve() public view returns (uint256) {
        return value;
    }
}

O arquivo de configuração do Hardhat

Antes de implantar na sua rede Tanssi, ajuste o hardhat.config.js e crie um arquivo seguro para armazenar sua chave privada.

Exemplo de configuração para usar a rede EVM de demonstração ou a sua rede Tanssi:

// 1. Importe os plugins Ethers e Hardhat Ignition necessários para interagir com o contrato
require('@nomicfoundation/hardhat-ethers');
require('@nomicfoundation/hardhat-ignition-ethers');

// 2. Adicione sua chave privada com tokens da sua rede Tanssi
// Isto é apenas para exemplo — **nunca armazene suas chaves privadas em um arquivo JavaScript**
const privateKey = 'INSERT_PRIVATE_KEY';

module.exports = {
  // 3. Especifique a versão do Solidity
  solidity: '0.8.1',
  networks: {
    // 4. Adicione a especificação da sua rede EVM da Tanssi
    dancelight: {
      url: 'https://services.tanssi-testnet.network/dancelight-2001/',
      chainId: 5678, // Preencha o ChainID EVM da sua rede Tanssi
      accounts: [privateKey]
    }
  }
};

Pronto para implantar!

Compilando Solidity

Compile o contrato com:

npx hardhat compile
npx hardhat compile Compiled 8 Solidity files successfully (evm target: paris).

Após a compilação, o diretório artifacts é criado com bytecode e metadados (.json). Considere adicioná-lo ao .gitignore.

Implantando o contrato

A implantação usará o Hardhat Ignition, um framework declarativo para implantações. Saiba mais na documentação do Ignition.

Crie a estrutura para o módulo Ignition:

mkdir ignition ignition/modules && touch ignition/modules/Box.js

Depois, escreva o módulo do Ignition seguindo estes passos:

  1. Importe buildModule do Hardhat Ignition
  2. Exporte um módulo usando buildModule
  3. Use getAccount para selecionar a conta de deploy
  4. Defina gas price e gas limit customizados, se necessário
  5. Faça o deploy do contrato Box
  6. Retorne um objeto com o contrato para usá-lo em testes e scripts
// 1.  Import the `buildModule` function from the Hardhat Ignition module
const { buildModule } = require('@nomicfoundation/hardhat-ignition/modules');

// 2. Export a module using `buildModule`
module.exports = buildModule('BoxModule', (m) => {
  // 3. Use the `getAccount` method to select the deployer account
  const deployer = m.getAccount(0);

  // 4. Specify custom gas price and gas limit settings for the deployment
  const customGasPrice = 50000000000n;
  const customGasLimit = 1000000;

  // 5. Deploy the `Box` contract using the selected deployer account and custom gas settings
  const box = m.contract('Box', [], {
    from: deployer,
    gasPrice: customGasPrice,
    gasLimit: customGasLimit,
  });

  // 6. Return an object from the module including references to deployed contracts. This makes the deployed `Box` contract accessible for interaction in tests and scripts
  return { box };
});

Para executar o script e implantar o Box.sol, especifique o nome da rede conforme definido em hardhat.config.js. Sem rede, o Hardhat usa a rede local por padrão.

npx hardhat ignition deploy ./ignition/modules/Box.js --network dancelight

Confirme a rede quando solicitado. Em alguns segundos, o contrato será implantado e o endereço aparecerá no terminal. Se for outra rede Tanssi, ajuste o nome da rede para combinar com o hardhat.config.js.

npx hardhat ignition deploy ./ignition/modules/Box.js --network dancelight
✅ Confirm deploy to network dancelight (5678)? … yes Hardhat Ignition 🚀
Deploying [ BoxModule ]
Batch #1 Executed BoxModule#Box
[ BoxModule ] successfully deployed 🚀
Deployed Addresses
BoxModule#Box - 0xa84caB60db6541573a091e5C622fB79e175E17be

Parabéns, o contrato está ativo! Guarde o endereço para interagir na próxima etapa.

Interagindo com o contrato

Para interagir com o contrato implantado, abra o console do Hardhat:

npx hardhat console --network dancelight

Execute, linha a linha:

  1. Crie uma instância local de Box.sol

    const Box = await ethers.getContractFactory('Box');
    
  2. Conecte a instância ao contrato implantado usando o endereço

    const box = await Box.attach('0xa84caB60db6541573a091e5C622fB79e175E17be');
    
  3. Interaja com o contrato; por exemplo, chame store e salve um valor simples

    await box.store(5);
    

Sua conta EVM assinará a transação e a transmitirá. A saída se parecerá com:

npx hardhat console --network dancelight
Welcome to Node.js v20.9.0. Type ".help" for more information. const Box = await ethers.getContractFactory('Box'); undefined
const box = await Box.attach('0xa84caB60db6541573a091e5C622fB79e175E17be'); undefined
await box.store(5); ContractTransactionResponse {
provider: HardhatEthersProvider { ... },
blockNumber: null,
blockHash: null,
index: undefined,
hash: '0x1c49a64a601fc5dd184f0a368a91130cb49203ec0f533c6fcf20445c68e20264',
type: 2,
to: '0xa84caB60db6541573a091e5C622fB79e175E17be',
from: '0x3B939FeaD1557C741Ff06492FD0127bd287A421e',
nonce: 87,
gasLimit: 45881n,
gasPrice: 1107421875n,
maxPriorityFeePerGas: 1n,
maxFeePerGas: 1107421875n,
data: '0x6057361d0000000000000000000000000000000000000000000000000000000000000005',
value: 0n,
chainId: 5678n,
signature: Signature { r: "0x9233b9cc4ae6879b7e08b9f1a4bfb175c8216eee0099966eca4a305c7f369ecc", s: "0x7663688633006b5a449d02cb08311569fadf2f9696bd7fe65417860a3b5fc57d", yParity: 0, networkV: null },
accessList: [],
blobVersionedHashes: null
}
await box.retrieve(); 5n

Note seu endereço em from, o endereço do contrato e os dados enviados. Para recuperar o valor:

await box.retrieve();

Você deverá ver 5 ou o valor armazenado.

Nota

Se executar o retrieve imediatamente após armazenar, pode ver o valor antigo. Tente novamente após alguns instantes.

Parabéns, você implantou e interagiu com um contrato usando o Hardhat!

As informações apresentadas aqui foram fornecidas por terceiros e estão disponíveis apenas para fins informativos gerais. A Tanssi não endossa nenhum projeto listado e descrito no Site de Documentação da Tanssi (https://docs.tanssi.network/). A Tanssi Foundation não garante a precisão, integridade ou utilidade dessas informações. Qualquer confiança depositada nelas é de sua exclusiva responsabilidade. A Tanssi Foundation se exime de toda responsabilidade decorrente de qualquer confiança que você ou qualquer outra pessoa possa ter em qualquer parte deste conteúdo. Todas as declarações e/ou opiniões expressas nesses materiais são de responsabilidade exclusiva da pessoa ou entidade que as fornece e não representam necessariamente a opinião da Tanssi Foundation. As informações aqui não devem ser interpretadas como aconselhamento profissional ou financeiro de qualquer tipo. Sempre busque orientação de um profissional devidamente qualificado em relação a qualquer assunto ou circunstância em particular. As informações aqui podem conter links ou integração com outros sites operados ou conteúdo fornecido por terceiros, e tais sites podem apontar para este site. A Tanssi Foundation não tem controle sobre esses sites ou seu conteúdo e não terá responsabilidade decorrente ou relacionada a eles. A existência de qualquer link não constitui endosso desses sites, de seu conteúdo ou de seus operadores. Esses links são fornecidos apenas para sua conveniência, e você isenta e exonera a Tanssi Foundation de qualquer responsabilidade decorrente do uso dessas informações ou das informações fornecidas por qualquer site ou serviço de terceiros.
Última atualização: 9 de dezembro de 2025
| Criada: 9 de dezembro de 2025