SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
28.11.2024

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

  1. Crie um novo diretório para o seu projeto:

    mkdir ens-dapp
    cd ens-dapp
  2. Inicialize um novo projeto Node.js:

    npm init -y
  3. Instale os pacotes necessários:

    npm install web3 ethers @ensdomains/ensjs
  4. 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>
  5. 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

  1. Inicializamos uma nova instância do Web3Provider usando ethers.js, que se conecta à blockchain do Ethereum.
  2. 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.
  3. 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

  1. O contrato ENSExample permite que os usuários registrem seus endereços Ethereum com um nome ENS correspondente.
  2. A função setAddress permite que o usuário vincule seu nome ENS ao seu endereço.
  3. 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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!