Cosmos’ta Subgraph’ler Oluşturma
Bu kılavuz, Cosmos tabanlı blok zincirlerini indeksleyen subgraph’ler oluşturmaya yönelik bir giriş niteliğindedir.
Cosmos Subgraph’leri Nelerdir?
Graph, geliştiricilerin blok zinciri olaylarını işlemesine ve elde edilen verileri subgraph olarak bilinen açık bir GraphQL API aracılığıyla kolayca erişilebilir hale getirmesine olanak tanır. Graph Node artık Cosmos olaylarını işleyebilir, bu da Cosmos geliştiricilerinin artık zincir üstü olayları kolayca indekslemek için subgraph’ler oluşturabileceği anlamına gelir.
Şu anda Cosmos subgraph’leri için desteklenen üç tür işleyici vardır:
- Blok işleyicileri: zincire yeni bir blok eklendiğinde çalıştırın.
- Olay işleyicileri: belirli bir olay yayıldığında çalıştırın.
- İşlem işleyicileri: bir işlem gerçekleştiğinde çalıştırın.
Resmi Cosmos belgelerine göre :
Olaylar, uygulamanın yürütülmesi hakkında bilgi içeren nesnelerdir. Bunlar çoğunlukla blok kaşifleri ve cüzdanlar gibi servis sağlayıcılar tarafından çeşitli mesajların ve indeks işlemlerinin yürütülmesini izlemek için kullanılır.
İşlemler, uygulamadaki durum değişikliklerini tetiklemek için son kullanıcılar tarafından oluşturulan nesnelerdir.
Bir Cosmos Subgraph’i Oluşturma
Subgraph Bağımlılıkları
graph-cli subgraph’ler oluşturmak ve deploy etmek için bir CLI aracıdır, Cosmos subgraph’leriyle çalışmak için sürüm >=0.30.0
gereklidir.
graph-ts , subgraph’e özgü türlerden oluşan bir kitaplıktır, Cosmos subgraph’leriyle çalışmak için sürüm >=0.27.0
gereklidir.
Subgraph Ana Bileşenler
Bir subgraph’in tanımlanması söz konusu olduğunda üç ana anahtar bölüm veya dosya vardır:
subgraph.yaml : Hangi olayların izleneceğini ve nasıl işleneceğini tanımlayan subgraph bildirimini içeren bir YAML dosyası.
schema.graphql : Subgraph’iniz için hangi verilerin depolandığını ve bunun GraphQL aracılığıyla nasıl sorgulanacağını tanımlayan bir GraphQL şeması.
AssemblyScript Eşlemeleri : Blok zinciri verilerinden şemanızda tanımlanan varlıklara çeviren AssemblyScript kodu.
Subgraph Manifest Tanımı
Subgraph bildirimi ( subgraph.yaml
), subgraph için veri kaynaklarını, ilgilenilen tetikleyicileri ve bu tetikleyicilere yanıt olarak çalıştırılması gereken işlevleri (handlers
) tanımlar. Bir Cosmos subgraph’i için örnek bir subgraph bildirimi adına aşağıya bir göz atın:
specVersion: 0.0.5description: Cosmos Subgraph Exampleschema:file: ./schema.graphql # link to the schema filedataSources:- kind: cosmosname: CosmosHubnetwork: cosmoshub-4 # This will change for each cosmos-based blockchain. In this case, the example uses the CosmosHub mainnet.source:startBlock: 0 # Required for Cosmos, set this to 0 to start indexing from chain genesismapping:apiVersion: 0.0.7language: wasm/assemblyscriptblockHandlers:- handler: handleNewBlock # the function name in the mapping fileeventHandlers:- event: rewards # the type of the event that will be handledhandler: handleReward # the function name in the mapping filetransactionHandlers:- handler: handleTransaction # the function name in the mapping filefile: ./src/mapping.ts # link to the file with the Assemblyscript mappings
network,
hosting graph node üzerindeki bir ağa karşılık gelmelidir. Örnekte, CosmosHub ana ağı kullanılmıştır.
Cosmos veri kaynakları üç tür işleyiciyi destekler:
blockHandlers
: Zincire eklenen her yeni blokta çalıştırın. İşleyici, tam bir blok ve diğer şeylerin yanı sıra tüm olayları ve işlemleri içeren tüm verilerini alacaktır.eventHandlers
: Bildirimde belirtilen olay türüyle eşleşen bir blokta bulunan her olay üzerinde çalışır. Olay bağlamının zincir içinde olması için blok verileri de eşlemeye aktarılır.transactionHandlers
: Yürütülen her işlem için çalıştırın. Eşleme, işlemle ilgili tüm veriler ve bir blok içinde ve zincir içinde işlemin bağlamını elde etmek için kullanılabilecek bir blok soyutlaması ile sağlanır.
Olay ve İşlem işleyicileri, bütün bir bloğu işlemeye gerek kalmadan zincirden anlamlı verileri işlemenin bir yoludur. Olaylar ve işlemler de bir bloğun parçası olduğu için, onlar tarafından işlenen veriler blok işleyicilerinde de bulunabilir, ancak gereksiz verileri işleme ihtiyacını ortadan kaldırır.
Şema Tanımı
Şema tanımı, elde edilen subgraph veritabanının yapısını ve varlıklar arasındaki ilişkileri açıklar. Bu, orijinal veri kaynağından bağımsızdır. Burada subgraph şema tanımı hakkında daha fazla ayrıntı var.
AssemblyScript Eşlemeleri
Olayları işlemek için işleyiciler AssemblyScript ile yazılmıştır.
Cosmos dizin oluşturma, AssemblyScript API’sine Cosmos’a özgü veri türlerini tanıtır.
class Block {header: Headerevidence: EvidenceListresultBeginBlock: ResponseBeginBlockresultEndBlock: ResponseEndBlocktransactions: Array<TxResult>validatorUpdates: Array<Validator>}class EventData {event: Eventblock: HeaderOnlyBlock}class TransactionData {tx: TxResultblock: HeaderOnlyBlock}class HeaderOnlyBlock {header: Header}class Header {version: ConsensuschainId: stringheight: u64time: TimestamplastBlockId: BlockIDlastCommitHash: BytesdataHash: BytesvalidatorsHash: BytesnextValidatorsHash: BytesconsensusHash: BytesappHash: ByteslastResultsHash: BytesevidenceHash: BytesproposerAddress: Byteshash: Bytes}class TxResult {height: u64index: u32tx: Txresult: ResponseDeliverTxhash: Bytes}class Event {eventType: stringattributes: Array<EventAttribute>}
Yukarıdaki türler yalnızca eşlemelerin kullandığı genel türlerdir. Cosmos entegrasyonu için türlerin tam listesini burada bulabilirsiniz.
Her işleyici türü, ilgili verilere göre farklı bir tür alacaktır. Hem olay hem de işlem işleyicileri için içerdikleri bloğa bir referans da iletilir. Bunlar, her eşleme işlevine parametre olarak geçirilen tam türlerdir:
Block
blockHandler'a iletilir.
EventData
eventHandler'a iletilir.
TransactionData
işlemHandler'a iletilir. İşlemlerin subgraph’te deşifre edilmesi gerekecek, işte bunun nasıl yapılabileceğine dair bir örnek.
Bir Cosmos Subgraph’i Oluşturma ve İnşa Etme
Subgraph eşlemelerini yazmaya başlamadan önceki ilk adım, subgraph şema dosyasında (schema.graphql
) tanımlanan varlıklara dayalı tip bağları oluşturmaktır. Bu, eşleme işlevlerinin bu türlerde yeni nesneler oluşturmasına ve bunları mağazaya kaydetmesine olanak tanır. Bu, codege
CLI komutu kullanılarak yapılır:
$ graph codegen
Eşlemeler hazır olduğunda, subgraph’in oluşturulması gerekir. Bu adım, bildirimin veya eşlemelerin sahip olabileceği tüm hataları vurgulayacaktır. Graph Node’una dağıtılabilmesi için bir subgraph’in başarıyla oluşturulması gerekir. build
CLI komutu kullanılarak yapılabilir:
$ graph build
Bir Cosmos Subgraph’i Deploy Etme
Subgraph’iniz oluşturulduktan sonra, graph create
CLI komutunu çalıştırdıktan sonra graph deploy
CLI komutunu kullanarak subgraph’inizi deploy edebilirsiniz.
Barındırılan Hizmet
graph create subgraph-name --product hosted-service # creates a subgraph on a local Graph Node (on the Hosted Service, this is done via the UI)graph deploy --node https://api.thegraph.com/deploy/ --ipfs https://api.thegraph.com/i
Yerel Graph Node (varsayılan yapılandırmaya göre):
graph create subgraph-name --node http://localhost:8020graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001
Bir Cosmos subgraph’ini sorgulama
Cosmos subgraph’leri için GraphQL uç noktası, mevcut API arayüzü ile şema tanımı tarafından belirlenir. Daha fazla bilgi için lütfen GraphQL API belgelerini ziyaret edin.
Desteklenen Cosmos Blok Zincirleri
Cosmos Hub
Cosmos Hub nedir?
Cosmos Hub blok zinciri, Cosmos ekosistemindeki ilk blok zinciridir. Daha fazla bilgi için resmi belgeleri ziyaret edebilirsiniz.
Ağlar
Cosmos Hub ana ağı cosmoshub-4
. Cosmos Hub mevcut test ağı theta-testnet-001
.
Diğer Cosmos Hub ağları, yani cosmoshub-3
durdurulur, bu nedenle onlar için hiçbir veri sağlanmaz.
Osmosis
Graph Node’unda ve Barındırılan Hizmette Osmosis desteği beta sürümündedir: Osmoz subgraph’leri oluşturmayla ilgili sorularınız için lütfen Graph ekibiyle iletişime geçin!
Osmosis nedir?
Osmosis, Cosmos SDK’nın üzerine inşa edilmiş, merkezi olmayan, zincirler arası otomatik bir piyasa yapıcı (AMM) protokolüdür. Kullanıcıların özel likidite havuzları oluşturmasına ve IBC’nin etkin olduğu belirteçlerle ticaret yapmasına olanak tanır. Daha fazla bilgi için resmi belgeleri ziyaret edebilirsiniz.
Ağlar
Osmoz ana ağı osmosis-1
. Osmoz akımı test ağı osmo-test-4
.
Örnek Subgraph’ler
Referans için bazı örnek subgraph’ler:
Doğrulayıcı Temsilcileri Örneği
İletişimde Kalalım!
Bu kılavuzla GRT’lerinizi stake etmenize yardımcı olabileceğimizi umuyoruz. Herhangi bir sorunuz veya daha fazla yardıma ihtiyacınız varsa, ya da sadece sohbet etmek istiyorsanız, bize her zaman Telegram ve Twitter aracılığıyla ulaşmaktan çekinmeyin!