Aula 228: Testnets do Ethereum (Goerli, Sepolia)
Os testnets do Ethereum são essenciais para desenvolvedores testarem seus contratos inteligentes, aplicações descentralizadas (dApps) e outros projetos baseados em Ethereum em um ambiente que simula a rede principal do Ethereum, mas sem os custos associados. Nesta aula, discutiremos duas testnets populares do Ethereum: Goerli e Sepolia. Também forneceremos exemplos de como interagir com essas redes usando Solidity e JavaScript.
O Que São Testnets?
Testnets são blockchains alternativas do Ethereum que replicam a funcionalidade da rede principal do Ethereum. Elas permitem que os desenvolvedores implantem e testem suas aplicações sem a necessidade de ETH real. As testnets mais utilizadas são Ropsten, Rinkeby, Kovan, Goerli e Sepolia. Cada uma possui características únicas, mas Goerli e Sepolia estão entre as mais favorecidas devido à sua estabilidade e suporte.
Características Principais
- Goerli: Uma testnet cross-client projetada para suportar diversos clientes Ethereum. Goerli utiliza o mecanismo de consenso Proof of Authority (PoA) e possui um ambiente estável para desenvolvedores.
- Sepolia: Uma testnet mais nova baseada em proof-of-stake que se assemelha de perto à rede principal do Ethereum após o Merge. É útil para testar aplicações em um ecossistema proof-of-stake sem gastar ETH real.
Configurando o Ambiente
Para interagir com as testnets Goerli e Sepolia, você precisará de:
- Node.js: Certifique-se de ter o Node.js instalado.
- npm ou yarn: Um gerenciador de pacotes para instalar as bibliotecas necessárias.
- Metamask: Uma extensão de carteira para interagir com as testnets.
- Infura ou Alchemy: Esses serviços fornecem acesso às redes Ethereum via API.
Instalação
Comece criando um novo diretório de projeto e inicializando o npm:
mkdir ethereum-testnets
cd ethereum-testnets
npm init -y
npm install ethers dotenv
Agora crie um arquivo .env
para armazenar seu ID de projeto do Infura ou Alchemy:
INFURA_PROJECT_ID=seu_id_de_projeto_infura
Conectando-se às Testnets
Com a configuração concluída, você pode agora conectar-se às testnets Goerli e Sepolia usando Ethers.js.
Código de Exemplo
Crie um novo arquivo chamado deploy.js
:
require('dotenv').config();
const { ethers } = require("ethers");
// Define o provedor para Goerli
const goerliProvider = new ethers.providers.InfuraProvider("goerli", process.env.INFURA_PROJECT_ID);
// Define o provedor para Sepolia
const sepoliaProvider = new ethers.providers.InfuraProvider("sepolia", process.env.INFURA_PROJECT_ID);
async function main() {
// Obtém as informações da rede
const goerliNetwork = await goerliProvider.getNetwork();
const sepoliaNetwork = await sepoliaProvider.getNetwork();
console.log(`Conectado à rede Goerli: ${goerliNetwork.name}`);
console.log(`Conectado à rede Sepolia: ${sepoliaNetwork.name}`);
}
main().catch(console.error);
Executando o Código
Certifique-se de executar seu arquivo JavaScript para testar sua conexão:
node deploy.js
Implantando um Contrato Inteligente
Em seguida, crie um contrato inteligente simples em Solidity. Crie um arquivo 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;
}
}
Compilando e Implantando o Contrato
Para compilar e implantar o contrato, utilize um pacote como solc
ou hardhat
. Para este exemplo, assumiremos que você está usando o Hardhat.
Instale o Hardhat:
npm install --save-dev hardhat
Inicialize o Hardhat:
npx hardhat
Siga as instruções para criar um novo projeto. Agora, você pode configurar seu arquivo hardhat.config.js
para incluir as redes:
require('@nomiclabs/hardhat-waffle');
module.exports = {
solidity: "0.8.0",
networks: {
goerli: {
url: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`,
accounts: [`0x${SUA_CHAVE_PRIVADA}`] // Mantenha sua chave privada segura!
},
sepolia: {
url: `https://sepolia.infura.io/v3/${process.env.INFURA_PROJECT_ID}`,
accounts: [`0x${SUA_CHAVE_PRIVADA}`]
}
}
};
Script de Implantação
Crie um script de implantação em scripts/deploy.js
:
async function main() {
const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
const simpleStorage = await SimpleStorage.deploy();
await simpleStorage.deployed();
console.log("SimpleStorage implantado em:", simpleStorage.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
Implantando em Goerli e Sepolia
Para implantar em qualquer uma das redes, use os seguintes comandos:
npx hardhat run scripts/deploy.js --network goerli
ou
npx hardhat run scripts/deploy.js --network sepolia
Considerações Finais
Entender como trabalhar com testnets do Ethereum, como Goerli e Sepolia, é crucial para desenvolver aplicações robustas. Você pode experimentar implantar contratos e testar funcionalidades sem o risco e os custos implicados na rede principal. À medida que o Ethereum continua a evoluir, especialmente com tendências como o proof-of-stake, testar suas aplicações garantirá que elas estejam preparadas para o uso no mundo real.
Em conclusão, aproveite as testnets para aprimorar seus contratos inteligentes e dApps antes de migrar para a rede principal. Boa codificação!