WEB3DEV

Cover image for Como Consultar Domínios do Serviço de Nomes da Solana (.sol)
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Como Consultar Domínios do Serviço de Nomes da Solana (.sol)

Antes de Começar

Fizemos uma parceria com a Bonfida para tornar o trabalho com dados do SNS (Solana Naming Service ou serviço de nomes da Solana) significativamente mais fácil. Confira a nova API Bonfida no QuickNode Marketplace! Essa API desenvolvida pela Bonfida aproveita os pontos de extremidade do QuickNode para consultar o Solana Name Service:

  • resolução .sol perfeita;
  • busca por transações de registro;
  • listagem de nomes de subdomínios;
  • recuperação de domínios de detidos por carteiras.

Gratuito para todos os usuários do QuickNode no QuickNode Marketplace.

Visão Geral

Em um guia recente, abordamos How to Create Solana Naming Service Domains. Solana Naming Service ("SNS") é um programa prático em Solana que permite aos usuários criar um nome de domínio legível que pode ser usado no lugar de uma chave pública.

O Que Você Vai Fazer

Neste guia, você aprenderá como consultar nomes de domínio Solana usando Typescript e SPL Name Service SDK da Bonfida. Isso permitirá que você:

  • Procure a carteira de um usuário pelo nome de domínio e;
  • Procure o(s) nome(s) de domínio de um usuário pela carteira.

O Que Você Vai Precisar

Configure Seu Ambiente

Para executar nossas consultas on-chain (na cadeia), usaremos Nodejs. Abra o editor de código de sua preferência e crie um novo diretório de projeto em seu terminal com:


mkdir sns-example
cd sns-example

Enter fullscreen mode Exit fullscreen mode

Crie name-search.ts. Usaremos isso como nossa aplicação principal para executar nossos scripts.


echo > name-search.ts

Enter fullscreen mode Exit fullscreen mode

Inicialize seu projeto com o sinalizador “yes” para usar valores padrão para seu novo pacote:


yarn init --yes
#or
npm init --y

Enter fullscreen mode Exit fullscreen mode

Instale as dependências da Solana Web3:


yarn add @solana/web3.js @bonfida/spl-name-service
#or
npm install @solana/web3.js @bonfida/spl-name-service

Enter fullscreen mode Exit fullscreen mode

Seu ambiente deve ser parecido com isto:

https://www.quicknode.com/guides/assets/images/0-6ac858aec377b0e2efb17b97cef20ec9.png

Vamos configurar sua aplicação com todas as dependências necessárias. Abra name-search.ts e, nas linhas 1-2, importe as seguintes dependências:


import { Connection, PublicKey } from "@solana/web3.js";
import { getDomainKey, NameRegistryState, getAllDomains, performReverseLookup } from "@bonfida/spl-name-service";

Enter fullscreen mode Exit fullscreen mode

As dependências @solana/web3.js nos permitirão criar uma conexão com a rede Solana e obter a chave pública de um endereço de carteira.

As importações @bonfida/spl-name-service nos ajudarão a consultar domínios .sol (explicaremos isso na seção subsequente).

Muito bem, você está pronto para começar.

Configure Seu Ponto de Extremidade do QuickNode

Para desenvolver em Solana, você precisará de um ponto de extremidade de API para se conectar à rede. Você pode usar nós públicos ou implantar e gerenciar sua própria infraestrutura. No entanto, se desejar tempos de resposta 8x mais rápidos, você pode deixar o trabalho pesado conosco. Veja por que mais de 50% dos projetos em Solana escolhem o QuickNode e inscreva-se para uma conta gratuita aqui. Você precisará usar um ponto de extremidade da rede principal para consultar os nomes de domínio Solana dos usuários. Copie o link do provedor HTTP:

https://www.quicknode.com/guides/assets/images/1-9a383a21010f3bea7fc8aec95f5cd5e4.png

Na linha 4 de name-search.ts, adicione o seguinte código, substituindo QUICKNODE _ RPC pelo link do seu provedor HTTP:


const QUICKNODE_RPC = 'https://example.solana-mainnet.quiknode.pro/000000/';//replace with your HTTP Provider from https://www.quicknode.com/endpoints
const SOLANA_CONNECTION = new Connection(QUICKNODE_RPC);

Enter fullscreen mode Exit fullscreen mode

Pesquisar Proprietário do Domínio .SOL

Vamos começar criando uma nova função async, getPublicKeyFromSolDomain, que usaremos para encontrar o proprietário da carteira de um determinado domínio .sol. Na linha 7 de name-search.ts, adicione:


async function getPublicKeyFromSolDomain(domain: string):Promise<string>{
    const { pubkey } = await getDomainKey(domain);
    const owner = (await NameRegistryState.retrieve(SOLANA_CONNECTION, pubkey)).registry.owner.toBase58();
    console.log(`The owner of SNS Domain: ${domain} is: `,owner);
    return owner;
}

Enter fullscreen mode Exit fullscreen mode

Nossa função aceita como parâmetro uma string, domain, que será o nome de domínio que queremos consultar (com ou sem a extensão ".sol"). Encontrar o proprietário do domínio é um processo de duas partes:

  1. Identifique a chave pública associada ao domínio (é como se fosse o endereço de cunhagem de um NFT). Fazemos isso acima usando a função getDomainKey e passando nosso parâmetro domain. Estamos procurando especificamente a chave pubkey do objeto retornado.
  2. Recupere o endereço do proprietário do registro de nomes. Fazemos isso invocando o método retrieve na classe NameRegistryState. O Registro de Nomes armazena informações sobre o nome de domínio na cadeia. O método retrieve retornará um objeto que inclui o registro, que contém a chave pública do proprietário (obtida chamando .registry.owner.toBase58()).

Depois de obter o endereço do proprietário, registramos e retornamos os resultados.

Pesquisa Reversa: Encontre Todos os Domínios Pertencentes a uma Carteira

Crie uma nova função abaixo de getPublicKeyFromSolDomain (linha 14 para nós) que aceite uma string de endereço de carteira e retorne um array de strings (para contabilizar usuários que possuem vários domínios Solana).


async function getSolDomainsFromPublicKey(wallet: string):Promise<string[]>{
    const ownerWallet = new PublicKey(wallet);
    const allDomainKeys = await getAllDomains(SOLANA_CONNECTION, ownerWallet);
    const allDomainNames = await Promise.all(allDomainKeys.map(key=>{return performReverseLookup(SOLANA_CONNECTION,key)}));
    console.log(`${wallet} owns the following SNS domains:`)
    allDomainNames.forEach((domain,i) => console.log(` ${i+1}.`,domain));
    return allDomainNames;
}

Enter fullscreen mode Exit fullscreen mode

Primeiro, obtemos a PublicKey da carteira que passamos como nosso parâmetro e, em seguida, usamos a função getAllDomains da Bonfida para buscar a PublicKey (chave pública) de todos os domínios pertencentes a essa carteira e armazenar os valores em allDomainKeys. Em seguida, usamos Promise.all para executar performReverseLookup para cada key (chave) armazenada em allDomainKeys. A função performReverseLookup resolverá o domínio .sol para a chave pública associada que passamos para ela. Como usamos Promise.all, nossa fórmula retornará um array de cada nome de domínio pertencente à carteira.

Depois de obter os domínios da carteira, percorremos o array e registramos cada nome de domínio.

Quase pronto. Bom trabalho!

Execute seu Código

Vamos declarar nossas consultas de pesquisa e chamar nossas funções. Na linha 23 de name-search.ts, cole:


//Exemplos para nossa pesquisa. Você pode substituir estes pela sua própria carteira ou consultas do Solana Naming Service.
const DOMAIN_TO_SEARCH = 'bonfida';
const WALLET_TO_SEARCH = 'E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk'; 

getPublicKeyFromSolDomain(DOMAIN_TO_SEARCH);
getSolDomainsFromPublicKey(WALLET_TO_SEARCH);

Enter fullscreen mode Exit fullscreen mode

Incluímos alguns exemplos de consultas nas variáveis ​​DOMAIN_TO_SEARCH e WALLET_TO_SEARCH, mas sinta-se à vontade para substituí-las por qualquer carteira ou domínio que você preferir pesquisar.

Finalmente, chamamos ambas as funções que criamos e passamos nossas variáveis ​​de pesquisa como parâmetros. Incluímos todo o nosso exemplo de código no Github aqui.

Agora, vamos executá-lo! Volte para o terminal e digite:


ts-node name-search.ts

Enter fullscreen mode Exit fullscreen mode

Você vê algo assim?

https://www.quicknode.com/guides/assets/images/2-20655e240dd8d84649c54f02db6000de.png

Bom trabalho!

Aplique suas Habilidades

Agora você tem as ferramentas para executar consultas na cadeia para encontrar proprietários de domínios ou domínios mantidos por uma carteira. Você pode aplicar esses mesmos conceitos ao seu próprio dApp Solana para melhorar a experiência dos usuários. Ainda não construiu um dApp? Consulte nosso guia Guide: How to Connect Users to Your dApp with the Solana Wallet Adapter and Scaffold.

Se você ainda não tem um domínio .sol e deseja adquirir um, confira nosso guia Guide: How to Create Solana Naming Service Domains.

Quer ajuda com este guia? Encontre-nos no Discord ou entre em contato conosco através do Twitter.

Nós amamos <3 feedbacks! Se você tiver algum comentário ou dúvida sobre este guia, informe-nos. Adoraríamos ouvir de você!

Este artigo foi escrito por Aaron Milano, e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Top comments (0)