WEB3DEV

Cover image for Como Construir uma Galeria NFT Usando a API NFT GraphQL do QuickNode
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Como Construir uma Galeria NFT Usando a API NFT GraphQL do QuickNode

Um tutorial passo a passo sobre como construir uma galeria NFT interativa usando API NFT GraphQL do QuickNode, icy.tools, JavaScript, Next.js e Tailwind CSS

https://cdn.hashnode.com/res/hashnode/image/upload/v1683118630832/b58d9b2f-56ab-495b-a741-d67eb651b0f0.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp

ÍNDICE

  1. O que é o QuickNode?
  2. As Funcionalidades
  3. O Stack de Tecnologia
  4. Os Pré-requisitos
  5. Passo 1: Criando o Projeto Next.js
  6. Passo 2: Instalando a Biblioteca icy-nft-hooks
  7. Passo 3: Obtendo uma Chave de API NFT
  8. Passo 4: Instalando o Pacote dotenv
  9. Passo 5: Obtendo o NFT
  10. Passo 6: Exibir a Galeria NFT
  11. Passo 7: Implantar a Galeria NFT
  12. Base de Código Completa
  13. Fontes Adicionais
  14. 🎉BOOM🎉

Neste tutorial, você construirá uma galeria de NFTs usando a API NFT GraphQL do QuickNode, Icy.tools, React, JavaScript, Next.js, Vercel e TailwindCSS. O aplicativo da Web React fornecerá uma interface de usuário exibindo uma visualização em grade de todos os NFTs mantidos por qualquer Ethereum Name Service (ENS ou Serviço de Nome de Domínio Ethereum). Você obterá dados do NFT com a icy-nft-tools.

https://cdn.hashnode.com/res/hashnode/image/upload/v1678122619888/38ea13db-1844-4632-923c-c2afcfea0ad8.png?auto=compress,format&format=webp

O que é o QuickNode?

O QuickNode é uma plataforma blockchain que fornece infraestrutura para desenvolvedores construírem e escalarem aplicativos descentralizados (DApps). Ele oferece um conjunto de ferramentas e serviços, incluindo uma API de desenvolvedor, para facilitar aos desenvolvedores a construção, teste e implantação de DApps em múltiplas redes blockchain. O QuickNode visa simplificar o processo de construção em blockchain e torná-lo mais acessível para desenvolvedores, ao mesmo tempo que fornece infraestrutura de alto desempenho para suportar a crescente demanda por aplicações descentralizadas.

O Que é a API NFT GraphQL do QuickNode?

Inscreva-se para obter a API NFT GraphQL de forma gratuita!

A API NFT GraphQL é um conjunto de ferramentas e serviços que permite aos desenvolvedores interagir com plataformas de NFT usando a linguagem de consulta GraphQL. Esta API fornece uma maneira conveniente para os desenvolvedores descobrirem, rastrearem e analisarem NFTs com dados de volume e piso em tempo real, gráficos históricos e dados de tendências, valores de portfólio de NFT em qualquer carteira e muito mais. Este serviço também permite buscar os NFTs pertencentes a um endereço específico. Neste tutorial, exploraremos como usar esse recurso.

Explore o Mercado QuickNode!

Além de sua API NFT GraphQL, o QuickNode oferece muito mais ferramentas e soluções para desenvolvedores Web3 em seu mercado. Isso inclui um estimador de preço de gás, Crossmint API NFT , API antifraude GoPlus e uma enorme biblioteca de guias, tutoriais, documentação e outros recursos para desenvolvedores criados por especialistas.

Ao final deste tutorial, você será capaz de:

  • Instalar, configurar e inicializar as bibliotecas icy-nft-hooks.
  • Criar um novo projeto Next.js e aprender como usar as icy-nft-hooks para interagir com APIs NFT GraphQL do QuickNode para recuperação de dados.
  • Buscar e armazenar dados de NFTs recuperados para um endereço de carteira em uma variável de estado e exibir os resultados na interface do usuário.

As Funcionalidades

  • Os usuários podem inserir Ethereum Name Service (ENS) no campo "Ethereum Name Service".
  • O aplicativo irá interagir com os pontos de extremidade (endpoints) da API do provedor e buscar os dados do NFT usando Icy.tools.
  • O aplicativo entrega uma visualização em grade da galeria de todos os NFTs que o endereço da carteira contém para a interface do usuário.

O Stack de Tecnologia

Os Pré-requisitos

Tenha Git, Yarn, TailwindCSS e Node.js instalados em sua máquina.

Compreensão básica de JavaScript, React e TailwindCSS.

Passo 1: Criando o Projeto Next.js

Vamos configurar nosso ambiente e instalar as dependências necessárias. Abra um terminal em sua máquina e navegue até o local do diretório onde deseja armazenar seu projeto Next.js. Em seguida, execute o seguinte comando:


yarn create next-app .

Enter fullscreen mode Exit fullscreen mode

Este comando cria um novo projeto inicial Next.js no diretório especificado. Agora, inicie o servidor de desenvolvimento local executando o seguinte comando:


yarn dev

Enter fullscreen mode Exit fullscreen mode

O comando acima configura seu ambiente de desenvolvimento local. Copie e cole http://localhost:3000 em seu navegador para iniciar o projeto inicial Next.js. Esta é a aparência que seu navegador da Web deve ter:

https://cdn.hashnode.com/res/hashnode/image/upload/v1676725276904/776d554b-a7c7-4cbb-8333-4740378fddc7.png?auto=compress,format&format=webp

O aplicativo atual contém apenas o código inicial fornecido pelo Next.js, que modificaremos ao longo deste tutorial para criar a interface de front-end do usuário personalizada para nosso painel de mercado NFT.

Agora, vamos instalar o Tailwind CSS e suas dependências necessárias usando o npm, executando o seguinte comando no terminal:


npm install -D tailwindcss postcss autoprefixer

Enter fullscreen mode Exit fullscreen mode

Execute o comando init para gerar os arquivos tailwind.config.js e postcss.config.js:


npx tailwindcss init -p

Enter fullscreen mode Exit fullscreen mode

No seu arquivo tailwind.config.js, adicione os caminhos para todos os seus arquivos de modelo atualizando o código com o seguinte:

Arquivo: ./tailwind.config.js


/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./pages/**/*.{js,ts,jsx,tsx}",
    "./components/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Enter fullscreen mode Exit fullscreen mode

Adicione as diretivas @tailwind para cada uma das camadas do Tailwind ao seu arquivo globals.css. A parte superior do seu arquivo globals.css deve ficar assim:

Arquivo: ./styles/globals.css


@tailwind base;
@tailwind components;
@tailwind utilities;

...

Enter fullscreen mode Exit fullscreen mode

Passo 2: Instalando a Biblioteca icy-nft-hooks

Buscaremos dados em tempo real usando a API NFT GraphQL. Vamos instalar e configurar a biblioteca de ganchos React icy-nft-hooks como um empacotador para a API GraphQL da icy.tools. Essa biblioteca nos permite obter dados de mercados de NFTs em tempo real, como preço mínimo, vendas, preço médio, volume, valor de mercado, etc.

Instale icy-nft-hooks com o seguinte comando:


yarn add @quicknode/icy-nft-hooks
yarn add @apollo/client graphql

Enter fullscreen mode Exit fullscreen mode

No diretório pages, navegue até o arquivo _app.js. Copie e cole o seguinte código no arquivo _app.js.

Arquivo: ./pages/_app.js


import "../styles/globals.css";
import { IcyProvider } from "@quicknode/icy-nft-hooks";

export default function App({ Component, pageProps }) {
  return (
    <IcyProvider apiKey={process.env.QUICKNODE_NFT_API_KEY}>
      <Component {...pageProps} />
    </IcyProvider>
  );
}

Enter fullscreen mode Exit fullscreen mode

Estamos importando o gancho IcyProvider do pacote icy-nft-hooks e empacotando todo o aplicativo da Web com o gancho IcyProvider.

Passo 3: Obtendo uma Chave de API NFT

Como você pode ver no código acima, precisaremos de uma chave de API para buscar dados de mercados de NFT em tempo real. Para obter a chave de API, siga estas etapas:

Abra o link Icy Tools e clique no botão "Sign Up” (cadastrar-se).

https://cdn.hashnode.com/res/hashnode/image/upload/v1675274130326/c7c6ee24-8f96-4771-9880-7f53fef3daea.png?auto=compress,format&format=webp&auto=compress,format&format=webp

Insira os dados e clique no botão "Sign Up”.

https://cdn.hashnode.com/res/hashnode/image/upload/v1675275612856/ca9e1953-3d5b-447f-8fd5-8726e4bf3aac.png?auto=compress,format&format=webp&auto=compress,format&format=webp

Você chegará à página "Explore” (explorar) do icey.tools, onde verá algo assim:

https://cdn.hashnode.com/res/hashnode/image/upload/v1675275861430/8d471764-2e43-4a36-a17d-43d2ef63e5b0.png?auto=compress,format&format=webp&auto=compress,format&format=webp

Clique no botão "Settings” (configurações) no lado esquerdo. Você verá a chave de API.

https://cdn.hashnode.com/res/hashnode/image/upload/v1675276103932/aecaf2cd-a165-44aa-a911-3fb1262a60da.png?auto=compress,format&format=webp&auto=compress,format&format=webp

Passo 4: Instalando o Pacote dotenv

Recomendo armazenar informações sensíveis, como chaves de API, em variáveis ​​de ambiente, em vez de codificá-las rigidamente no código. Usaremos o pacote dotenv para armazenar dados confidenciais. Execute o seguinte comando para instalar o pacote dotenv:


yarn add --dev dotenv

Enter fullscreen mode Exit fullscreen mode

Crie um arquivo .env na pasta raiz. Adicione a variável de ambiente:


QUICKNODE_NFT_API_KEY = "c34kndhiflmln-API-KEY"

Enter fullscreen mode Exit fullscreen mode

Passo 5: Obtendo o NFT

Nesta seção, criaremos a função WalletNFTs que aceita o ENS como entrada do usuário e retorna a coleção de NFTs pertencentes ao endereço de entrada. A biblioteca @quicknode/icy-nft-hook nos fornece o método getNFTsByOwner que iremos implementar e utilizar dentro de nossa função WalletNFTs. O DApp NFT Gallery aceitará endereços de carteira Ethereum como entrada.

Crie um novo arquivo WalletNFTs.js e copie o código abaixo.

Arquivo: ./pages/WalletNFTs.js


import { useWalletNFTs } from "@quicknode/icy-nft-hooks";
import { useState } from "react";

function WalletNFTs() {
  const [ensName, setEnsName] = useState("vitalik.eth"); //vitalik.eth
  const [cursor, setCursor] = useState("");
  const { nfts, isSearchValid, pageInfo } = useWalletNFTs({
    ensName,
    first: 12,
    after: cursor,
  });

  return (
    <div className="p-10 flex flex-col items-center">
      <div className="w-full h-full flex flex-col justify-start gap-5 items-center">
        <h1 className="text-7xl font-bold">NFT Gallery</h1>
        <h3 className="text-xl font-semibold">
          Powered by{" "}
          <a
            className="underline"
            href="https://developers.icy.tools/?utm_source=quicknode&utm_campaign=quicknode-header"
          >
            QuickNode's GraphQL NFT API
          </a>
        </h3>
      </div>
      <div className="flex-left flex-col mt-4">
        <label
          className="text-white text-2xl font-extrabold pb-2"
          htmlFor="wallet-address"
        >
          &nbsp; Ethereum Name Service &nbsp;
        </label>
        <div className="search">
          <input
            className="px-3 py-2 rounded-md"
            type="text"
            value={ensName}
            onChange={(e) => setEnsName(e.target.value)}
            style={{
              outlineColor:
                !isSearchValid && ensName.length > 0 ? "red" : undefined,
            }}
          />
        </div>
      </div>

      <div className="grid grid-cols-4 mt-8 gap-4">
        {console.log(nfts)}
        {nfts.map((nft) => {
          const contract = nft.contract;
          console.log(contract);
          const imageUrl = nft.images.find((i) => !!i.url)?.url;

          return (
            <div
              className="flex flex-col rounded border p-4"
              key={`${nft.tokenId}${nft.contract.address}`}
            >
              <div className="w-full h-full rounded shadow flex justify-center items-center">
                <img
                  className="w-full h-full"
                  src={imageUrl ?? "/web3.png"}
                  alt="awesome nft"
                />
              </div>
              <div>
                <h1 className="font-bold">{contract.name}</h1>
                <h2 className="truncate">
                  {contract.symbol}#{nft.tokenId}
                </h2>
              </div>
            </div>
          );
        })}
      </div>

      {pageInfo?.hasNextPage && (
        <div
          style={{
            alignItems: "flex-end",
            width: "100%",
            justifyContent: "flex-end",
            display: "flex",
          }}
        >
          <button
            onClick={() => {
              setCursor(pageInfo.endCursor ?? undefined);
            }}
          >
            Next
          </button>
        </div>
      )}
    </div>
  );
}

export default WalletNFTs;

Enter fullscreen mode Exit fullscreen mode

Curiosamente, alguns NFTs não possuem imagens associadas a eles. Para resolver isso, adicionamos uma imagem padrão à grade como substituta caso um NFT não tenha uma imagem.

Você pode encontrar a imagem aqui.

Passo 6: Exibir a Galeria de NFTs

Estamos quase terminando nossa galeria de NFTs. Neste passo, vamos importar o componente WalletNFTs do arquivo WalletNFTs.js e utilizá-lo no arquivo index.js.

Arquivo: ./pages/index.js


import Head from "next/head";
import WalletNFTs from "./WalletNFTs";

export default function Home() {
  return (
    <>
      <Head>
        <title> Quicknode NFT Gallery </title>
        <meta name="description" content="Generated by create next app" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <WalletNFTs />
    </>
  );
}

Enter fullscreen mode Exit fullscreen mode

Agora abra o http://localhost:3000 no seu navegador. Você criou uma galeria de NFTs interativa.

Etapa 7: Implantar a Galeria de NFTs

Agora vamos implantar nosso aplicativo Next.js com Vercel seguindo as etapas abaixo:

  1. Acesse Vercel e faça login com sua conta GitHub.
  2. Clique no botão New Project (novo projeto) e selecione o repositório do seu projeto.
  3. Selecione o Framework como Next.js.
  4. Insira a variável de ambiente, 'QUICKNODE_NFT_API_KEY', e o valor definido para sua chave de API.
  5. Clique em Deploy (implantar) e agora sua Galeria de NFTs está no ar!

Base de Código Completa

Repositório GitHub do projeto completo: Galeria de NFTs

Link do site: site da galeria de NFTs

https://cdn.hashnode.com/res/hashnode/image/upload/v1678122702441/d8f44609-f4e8-4224-991d-6a035c86f862.png?auto=compress,format&format=webp

Fontes Adicionais

https://blog.developerdao.com/how-to-build-an-nft-market-dashboard-using-quicknodes-graphql-nft-api

https://github.com/AAYUSH-GUPTA-coder/nft-gallery-quicknode-tutorial

https://docs.icy.tools/developer-api/api-reference

🎉BOOM🎉

Você concluiu todo o tutorial. Se parabenize! Você aprendeu sobre o seguinte:

  • Provedor de nó QuickNode;
  • Configuração de um aplicativo Next.js e integração com Tailwind CSS;
  • Ganchos NFT da icy.tools: icy-nft-hooks;
  • Obtenção da API da icy.tools;
  • Configuração e uso do pacote dotenv;
  • Busca e exibição de NFTs pertencentes ao endereço.

Espero que você tenha aprendido algo novo ou resolvido um problema. Obrigado por ler. Divirta-se!

Você pode me seguir no Twitter, GitHub e Linkedin. Continue enviando suas sugestões e comentários!

Este artigo foi escrito por Aayush Gupta e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Top comments (0)