Skip to main content

Polkadot Бързо Стартиране

SubQuery TeamAbout 6 min

Polkadot Бързо Стартиране

В това ръководство за бързо начало ще започнем с прост стартов проект Substrate/Polkadot и след това ще завършим с индексиране на някои реални реални данни. Това е отлична основа, с която да започнете, когато разработвате свой собствен проект Substrate/Polkadot SubQuery.

В края на това ръководство ще получите работещ SubQuery проект, стартиран върху нодата SubQuery и с крайна точка GraphQL, от която можете да изисквате необходими данни.

Ако все още не сте го направили, ви предлагаме да разгледате терминологиятаизползвана в SubQuery.

Целта на това ръководство за бързо стартиране е да адаптира стандартния стартов проект, за да започне индексирането на всички трансфери от Polkadot, трябва да отнеме само 10-15 минути

Подготовка

Локална Среда за Разработка

Инсталирайте SubQuery CLI

Инсталирайте SubQuery CLI глобално на вашият терминал с помощта на NPM:

# NPM
npm install -g @subql/cli

Моля, обърнете внимание, че ние НЕ насърчаваме използването на yarn global за инсталиране на @subql/cli поради лошото управление на зависимостта, което може да доведе до грешки надолу по линията.

След това можете да стартирате помощ, за да видите наличните команди и използване, предоставени от CLI:

subql помощ

Инициализиране на Стартов Проект в SubQuery

Вътре в директорията, в която искате да създадете проект SubQuery, изпълнете следната команда, за да започнете.

subql init

Ще ви бъдат зададени някои въпроси, по време на инициализирането на проекта SubQuery:

  • Име на проект: Име на проект за вашия проект SubQuery
  • Мрежово семейство: Семейството на блокчейн от слой 1, което този проект SubQuery ще бъде разработен за индексиране. Използвайте клавишите със стрелки, за да изберете от наличните опции. За това ръководство ще използваме "Substrate"
  • Мрежа: Конкретната мрежа, която този проект SubQuery ще бъде разработен за индексиране. Използвайте клавишите със стрелки, за да изберете от наличните опции. За това ръководство ще използваме "Polkadot"
  • Шаблонен проект: Изберете шаблонен проект на SubQuery, който ще осигури отправна точка за започване на разработка. Предлагаме да изберете проекта "subql-starter".
  • RPC крайна точка: Предоставете HTTPS URL на работеща RPC крайна точка, която ще се използва по подразбиране за този проект. Можете бързо да получите достъп до публични крайни точки за различни мрежи на Polkadot, да създадете свой собствен частен специален Нод с помощта на OnFinalityopen in new window или просто да използвате крайната точка на Polkadot по подразбиране. Този вид нода RPC трябва да представлява архивна нода (да има състояние на пълна веригата). За това ръководство ще използваме стойността по подразбиране "https://polkadot.api.onfinality.io"
  • Git хранилище: Предоставете URL на Git към репозитория, в която този проект SubQuery ще бъде хостван (когато се хоства в SubQuery Explorer) или приемете предоставеното по подразбиране.
  • Автори: Въведете собственика на този проект SubQuery тук (например вашето име!) или приемете предоставеното по подразбиране.
  • Описание: Предоставете кратък параграф за вашия проект, който описва какви данни съдържа и какво могат да правят потребителите с него или да приемат предоставеното по подразбиране.
  • Версия: Въведете персонализиран номер на версията или използвайте стандартния по подразбиране (1.0.0)
  • Лиценз: Предоставете софтуерния лиценз за този проект или приемете по подразбиране (MIT)

След като процесът на инициализация приключи, трябва да видите, че в директорията е създадена папка с името на вашия проект. Съдържанието на тази директория трябва да е идентично с това, което е изброено в Структура на директорията.

Накрая, под директорията на проекта, изпълнете следната команда, за да инсталирате зависимостите на новия проект.

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

Внасяне на промени във вашия проект

В стартовия пакет, който току-що беше инициализиран, е предоставена стандартна конфигурация. Това са:

  1. Схемата GraphQL в schema.graphql
  2. Манифест на проекта в project.yaml
  3. Показване на Функции в директорията src/mappings/

Целта на това ръководство за бързо стартиране е да адаптира стандартния стартов проект, за да започне индексирането на всички трансфери от Polkadot.

Актуализиране на вашия файл със схема на GraphQL

Файлът schema.graphql дефинира различните схеми на GraphQL. В зависимост от начина, по който работи езикът за заявки GraphQL, файлът със схемата по същество диктува формата на вашите данни от SubQuery. Това е чудесно място за начало, защото ви позволява да дефинирате крайната си цел предварително.

Актуализирайте файла schema.graphql, за да чете, както следва:

type Transfer @entity {
  id: ID! # полето id винаги е задължително и трябва да изглежда така
  amount: BigInt # Сума, която се превежда
  blockNumber: BigInt # Височината на блока на трансфера
  from: String! # Сметката, от която се извършват преводите
  to: String! # Сметката, към която се извършват преводите
}

Важно: Когато правите промени във файла schema, моля, уверете се, че отново сте създали директорията си с типове със следната команда yarn codegen.

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

Ще намерите генерираните модели в директорията /src/types/models. За повече информация относно файла schema.graphql, проверете нашата документация в раздела Build/GraphQL Schema

Обновяване на файла Project Manifest

Файлът манифест на проекта (project.yaml) може да се разглежда като входна точка на вашия проект и дефинира повечето подробности за това как SubQuery ще индексира и трансформира данните от веригата.

Файлът на манифеста вече е настроен правилно, но трябва да променим нашите манипулатори. Тъй като планираме да индексираме всички прехвърляния на Polkadot, трябва да актуализираме секцията datasources, както следва:

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

Това означава, че ще изпълняваме функция за съпоставяне handleEvent всеки път, когато има събитие balans.Transfer.

За повече информация относна файла Project Manifest (project.yaml), проверете документацията ни в раздела Build/Manifest File

Добавяне на Mappring функция

Mapping функциите определят как данните от веригата се трансформират в оптимизирани обекти GraphQL, които по-рано сме дефинирали във файла schema.graphql.

Преминете към функцията за картографиране по подразбиране в директорията src/mappings. Ще забележите три експортирани функции, handleBlock, handleEvent, and handleCall. Изтрийте функциите handleBlock и handleCall, тъй като ще работим само с функцията handleEvent.

Функцията handleEvent получава данни за събитие, когато дадено събитие съвпада с филтрите, които сме посочили по-рано в нашия project.yaml. Ще го актуализираме, за да обработим всички събития balans.Transfer и да ги запазим в обектите на GraphQL, които създадохме по-рано.

Може да актуализирате функцията handleEvent по следният начин (обърнете внимание на допълнителния импорт):

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();
}

Това, което прави, е получаването на SubstrateEvent, което включва трансфер на данни в полезния товар. Ние извличаме тези данни и след това създаваме нов обект Transfer, който сме определили по-рано във файла schema.graphql. Добавяме допълнителна информация и след това използваме функцията .save() за запазване на новият обект (SubQuery автоматично ще го съхрани в базата данни).

За повече информация относно mapping функциите вижте нашата документация подBuild/Mappings

Изграждане на проект

За да стартираме вашия нов проект SubQuery, първо трябва да изградим нашата работа. Изпълнете командата за изграждане от основната директория на проекта.

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

Важно: Всеки път, когато правите промени във вашите функции за картографиране, ще трябва да изградите отново своя проект

Изпълнение и запитване на вашия проект

Стартирайте своя проект с Docker

Всеки път, когато създавате нов проект на SubQuery, винаги трябва да го стартирате локално на вашия компютър, за да го тествате първо. Най-лесният начин да се направи това е чрез Docker.

Цялата конфигурация, която контролира как се изпълнява нод на SubQuery, се дефинира във файла docker-compose.yml. За нов проект, който току-що е инициализиран, няма да е необходимо да променяте нищо, но можете да прочетете повече за файла и настройките в нашия раздел Изпълнение на проект.

Под директорията на проекта изпълнете следната команда:

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

Може да отнеме известно време изтеглянето на необходимите пакети (@subql/nodeopen in new window, @subql/queryopen in new window и Postgres) за първи път, но скоро трябва да видите работещ нод на SubQuery на екрана на терминала.

Направете заявка за вашият проект

Отворете браузъра си и отидете на http://localhost:3000open in new window.

Трябва да видите игрална площадка на GraphQL в браузъра и схемите, които са готови за заявка. В горния десен ъгъл на playground ще намерите бутон Docs, който ще отвори чертеж с документация. Тази документация се генерира автоматично и ви помага да намерите за какви обекти и методи можете да направите заявка.

За нов начален проект на SubQuery опитайте следната заявка, за да разберете как работи или научете повече за езика за заявки GraphQL.

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

Публикувайте своя SubQuery проект

SubQuery предоставя безплатна управлявана услуга, където можете да разгърнете новия си проект. Може да го разгърнете в SubQuery Managed Serviceopen in new window и да направите запитване с помощта на нашият Exploreropen in new window.

Прочетете ръководството за публикуване на новия си проект в SubQuery Projects

Следващите стъпки

Поздравления, сега имате локално работещ SubQuery проект, който приема API GraphQL заявки за извличане на данни.

Сега, когато имате представа как се изгражда базисен SubQuery проект, възниква въпросът: какво да правите по-нататък? Ако се чувствате уверени, можете да започнете да научите повече за трите ключови файла. Файлът на манифеста, схемата GraphQL и файлът за съпоставяне са под секцията за изграждане на тези документи.

В противен случай продължете към нашата раздел Академия, където имаме по-задълбочени семинари, уроци и примерни проекти. Там ще разгледаме по-разширени модификации и ще се потопим по-дълбоко в изпълнението на проекти на SubQuery, като стартираме лесно достъпни проекти с отворен код.

И накрая, ако търсите повече начини да стартирате и публикувате вашия проект, нашият раздел Стартиране & публикуване предоставя подробна информация за всички начини за изпълнение на вашия проект SubQuery и други разширени функции за агрегиране и абонамент на GraphQL.