5 dakika
NFT Pazar Yerlerini Enums Kullanarak Kategorize Etme
Kodu daha temiz yapmak ve hata yapma riskini azaltmak için Enums kullanın. İşte NFT pazar yerlerinde Enums kullanımına bir örnek.
Enum’lar Nedir?
Enum’lar veya numaralandırma türleri, bir dizi izin verilen değeri tanımlamanıza olanak tanıyan belirli bir veri türüdür.
Şemanızda Enum Örnekleri
If you’re building a Subgraph to track the ownership history of tokens on a marketplace, each token might go through different ownerships, such as OriginalOwner
, SecondOwner
, and ThirdOwner
. By using enums, you can define these specific ownerships, ensuring only predefined values are assigned.
Şemanızda enum tanımlayabilir ve bir kez tanımlandığında, bir varlık üzerinde bir enum alanı ayarlamak için enum değerlerinin dizi (string) gösterimini kullanabilirsiniz.
İşte yukarıdaki örneğe dayanarak, şemanızda bir enum tanımı şöyle görünebilir:
1enum TokenStatus {2 OriginalOwner3 SecondOwner4 ThirdOwner5}
Bu, şemanızda TokenStatus
türünü kullandığınızda, bunun tanımlı değerlerden tam olarak biri olmasını beklediğiniz anlamına gelir: OriginalOwner
, SecondOwner
veya ThirdOwner
. Böylece tutarlılık ve geçerlilik sağlanmış olur.
Enum’lar hakkında daha fazla bilgi edinmek için Subgraph Oluşturma ve GraphQL dokümantasyonu kaynaklarına göz atın.
Enum Kullanmanın Faydaları
- Anlaşılırlık: Enum’lar değerlere anlamlı isimler verir, veriyi daha anlaşılır hale getirir.
- Doğrulama: Enum’lar katı değer tanımlamaları uygulayarak geçersiz veri girişlerini önler.
- Bakım Kolaylığı: Yeni kategoriler eklemek veya mevcut olanları değiştirmek gerektiğinde, enum’lar bunu odaklı bir şekilde yapmanıza olanak tanır.
Enum’lar Olmadan
Türü Enum kullanmak yerine bir dize olarak tanımlamayı seçerseniz, kodunuz şöyle görünebilir:
1type Token @entity {2 id: ID!3 tokenId: BigInt!4 owner: Bytes! # Token Sahibi5 tokenStatus: String! # Token Durumunu Takip Eden Dize Alanı6 timestamp: BigInt!7}
Bu şemada, TokenStatus
belirli, alabileceği değerler sınırlandırılmış olmayan basit bir dizedir.
Bu neden bir sorun?
TokenStatus
değerleri için bir kısıtlama yoktur. Bu yüzden yanlışlıkla herhangi bir dize atanabilir. Bu, yalnızcaOriginalOwner
,SecondOwner
veyaThirdOwner
gibi geçerli durumların ayarlandığını sağlamayı zorlaştırır.OriginalOwner
yerineOrgnalowner
gibi yazım hataları yaparak verilerin ve potansiyel sorguların güvenilmez hale gelmesine sebep olmak kolaydır.
Enum Kullanımıyla
Serbest formda dizeler atamak yerine, TokenStatus
için OriginalOwner
, SecondOwner
veya ThirdOwner
gibi belirli değerlerle bir enum tanımlanabilir. Bir enum kullanmak, yalnızca izin verilen değerlerin kullanılmasını sağlar.
Enumlar; tür güvenliği sağlar, yazım hatası riskini en aza indirir ve tutarlı ve güvenilir sonuçlar sağlar.
NFT Pazar Yerleri için Enum Tanımlama
Not: Aşağıdaki kılavuz CryptoCoven NFT akıllı sözleşmesini kullanmaktadır.
To define enums for the various marketplaces where NFTs are traded, use the following in your Subgraph schema:
1# CryptoCoven sözleşmesinin etkileşimde bulunduğu pazar yerleri için Enum (muhtemel bir Takas/Basım)2enum Marketplace {3 OpenSeaV1 # CryptoCoven NFT'sinin bu pazar yerinde takas yapılmasını temsil eder4 OpenSeaV2 # CryptoCoven NFT'si ninOpenSeaV2 pazar yerinde takas yapılmasını temsil eder5 SeaPort # CryptoCoven NFT'sinin SeaPort pazar yerinde takas yapılmasını temsil eder6 LooksRare # CryptoCoven NFT'sinin LookRare pazar yerinde takas yapılmasını temsil eder7 # ...ve diğer pazar yerleri8}
NFT Pazar Yerleri için Enum Kullanımı
Once defined, enums can be used throughout your Subgraph to categorize transactions or events.
Örneğin, NFT satışlarını kaydederken takasta yer alan pazar yerini enum kullanarak belirleyebilirsiniz.
NFT Pazar Yerleri için Bir Fonksiyon İmplementasyonu
Enum’dan pazar yeri adını bir dize olarak almak için bir fonksiyonu şöyle uygulayabilirsiniz:
1export function getMarketplaceName(marketplace: Marketplace): string {2 // Enum değerini bir dizeye eşlemek için if-else ifadelerini kullanma3 if (marketplace === Marketplace.OpenSeaV1) {4 return 'OpenSeaV1' // I Eğer pazar yeri OpenSea ise, onun dize temsilini döndür5 } else if (marketplace === Marketplace.OpenSeaV2) {6 return 'OpenSeaV2'7 } else if (marketplace === Marketplace.SeaPort) {8 return 'SeaPort' // Eğer pazar yeri SeaPort ise, onun dize temsilini döndür9 } else if (marketplace === Marketplace.LooksRare) {10 return 'LooksRare' // Eğer pazar yeri LooksRare ise, onun dize temsilini döndür11 // ... ve diğer pazar yerleri12 }13}
Enum Kullanımı için En İyi Uygulamalar
- Tutarlı İsimlendirme: Okunabilirliği artırmak için enum değerleri için net, açıklayıcı isimler kullanın.
- Merkezi Yönetim: Tutarlılık için enum’ları tek bir dosyada tutun. Böylece enum’ların güncellenmesi kolaylaşmış olur ve onların tek bir doğru bilgi kaynağı olmasını sağlar.
- Dokümantasyon: Amaçlarını ve kullanımını açıklamak için enum’a yorumlar ekleyin.
Sorgularda Enum Kullanımı
Sorgulardaki enum’lar verilerin kalitesini artırmanıza ve sonuçları daha kolay yorumlamanıza yardımcı olur. Enumlar filtreleme ve yanıt ögeleri olarak işlev görürler, tutarlılığı sağlarlar ve pazar yerlerindeki hataları azaltırlar.
Ayrıntılar
- Enum ile Filtreleme: Enum’lar net filtreler sağlar, belirli pazarları güvenle dahil etmenizi veya hariç tutmanızı mümkün kılar.
- Yanıtlarda Enum’lar: Enum’lar yalnızca tanınan pazar adlarının döndürülmesini garanti eder, bu da sonuçları standart ve isabetli hale getirir.
Örnek Sorgular
Sorgu 1: En Yüksek NFT Pazar Yeri Etkileşimine Sahip Hesap
Bu sorgu şunları yapar:
- Farklı pazar yerlerinde en yüksek benzersiz NFT etkileşimlerine sahip hesabı bulur. Bu da çapraz pazar yeri aktivitelerini analiz etmek için mükemmeldir.
- Pazar yerleri alanı, yanıt içerisindeki pazar yeri değerlerini tutarlı ve doğrulanmış hale getiren pazar yeri enum’ını kullanır.
1{2 accounts(first: 1, orderBy: uniqueMarketplacesCount, orderDirection: desc) {3 id4 sendCount5 receiveCount6 totalSpent7 uniqueMarketplacesCount8 marketplaces {9 marketplace # Bu alan, pazar yerini temsil eden enum değerini döndürür.10 }11 }12}
Dönüşler
Bu yanıt; hesap detaylarını, ve netlik sağlamak amacıyla enum değerlerine sahip benzersiz pazar yeri etkileşimlerinin listesini sağlar:
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}
Sorgu 2: CryptoCoven İşlemleri için En Aktif Pazar Yeri
Bu sorgu şunları yapar:
- CryptoCoven işlemlerinin en yüksek hacimli olduğu pazar yerini belirler.
- Yalnızca geçerli pazar yeri türlerinin yanıt olarak görünmesini sağlamak için pazar yeri enum’ını kullanarak verilerinize güvenilirlik ve tutarlılık katar.
1{2 marketplaceInteractions(first: 1, orderBy: transactionCount, orderDirection: desc) {3 marketplace4 transactionCount5 }6}
Sonuç 2
Beklenen yanıt, pazar yerini ve ilgili işlem sayısını içerir; pazar yeri türünü belirtmek için enum kullanır:
1{2 "data": {3 "marketplaceInteractions": [4 {5 "marketplace": "Unknown",6 "transactionCount": "222"7 }8 ]9 }10}
Sorgu 3: Yüksek İşlem Sayısına Sahip Pazar Etkileşimleri
Bu sorgu şunları yapar:
- “Unknown” pazarlarını hariç tutarak, 100’den fazla işlemi olan ilk dört pazarı getirir.
- Yalnızca geçerli pazar türlerinin dahil edilmesini sağlamak için filtre olarak enum’lar kullanır. Böylece doğruluk oranı arttırılmış olur.
1{2 marketplaceInteractions(3 first: 44 orderBy: transactionCount5 orderDirection: desc6 where: { transactionCount_gt: "100", marketplace_not: "Unknown" }7 ) {8 marketplace9 transactionCount10 }11}
Sonuç 3
Beklenen çıktı, her biri bir enum değeri ile temsil edilen, kriterleri karşılayan pazarları içerir:
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}
Ek Kaynaklar
Ek bilgi için bu rehberin deposuna göz atın.