Разработка системы уведомлений для 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 показывает неоспоримые преимущества:
| Критерий | 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?
-
Создание канала. Через app.push.org стейкаем токены PUSH (на Ethereum или Polygon). Указываем имя, описание, иконку. Настраиваем канал под ваш бренд.
-
Отправка уведомлений. Используем
@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', }) } - 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` ) } } }) - Отображение во фронтенде. Используем 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. Закажите разработку — мы подберём оптимальное решение.
Получите бесплатную консультацию по вашему проекту, и мы поможем оценить необходимый объём работ и сроки.







