Docs
La Recherche⌘ K
  • Accueil
  • À propos de The Graph
  • Réseaux pris en charge
  • Contrats du Protocole
  • Subgraphs
    • Substreams
      • Token API
        • AI Suite
          • Indexing
            • Resources
              Subgraphs > Guides pratiques

              7 minutes

              Catégoriser les marketplaces NFT à l’aide d’Enums

              Utilisez des Enums pour rendre votre code plus propre et moins sujet aux erreurs. Voici un exemple complet d’utilisation des Enums sur les marketplaces NFT.

              Que sont les Enums ?

              Les Enums, ou types d’énumération, sont un type de données spécifique qui vous permet de définir un ensemble de valeurs spécifiques et autorisées.

              Exemple d’Enums dans Votre Schéma

              Si vous construisez un subgraph pour suivre l’historique de la propriété des jetons sur une marketplace, chaque jeton peut passer par différents propriétaires, tels que OriginalOwner, SecondOwner, et ThirdOwner. En utilisant des enums, vous pouvez définir ces propriétaires spécifiques, en vous assurant que seules des valeurs prédéfinies sont assignées.

              Vous pouvez définir des enums dans votre schéma et, une fois définis, vous pouvez utiliser la représentation en chaîne de caractères des valeurs enum pour définir un champ enum sur une entité.

              Voici à quoi pourrait ressembler une définition d’enum dans votre schéma, basée sur l’exemple ci-dessus :

              1enum TokenStatus {2  OriginalOwner3  SecondOwner4  ThirdOwner5}

              Ceci signifie que lorsque vous utilisez le type TokenStatus dans votre schéma, vous attendez qu’il soit exactement l’une des valeurs prédéfinies : OriginalOwner, SecondOwner, ou ThirdOwner, garantissant la cohérence et la validité des données.

              Pour en savoir plus sur les enums, consultez Création d’un Subgraph et documentation GraphQL ⁠.

              Avantages de l’Utilisation des Enums

              • Clarté : Les enums fournissent des noms significatifs pour les valeurs, rendant les données plus faciles à comprendre.
              • Validation : Les enums imposent des définitions de valeurs strictes, empêchant les entrées de données invalides.
              • Maintenabilité : Lorsque vous avez besoin de changer ou d’ajouter de nouvelles catégories, les enums vous permettent de le faire de manière ciblée.

              Sans Enums

              Si vous choisissez de définir le type comme une chaîne de caractères au lieu d’utiliser un Enum, votre code pourrait ressembler à ceci :

              1type Token @entity {2  id: ID!3  tokenId: BigInt!4  owner: Bytes! # Propriétaire du jeton5  tokenStatus: String! # Champ de type chaîne pour suivre l'état du jeton6  timestamp: BigInt!7}

              Dans ce schéma, TokenStatus est une simple chaîne de caractères sans valeurs spécifiques autorisées.

              Pourquoi est-ce un problème ?

              • Il n’y a aucune restriction sur les valeurs de TokenStatus : n’importe quelle chaîne de caractères peut être affectée par inadvertance. Difficile donc de s’assurer que seules des valeurs valides comme comme OriginalOwner, SecondOwner, ou ThirdOwner soient utilisées.
              • Il est facile de faire des fautes de frappe comme Orgnalowner au lieu de OriginalOwner, rendant les données et les requêtes potentielles peu fiables.

              Avec Enums

              Au lieu d’assigner des chaînes de caractères libres, vous pouvez définir un enum pour TokenStatus avec des valeurs spécifiques : OriginalOwner, SecondOwner, ou ThirdOwner. L’utilisation d’un enum garantit que seules les valeurs autorisées sont utilisées.

              Les Enums assurent la sécurité des types, minimisent les risques de fautes de frappe et garantissent des résultats cohérents et fiables.

              Définition des Enums pour les Marketplaces NFT

              Note: Le guide suivant utilise le smart contract CryptoCoven NFT.

              Pour définir des énumérations pour les différentes marketplaces où les NFT sont échangés, utilisez ce qui suit dans votre schéma de subgraph :

              1# Enum pour les Marketplaces avec lesquelles le contrat CryptoCoven a interagi (probablement une vente ou un mint)2enum Marketplace {3  OpenSeaV1 # Représente lorsque un NFT CryptoCoven est échangé sur la marketplace4  OpenSeaV2 # Représente lorsque un NFT CryptoCoven est échangé sur la marketplace OpenSeaV25  SeaPort # Représente lorsque un NFT CryptoCoven est échangé sur la marketplace SeaPort6  LooksRare # Représente lorsque un NFT CryptoCoven est échangé sur la marketplace LooksRare7  # ...et d'autres marketplaces8}

              Utilisation des Enums pour les Marketplaces NFT

              Une fois définis, les enums peuvent être utilisés dans l’ensemble du subgraph pour classer les transactions ou les événements.

              Par exemple, lors de la journalisation des ventes de NFT, vous pouvez spécifier la marketplace impliqué dans la transaction en utilisant l’enum.

              Implémenter une Fonction pour les Marketplaces NFT

              Voici comment vous pouvez implémenter une fonction pour récupérer le nom de la marketplace à partir de l’enum sous forme de chaîne de caractères :

              1export function getMarketplaceName(marketplace: Marketplace): string {2  // Utilisation des instructions if-else pour mapper la valeur de l'enum à une chaîne de caractères3  if (marketplace === Marketplace.OpenSeaV1) {4    return 'OpenSeaV1' // Si le marketplace est OpenSea, renvoie sa représentation en chaîne de caractères5  } else if (marketplace === Marketplace.OpenSeaV2) {6    return 'OpenSeaV2'7  } else if (marketplace === Marketplace.SeaPort) {8    return 'SeaPort' // Si le marketplace est SeaPort, renvoie sa représentation en chaîne de caractères9  } else if (marketplace === Marketplace.LooksRare) {10    return 'LooksRare' // Si le marketplace est LooksRare, renvoie sa représentation en chaîne de caractères11    // ... et d'autres marketplaces12  }13}

              Bonnes Pratiques pour l’Utilisation des Enums

              • Nommer avec cohérence : Utilisez des noms clairs et descriptifs pour les valeurs d’enum pour améliorer la lisibilité.
              • Gestion Centralisée : Gardez les enums dans un fichier unique pour plus de cohérence. Ainsi, il est plus simple de les mettre à jour et de garantir qu’ils sont votre unique source de vérité.
              • Documentation : Ajoutez des commentaires aux enums pour clarifier leur objectif et leur utilisation.

              Utilisation des Enums dans les Requêtes

              Les enums dans les requêtes aident à améliorer la qualité des données et à rendre les résultats plus faciles à interpréter. Ils fonctionnent comme des filtres et des éléments de réponse, assurant la cohérence et réduisant les erreurs dans les valeurs des marketplaces.

              Spécificités

              • Filtrer avec des Enums: Les Enums offrent des filtres clairs, vous permettant d’inclure ou d’exclure facilement des marketplaces spécifiques.
              • Enums dans les Réponses: Les Enums garantissent que seules des valeurs de marketplace reconnues sont renvoyées, ce qui rend les résultats standardisés et précis.

              Exemples de requêtes

              Requête 1 : Compte avec le Plus d’Interactions sur les Marketplaces NFT

              Cette requête fait ce qui suit :

              • Elle trouve le compte avec le plus grand nombre unique d’interactions sur les marketplaces NFT, ce qui est excellent pour analyser l’activité inter-marketplaces.
              • Le champ marketplaces utilise l’enum marketplace, garantissant des valeurs de marketplace cohérentes et validées dans la réponse.
              1{2  accounts(first: 1, orderBy: uniqueMarketplacesCount, orderDirection: desc) {3    id4    sendCount5    receiveCount6    totalSpent7    uniqueMarketplacesCount8    marketplaces {9      marketplace # Ce champ retourne la valeur enum représentant la marketplace10    }11  }12}

              Résultats

              Cette réponse fournit les détails du compte et une liste des interactions uniques sur les marketplaces avec des valeurs enum pour une clarté standardisée :

              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}

              Requête 2 : Marketplace la Plus Active pour les Transactions CryptoCoven

              Cette requête fait ce qui suit :

              • Elle identifie la marketplace avec le plus grand volume de transactions CryptoCoven.
              • Il utilise l’enum marketplace pour s’assurer que seuls les types de marketplace valides apparaissent dans la réponse, ajoutant fiabilité et cohérence à vos données.
              1{2  marketplaceInteractions(first: 1, orderBy: transactionCount, orderDirection: desc) {3    marketplace4    transactionCount5  }6}

              Résultat 2

              La réponse attendue inclut la marketplace et le nombre de transactions correspondant, en utilisant l’enum pour indiquer le type de marketplace :

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

              Requête 3: Interactions sur les marketplaces avec un haut volume de transactions

              Cette requête fait ce qui suit :

              • Elle récupère les quatre principales marketplaces avec plus de 100 transactions, en excluant les marketplaces “Unknown”.
              • Elle utilise des enums comme filtres pour s’assurer que seuls les types de marketplace valides sont inclus, augmentant ainsi la précision.
              1{2  marketplaceInteractions(3    first: 44    orderBy: transactionCount5    orderDirection: desc6    where: { transactionCount_gt: "100", marketplace_not: "Unknown" }7  ) {8    marketplace9    transactionCount10  }11}

              Résultat 3

              La sortie attendue inclut les marketplaces qui répondent aux critères, chacune représentée par une valeur 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}

              Ressources supplémentaires

              Pour des informations supplémentaires, consultez le repo⁠ de ce guide.

              ⁠Edit on GitHub⁠

              Transfert à The GraphComment sécuriser les clés d'API en utilisant les composants serveur de Next.js
              On this page
              • Que sont les Enums ?
              • Exemple d’Enums dans Votre Schéma
              • Avantages de l’Utilisation des Enums
              • Sans Enums
              • Avec Enums
              • Définition des Enums pour les Marketplaces NFT
              • Utilisation des Enums pour les Marketplaces NFT
              • Implémenter une Fonction pour les Marketplaces NFT
              • Bonnes Pratiques pour l’Utilisation des Enums
              • Utilisation des Enums dans les Requêtes
              • Exemples de requêtes
              • Ressources supplémentaires
              The GraphStatusTestnetActifs de la MarqueForumSécuritéPolitique de confidentialitéConditions d'utilisation