subgraphs > Developing > FAQ

Geliştirici SSS

Reading time: 5 min

Bu sayfa, The Graph üzerinde geliştirme yapan geliştiricilerin sunduğu en yaygın soruların bazılarını özetlemektedir.

Subgraph ile İlgili Sorular

Bu bölüme bağlantı

1. Subgraph nedir?

Bu bölüme bağlantı

Bir subgraph, blokzinciri verilerine dayalı olarak oluşturulmuş özel yapım bir API’dir. Subgraph'ler, GraphQL sorgu dili kullanılarak sorgulanır ve The Graph CLI kullanılarak bir Graph Düğümü'nde yayına alınır. Dağıtılıp The Graph’in merkeziyetsiz ağına yayımlandığında, Endeksleyiciler subgraph'leri işler ve sorgu yapmaları için kullanıcıların erişimine sunar.

2. Subgraph oluşturmanın ilk adımı nedir?

Bu bölüme bağlantı

Başarılı bir şekilde subgraph oluşturmak için The Graph CLI’yi kurmanız gerekir. Başlamak için Hızlı Başlangıç bölümüne göz atın. Ayrıntılı bilgi için Subgraph Oluşturma bölümünü inceleyin.

3. Akıllı sözleşmelerim olay içermiyorsa yine de subgraph oluşturabilir miyim?

Bu bölüme bağlantı

Akıllı sözleşmelerinizi, sorgulamak istediğiniz verilerle ilişkili olaylara sahip olacak şekilde yapılandırmanız şiddetle önerilir. Subgraph içindeki olay işleyicileri sözleşme olayları tarafından tetiklenir ve kullanışlı verilere erişmenin en hızlı yolu bu işleyicileri kullanmaktır.

Eğer çalıştığınız sözleşmeler olay içermiyorsa, subgraph’inizin endekslenmesini çağrı ve blok işleyicileri kullanarak tetikleyebilirsiniz. Ancak bu tavsiye edilmeyen bir yöntemdir ve performansı önemli ölçüde yavaşlatacaktır.

4. Subgraph'ımla ilişkili GitHub hesabını değiştirebilir miyim?

Bu bölüme bağlantı

Hayır. Bir subgraph oluşturulduktan sonra, ilişkili GitHub hesabı değiştirilemez. Bu nedenle, subgraph oluşturmadan önce bunu dikkatlice düşünmelisiniz.

5. Mainnet'teki bir subgraph nasıl güncellenir?

Bu bölüme bağlantı

CLI'yi kullanarak Subgraph Studio’ya yeni bir subgraph sürümü dağıtabilirsiniz. Bu işlem subgraph’inizi gizli olarak tutar, ancak memnun kaldığınızda Graph Gezgini’nde yayımlayabilirsiniz. Bu, Küratörlerin sinyal vermeye başlayabileceği yeni bir subgraph sürümü oluşturur.

6. Bir subgraph’i yeniden dağıtmadan başka bir hesaba veya uç noktaya kopyalayabilir miyim?

Bu bölüme bağlantı

Subgraph’i yeniden dağıtmanız gerekir ancak subgraph ID'si (IPFS hash’i) değişmezse, senkronizasyona baştan başlamanıza gerek kalmaz.

7. Subgraph eşlemelerinden sözleşme fonksiyonunu nasıl çağırabilir veya bir genel durum değişkenine nasıl erişebilirim?

Bu bölüme bağlantı

AssemblyScript API bölümündeki Akıllı sözleşmeye erişim kısmına göz atın.

8. Subgraph eşleyicilerinde ethers.js veya diğer JS kütüphanelerini kullanabilir miyim?

Bu bölüme bağlantı

Eşleyiciler AssemblyScript ile yazıldığından dolayı şu anda mümkün değil.

Bunun alternatif bir çözümü, verileri varlıklarda ham halde depolayıp, JS kütüphanelerine ihtiyaç duyan işlemleri istemci üzerinde gerçekleştirmektir.

9. Birden fazla sözleşmeyi dinlerken, olayları dinlenecek sözleşmelerin sırasını seçmek mümkün müdür?

Bu bölüme bağlantı

Bir subgraph içindeki olaylar, birden fazla sözleşme üzerinde olup olmamaya bakmaksızın her zaman bloklarda göründükleri sırayla işlenir.

10. Şablonlar veri kaynaklarından ne açıdan farklıdır?

Bu bölüme bağlantı

Şablonlar, subgraph’iniz endeksleme yaparken veri kaynaklarını hızlıca oluşturmanızı sağlar. Sözleşmeniz, kullanıcılar etkileşime girdikçe yeni sözleşmeler yaratabilir. Bu sözleşmelerin yapısını (ABI, olaylar vb.) önceden bildiğinizden, onları nasıl endekslemek istediğinizi bir şablonda tanımlayabilirsiniz. Yeni sözleşmeler oluşturulduğunda, subgraph’iniz sözleşme adresini tespit ederek dinamik bir veri kaynağı oluşturacaktır.

"Bir Veri Kaynağı Şablonunu Başlatma" bölümüne göz atın: Veri Kaynağı Şablonları.

11. graph init komutunu graph-cli ile kullanarak iki sözleşme içeren bir subgraph kurmak mümkün müdür? Yoksa graph init komutunu çalıştırdıktan sonra subgraph.yaml dosyasına elle bir başka dataSource eklemem mi gerekir?

Bu bölüme bağlantı

Evet, mümkündür. graph init komutunu kullanırken, sözleşmeleri art arda girerek birden fazla dataSource ekleyebilirsiniz.

Ayrıca, yeni bir dataSource eklemek için graph add komutunu da kullanabilirsiniz.

12. Bir veri kaynağı için olay, blok ve çağrı işleyicileri hangi sırayla tetiklenir?

Bu bölüme bağlantı

Olay ve çağrı işleyicileri, öncelikle blok içindeki işlem indisine göre sıralanır. Aynı işlem içindeki olay ve çağrı işleyicileri, şu sıralama kuralına düzenlenir: önce olay işleyicileri, ardından çağrı işleyicileri gelir; her tür kendi içinde manifestoda tanımlandığı sıraya uyar. Blok işleyicileri, olay ve çağrı işleyicilerinden sonra çalıştırılır ve manifestoda tanımlandıkları sıraya göre gerçekleştirilir. Ayrıca, bu sıralama kuralları değişime tabi olabilir.

Yeni dinamik veri kaynakları oluşturulduğunda, dinamik veri kaynakları için tanımlanan işleyiciler yalnızca mevcut tüm veri kaynağı işleyicileri işlendiğinde işlemeye başlar ve her tetiklendiğinde aynı sırada tekrar eder.

13. Yerel çalışma ortamımda graph-node'un en son sürümünü kullandığımdan nasıl emin olabilirim?

Bu bölüme bağlantı

Aşağıdaki komutu çalıştırabilirsiniz:

docker pull graphprotocol/graph-node:latest

Not: docker / docker-compose, ilk çalıştırdığınızda çekilen graph-node sürümünü kullanmaya devam edecektir. Bu yüzden en son graph-node sürümünü kullandığınızdan emin olun.

14. Olayları işlerken bir varlık için "otomatik oluşturulan" id'leri yaratmanın önerilen yolu nedir?

Bu bölüme bağlantı

Eğer olay sırasında yalnızca bir varlık oluşturuluyorsa ve daha iyi bir seçenek yoksa, işlem hash'i + log indisi benzersiz bir id olur. Bunları Bytes'a dönüştürüp crypto.keccak256 üzerinden geçirerek gizleyebilirsiniz ancak bu işlemi daha benzersiz hale getirmez.

15. Subgraph'imi silebilir miyim?

Bu bölüme bağlantı

Yes, you can delete and transfer your subgraph.

Ağ ile İlgili Sorular

Bu bölüme bağlantı

16. The Graph hangi ağları desteklemektedir?

Bu bölüme bağlantı

Desteklenen ağların listesini burada bulabilirsiniz.

17. Olay işleyicileri içerisinde ağlar (mainnet, Sepolia, yerel) arasında ayrım yapmak mümkün müdür?

Bu bölüme bağlantı

Evet, mümkündür. Aşağıdaki örnekteki gibi graph-ts kullanarak yapabilirsiniz:

import { dataSource } from '@graphprotocol/graph-ts'
dataSource.network()
dataSource.address()

18. Sepolia ağında blok ve çağrı işleyicilerini destekliyor musunuz?

Bu bölüme bağlantı

Evet. Sepolia, blok işleyicileri, çağrı işleyicileri ve olay işleyicilerini destekler. Olay işleyicilerinin diğer iki işleyiciye göre çok daha yüksek performansa sahip olduğu ve tüm EVM uyumlu ağlarda desteklendiği unutulmamalıdır.

Endeksleme ve Sorgulama ile İlgili Sorular

Bu bölüme bağlantı

19. Endekslemeye hangi bloktan başlanacağını belirtmek mümkün müdür?

Bu bölüme bağlantı

Evet. subgraph.yaml dosyasındaki dataSources.source.startBlock, veri kaynağının endekslemeye başladığı blok numarasını belirtir. Çoğu durumda, sözleşmenin oluşturulduğu bloğun kullanılmasını öneriyoruz. Daha fazla bilgi için: Başlangıç blokları

20. Endeksleme performansını artırmak için ipuçları var mı? Subgraph'imin senkronize edilmesi çok uzun zaman alıyor

Bu bölüme bağlantı

Sözleşmenin dağıtıldığı bloktan itibaren endeksleme yapmak için opsiyonel başlangıç bloğu özelliğine göz atabilirsiniz: Başlangıç blokları

21. Subgraph üzerinde doğrudan sorgulama yaparak endekslenmiş en son blok numarasını öğrenmenin bir yolu var mı?

Bu bölüme bağlantı

Var! Aşağıdaki komutu, "organization/subgraphName" kısmına subgraph'inizi yayımladığınız organizasyon adını ve subgraph'inizin adını koyarak deneyin:

curl -X POST -d '{ "query": "{indexingStatusForCurrentVersion(subgraphName: \"organization/subgraphName\") { chains { latestBlock { hash number }}}}"}' https://api.thegraph.com/index-node/graphql

22. The Graph'in sorgu başına kaç nesne döndürebileceğine dair bir sınır var mı?

Bu bölüme bağlantı

Varsayılan olarak, sorgu yanıtları koleksiyon başına 100 ögeyle sınırlıdır. Daha fazlasını almak istiyorsanız koleksiyon başına 1000 ögeye kadar çıkabilirsiniz. Daha da fazlası için şu şekilde sayfalama yapabilirsiniz:

someCollection(first: 1000, skip: <sayı>) { ... }

23. If my dapp frontend uses The Graph for querying, do I need to write my API key into the frontend directly? What if we pay query fees for users – will malicious users cause our query fees to be very high?

Bu bölüme bağlantı

Şu anda, bir merkeziyetsiz uygulama için önerilen yaklaşım, anahtarı önyüze eklemek ve son kullanıcılara göstermektir. Bununla birlikte, bu anahtarı yourdapp.io gibi bir sunucu adına ve bir subgraph'e sınırlayabilirsiniz. Ağ geçidi şu anda Edge & Node tarafından çalıştırılıyor. Bir ağ geçidinin sorumluluğunun bir kısmı, kötü amaçlı davranışları izlemek ve kötü niyetli istemcilerden gelen trafiği engellemektir.

24. Apollo Federation'ı graph-node üzerinde kullanmak mümkün mü?

Bu bölüme bağlantı

Federation henüz desteklenmiyor. Şu anda, şema birleştirme yöntemini ya istemci tarafında ya da bir proxy hizmeti aracılığıyla kullanabilirsiniz.

25. Katkıda bulunmak veya bir GitHub issue'su eklemek istiyorum. Açık kaynak kod depolarını nerede bulabilirim?

Bu bölüme bağlantı
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client
Sayfayı Düzenle

Önceki
Delete a Subgraph
Sonraki
Faturalandırma
Sayfayı Düzenle