Polkadot Быстрый старт

... 2022-7-7 Приблизительно 2 минут

# Polkadot Быстрый старт

В этом кратком руководстве мы начнем с простого начального проекта Substrate/Polkadot, а затем закончим индексированием некоторых фактических реальных данных. Это отличная основа для начала разработки собственного Substrate/Polkadot SubQuery проекта.

В конце этого руководства у вас будет рабочий проект SubQuery, запущенный на узле SubQuery с конечной точкой GraphQL, из которой вы можете запрашивать данные.

Если вы еще этого не сделали, мы предлагаем вам ознакомиться с терминологией , используемой в SubQuery.

Целью этого краткого руководства является адаптация стандартного начального проекта для начала индексации всех трансферов из Polkadot, это займет всего 10-15 минут

# Подготовка

# Локальная среда разработки

# Установите SubQuery CLI

Установите SubQuery CLI глобально на свой терминал с помощью NPM:

# NPM
npm install -g @subql/cli
1
2

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

Затем вы можете запустить help, чтобы увидеть доступные команды и их использование, предоставляемые CLI:

помощь subql
1

# Инициализируем Начальный Проект SubQuery

Внутри каталога, в котором вы хотите создать проект SubQuery, для начала просто выполните следующую команду:

subql init
1

По мере инициализации проекта SubQuery вам будут заданы определенные вопросы:

  • Project name: Имя для вашего проекта SubQuery
  • Network family: Семейство сетей блокчейнов уровня 1, для индексирования которого будет разработан этот проект SubQuery. Используйте клавиши со стрелками для выбора из доступных вариантов. В этом руководстве мы будем использовать "Substrate"
  • Network: Конкретная сеть, для индексации которой будет разработан этот проект SubQuery. Используйте клавиши со стрелками для выбора из доступных вариантов. В этом руководстве мы будем использовать "Polkadot"
  • Template project: Выберите шаблон проекта SubQuery, который послужит отправной точкой для начала разработки. Мы предлагаем выбрать проект "subql-starter".
  • RPC endpoint: Укажите URL-адрес HTTPS для работающей конечной точки RPC, которая будет использоваться по умолчанию для этого проекта. Вы можете быстро получить доступ к общедоступным конечным точкам для различных сетей Polkadot, создать свой собственный выделенный узел с помощью OnFinality (opens new window) или просто использовать конечную точку Polkadot по умолчанию. Этот узел RPC должен быть архивным узлом (иметь состояние полной цепочки). В этом руководстве мы будем использовать значение по умолчанию "https://polkadot.api.onfinality.io"
  • Git repository: укажите URL-адрес Git для репозитория, в котором будет размещен этот проект SubQuery (при размещении в SubQuery Explorer), или примите предоставленное значение по умолчанию.
  • Authors: Введите здесь владельца этого проекта SubQuery (например, ваше имя!) или примите предоставленное значение по умолчанию.
  • Description: Предоставьте короткий абзац о вашем проекте, в котором описывается, какие данные он содержит и что пользователи могут с ним делать, или примите предоставленное значение по умолчанию.
  • Version: Введите собственный номер версии или используйте значение по умолчанию (1.0.0)
  • License: Предоставьте лицензию на программное обеспечение для этого проекта или примите лицензию по умолчанию (MIT)

После завершения процесса инициализации вы должны увидеть, что внутри каталога создана папка с названием вашего проекта. Содержимое этого каталога должно быть идентично тому, что указано в Структуре каталогов.

Наконец, в каталоге проекта выполните следующую команду, чтобы установить зависимости нового проекта.

```shell cd PROJECT_NAME yarn install ``` ```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! # Счет, на который осуществляются переводы
}
1
2
3
4
5
6
7

Важно: когда вы вносите какие-либо изменения в файл schema, убедитесь, что вы заново создали каталог типов.

```shell yarn codegen ``` ```shell npm run-script codegen ```

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

# Обновление файла Манифеста Проекта

Файл манифеста проекта (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
1
2
3
4
5
6
7
8
9
10
11

Это означает, что мы будем запускать функцию сопоставления handleEvent каждый раз, когда происходит событие balances.Transfer.

Дополнительные сведения о файле манифеста проекта (project.yaml) см. в нашей документации в разделе Build/Manifest File

# Добавление функции сопоставления

Функции сопоставления определяют, как данные цепочки преобразуются в оптимизированные сущности GraphQL, которые мы ранее определили в файле schema.graphql.

Перейдите к функции сопоставления по умолчанию в каталоге src/mappings. Вы увидите три экспортированные функции: handleBlock, handleEvent и handleCall. Удалите обе функции handleBlock и handleCall, поскольку мы будем иметь дело только с функцией handleEvent.

Функция handleEvent получает данные о событии всякий раз, когда событие соответствует фильтрам, указанным ранее в нашем project.yaml. Мы обновим его, чтобы он обрабатывал все события balances.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> {
    // Получить данные о событии
    // Событие balances.transfer имеет следующий пэйлоад \[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];

    // Создать новый объект передачи
    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();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Что это делает, так это получает SubstrateEvent, который включает данные о передаче в полезной нагрузке. Мы извлекаем эти данные, а затем создаем экземпляр нового объекта Transfer, который мы определили ранее в файле schema.graphql. Мы добавляем дополнительную информацию, а затем используем функцию .save() для сохранения нового объекта (SubQuery автоматически сохранит его в базе данных).

Для получения дополнительной информации о функциях сопоставления ознакомьтесь с нашей документацией в разделе Build/Mappings

# Сборка проекта

Чтобы запустить ваш новый проект SubQuery, нам сначала нужно собрать нашу работу. Запустите команду сборки из корневого каталога проекта.

```shell yarn build ``` ```shell npm run-script build ```

Важно: Всякий раз, когда вы вносите изменения в свои функции сопоставления, вам нужно будет пересобрать свой проект..

# Запуск и запрос вашего проекта

# Запустите свой проект с помощью Docker

Всякий раз, когда вы создаете новый проект SubQuery, вы всегда должны запускать его локально на своем компьютере, чтобы сначала протестировать его. Проще всего это сделать с помощью Docker.

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

В каталоге проекта выполните следующую команду:

```shell yarn start:docker ``` ```shell npm run-script start:docker ```

Загрузка необходимых пакетов (@subql/node (opens new window), @subql/query (opens new window) и Postgres) в первый раз может занять некоторое время, но вскоре вы должны увидеть работающий узел SubQuery на экране терминала.

# Отправьте запрос своему проекту

Откройте браузер и перейдите по адресу http://localhost:3000 (opens new window).

Вы должны увидеть в браузере игровую площадку GraphQL и схемы, готовые к запросу. В правом верхнем углу игровой площадки вы найдете кнопку _ Документы _, которая откроет розыгрыш документации. Эта документация создается автоматически и помогает вам найти, какие сущности и методы вы можете запрашивать.

Для нового начального проекта SubQuery попробуйте выполнить следующий запрос, чтобы понять, как он работает, или узнать больше о языке запросов GraphQL.

{
  query {
    transfers(
      first: 10,
      orderBy: AMOUNT_DESC
    ) {
      nodes {
        id
        amount
        blockNumber
        from
        to
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# Опубликуйте свой проект SubQuery

SubQuery предоставляет бесплатный управляемый сервис, в котором вы можете развернуть свой новый проект. Вы можете развернуть его в SubQuery Projects (opens new window) и запросить его с помощью нашего Проводника (opens new window).

Прочтите руководство по публикации нового проекта в SubQuery Projects

# Следующие шаги

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

Теперь, когда вы поняли, как создать базовый проект SubQuery, возникает вопрос: что дальше? Если вы чувствуете себя уверенно, вы можете перейти к более подробному изучению трех ключевых файлов. Файл манифеста, схема GraphQL и файл сопоставлений находятся в разделе "Сборка" этой документации.

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

Наконец, если вы ищете другие способы запуска и публикации своего проекта, наш раздел "Запуск и Публикация" содержит подробную информацию обо всех способах запуска вашего проекта SubQuery и других расширенных функциях агрегации и подписки GraphQL.

Последнее обновление: July 7, 2022 09:05