Lição 161: O Serviço de Nomes Ethereum (ENS)
O Serviço de Nomes Ethereum (ENS) é um sistema de nomeação descentralizado baseado na blockchain do Ethereum que permite aos usuários criar endereços legíveis para humanos para seus ativos Ethereum e outras aplicações descentralizadas (dApps). Em vez de usar longos endereços hexadecimais, os usuários podem interagir com contratos inteligentes e outros serviços usando nomes fáceis de lembrar, como "seunome.eth".
Visão Geral do ENS
O ENS funciona de forma semelhante ao Sistema de Nomes de Domínio (DNS) utilizado na internet. Ele permite que os usuários registrem um nome de domínio que pode apontar para vários recursos, como endereços Ethereum, hashes de conteúdo ou até mesmo outros nomes do ENS. Os componentes principais do ENS incluem:
- Resolvedor: Este é um contrato inteligente responsável por traduzir nomes do ENS em endereços Ethereum ou outros recursos.
- Registrador: Este contrato gerencia o registro de nomes do ENS e seus dados associados.
- Hashing de Nomes: O ENS usa um método chamado hashing para criar um identificador único (hash) para cada nome, garantindo unicidade e segurança.
Configurando Seu Ambiente de Desenvolvimento
Para começar a desenvolver com o ENS, você precisará das seguintes ferramentas:
- Node.js: Um ambiente de execução JavaScript para rodar seus scripts.
- npm ou yarn: Um gerenciador de pacotes para instalar bibliotecas necessárias.
- Truffle ou Hardhat: Frameworks para desenvolvimento de contratos inteligentes.
- Infura ou Alchemy: Serviços para se conectar à rede Ethereum.
Interagindo com o ENS
Para interagir com o ENS, podemos usar a biblioteca @ensdomains/ens
, que fornece uma maneira conveniente de consultar registros do ENS e realizar operações. Veja como instalá-la usando npm:
npm install @ensdomains/ens
Exemplo de Código
Aqui está um exemplo simples de como registrar e resolver um nome do ENS usando JavaScript. Vamos usar a biblioteca ethers.js para interagir com a blockchain do Ethereum.
Registrando um Nome do ENS
Primeiro, certifique-se de ter uma carteira Ethereum e algum Ether de teste. Abaixo, presumimos que você já tem um nome do ENS disponível para registro.
const { ethers } = require('ethers');
const { getContractAt } = require('@ensdomains/ens');
const ENDEREÇO_REGISTRADOR_ENS = '0x123...'; // Substitua pelo endereço real do contrato registrador
const provider = new ethers.providers.InfuraProvider('rinkeby', 'SUA_CHAVE_API_INFURA'); // Substitua pela sua chave API Infura
const wallet = new ethers.Wallet('SUA_CHAVE_PRIVADA', provider); // Substitua pela sua chave privada
async function registrarNomeENS(nome, endereco) {
const ens = getContractAt('ENSRegistry', ENDEREÇO_REGISTRADOR_ENS, wallet);
const nomeHash = ethers.utils.namehash(nome + '.eth');
// Registrando o nome do ENS
const tx = await ens.register(nomeHash, endereco);
await tx.wait();
console.log(`Registrado ${nome}.eth para ${endereco}`);
}
registrarNomeENS('seunome', wallet.address);
Resolvendo um Nome do ENS
Uma vez que você tenha registrado um nome do ENS, pode resolvê-lo para recuperar o endereço Ethereum associado.
async function resolverNomeENS(nome) {
const enderecoResolvedor = await ens.resolver(ethers.utils.namehash(nome + '.eth'));
const resolvedor = getContractAt('PublicResolver', enderecoResolvedor, provider);
const endereco = await resolvedor.addr(ethers.utils.namehash(nome + '.eth'));
console.log(`Resolvido ${nome}.eth para ${endereco}`);
}
resolverNomeENS('seunome');
Conclusão
O Serviço de Nomes Ethereum (ENS) simplifica a experiência do usuário ao interagir com o ecossistema Ethereum, fornecendo endereços legíveis para humanos. Com o ENS, os usuários podem facilmente registrar e resolver nomes, levando a uma experiência mais agradável no mundo descentralizado.
Nesta lição, abordamos os conceitos fundamentais por trás do ENS, configuramos nosso ambiente de desenvolvimento e escrevemos scripts de exemplo para registrar e resolver nomes do ENS. À medida que você continuar a explorar o ecossistema Ethereum, o ENS se tornará uma ferramenta essencial em seu conjunto de ferramentas. Boa codificação!