6 minutos de leitura
Visão geral
Os ambientes de desenvolvimento do Ethereum, como o Hardhat, facilitam o trabalho com contratos inteligentes e nós do Ethereum. Oferecem um conjunto de ferramentas que permitem escrever, testar e implementar contratos inteligentes de forma integrada. Neste guia, vamos criar um contrato inteligente «Hello World» e implementá-lo na rede de teste Sepolia, utilizando o Hardhat e o Quicknode.
Pré-requisitos
- Uma conta Quicknode (crie uma gratuitamente aqui)
- Uma carteira compatível com EVM (por exemplo, MetaMask)
- Node.js instalado
- Hardhat instalado (também abordaremos este tema ao longo do guia)
- Janela da CLI/Terminal
- Editor de código ou de texto (por exemplo, VSCode)
- ETH na rede de testes Sepolia (pode utilizar a «Quicknode Multi-chain Faucet» para obter alguma quantidade gratuitamente)
O que é o Hardhat?
O Hardhat é um ambiente de desenvolvimento que ajuda os programadores a compilar, implementar, testar e depurar as suas aplicações Ethereum. Possui uma das documentações mais claras e detalhadas. O Hardhat também disponibiliza a funcionalidade console.log(), semelhante à do JavaScript, para fins de depuração. Além disso, o Hardhat dispõe de vários plug-ins, o que aumenta ainda mais a sua funcionalidade.
Instalação do Hardhat e de outras dependências
Vamos instalar o Hardhat utilizando o npm, que vem incluído no Node.js.
Primeiro, crie um novo diretório de projeto e aceda a ele. Pode usar os seus próprios nomes aqui, se preferir:
mkdir HardhatTutorial
cd HardhatTutorial
Abra o terminal/cmd no diretório do seu projeto e digite os seguintes comandos.
npm init --y
npm install --save-dev hardhat
Agora que já temos o Hardhat instalado, vamos criar um novo projeto Hardhat. Vamos usar o npx para o fazer. O npx ajuda a executar programas do Node.js.
npx hardhat init
Será apresentada a interface CLI do Hardhat. Selecione «Criar um ficheiro hardhat.config.js vazio» e prima Enter.

Agora, vamos instalar outras dependências necessárias para trabalhar com o Hardhat.
npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai
Precisamos destas dependências para escrever testes automatizados para contratos.
O problema mais comum durante a instalação de pacotes com o npm pode ser uma falha interna do `node-gyp`. Pode seguir as instruções de instalação do node-gyp aqui.
Nota: Se se deparar com o problema do node-gyp, terá de garantir que a sua versão do Python corresponde a uma das versões compatíveis indicadas nas instruções acima.
Outro problema comum é um cache desatualizado. Limpa o teu cache do npm digitando simplesmente o seguinte no teu terminal:
npm cache clean
Agora, vamos obter uma chave privada para a nossa carteira, algum ETH de teste para pagar o gás e configurar um nó Ethereum; tudo isto será necessário para implementarmos o nosso contrato inteligente.
Criação/Recuperação da Chave Privada
Vamos precisar de uma carteira Ethereum para pagar a implementação do nosso contrato inteligente.
Assim que a sua carteira estiver criada e tiver obtido a sua chave privada, iremos adicioná-la ao ficheiro de configuração do Hardhat (por exemplo, hardhat.config.js) na próxima secção.
Pode seguir os guias do Quicknode para gerar uma chave privada e um endereço Ethereum em JavaScript, Ruby, Python, Go e PHP.
Para obter a chave privada da sua carteira MetaMask, siga estas instruções:
- Clique no ícone do MetaMask, uma cabeça de raposa estilizada, no seu navegador. Se não o vir, verifique a página de extensões do seu navegador.
- Clique no símbolo ⋮ e, em seguida, em «Detalhes da conta».
- Em seguida, clique em «Mostrar chave privada » e siga as instruções.

Copie e guarde a chave privada; vamos precisar dela nas etapas seguintes.
Recomenda-se guardar informações confidenciais, como chaves privadas, num ficheiro .env e importá-las para o ficheiro de configuração através de variáveis de ambiente, ou criar uma nova carteira MetaMask secundária exclusivamente para fins de desenvolvimento.
Obter ETH da Testnet
Vamos implementar o nosso contrato na rede de teste Sepolia. Para começar, vamos precisar de algum ETH de teste na nossa carteira MetaMask, como vimos no passo anterior.
Aceda ao Quicknode Multi-Chain Faucet e ligue a sua carteira ou cole o endereço da mesma. Terá de selecionar a cadeia Ethereum e a rede Sepolia e, em seguida, solicitar fundos.
Nota: será necessário ter um saldo na rede principal da Ethereum de, pelo menos, 0,001 ETH para poder utilizar a fonte de recompensas.

Configurar um ponto de acesso Quicknode para a Ethereum
Para implementar o nosso contrato na blockchain Sepolia da Ethereum, vamos precisar de acesso a um nó da Ethereum Sepolia. Para isso, podemos utilizar praticamente qualquer cliente Ethereum, como o Geth ou o OpenEthereum (anteriormente conhecido como Parity). Como esse processo é um pouco complicado para implementar um único contrato, vamos simplesmente criar uma conta gratuita no Quicknode aqui e gerar facilmente um endpoint da Ethereum. Depois de criares o teu ponto de extremidade gratuito da Ethereum Sepolia, mantém a URL do teu fornecedor HTTP à mão, pois vais precisar dela na próxima secção.

Configurar o ficheiro de configuração
Abra o ficheiro hardhat.config.js e cole o seguinte texto nele:
require("@nomiclabs/hardhat-waffle");
const endpointUrl = "ADD_YOUR_QUICKNODE_URL_HERE";
const privateKey = "ADD_YOUR_PRIVATE_KEY_HERE";
module.exports = {
solidity: "0.8.21",
networks: {
sepolia: {
url: endpointUrl,
accounts: [privateKey],
},
},
};
Substitua ADD_YOUR_PRIVATE_KEY_HERE pela chave privada que obtivemos no passo anterior e substitua ADD_YOUR_QUICKNODE_URL_HERE pelo URL do nó HTTP que obtivemos no passo anterior, e guarde o ficheiro.
Explicação do código acima:
-
Linha 1: Importação do pacote hardhat-waffle.
-
Linhas 3-4: Definição do URL do ponto final e da chave privada.
-
Linhas 6-14: Menção à versão do Solidity e definição da rede «sepolia».
Criação de um contrato
Agora, para o nosso contrato, crie um novo diretório chamado «contracts» e coloque um novo ficheiro chamado «HelloWorld.sol» dentro dele.
mkdir contracts && echo > contracts/HelloWorld.sol
Copia e cola o código seguinte no teu ficheiro Solidity HelloWorld.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
string saySomething;
constructor() {
saySomething = "Hello World!";
}
function speak() public view returns(string memory) {
return saySomething;
}
}
Explicação do código acima:
- Linha 1: Especificação do tipo de licença SPDX, que foi adicionada a partir da versão ^0.6.8 do Solidity.
Sempre que o código-fonte de um contrato inteligente é disponibilizado ao público, estas licenças podem ajudar a resolver ou evitar problemas relacionados com direitos de autor. Se não pretender especificar nenhum tipo de licença, pode utilizar uma licença especial, a UNLICENSED, ou simplesmente ignorar todo o comentário (isso não resultará num erro, mas apenas num aviso).
-
Linha 2: Declaração da versão do Solidity.
-
Linha 4: Início do nosso contrato denominado
Olá, Mundo. -
Linha 6: Criar uma variável
saySomethingdo tipo string. -
Linhas 8-10: Inicialização do construtor e armazenamento da cadeia de caracteres «Hello World!» na
saySomethingvariável. -
Linhas 12-14: Criar uma função chamada
falardo tipo público, que irá devolver a cadeia de caracteres armazenada nosaySomethingvariável.
Guarde o ficheiro e compile o contrato utilizando o seguinte comando do Hardhat.
npx hardhat compile
Se o seu contrato for compilado com sucesso, o resultado será semelhante a este:

Implementação do contrato inteligente «Hello World»
Agora, para implementar o nosso contrato, vamos criar um ficheiro deploy.js num novo diretório chamado scripts.
mkdir scripts && echo > scripts/deploy.js
Copia e cola o seguinte no teu ficheiro deploy.js:
async function main() {
const [deployer] = await ethers.getSigners();
console.log(
"Deploying contracts with the account:",
deployer.address
);
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();
console.log("Contract deployed at:", contract.address);
const saySomething = await contract.speak();
console.log("saySomething value:", saySomething);
}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});
Explicação do código acima.
-
Linha 1: Iniciar uma função assíncrona chamada
principal. -
Linha 3: Obter o endereço Ethereum para assinar a transação e guardá-lo no endereço do «deployer».
-
Linhas 5-8: Imprimir o endereço Ethereum juntamente com uma cadeia de caracteres na consola.
-
Linha 10: Chamada ao método ethers.js ContractFactory. Isto irá procurar o
HelloWorld.solficheiro e devolver uma instância que possamos utilizarContractFactorymétodos ativados. -
Linha 11: A chamar o `deploy` em
ContractFactorypara implementar o contrato. -
Linha 13: Imprimir o endereço do contrato implementado na consola.
-
Linha 15: Chamada à função
falardo contrato implementado. -
Linha 17: Imprimir o valor de retorno da função
falarpara a consola. -
Linha 20: Chamada da função
principal. -
Linhas 21-24: Verificar se há erros, apresentar uma mensagem caso haja algum erro e encerrar o processo.
Guarde o ficheiro e execute o seguinte para implementar o contrato.
npx hardhat run scripts/deploy.js --network sepolia
Após a implementação bem-sucedida do contrato, irá ver uma saída que contém o endereço do contrato implementado e o valor de retorno da função «speak», ou seja, o valor de «saySomething».

Podemos verificar a implementação copiando e colando o endereço do contrato implementado na barra de pesquisa do Sepolia Etherscan. Isto irá apresentar informações sobre o contrato implementado.

Conclusão
E pronto! Já dominas os conceitos básicos da criação, compilação e implementação de contratos inteligentes com o Hardhat. Mas não é tudo – o Hardhat também oferece ferramentas para testar e depurar o teu código. Para aprofundares os teus conhecimentos, consulta a documentação oficial do Hardhat.
Subscreva a nossa newsletter para receber mais artigos e guias sobre o Ethereum. Se tiver alguma dúvida, não hesite em utilizar o nosso canal dedicado no Discord ou em enviar os seus comentários através do formulário abaixo. Mantenha-se a par das últimas novidades seguindo-nos no Twitter e no nosso canal de anúncios do Telegram.
Adoramos ❤️ os vossos comentários!
Diz-nos se tiveres algum comentário ou sugestão de novos temas. Adoraríamos saber a tua opinião.
