Ana içeriğe atla

Polkadot Hızlı Başlangıç

SubQuery TeamYaklaşık 5 dakika

Polkadot Hızlı Başlangıç

Bu Hızlı başlangıç ​​kılavuzunda, basit bir Substrate/Polkadot başlangıç ​​projesiyle başlayacağız ve ardından bazı gerçek gerçek verileri indeksleyerek bitireceğiz. Bu, kendi Substrate/Polkadot SubQuery Projenizi geliştirirken başlamak için mükemmel bir temeldir.

Bu kılavuzun sonunda, verileri sorguyabileceğiniz bir GraphQL uç noktasına sahip bir SubQuery düğümünde çalışan çalışan bir SubQuery projeniz olacaktır.

Henüz yapmadıysanız, SubQuery'de kullanılan terminology hakkında bilgi sahibi > öneririz.

Bu hızlı başlangıç ​​kılavuzunun amacı, standart başlangıç ​​projesini Polkadot'tan tüm transferleri indekslemeye başlayacak şekilde uyarlamaktır, sadece 10-15 dakika sürmelidir

Hazırlık

Yerel Kalkınma Ortamı

SubQuery CLI'sını yükleme

NPM kullanarak Terminalinize SubQuery CLI'yi genel olarak yükleyin:

# NPM
npm install -g @subql/cli

Kötü bağımlılık yönetimi nedeniyle, @subql/cli kurulumu için yarn global kullanımını DESTEK ETMEDİĞİMİZ unutmayın. satırdaki hatalar.

Daha sonra CLI tarafından sunulan kullanılabilir komutları ve kullanımı görmek için yardım çalıştırabilirsiniz:

subql help

Başlangıç SubQuery Projesini Başlatma

Bir SubQuery projesi oluşturmak istediğiniz dizinin içinde, başlamak için aşağıdaki komutu çalıştırmanız yeterlidir.

subql init

SubQuery projesi initalised olarak size bazı sorular sorulana olacaktır:

  • Proje adı: SubQuery projeniz için bir proje adı
  • Ağ ailesi: Bu SubQuery projesinin dizine eklemek için geliştirileceği katman-1 blok zinciri ağ ailesi. Mevcut seçenekler arasından seçim yapmak için ok tuşlarını kullanın. Bu kılavuz için "Substrate" kullanacağız
  • Ağ: Bu SubQuery projesinin dizine eklemek için geliştirileceği belirli ağ. Mevcut seçenekler arasından seçim yapmak için ok tuşlarını kullanın. Bu kılavuz için "Polkadot" kullanacağız
  • Şablon: Geliştirmeye başlamak için bir başlangıç ​​noktası sağlayacak bir SubQuery proje şablonu seçin. "subql-starter" projesini seçmenizi öneririz.
  • RPC uç noktası: Bu proje için varsayılan olarak kullanılacak çalışan bir RPC uç noktasına wss URL'si sağlayın. Farklı Polkadot ağları için genel uç noktalara hızlı bir şekilde erişebilir veya hatta OnFinalityopen in new window kullanarak kendi özel özel düğümünüzü oluşturabilir veya yalnızca varsayılan Polkadot uç noktasını kullanabilirsiniz. Bu RPC düğümü bir arşiv düğümü olmalıdır (tam zincir durumuna sahip). Bu kılavuz için "https://polkadot.api.onfinality.io" varsayılan değerini kullanacağız
  • Git deposu: Bu SubQuery projesinin barındırılacağı bir depoya Git URL'si sağlayın (SubQuery Gezgini'nde barındırıldığında).
  • Yazarlar: Bu SubQuery projesinin sahibini buraya girin (örneğin adınız!) veya sağlanan varsayılanı kabul edin.
  • Açıklama: Projeniz hakkında hangi verileri içerdiğini ve kullanıcıların bunlarla neler yapabileceğini açıklayan kısa bir paragraf sağlayın veya sağlanan varsayılanı kabul edin.
  • Sürüm: Özel bir sürüm numarası girin veya varsayılanı kullanın (1.0.0)
  • Lisans: Bu proje için yazılım lisansını sağlayın veya varsayılanı kabul edin (MIT-)

Başlatma işlemi tamamlandıktan sonra, dizin içinde proje adınızın oluşturulduğu bir klasör görmeniz gerekir. Bu directoy'un içeriği Directory Structure listelenenlerle aynı olmalıdır.

Son olarak, proje dizini altında, yeni projenin bağımlılıklarını yüklemek için aşağıdaki komutu çalıştırın.

::: code-tabs @tab:active yarn shell cd PROJECT_NAME yarn install @tab npm shell cd PROJECT_NAME npm install :::

Making Changes to your Project

In the starter package that was just initialised, a standard configuration has been provided. Bunlar:

  • schema.graphql içindeki GraphQL Şeması`
  • project.yaml içindeki Proje Manifestosu
  • src/mappings/ dizinindeki Eşleme işlevleri

Bu hızlı başlangıç ​​kılavuzunun amacı, standart başlangıç ​​projesini Polkadot'tan tüm transferleri indekslemeye başlayacak şekilde uyarlamaktır, sadece - dakika sürmelidir.

GraphQL Şema Dosyanızı Güncelleme

schema.graphql dosyası çeşitli GraphQL şemalarını tanımlar. GraphQL sorgu dilinin çalışma biçimi nedeniyle, şema dosyası temel olarak verilerinizin şeklini SubQuery'den belirler. Başlamak için harika bir yer çünkü nihai hedefinizi önceden tanımlamanıza izin veriyor.

schema.graphql dosyasını aşağıdaki gibi okunacak şekilde güncelleyeceğiz:

type Transfer @entity {
  id: ID! # id field is always required and must look like this
  amount: BigInt # Amount that is transferred
  blockNumber: BigInt # The block height of the transfer
  from: String! # Transferin yapıldığı hesap
  için: Dize! # The account that transfers are made to
}

Önemli: Şema dosyasında herhangi bir değişiklik yaptığınızda, lütfen türler dizininizi yeniden oluşturduğunuzdan emin olun.

::: code-tabs @tab:active yarn shell yarn codegen @tab npm shell npm run-script codegen :::

You'll find the generated models in the /src/types/models directory. schema.graphql dosyası hakkında daha fazla bilgi için, Build/GraphQL Schema altındaki belgelerimize bakın

Proje Bildirim Dosyasını Güncelleme

Proje Bildirimi (project.yaml) dosyası projenizin bir giriş noktası olarak görülebilir ve SubQuery'nin zincir verilerini nasıl indeksleyip dönüştüreceğiyle ilgili ayrıntıların çoğunu tanımlar.

Bildirim dosyası zaten doğru bir şekilde kuruldu, ancak işleyicilerimizi değiştirmemiz gerekiyor. Tüm Polkadot transferlerini indekslemeyi planladığımızı unutmayın, sonuç olarak aşağıdakileri okumak için veri kaynakları bölümünü güncellememiz gerekiyor:

dataSources:
  - kind: substrate/Runtime
    startBlock: 1
    mapping:
      file: ./dist/index.js
      handlers:
        - handler: handleEvent
          kind: substrate/EventHandler
          filter:
            module: balances
            method: Transfer

Bu, her balances.Transfer olayı olduğunda bir handleEvent eşleme işlevi çalıştıracağımız anlamına gelir.

Proje Bildirimi (project.yaml) dosyası hakkında daha fazla bilgi için, Yapı/Manifest Dosyası altındaki belgelerimize bakın

Eşleme İşlevi Ekle

Eşleme işlevleri, zincir verilerinin daha önce schema.graphql dosyasında tanımladığımız optimize edilmiş GraphQL varlıklarına nasıl dönüştürüleceğini tanımlar.

src/mappings dizinindeki varsayılan eşleme işlevine gidin. Dışa aktarılan üç işlev göreceksiniz, handleBlock, handleEvent ve handleCall. Hem handleBlock hem de handleCall işlevlerini silebilirsiniz, biz sadece handleEvent işleviyle ilgileniyoruz.

handleEvent işlevi, olay daha önce project.yaml içinde belirttiğimiz filtrelerle eşleştiğinde olay verilerini alır. Tüm balances.Transfer olaylarını işleyecek ve daha önce oluşturduğumuz GraphQL varlıklarına kaydedecek şekilde güncelleyeceğiz.

handleEvent işlevini aşağıdaki şekilde güncelleyebilirsiniz (ek içe aktarmalara dikkat edin):

import { SubstrateEvent } from "@subql/types";
import { Transfer } from "../types";
import { Balance } from "@polkadot/types/interfaces";

export async function handleEvent(event: SubstrateEvent): Promise<void> {
  // Get data from the event
  // The balances.transfer event has the following payload \[from, to, value\]
  // logger.info(JSON.stringify(event));
  const from = event.event.data[0];
  const to = event.event.data[1];
  const amount = event.event.data[2];

  // Create the new transfer entity
  const transfer = new Transfer(
    `${event.block.block.header.number.toNumber()}-${event.idx}`
  );
  transfer.blockNumber = event.block.block.header.number.toBigInt();
  transfer.from = from.toString();
  transfer.to = to.toString();
  transfer.amount = (amount as Balance).toBigInt();
  await transfer.save();
}

Bunun yaptığı, yükteki aktarım verilerini içeren bir SubstrateEvent almaktır. Bu verileri çıkarırız ve daha sonra schema.graphql dosyasında daha önce tanımladığımız yeni bir Transfer varlığını başlatırız. Ek bilgiler ekleriz ve ardından yeni varlığı kaydetmek için .save() işlevini kullanırız (SubQuery bunu otomatik olarak veritabanına kaydeder).

Eşleme işlevleri hakkında daha fazla bilgi için Derleme/Eşlemeler altındaki belgelerimize bakın

Projeyi Oluşturun

Yeni SubQuery Projenizi çalıştırmak için önce çalışmamızı oluşturmamız gerekiyor. Yapı komutunu projenin kök dizininden çalıştırın.

::: code-tabs @tab yarn yarn build @tab npm npm run-script build :::

Important: Whenever you make changes to your mapping functions, you will need to rebuild your project

Running and Querying your Project

Run your Project with Docker

Whenever you create a new SubQuery Project, you should always run it locally on your computer to test it first. Bunu yapmanın en kolay yolu Docker kullanmaktır.

Bir SubQuery düğümünün nasıl çalıştırıldığını kontrol eden tüm yapılandırma, bu docker-compose.yml dosyasında tanımlanır. Yeni initalised yeni bir proje için burada hiçbir şeyi değiştirmenize gerek kalmayacak, ancak dosya ve ayarlar hakkında daha fazla bilgiyi Run a Project section.

Proje dizininin altında aşağıdaki komutu çalıştırın:

::: code-tabs @tab:active yarn shell yarn start:docker @tab npm shell npm run-script start:docker :::

It may take some time to download the required packages (@subql/nodeopen in new window, @subql/queryopen in new window, and Postgres) for the first time but soon you should see a running SubQuery node in the terminal screen.

Projenizi Sorgulama

Tarayıcınızı açın ve http://localhost:3000open in new window gidin.

Explorer'da ve sorguya hazır şemalarda bir GraphQL oyun alanının görüntü olduğunu görmeniz gerekir. Oyun alanının sağ üst kısmında, belge çizimini açacak bir Docs düğmesi bulacaksınız. Bu dokümantasyonlar otomatik olarak oluşturulur ve hangi varlıkları ve yöntemleri sorgulayabileceğinizi bulmanıza yardımcı olur.

Yeni bir SubQuery başlangıç ​​projesi için, nasıl çalıştığını anlamak veya GraphQL Sorgu dili hakkında daha fazla bilgi edinmek için aşağıdaki sorguyu deneyin.

{
  query {
    transfers(first: 10, orderBy: AMOUNT_DESC) {
      nodes {
        id
        amount
        blockNumber
        from
        to
      }
    }
  }
}

SubQuery Projenizi Yayımlama

SubQuery, yeni projenizi dağıtabileceğiniz zaman ücretsiz bir yönetilen hizmet sağlar. SubQuery Projelerineopen in new window dağıtabilir ve Gezgin'iopen in new window kullanarak sorgulayabilirsiniz.

Yeni projenizi SubQuery Projelerinde yayınlama kılavuzunu okuyun

Sonraki Adımlar

Tebrikler, artık örnek veriler için GraphQL API isteklerini kabul eden yerel olarak çalışan bir SubQuery projeniz var.

Artık temel bir SubQuery projesinin nasıl oluşturulacağına dair bir fikir edindiğinize göre, soru buradan nereye? Kendinize güveniyorsanız, üç temel dosya hakkında daha fazla bilgi edinebilirsiniz. Manifest dosyası, GraphQL şeması ve Bu belgelerin Oluşturma bölümü altındaki eşlemeler dosyası.

Aksi takdirde, daha ayrıntılı atölye çalışmaları, eğitimler ve örnek projelerin bulunduğu Akademi bölümümüze devam edin. Orada daha gelişmiş değişikliklere bakacağız ve hazır ve açık kaynak projeleri çalıştırarak SubQuery projelerini çalıştırma konusunda daha derine ineceğiz.

Son olarak, projenizi yürütmek ve yayınlamak için daha fazla yol arıyorsanız, Çalıştır ve Yayınla bölümümüz, SubQuery projenizi çalıştırmanın tüm yolları ve diğer gelişmiş GraphQL toplama ve abonelik özellikleri hakkında ayrıntılı bilgi sağlar.