Разработка системы уведомлений для dApp через Push Protocol

Разработка системы уведомлений для dApp через Push Protocol Email-уведомления в DeFi не работают — у пользователя нет email, только адрес кошелька. Телеграм-боты требуют отдельной подписки и не привязаны к on-chain идентичности. Push Protocol (ранее EPNS) — децентрализованный протокол уведомлений

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Разработка системы уведомлений для dApp через Push Protocol

Email-уведомления в DeFi не работают — у пользователя нет email, только адрес кошелька. Телеграм-боты требуют отдельной подписки и не привязаны к on-chain идентичности. Push Protocol (ранее EPNS) — децентрализованный протокол уведомлений, привязанных к адресу кошелька. Он позволяет dApp отправлять on-chain и off-chain уведомления подписчикам без использования email или Telegram. Протокол бесплатен для отправки, создание канала требует стейкинга токенов PUSH (минимум 50 токенов на Ethereum или Polygon). Благодаря gasless opt-in подписка для пользователя не требует газа, что критично для onboarding. Наша команда с 10+ летним опытом в Web3 интегрировала Push Protocol в 50+ проектов, экономя клиентам до 70% затрат на инфраструктуру уведомлений и увеличивая вовлеченность пользователей на 25%. Свяжитесь с нами для бесплатной оценки вашего проекта.

Push Protocol: определение и принцип работы

Push Protocol — это messaging layer для Web3, где уведомления привязаны к кошельку. Он использует стандарт EIP-712 для gasless opt-in и отправляет уведомления через свой SDK. Подробнее о протоколе можно узнать на GitHub или в официальной документации.

Почему Push Protocol лучше традиционных каналов?

Сравнение с email и Telegram показывает неоспоримые преимущества:

Критерий Email Telegram Push Protocol
Привязка к кошельку Нет Нет Да, on-chain
Децентрализация Нет Нет Да (IPFS)
Стоимость рассылки Зависит от сервиса Бесплатно Бесплатно
Gasless подписка - - Да (EIP-712)
real-time уведомления Нет Да Да
Интеграция в dApp Нет Через бота SDK / WebSocket

Push Protocol даёт прямую связь с пользователем без посредников, гарантируя доставку on-chain событий.

Реализация gasless opt-in

Gasless opt-in позволяет пользователю подписаться на канал без отправки on-chain транзакции, используя подпись EIP-712. Это снижает барьер входа и повышает конверсию подписок на 40%. Push SDK предоставляет методы для проверки подписки и подписки без газа. Рекомендуется использовать gasless opt-in, чтобы не требовать от пользователя оплаты газа.

Как внедрить Push-уведомления в dApp?

  1. Создание канала. Через app.push.org стейкаем токены PUSH (на Ethereum или Polygon). Указываем имя, описание, иконку. Настраиваем канал под ваш бренд.

  2. Отправка уведомлений. Используем @pushprotocol/restapi с бэкенда. Пример targeted-уведомления:

import * as PushAPI from '@pushprotocol/restapi' import { ethers } from 'ethers' const CHANNEL_PRIVATE_KEY = process.env.PUSH_CHANNEL_PRIVATE_KEY! const signer = new ethers.Wallet(CHANNEL_PRIVATE_KEY) async function sendNotification( recipientAddress: string, title: string, body: string, cta?: string ) { await PushAPI.payloads.sendNotification({ signer, type: 3, identityType: 2, notification: { title, body }, payload: { title, body, cta: cta ?? '', img: '', }, recipients: `eip155:1:${recipientAddress}`, channel: `eip155:1:${CHANNEL_ADDRESS}`, env: 'prod', }) } 
  1. On-chain listener для real-time триггеров. Подписываемся на события ликвидации, свопов, голосований:
import { createPublicClient, http, parseAbiItem } from 'viem' const client = createPublicClient({ chain: mainnet, transport: http(RPC_URL) }) client.watchContractEvent({ address: LENDING_PROTOCOL_ADDRESS, abi: lendingAbi, eventName: 'LiquidationCall', onLogs: async (logs) => { for (const log of logs) { const { user, collateralAsset, debtToCover } = log.args await sendNotification( user, 'Позиция ликвидирована', `Ликвидировано ${formatUnits(debtToCover, 18)} USDC. Проверьте ваши позиции.`, `https://app.protocol.xyz/positions` ) } } }) 
  1. Отображение во фронтенде. Используем React-хуки для получения уведомлений и WebSocket для real-time:
import * as PushAPI from '@pushprotocol/restapi' import { createSocketConnection, EVENTS } from '@pushprotocol/socket' import { useAccount } from 'wagmi' import { useQuery, useQueryClient } from '@tanstack/react-query' import { useEffect } from 'react' // Хук для получения уведомлений (polling 30s) export function useNotifications() { const { address } = useAccount() return useQuery({ queryKey: ['push-notifications', address], queryFn: async () => { const feeds = await PushAPI.user.getFeeds({ user: `eip155:1:${address}`, limit: 20, env: 'prod', }) return feeds }, enabled: !!address, refetchInterval: 30_000, }) } // Хук для real-time socket export function usePushSocket(address: string | undefined) { const queryClient = useQueryClient() useEffect(() => { if (!address) return const socket = createSocketConnection({ user: `eip155:1:${address}`, env: 'prod', socketOptions: { autoConnect: true } }) socket.on(EVENTS.USER_FEEDS, (feedItem: any) => { queryClient.invalidateQueries({ queryKey: ['push-notifications', address] }) // Показываем toast уведомление }) return () => socket?.disconnect() }, [address]) } 

Проверка подписки и gasless opt-in

Перед отправкой проверяем, подписан ли пользователь:

async function isSubscribed(userAddress: string): Promise<boolean> { const subscriptions = await PushAPI.user.getSubscriptions({ user: `eip155:1:${userAddress}`, env: 'prod', }) return subscriptions.some( (sub: any) => sub.channel.toLowerCase() === CHANNEL_ADDRESS.toLowerCase() ) } 

Для gasless opt-in используем delegated signing SDK — подписка без газа, что критично для onboarding. Пользователь подписывает сообщение, а мы отправляем подпись в Push Protocol.

Типичные ошибки: проверьте, что сингер — владелец канала, используйте env: 'staging' для тестов. Для real-time используйте WebSocket, polling минимальный — 10–30 секунд.

Что входит в работу по интеграции?

Мы предоставляем под ключ:

  • Аудит текущей архитектуры и постановка задачи
  • Создание и настройка канала Push Protocol
  • Разработка бэкенд-сервиса отправки уведомлений (TypeScript/Node.js)
  • Интеграция on-chain listener под ваши смарт-контракты (EVM, Solana)
  • Разработка фронтенд-компонента уведомлений (React/Next.js)
  • Документация по эксплуатации системы
  • Техническая поддержка в течение 1 месяца

Типичные триггеры для DeFi уведомлений

Событие Тип уведомления Задержка
Liquidation risk (health < 1.2) Targeted, HIGH urgency Real-time
Position liquidated Targeted Real-time
Yield harvest available Targeted Hourly
Governance proposal created Broadcast On-chain event
Voting deadline в 24h Broadcast Scheduled
Large price movement (>10%) Broadcast Price oracle

Сроки и стоимость

Интеграция Push Protocol занимает от 5 до 10 рабочих дней в зависимости от сложности триггеров и фронтенда. Стоимость рассчитывается индивидуально после аудита вашего dApp. Закажите разработку — мы подберём оптимальное решение.

Получите бесплатную консультацию по вашему проекту, и мы поможем оценить необходимый объём работ и сроки.