Интеграция с WalletConnect Chat
WalletConnect Chat (переименован в WalletConnect Notify / Push — часть WalletConnect v2 экосистемы) — это протокол для encrypted peer-to-peer messaging между кошельками. В отличие от XMTP или Push Protocol, Chat API интегрирован непосредственно в WalletConnect SDK, что упрощает добавление messaging в dApp, который уже использует WalletConnect для wallet connection.
Что это и зачем
Основной кейс: dApp хочет отправлять нотификации пользователям непосредственно в их кошелёк (MetaMask, Rainbow, Coinbase Wallet), без email и номера телефона. Примеры:
- DeFi протокол уведомляет о приближении liquidation
- NFT маркетплейс сообщает о новом оффере на токен
- DAO уведомляет о новом proposal
Второй кейс: wallet-to-wallet messaging — пользователи общаются, используя ENS имена или адреса кошельков как идентификаторы.
Подключение WalletConnect Notify
import { NotifyClient } from "@walletconnect/notify-client";
const notifyClient = await NotifyClient.init({
projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID,
relayUrl: "wss://relay.walletconnect.com",
logger: "error",
});
// Подписка кошелька на уведомления от dApp
const subscription = await notifyClient.subscribe({
appDomain: "yourdapp.com",
account: `eip155:1:${walletAddress}`, // CAIP-10 формат
});
Для того чтобы dApp мог отправлять уведомления, нужна верификация домена через WalletConnect Cloud Dashboard — размещаем .well-known/walletconnect.txt файл.
Отправка уведомлений с бэкенда
Нотификации отправляются через WalletConnect REST API, не через клиентский SDK:
// Backend: отправка уведомления
async function sendNotification(
account: string,
type: string,
title: string,
body: string,
url?: string
) {
const response = await fetch(
`https://notify.walletconnect.com/${projectId}/notify`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.WALLETCONNECT_NOTIFY_SECRET}`,
},
body: JSON.stringify({
notification: { type, title, body, url },
accounts: [account], // CAIP-10: "eip155:1:0x..."
}),
}
);
return response.json();
}
// Пример: уведомление о liquidation risk
await sendNotification(
`eip155:1:${userAddress}`,
"liquidation-warning",
"Риск ликвидации",
`Ваша позиция приближается к liquidation threshold. Health factor: 1.05`,
"https://yourdapp.com/position/123"
);
Типы уведомлений
Notification types регистрируются в WalletConnect Cloud и отображаются пользователю как категории, которые он может включать/отключать:
{
"types": [
{
"name": "Liquidation Warning",
"description": "Предупреждения о приближении ликвидации",
"id": "liquidation-warning"
},
{
"name": "New Offer",
"description": "Новые офферы на ваши NFT",
"id": "new-offer"
},
{
"name": "Governance",
"description": "Новые proposals для голосования",
"id": "governance"
}
]
}
Получение и отображение уведомлений в dApp
import { useNotifications } from "@walletconnect/notify-react";
function NotificationBell() {
const { address } = useAccount();
const { data: notifications } = useNotifications({
account: address ? `eip155:1:${address}` : undefined,
});
const unreadCount = notifications?.filter(n => !n.isRead).length ?? 0;
return (
<div>
<BellIcon />
{unreadCount > 0 && <Badge>{unreadCount}</Badge>}
</div>
);
}
Альтернативы и сравнение
WalletConnect Notify — не единственный вариант. Выбор зависит от требований:
| Протокол | Сильные стороны | Ограничения |
|---|---|---|
| WalletConnect Notify | Интеграция с WC, нет своего SDK у пользователя | Требует WC-совместимый кошелёк |
| XMTP | Decentralized, собственные SDK, rich messaging | Отдельный sign-in, не все кошельки |
| Push Protocol (EPNS) | Зрелый протокол, governance token | Сложнее интеграция |
| Custom (email/Telegram) | Полный контроль | Требует PII, не web3-native |
Для большинства dApp рекомендую WalletConnect Notify если уже используется WC для connection — минимальная дополнительная работа. Для богатого messaging (чат, файлы, group channels) — XMTP.







