Avalanche Бързо стартиране

... 2022-8-5 About 2 min

# Avalanche Бързо стартиране

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

Ако търсите ръководства за Substrate/Polkadot, можете да прочетете Специфичното за субстрат/Polkadot ръководство за бързо начало.

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

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

Целта на това кратко ръководство е да индексира всички регистрационни файлове Approve на токена на Pangolin, това трябва да отнеме само 10-15 минути

# Подготовка

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

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

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

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

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

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

subql помощ
1

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

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

subql init
1

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

  • Project Name: A name for your SubQuery project
  • Мрежово семейство: Блокчейн мрежовото семейство от слой 1, за което този проект SubQuery ще бъде разработен за индексиране, използвайте клавишите със стрелки на клавиатурата си, за да изберете от опциите, за това ръководство ще използваме "Avalanche"
  • Мрежа: Конкретната мрежа, която този проект SubQuery ще бъде разработен за индексиране, използвайте клавишите със стрелки на клавиатурата си, за да изберете от опциите, за това ръководство ще използваме "Avalanche"
  • Шаблон: Изберете шаблон за проект на SubQuery, който ще осигури отправна точка за започване на разработка, предлагаме да изберете „Starter project“
  • Git repository (опционално): посочете Git URL хранилище, в което ще се съхранява този проект SubQuery (при разполагане в SubQuery Explorer)
  • RPC endpoint (Необходимо): Укажете HTTPS URL за работеща крайна точка RPC която ще бъде използвана по подразбиране за този проект. Този вид нода RPC трябва да представлява архивна нода (да има състояние на пълна веригата). За това ръководство ще използваме стойността по подразбиране "avalanche.api.onfinality.io"
  • Authors (задължително): въведете собственика на този проект за SubQuery тук (например вашето име!)
  • Description (опционално): можете да предоставите кратко описание за вашия проект, който описва какви данни съдържа и какво могат да правят потребителите с него
  • Version (Задължително): въведете свой персонализиран номер на версията или използвайте стойността по подразбиране (1.0.0)
  • License (задължително): предоставете софтуерен лиценз за този проект или потвърдете такъв по подразбиране (Apache-2.0)

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

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

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

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

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

Целта на това ръководство за бързо стартиране е да адаптира стандартния стартов проект за индексиране на всички регистрационни файлове за Approve транзакции на Pangolin.

# Актуализиране на вашия файл със схема на 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

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

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

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

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

Няма да правим много промени във файла на манифеста, тъй като той вече е настроен правилно, но трябва да променим нашите handlers. Не забравяйте, че планираме да индексираме всички регистрационни файлове за одобрение на Pangolin, в резултат на което трябва да актуализираме секцията източници на данни, за да прочетем следното.

dataSources:
  - kind: avalanche/Runtime
    startBlock: 57360 # Блокирайте, когато е създаден договорът Pangolin
    options:
      # Трябва да е ключ от активи
      abi: erc20
      ## Pangolin token https://snowtrace.io/token/0x60781c2586d68229fde47564546784ab3faca982
      address: "0x60781C2586D68229fde47564546784ab3fACA982"
    assets:
      erc20:
        file: "./node_modules/@pangolindex/exchange-contracts/artifacts/contracts/pangolin-core/interfaces/IPangolinERC20.sol/IPangolinERC20.json"
    mapping:
      file: "./dist/index.js"
      handlers:
        - handler: handleLog
          kind: avalanche/LogHandler
          filter:
            ## Следва стандартния дневник filters https://docs.ethers.io/v5/concepts/events/
            function: Approve(address spender, 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 contract (opens new window).

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

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

Mapping функциите определят как данните от веригата се трансформират в оптимизирани обекти 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 автоматично ще го съхрани в базата данни).

За повече информация относно mapping функциите вижте нашата документация под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, показана в explorer, и готовите за заявка схеми. В горния десен ъгъл на playground ще намерите бутон Docs, който ще отвори чертеж с документация. Тази документация се генерира автоматично и ви помага да намерите за какви обекти и методи можете да направите заявка.

За нов стартов SubQuery проект можете да опитате следната заявка, за да получите представа как работи или научете повече относно езика за заявки 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 и mapping файл за съпоставяне в секцията за изграждане на тези документи.

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

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

Last update: August 5, 2022 10:08