Cosmos Quick Start

... 2022-8-5 About 5 min

# Cosmos Quick Start

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

Substrate/Polkadot için kılavuz arıyorsanız, Substrate/Polkadot'a özel hızlı başlangıç ​​kılavuzunu okuyabilirsiniz.

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.

The goal of this quick start guide is to adapt the standard starter project to begin indexing all votes on the Terra Developer Fund (opens new window) (which also contributed to SubQuery) from Cosmos, it should only take 10-15 minutes

You can see the final code of this project here at https://github.com/jamesbayly/juno-terra-developer-fund-votes (opens new window)

# 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
1
2

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
1

# Başlangıç SubQuery Projesini Başlatma

Cosmos is not yet supported in SubQuery's CLI (subql), to start with Juno clone or fork the starter project (opens new window).

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.

# Making Changes to your Project

In the starter package that you just initialised, we have provided a standard configuration for your new project. Esas olarak aşağıdaki dosyalar üzerinde çalışacaksınız:

  1. The GraphQL Schema in schema.graphql
  2. project.yaml içindeki Proje Manifestosu
  3. src/mappings/ dizinindeki Eşleme işlevleri

Bu hızlı başlangıç ​​kılavuzunun amacı, standart başlangıç ​​projesini 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.

We're going to update the schema.graphql file to read as follows so we can index all votes on the Terra Developer Fund (opens new window).

type Vote @entity {
  id: ID! # id field is always required and must look like this
  blockHeight: BigInt!
  voter: String! # The address that voted
  proposalID: BigInt! # The proposal ID
  vote: Boolean! # If they voted to support or reject the proposal
}
1
2
3
4
5
6
7

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

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ında zaten doğru bir şekilde kurulduğundan çok fazla değişiklik yapmayacağız, ancak işleyicilerimizi değiştirmemiz gerekiyor. Remember we are planning to index all votes on the Terra Developer Fund (opens new window). This means that we we will look at messages that use the vote contract call, we need to update the datasources section to read the following.

dataSources:
  - kind: cosmos/Runtime
    startBlock: 3246370 # The block when the first proposal in this fund was created
    mapping:
      file: "./dist/index.js"
      handlers:
        - handler: handleTerraDeveloperFund
          kind: cosmos/MessageHandler
          filter:
            type: "/cosmwasm.wasm.v1.MsgExecuteContract"
            # Filter to only messages with the vote function call
            contractCall: "vote" # The name of the contract function that was called
            values: # This is the specific smart contract that we are subscribing to
              contract: "juno1lgnstas4ruflg0eta394y8epq67s4rzhg5anssz3rc5zwvjmmvcql6qps2"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

This means we'll run a handleTerraDeveloperFund mapping function each and every time there is a vote message from the Terra Developer Fund (opens new window) smart contract.

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. You'll see four exported functions, handleBlock, handleEvent, handleMessage, and handleTransaction. Since we are dealing only with messages, you can delete everything other than the handleMessage function.

The handleMessage function recieved event data whenever event matches the filters that we specify previously in our project.yaml. We are going to update it to process all vote messages and save them to the GraphQL entity that we created earlier.

You can update the handleMessage function to the following (note the additional imports and renaming the function):

import { Vote } from "../types";
import { CosmosMessage } from "@subql/types-cosmos";

export async function handleTerraDeveloperFund(
  message: CosmosMessage
): Promise<void> {
  // logger.info(JSON.stringify(message));
  // Example vote https://www.mintscan.io/juno/txs/EAA2CC113B3EC79AE5C280C04BE851B82414B108273F0D6464A379D7917600A4

  const voteRecord = new Vote(`${message.tx.hash}-${message.idx}`);
  voteRecord.blockHeight = BigInt(message.block.block.header.height);
  voteRecord.voter = message.msg.sender;
  voteRecord.proposalID = message.msg.msg.vote.proposal_id;
  voteRecord.vote = message.msg.msg.vote.vote === "yes";

  await voteRecord.save();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

What this is doing is receiving a CosmosMessage which includes message data on the payload. We extract this data and then instantiate a new Vote entity that we defined earlier in the schema.graphql file. 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.

Important: Whenever you make changes to your mapping functions, you'll 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 dizini altında aşağıdaki komutu çalıştırın:

It may take some time to download the required packages (@subql/node (opens new window), @subql/query (opens new window), and Postgres) for the first time but soon you'll see a running SubQuery node. Burada sabırlı olun.

# Projenizi Sorgulama

Tarayıcınızı açın ve http://localhost:3000 (opens 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ı öğrenmek için aşağıdaki sorguyu deneyebilir veya GraphQL Query dili hakkında daha fazla bilgi .

query {
    votes(
    first: 5
    orderBy: BLOCK_HEIGHT_DESC
    # filter: {proposalID: {equalTo: "4"}}
  ) {
    nodes {
      id
      blockHeight
      voter
      vote
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

You can see the final code of this project here at https://github.com/jamesbayly/juno-terra-developer-fund-votes (opens new window)

# SubQuery Projenizi Yayımlama

SubQuery, yeni projenizi dağıtabileceğiniz zaman ücretsiz bir yönetilen hizmet sağlar. SubQuery Projelerine (opens new window) dağıtabilir ve Gezgin'i (opens new window) kullanarak sorgulayabilirsiniz.

Yeni projenizi SubQuery Projects'te yayınlamak için kılavuzu okuyun

# Sonraki Adımlar

Tebrikler, artık bLuna'dan veri aktarımı 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.

Last update: August 5, 2022 10:08