Интеграция с Push Protocol (уведомления Web3)
Email и push-уведомления в dApp — стандарт Web2. В Web3 проблема: у пользователя нет email-адреса, только кошелёк. Push Protocol (ранее EPNS) решает это: уведомления привязаны к адресу кошелька, пользователь подписывается на каналы и получает уведомления в Push-совместимых приложениях или через SDK прямо в dApp.
Создание канала и отправка уведомлений
Канал — on-chain сущность, задеплоенная в Ethereum или Polygon. Создание через Push SDK или UI. После создания — отправка уведомлений через backend SDK:
import { PushAPI, CONSTANTS } from '@pushprotocol/restapi';
import { ethers } from 'ethers';
const signer = new ethers.Wallet(process.env.CHANNEL_PRIVATE_KEY!);
const user = await PushAPI.initialize(signer, {
env: CONSTANTS.ENV.PROD,
});
// Отправить уведомление конкретному адресу
await user.channel.send(['0xUserAddress...'], {
notification: {
title: 'Позиция под ликвидацией',
body: 'Ваш health factor упал до 1.05. Пополните залог.',
},
payload: {
title: 'Liquidation Warning',
body: 'Health factor: 1.05',
cta: 'https://app.yourprotocol.com/positions',
img: 'https://cdn.yourprotocol.com/alert.png',
},
channel: `eip155:1:${CHANNEL_ADDRESS}`,
type: 3, // Targeted (конкретный адрес)
});
Типы уведомлений: 1 — Broadcast (всем подписчикам), 3 — Targeted (один адрес), 4 — Subset (список адресов).
Подписка пользователя в dApp
import { useAccount } from 'wagmi';
import { PushAPI, CONSTANTS } from '@pushprotocol/restapi';
const { address } = useAccount();
const subscribe = async () => {
// Пользователь подписывает сообщение (бесплатно, без транзакции)
const pushUser = await PushAPI.initialize(signer, { env: CONSTANTS.ENV.PROD });
await pushUser.notification.subscribe(`eip155:1:${CHANNEL_ADDRESS}`);
};
// Получение уведомлений для отображения в dApp
const { data: notifications } = useQuery({
queryKey: ['push-notifications', address],
queryFn: () => PushAPI.user.getFeeds({
user: `eip155:1:${address}`,
env: CONSTANTS.ENV.PROD,
}),
enabled: !!address,
refetchInterval: 30_000,
});
Типичные use cases
- DeFi: уведомление при приближении к ликвидации, исполнении limit order, окончании lock периода
- NFT: продажа листинга, получение bid, mint открыт
- DAO: новый пропозал, голосование заканчивается через 24 часа, результат голосования
Отправка уведомлений из backend — через cron job или событие от on-chain listener. Например: indexer поймал событие HealthFactorLow → вызвать Push API для отправки targeted уведомления на адрес позиции.
Ориентиры по срокам
Создание канала + интеграция SDK в frontend (subscribe UI + отображение уведомлений) + backend отправка из event listener: 2-3 дня.







