Aula 162: Integrando ENS em DApps
O Ethereum Name Service (ENS) é um serviço de nomes de domínio descentralizado construído sobre a blockchain do Ethereum. Ele mapeia nomes de domínio legíveis por humanos, como exemplo.eth
, para identificadores legíveis por máquinas, como endereços de carteira e contratos inteligentes. Integrar o ENS em sua aplicação descentralizada (DApp) proporciona uma experiência mais amigável para o usuário. Nesta aula, vamos explorar como integrar o ENS em seu DApp utilizando Solidity e JavaScript.
Pré-requisitos
Antes de começar, garanta que você possui o seguinte:
- Compreensão básica do Ethereum e contratos inteligentes.
- Familiaridade com JavaScript e web3.js.
- Uma carteira Ethereum em funcionamento (como MetaMask) e acesso à blockchain do Ethereum (por exemplo, através do Infura).
Configurando Seu Projeto
-
Crie um novo diretório para o seu projeto:
mkdir ens-dapp cd ens-dapp
-
Inicialize um novo projeto Node.js:
npm init -y
-
Instale os pacotes necessários:
npm install web3 ethers @ensdomains/ensjs
-
Crie um arquivo HTML (
index.html
):<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DApp ENS</title> </head> <body> <h1>DApp ENS</h1> <input type="text" id="address" placeholder="Digite o nome ENS (ex: exemplo.eth)"> <button id="resolve">Resolver ENS</button> <div id="result"></div> <script src="https://cdn.jsdelivr.net/npm/web3/dist/web3.min.js"></script> <script src="app.js"></script> </body> </html>
-
Crie um arquivo JavaScript (
app.js
):
Resolvendo um Domínio ENS
Nesta seção, vamos escrever um código para resolver um domínio ENS para seu endereço Ethereum.
const { ethers } = require("ethers");
const provider = new ethers.providers.Web3Provider(window.ethereum);
async function resolveENS() {
const ensName = document.getElementById("address").value;
const resolver = await provider.getResolver(ensName);
if (resolver) {
const address = await resolver.getAddress();
document.getElementById("result").innerText = `Endereço: ${address}`;
} else {
document.getElementById("result").innerText = "Nome ENS não resolvido.";
}
}
document.getElementById("resolve").onclick = async () => {
await provider.send("eth_requestAccounts", []);
await resolveENS();
};
Explicação
- Inicializamos uma nova instância do
Web3Provider
usandoethers.js
, que se conecta à blockchain do Ethereum. - A função
resolveENS
obtém o nome ENS do campo de entrada, obtém o resolvedor para o nome e, se existir, busca o endereço Ethereum relacionado. - Se for bem-sucedido, o endereço Ethereum é exibido; caso contrário, uma mensagem de erro é mostrada.
Implantando um Contrato Inteligente com Integração ENS
Agora, vamos criar um contrato inteligente simples que funcione com o ENS.
Exemplo de Contrato Inteligente
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ENSExample {
mapping(string => address) public ensAddresses;
function setAddress(string memory ensName) public {
require(msg.sender != address(0), "Endereço inválido");
ensAddresses[ensName] = msg.sender;
}
function getAddress(string memory ensName) public view returns (address) {
return ensAddresses[ensName];
}
}
Explicação
- O contrato
ENSExample
permite que os usuários registrem seus endereços Ethereum com um nome ENS correspondente. - A função
setAddress
permite que o usuário vincule seu nome ENS ao seu endereço. - A função
getAddress
recupera o endereço Ethereum associado a um nome ENS.
Implantando o Contrato Inteligente
Você pode implantar seu contrato inteligente usando ferramentas como Remix ou Truffle. Certifique-se de que seu contrato esteja compilado e implante-o na rede Ethereum de sua escolha.
Conclusão
Nesta aula, exploramos como integrar o ENS em uma aplicação descentralizada. Escrevemos um código em JavaScript para resolver nomes ENS e criamos um simples contrato inteligente em Solidity que gerenciava registros ENS. Ao implementar o ENS, você pode aprimorar a usabilidade de seus DApps, facilitando a interação dos usuários com seus contratos inteligentes e serviços.
Com essa compreensão básica, você pode agora experimentar ainda mais com a integração do ENS e expandir a funcionalidade de seus DApps!