Docs
Buscar⌘ K
  • Início
  • Sobre o The Graph
  • Redes Apoiadas
  • Contratos de Protocolo
  • Subgraphs
    • Substreams
      • Token API
        • AI Suite
          • Indexação
            • Recursos
              Subgraphs > How-to Guides

              6 minutos

              Categorize Marketplaces de NFT com Enums

              Use Enums para deixar o seu código mais limpo e menos vulnerável a erros. Veja um exemplo do uso deste em marketplaces de NFT.

              O que são Enums?

              Enums, ou tipos de enumeração, são um tipo de dados específico que permite definir um conjunto de valores específicos permitidos.

              Exemplo de Enums no seu Schema

              Se estiver a construir um subgraph para rastrear o histórico de posse de tokens em um mercado, cada token pode passar por posses diferentes, como OriginalOwner, SecondOwner, e ThirdOwner. Ao usar enums, é possível definir essas posses específicas, o que garante que só são nomeados valores predefinidos.

              É possível definir enums no seu schema; assim definidos, a representação de string dos valores de enum podem ser usados para configurar um campo de enum numa entidade.

              Com base no exemplo acima, uma definição de enum no seu schema pode ficar assim:

              1enum TokenStatus {2  OriginalOwner3  SecondOwner4  ThirdOwner5}

              Ou seja, quando usar o tipo TokenStatus no seu schema, a expectativa é de que seja exatamente um dos valores predefinidos: OriginalOwner, SecondOwner, ou ThirdOwner, assim garantindo a consistência e validez.

              Para saber mais sobre enums, veja Como Criar um Subgraph e a documentação da GraphQL⁠.

              Vantagens de Usar Enums

              • Clareza: Enums dão nomes significativos a valores, facilitando a navegação de dados.
              • Validação: Enums aplicam definições rígidas de valor, assim evitando entradas inválidas de dados.
              • Manutenibilidade: Enums permitem mudar ou adicionar novas categorias de maneira concentrada.

              Sem Enums

              Se escolher definir o tipo como um string em vez de usar um Enum, seu código poderá ficar assim:

              1type Token @entity {2  id: ID!3  tokenId: BigInt!4  owner: Bytes! # Proprietário do token5  tokenStatus: String! # Campo de string para rastrear o estado do token6  timestamp: BigInt!7}

              Neste schema, TokenStatus é um string simples sem valores permitidos específicos.

              Por que isto é um problema?

              • Não há restrições sobre valores TokenStatus, então qualquer string pode ser nomeado por acidente. Assim, fica difícil garantir que só estados válidos — como OriginalOwner, SecondOwner, ou ThirdOwner — serão configurados.
              • É fácil fazer erros de digitação, como Orgnalowner em vez de OriginalOwner, o que faria os dados, e queries em potencial, não confiáveis.

              Com Enums

              Em vez de nomear strings livres, é possível definir um enum para TokenStatus com valores específicos: OriginalOwner, SecondOwner, ou ThirdOwner. Usar um enum garante o uso de valores permitidos, e mais nenhum.

              Enums provém segurança de dados, minimizam os riscos de erros de digitação, e garantem resultados consistentes e confiáveis.

              Como Definir Enums para Marketplaces de NFT

              Nota: o guia a seguir usa o contrato inteligente de NFTs CryptoCoven.

              Para definir enums para os vários mercados com apoio a troca de NFTs, use o seguinte no seu schema de subgraph:

              1# Enum para Marketplaces com que o contrato CryptoCoven interagiu(provavelmente Troca/Mint)2enum Marketplace {3  OpenSeaV1 # Representa o comércio de um NFT CryptoCoven no marketplace4  OpenSeaV2 # Representa o comércio de um NFT CryptoCoven no marketplace OpenSeaV25  SeaPort # Representa o comércio de um NFT CryptoCoven no marketplace SeaPort6  LooksRare # Representa o comércio de um NFT CryptoCoven no marketplace LookRare7  # ...e outros marketplaces8}

              Como Usar Enums para Marketplaces de NFT

              Quando definidos, os enums podem ser usados no seu subgraph para categorizar transações ou eventos.

              Por exemplo: ao registrar vendas de NFT, é possível usar o enum para especificar o marketplace envolvido na ação.

              Como Implementar uma Função para Marketplaces de NFT

              Veja como implementar uma função para resgatar o nome de um marketplace do enum, como string:

              1export function getMarketplaceName(marketplace: Marketplace): string {2  // Usando comandos if-else para mapear o valor do enum para um string3  if (marketplace === Marketplace.OpenSeaV1) {4    return 'OpenSeaV1' // Se o marketplace for OpenSea, retornar sua representação de string5  } else if (marketplace === Marketplace.OpenSeaV2) {6    return 'OpenSeaV2'7  } else if (marketplace === Marketplace.SeaPort) {8    return 'SeaPort' // Se o marketplace for SeaPort, retornar sua representação de string9  } else if (marketplace === Marketplace.LooksRare) {10    return 'LooksRare' // Se o marketplace for LooksRare, retornar sua representação de string11    // ... e outros marketplaces12  }13}

              Melhores Práticas para o Uso de Enums

              • Nomes Consistentes: Deixe o seu código mais legível; use nomes mais claros e descritivos para valores de enum.
              • Gestão Centralizada: Mantenha enums num único arquivo para ficar mais consistente. Assim, os enums ficam mais fáceis de atualizar, garantindo uma fonte única e verdadeira de dados.
              • Documentação: Adicione comentários a enums para esclarecer o seu propósito e uso.

              Como Usar Enums em Queries

              Enums em queries ajudam a melhorar a qualidade de dados e deixam os seus resultados mais fáceis de interpretar. Eles funcionam como filtros e elementos de resposta, assim garantindo a consistência e reduzindo erros em valores de marketplace.

              Detalhes

              • Filtros com Enums: Enums fornecem filtros claros, permitindo a inclusão ou exclusão clara de marketplaces específicos.
              • Enums em Respostas: Enums garantem que só marketplaces reconhecidos sejam retornados, trazendo resultados consistentes e precisos.

              Exemplos de Query

              Query 1: Conta com Mais Interações de Marketplace em NFT

              Este query faz o seguinte:

              • Encontra a conta com mais interações únicas com marketplaces de NFT, ótimo para analisar atividade entre marketplaces.
              • O campo de marketplaces usa o enum de marketplace, garantindo valores consistentes e validados na resposta.
              1{2  accounts(first: 1, orderBy: uniqueMarketplacesCount, orderDirection: desc) {3    id4    sendCount5    receiveCount6    totalSpent7    uniqueMarketplacesCount8    marketplaces {9      marketplace # Este campo retorna o valor de enum representando o marketplace10    }11  }12}

              Respostas

              Esta resposta fornece detalhes de conta e uma lista de interações singulares de marketplace com valores de enum, para mais clareza:

              1{2  "data": {3    "accounts": [4      {5        "id": "0xb3abc96cb9a61576c03c955d75b703a890a14aa0",6        "sendCount": "44",7        "receiveCount": "44",8        "totalSpent": "1197500000000000000",9        "uniqueMarketplacesCount": "7",10        "marketplaces": [11          {12            "marketplace": "OpenSeaV1"13          },14          {15            "marketplace": "OpenSeaV2"16          },17          {18            "marketplace": "GenieSwap"19          },20          {21            "marketplace": "CryptoCoven"22          },23          {24            "marketplace": "Unknown"25          },26          {27            "marketplace": "LooksRare"28          },29          {30            "marketplace": "NFTX"31          }32        ]33      }34    ]35  }36}

              Query 2: Marketplace mais ativo para transações do CryptoCoven

              Este query faz o seguinte:

              • Identifica o marketplace com maior volume de transações do CryptoCoven.
              • Usa o enum de marketplace para garantir que só tipos válidos de marketplace apareçam na resposta, deixando os seus dados mais confiáveis e consistentes.
              1{2  marketplaceInteractions(first: 1, orderBy: transactionCount, orderDirection: desc) {3    marketplace4    transactionCount5  }6}

              Resultado 2

              A resposta esperada inclui o marketplace e a contagem correspondente de transações, usando o enum para indicar o tipo de marketplace:

              1{2  "data": {3    "marketplaceInteractions": [4      {5        "marketplace": "Unknown",6        "transactionCount": "222"7      }8    ]9  }10}

              Query 3: Interações de Marketplace com Altos Números de Transação

              Este query faz o seguinte:

              • Resgata os quatro marketplaces com maior número de transações acima de 100, excluindo marketplaces “desconhecidos”.
              • Usa enums como filtros para garantir que só tipos válidos de marketplace sejam incluídos, deixando a resposta mais precisa.
              1{2  marketplaceInteractions(3    first: 44    orderBy: transactionCount5    orderDirection: desc6    where: { transactionCount_gt: "100", marketplace_not: "Unknown" }7  ) {8    marketplace9    transactionCount10  }11}

              Resultado 3

              O retorno esperado inclui os marketplaces que cumprem os critérios, cada um representado por um valor enum:

              1{2  "data": {3    "marketplaceInteractions": [4      {5        "marketplace": "NFTX",6        "transactionCount": "201"7      },8      {9        "marketplace": "OpenSeaV1",10        "transactionCount": "148"11      },12      {13        "marketplace": "CryptoCoven",14        "transactionCount": "117"15      },16      {17        "marketplace": "OpenSeaV1",18        "transactionCount": "111"19      }20    ]21  }22}

              Outros Recursos

              Para mais informações, veja o repositório⁠ deste guia.

              ⁠Editar no GitHub⁠

              Faça uma transferência para o The GraphComo Proteger Chaves de API com Componentes do Servidor Next.js
              Nesta página
              • O que são Enums?
              • Exemplo de Enums no seu Schema
              • Vantagens de Usar Enums
              • Sem Enums
              • Com Enums
              • Como Definir Enums para Marketplaces de NFT
              • Como Usar Enums para Marketplaces de NFT
              • Como Implementar uma Função para Marketplaces de NFT
              • Melhores Práticas para o Uso de Enums
              • Como Usar Enums em Queries
              • Exemplos de Query
              • Outros Recursos
              The GraphStatusRede de TestesAtivos de MarcaFórumSegurançaPolítica de PrivacidadeAcordo de Serviço