Polkadot Бързо Стартиране
Polkadot Бързо Стартиране
В това ръководство за бързо начало ще започнем с прост стартов проект Substrate/Polkadot и след това ще завършим с индексиране на някои реални реални данни. Това е отлична основа, с която да започнете, когато разработвате свой собствен проект Substrate/Polkadot SubQuery.
В края на това ръководство ще получите работещ SubQuery проект, стартиран върху нодата SubQuery и с крайна точка GraphQL, от която можете да изисквате необходими данни.
Ако все още не сте го направили, ви предлагаме да разгледате терминологиятаизползвана в SubQuery.
Целта на това ръководство за бързо стартиране е да адаптира стандартния стартов проект, за да започне индексирането на всички трансфери от Polkadot, трябва да отнеме само 10-15 минути
Подготовка
Локална Среда за Разработка
- Node: Модерна (например LTS версия) инсталация на Node.
- Docker: В това ръководство ще бъде използван Docker
Инсталирайте 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, да създадете свой собствен частен специален Нод с помощта на OnFinality или просто да използвате крайната точка на 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
:::
Внасяне на промени във вашия проект
В стартовия пакет, който току-що беше инициализиран, е предоставена стандартна конфигурация. Това са:
- Схемата GraphQL в
schema.graphql
- Манифест на проекта в
project.yaml
- Показване на Функции в директорията
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/node
, @subql/query
и Postgres) за първи път, но скоро трябва да видите работещ нод на SubQuery на екрана на терминала.
Направете заявка за вашият проект
Отворете браузъра си и отидете на http://localhost:3000.
Трябва да видите игрална площадка на GraphQL в браузъра и схемите, които са готови за заявка. В горния десен ъгъл на playground ще намерите бутон Docs, който ще отвори чертеж с документация. Тази документация се генерира автоматично и ви помага да намерите за какви обекти и методи можете да направите заявка.
За нов начален проект на SubQuery опитайте следната заявка, за да разберете как работи или научете повече за езика за заявки GraphQL.
{
query {
transfers(first: 10, orderBy: AMOUNT_DESC) {
nodes {
id
amount
blockNumber
from
to
}
}
}
}
Публикувайте своя SubQuery проект
SubQuery предоставя безплатна управлявана услуга, където можете да разгърнете новия си проект. Може да го разгърнете в SubQuery Managed Service и да направите запитване с помощта на нашият Explorer.
Прочетете ръководството за публикуване на новия си проект в SubQuery Projects
Следващите стъпки
Поздравления, сега имате локално работещ SubQuery проект, който приема API GraphQL заявки за извличане на данни.
Сега, когато имате представа как се изгражда базисен SubQuery проект, възниква въпросът: какво да правите по-нататък? Ако се чувствате уверени, можете да започнете да научите повече за трите ключови файла. Файлът на манифеста, схемата GraphQL и файлът за съпоставяне са под секцията за изграждане на тези документи.
В противен случай продължете към нашата раздел Академия, където имаме по-задълбочени семинари, уроци и примерни проекти. Там ще разгледаме по-разширени модификации и ще се потопим по-дълбоко в изпълнението на проекти на SubQuery, като стартираме лесно достъпни проекти с отворен код.
И накрая, ако търсите повече начини да стартирате и публикувате вашия проект, нашият раздел Стартиране & публикуване предоставя подробна информация за всички начини за изпълнение на вашия проект SubQuery и други разширени функции за агрегиране и абонамент на GraphQL.