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 commeOriginalOwner
,SecondOwner
, ouThirdOwner
soient utilisées. - Il est facile de faire des fautes de frappe comme
Orgnalowner
au lieu deOriginalOwner
, 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.