Как отправлять уведомления из подграфа

Gm folks ✨

Граф, безусловно, является одной из самых крутых инноваций в пространстве Web3. Благодаря своей уникальной инфраструктуре, Graph Protocol добавляет функциональность индексирования в экосистему блокчейна. Он до смешного упростил процесс запроса данных из блокчейн-сетей, таких как Ethereum.

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

В этом руководстве я покажу вам, как использовать вспомогательную функцию EPNS для интеграции вашего канала с подграфом.

EPNS поддерживает только подграфы, развернутые на хостинговом сервисе The Graph Protocol. В следующем обновлении будет добавлена поддержка Subgraph Studio.

В настоящее время поддержка подграфов доступна в Staging и будет доступна в Prod после аудита Protocol v2.

Зачем использовать подграфы?

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

Например, подграф Uniswap хранит данные об общем объеме по всем торговым парам, данные об объеме по каждой торговой паре и даже данные по конкретному токену.

Как насчет интеллектуального извлечения данных из подграфа и генерации полезных предупреждений?

Это может быть невероятно полезно для конечных пользователей вашего dApp и субъектов, подключенных к вашему смарт-контракту, улучшая общий пользовательский опыт.

Отправка уведомлений с помощью EPNS

EPNS разработала собственную Helper Function специально для The Graph Protocol, которая позволяет вам считывать события из подграфа и определять соответствующие уведомления. После определения они сохраняются на подграфе в формате Long String.

Позже узлы EPNS Push Nodes получают уведомления, определенные на подграфе, и рассылают их подписчикам канала.

Чтобы интегрировать EPNS с вашим подграфом, вам потребуется:

  1. ID вашего подграфа
  2. Канал, развернутый на EPNS

Если у вас нет ID подграфа, не стесняйтесь создать свой собственный подграф, следуя пошаговому руководству, доступному здесь: Create a Subgraph.

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

Хватит болтать, давайте сразу приступим к строительству!!!

Настройка EPNS с Subgraph

Для того чтобы интегрировать EPNS в ваш Subgraph, внимательно выполните следующие шаги;

1. Инициализируйте Subgraph с EPNS

  • Перейдите в каталог Subgraph и найдите файл schema.graphql. Откройте его в выбранном вами редакторе и включите в него следующую схему EPNS;
type EpnsNotificationCounter @entity {
  id: ID!
  totalCount: BigInt!
}

type EpnsPushNotification @entity {
  id: ID!
  notificationNumber: BigInt!
  recipient: String!
  notification: String!
}
Вход в полноэкранный режим Выйти из полноэкранного режима
  • В файле mapping.ts в каталоге src/ экспортируйте идентификатор подграфа;
//Note: EPNS only supports The Graph Hosted Service at present
export const subgraphID = "GithubID/subgraph-slug"
Вход в полноэкранный режим Выйдите из полноэкранного режима

Примечание: Убедитесь, что вышеуказанный шаг завершен, так как Subgraph ID будет импортирован в следующем шаге!

  • Создайте файл с именем EPNSNotification.ts в папке src/. Я буду называть его нашим файлом-помощником. Теперь скопируйте приведенный ниже код TypeScript и вставьте его во вновь созданный файл Helper;
import { BigInt, log } from "@graphprotocol/graph-ts"
import { EpnsNotificationCounter, EpnsPushNotification } from '../generated/schema'
import { subgraphID } from "./mapping"

export function sendEPNSNotification(recipient: string, notification: string): void 
{
  let id1 = **subgraphID**
  log.info('New id of EpnsNotificationCounter is: {}', [id1])

  let epnsNotificationCounter = EpnsNotificationCounter.load(id1)
  if (epnsNotificationCounter == null) {
    epnsNotificationCounter = new EpnsNotificationCounter(id1)
    epnsNotificationCounter.totalCount = BigInt.fromI32(0)
  }
  epnsNotificationCounter.totalCount = (epnsNotificationCounter.totalCount).plus(BigInt.fromI32(1))

  let count = epnsNotificationCounter.totalCount.toHexString()
  let id2 = `${subgraphID}+${count}`
  log.info('New id of EpnsPushNotification is: {}', [id2])

  let epnsPushNotification = EpnsPushNotification.load(id2)
  if (epnsPushNotification == null) {
    epnsPushNotification = new EpnsPushNotification(id2)
  }

  epnsPushNotification.recipient = recipient
  epnsPushNotification.notification = notification
  epnsPushNotification.notificationNumber = epnsNotificationCounter.totalCount

  epnsPushNotification.save()
  epnsNotificationCounter.save()
}
Вход в полноэкранный режим Выйти из полноэкранного режима
  • В mapping.ts, находящемся в src/, импортируйте Helper File;
import { sendEPNSNotification } from "./EPNSNotification"
Войти в полноэкранный режим Выйти из полноэкранного режима

Файл примера mapping.ts написан на языке TypeScript. Это основной сценарий, определяющий полезную нагрузку вашего уведомления и его получателей.

2. Определите элементы полезной нагрузки

В методе обработчика событий файла mapping.ts определите элементы полезной нагрузки вашего уведомления, такие как получатель уведомления, тип, заголовок, сообщение и т.д. Эти переменные будут использованы для определения нашей переменной уведомления.

mapping.ts находится в папке epns-graph-integration/src.

let recipient = "0xD8634C39BBFd4033c0d3289C4515275102423681",
      type = "3",
      title = "Number changed",
      body = `Number changed from ${event.params.from} to ${event.params.to}`,
      subject = "Number changed",
      message = `Number changed from ${event.params.from} to ${event.params.to}`,
      image = "null",
      secret = "null",
      cta = "https://epns.io/"
Вход в полноэкранный режим Выход из полноэкранного режима

Настоятельно рекомендуется просмотреть эту документацию, чтобы больше узнать об элементах полезной нагрузки и их определениях.

3. Определите уведомление

Переменная notification определяется в следующем формате 👇🏼.

Формат : {"поле" : "значение"}.

notification = `{"type": "${type}", "title": "${title}", "body": "${body}", "subject": "${subject}", "message": "${message}", "image": "${image}", "secret": "${secret}", "cta": "${cta}"}`
Вход в полноэкранный режим Выход из полноэкранного режима

4. Вызов вспомогательной функции EPNS

После выполнения описанных выше действий необходимо вызвать вспомогательную функцию EPNS и отправить ответ. Чтобы вызвать вспомогательную функцию EPNS Notification, используйте приведенный ниже сценарий;

sendEPNSNotification (recipient, notification)
Вход в полноэкранный режим Выйти из полноэкранного режима

Подключение подграфа к каналу EPNS

После того как вы настроили интеграцию EPNS в ваш подграф, вы должны добавить подграф к его каналу, чтобы доставлять уведомления. Для этого вам потребуется идентификатор подграфа, который обычно находится в конце URL-адреса подграфа.

Надеюсь, вы уже создали канал. Если вы еще не создали его, ознакомьтесь с этим руководством по созданию канала на EPNS.

  1. Перейдите в EPNS dApp → Панель каналов → Кнопка настроек → Добавить сведения о подграфе
  2. Введите Идентификатор подграфа и Интервал опроса.

Важно отметить интервал опроса. Это время (в секундах), которое определяет интервал времени, через который Push-узлы будут пинговать подграф для получения последних уведомлений.

Примечание: Это внутрицепочечная транзакция, которая сохраняет вышеуказанные данные в EPNS Core Contract. Поэтому она требует $ETH для оплаты газа.

Как только вы завершите транзакцию, вы успешно интегрировали EPNS в ваш подграф. Push-узлы начнут опрашивать соответствующий подграф на предмет уведомлений через регулярные интервалы опроса.


Пожалуйста, поделитесь этим руководством со своим сообществом разработчиков, если вы нашли его полезным. Также, если вы используете протокол The Graph Protocol, это может стать отличным дополнением для отслеживания событий подграфа.

Совсем скоро я вернусь с еще одним потрясающим блогом. До тех пор продолжайте строить и развиваться 🚀.

Сайонара!!!

Оцените статью
devanswers.ru
Добавить комментарий