Розробка системи сповіщень для 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. Замовте розробку — ми підберемо оптимальне рішення.
Отримайте безкоштовну консультацію по вашому проєкту, і ми допоможемо оцінити необхідний обсяг робіт та терміни.







