Швидкий старт Avalanche

... 2022-8-5 Приблизно 2 хв

# Швидкий старт Avalanche

У цьому короткому посібнику ми почнемо з простого стартового проекту Avalanche, а потім закінчимо індексуванням деяких реальних даних. Це чудова основа для початку розробки власного проекту SubQuery.

Якщо ви шукаєте посібники для Substrate/Polkadot, ви можете прочитати Посібник із короткого запуску спеціального Substrate/Polkadot.

В кінці цього посібника у вас буде робочий проєкт SubQuery, який працює на вузлі SubQuery з кінцевою точкою GraphQL, з якої можна запитувати дані.

Якщо ви ще цього не зробили, ми пропонуємо вам ознайомитись із terminology , що використовується в SubQuery.

Метою цього короткого посібника є індексація всіх журналів Approve маркера Pangolin, це займе лише 10-15 хвилин

# Підготовка

# Місцеве середовище розвитку

# Встановити SubQuery CLI

Встановіть SubQuery CLI глобально на свій термінал за допомогою NPM:

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

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

Потім ви можете запустити довідку, щоб побачити доступні команди та використання, надані CLI

subql help
1

# Ініціалізуйте проект SubQuery Starter

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

subql init
1

Під час ініціалізації проекту SubQuery вам зададуть певні запитання:

  • Project Name: A name for your SubQuery project
  • Сімейство мереж. Сімейство мереж блокчейн рівня 1, для індексації якого буде розроблено цей проект SubQuery, використовуйте клавіші зі стрілками на клавіатурі, щоб вибрати один із параметрів, для цього посібника ми будемо використовувати "Avalanche"
  • Мережа: конкретна мережа, для індексації якої буде розроблено цей проект SubQuery, використовуйте клавіші зі стрілками на клавіатурі, щоб вибрати один із варіантів, для цього посібника ми будемо використовувати "Avalanche"
  • Шаблон: виберіть шаблон проекту SubQuery, який буде відправною точкою для початку розробки, ми пропонуємо вибрати "Початковий проект"
  • Репозиторій Git (необов’язково): надайте URL-адресу Git до репозиторію, в якому буде розміщено цей проект SubQuery (якщо він розміщено в SubQuery Explorer)
  • Кінцева точка RPC (обов’язково): надайте URL-адресу HTTPS для запущеної кінцевої точки RPC, яка буде використовуватися за замовчуванням для цього проекту. Цей вузол RPC повинен бути вузлом архіву (мати стан повного ланцюга). Для цього посібника ми будемо використовувати значення за замовчуванням "avalanche.api.onfinality.io"
  • Автори (обов’язково): Введіть тут власника цього проекту SubQuery (наприклад, ваше ім’я!)
  • Опис (необов’язково): ви можете надати короткий абзац про ваш проект, який описує, які дані він містить і що користувачі можуть з ними робити
  • Версія (обов’язково): введіть користувацький номер версії або використовуйте стандартний (1.0.0)
  • Ліцензія (обов’язково): надайте ліцензію на програмне забезпечення для цього проекту або прийміть стандартну (Apache-2.0)

Після завершення процесу ініціалізації ви побачите, що в каталозі створена папка з назвою вашого проекту. Вміст цього каталогу має бути ідентичним тому, що вказано в Структурі каталогу.

Нарешті, у каталозі проекту виконайте наступну команду, щоб встановити залежності нового проекту.

# Внесення змін до проекту

У стартовому пакеті, який ви щойно ініціалізували, ми надали стандартну конфігурацію для вашого нового проекту. Ви в основному працюватимете з такими файлами:

  1. Схема GraphQL в schema.graphql
  2. Маніфест проекту в project.yaml
  3. Картографування функціонує в каталозі src / mappings /

Метою цього короткого посібника є адаптація стандартного стартового проекту для індексації всіх журналів транзакцій Pangolin Approve.

# Оновлення файлу схеми GraphQL

Файл schema.graphql визначає різні схеми GraphQL. Завдяки тому, як працює мова запитів GraphQL, файл схеми по суті визначає форму ваших даних із SubQuery. Це чудове місце для початку, тому що воно дає змогу заздалегідь визначити кінцеву мету.

Ми збираємося оновити файл schema.graphql, щоб видалити всі існуючі сутності та прочитати наступне

type PangolinApproval @entity {
  id: ID!
  transactionHash: String!
  blockNumber: String!
  blockHash: String!
  addressFrom: String
  addressTo: String
  amount: String
}
1
2
3
4
5
6
7
8
9

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

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

# Оновлення файлу маніфесту проекту

Файл маніфесту проекту (project.yaml) можна розглядати як точку входу до вашого проекту, і він визначає більшість деталей про те, як SubQuery буде індексувати та перетворювати дані ланцюга.

Ми не будемо робити багато змін у файлі маніфесту, оскільки він уже налаштований правильно, але нам потрібно змінити наші обробники. Пам’ятайте, що ми плануємо індексувати всі журнали затвердження Pangolin, тому нам потрібно оновити розділ datasources, щоб прочитати наступне.

dataSources:
  - kind: Avalanche/Runtime
    startBlock: 57360 # Блокувати, коли був створений контракт Pangolin
    options:
      # Має бути ключ активів
      abi: erc20
      ##Pangolin token https://snowtrace.io/token/0x60781c2586d68229fde47564546784ab3faca982
      address: "0x60781C2586D68229fde47564546784ab3fACA982"
    assets:
      erc20:
        file: (прихований)
    mapping:
      file: "./dist/index.js"
      handlers:
        - handler: handleLog
          kind: лавина/LogHandler
          filter:
            ## Дотримується стандартних фільтрів журналу https://docs.ethers.io/v5/concepts/events/
            function: Затвердити (адреса витрачача, uint256 rawAmount)
            # address: "0x60781C2586D68229fde47564546784ab3fACA982"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Це означає, що ми запускатимемо функцію зіставлення handleLog щоразу, коли буде журнал approve для будь-якої транзакції з контракту Pangolin (opens new window).

Щоб отримати додаткові відомості про файл маніфесту проекту (project.yaml), перегляньте нашу документацію в розділі Файл збірки/маніфесту

# Додайте функцію відображення

Функції відображення визначають, як дані ланцюга перетворюються в оптимізовані сутності GraphQL, які ми раніше визначили у файлі schema.graphql.

Перейдіть до функції відображення за замовчуванням у каталозі src/mappings. Ви побачите три експортовані функції: handleBlock, handleLog і handleTransaction. Ви можете видалити як функції handleBlock, так і handleTransaction, ми маємо справу лише з функцією handleLog.

Функція handleLog отримує дані про події щоразу, коли подія відповідає фільтрам, які ми вказали раніше в нашому project.yaml. Ми збираємося оновити його, щоб обробити всі журнали транзакцій approval та зберегти їх у сутності GraphQL, які ми створили раніше.

Ви можете оновити функцію handleLog до наступного (зверніть увагу на додатковий імпорт):

import { PangolinApproval } from "../types";
import { AvalancheLog } from "@subql/types-avalanche";

export async function handleLog(event: AvalancheLog): Promise<void> {
  const pangolinApprovalRecord = new PangolinApproval(
    `${event.blockHash}-${event.logIndex}`
  );

  pangolinApprovalRecord.transactionHash = event.transactionHash;
  pangolinApprovalRecord.blockHash = event.blockHash;
  pangolinApprovalRecord.blockNumber = event.blockNumber;
  # topics store data as an array
  pangolinApprovalRecord.addressFrom = event.topics[0];
  pangolinApprovalRecord.addressTo = event.topics[1];
  pangolinApprovalRecord.amount = event.topics[2];

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

Це отримує журнал Avalanche Log, який містить дані журналу трансляцій щодо корисного навантаження. Ми витягуємо ці дані, а потім створюємо новий об’єкт PangolinApproval, який ми визначили раніше у файлі schema.graphql. Ми додаємо додаткову інформацію, а потім використовуємо функцію .save() для збереження нової сутності (SubQuery автоматично збереже це в базі даних).

Щоб отримати додаткові відомості про функції відображення, перегляньте нашу документацію в розділі Build/Mappings

# Створіть проект

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

Важливо: щоразу, коли ви вносите зміни у свої функції відображення, вам потрібно буде перебудувати свій проект

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

# Запустіть свій проект за допомогою Docker

Кожного разу, коли ви створюєте новий проект SubQuery, ви завжди повинні запускати його локально на своєму комп’ютері, щоб спочатку перевірити його. Найпростіший спосіб зробити це за допомогою Docker.

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

У каталозі проекту виконайте таку команду:

Завантаження необхідних пакетів може зайняти деякий час (@subql/node (opens new window),

@subql/query</7 > і Postgres) вперше, але незабаром ви побачите запущений вузол SubQuery. Будьте терплячі тут.

# Запитуйте свій проект

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

Ви повинні побачити, що ігровий майданчик GraphQL відображається в провіднику та схеми, які готові до запиту. У верхньому правому куті ігрового майданчика ви знайдете кнопку _ Docs _, яка відкриє розіграш документації. Ця документація генерується автоматично і допомагає вам знайти, які сутності та методи ви можете запитувати.

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

query {
  pangolinApprovals(first: 5) {
    nodes {
      id
      blockNumber
      blockHash
      transactionHash
      addressFrom
      addressTo
      amount
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# Опублікуйте проект SubQuery

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

Прочитайте посібник, щоб опублікувати свій новий проект у SubQuery Projects, Зверніть увагу, що ви повинні розгорнути через IPFS.

# Настуні кроки

Вітаємо, тепер у вас є локально запущений проект SubQuery, який приймає запити GraphQL API для передачі даних з bLuna.

Тепер, коли ви зрозуміли, як створити базовий проект SubQuery, виникає питання, куди звідси? Якщо ви почуваєтеся впевнено, ви можете перейти до вивчення трьох ключових файлів. Файл маніфесту, схема GraphQL і файл зіставлення в розділі Створення цих документів.

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

Нарешті, якщо ви шукаєте більше способів запустити та опублікувати свій проект, наш розділ «Виконати та опублікувати» надає детальну інформацію про всі способи запуску проекту SubQuery та інші розширені функції агрегації та підписки GraphQL.

Останнє оновлення: August 5, 2022 10:08