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:
-
Crie um diretório para o projeto
mkdir hardhat && cd hardhat -
Inicialize o projeto, o que criará um
package.jsonnpm init -y -
Instale o Hardhat
npm install hardhat -
Crie o projeto
npx hardhat initNota
npxexecuta 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. -
Um menu aparecerá permitindo criar um novo projeto ou usar um exemplo. Para este guia, escolha Create an empty hardhat.config.js
👷 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
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:
- Importe
buildModuledo Hardhat Ignition - Exporte um módulo usando
buildModule - Use
getAccountpara selecionar a conta de deploy - Defina gas price e gas limit customizados, se necessário
- Faça o deploy do contrato
Box - 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.
✅ 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:
-
Crie uma instância local de
Box.solconst Box = await ethers.getContractFactory('Box'); -
Conecte a instância ao contrato implantado usando o endereço
const box = await Box.attach('0xa84caB60db6541573a091e5C622fB79e175E17be'); -
Interaja com o contrato; por exemplo, chame
storee salve um valor simplesawait box.store(5);
Sua conta EVM assinará a transação e a transmitirá. A saída se parecerá com:
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!
| Criada: 9 de dezembro de 2025