WalletConnect v2 — стандарт для подключения мобильных кошельков к децентрализованным приложениям. Реализация протокола на relay-серверах WalletConnect Cloud требует настройки сессий, управления переключением сетей и обработки сбоев. Если сессия истекает или сеть не переключается — пользователь видит вечную загрузку. Хуже того, на некоторых кошельках (Trust Wallet, Coinbase Wallet) метод wallet_switchEthereumChain работает нестабильно — сеть меняется только после ручного подтверждения, а без fallback приложение зависает на запросе. По данным WalletConnect Docs, сессии живут 7 дней, но без правильного восстановления пользователю придётся сканировать QR-код заново. По статистике, около 30% пользователей мобильных кошельков сталкиваются с потерей сессии после перезагрузки страницы — это напрямую влияет на конверсию и удержание.
Мы используем wagmi v2 и Web3Modal. Это готовая абстракция над WalletConnect SDK с единым API для всех кошельков. Такой подход ускоряет разработку в 3 раза по сравнению с прямым использованием SDK и гарантирует корректную обработку edge-кейсов: переключение сетей через wallet_addEthereumChain, восстановление сессии после перезагрузки, поддержка deep-link для мобильных браузеров. В результате экономия бюджета на интеграцию составляет до 40%.
Пошаговая настройка интеграции
-
Регистрация проекта. Зайдите на WalletConnect Cloud, создайте проект и получите
projectId. Этот ключ публичный, но его обязательно использовать в production, иначе relay-сервер отклонит запросы по rate limit (до 50 запросов в секунду для бесплатного тарифа). -
Установка пакетов. Выполните
npm install @web3modal/wagmi wagmi viem. Эти библиотеки дадут единый интерфейс для подключения кошельков. - Конфигурация wagmi. Создайте файл конфигурации с поддержкой нужных сетей (mainnet, polygon, arbitrum) и коннекторов: injected, walletConnect, coinbaseWallet.
Пример конфигурации wagmi
// config.ts import { createConfig, http } from 'wagmi' import { mainnet, polygon, arbitrum } from 'wagmi/chains' import { walletConnect, injected, coinbaseWallet } from 'wagmi/connectors' export const config = createConfig({ chains: [mainnet, polygon, arbitrum], connectors: [ injected(), walletConnect({ projectId: process.env.NEXT_PUBLIC_WC_PROJECT_ID! }), coinbaseWallet({ appName: 'Your App' }), ], transports: { [mainnet.id]: http(), [polygon.id]: http(), [arbitrum.id]: http(), }, }) Почему сессии нужно восстанавливать?
WalletConnect сессии живут 7 дней и хранятся в localStorage. Если пользователь закрыл вкладку и вернулся, wagmi автоматически восстанавливает соединение без нового QR. Мы инициализируем WagmiProvider до любых хуков, чтобы избежать проблем с гидрацией. Без восстановления до 25% пользователей покидают dApp после перезагрузки — это критично для DeFi-протоколов, где важна непрерывность работы.
// app/providers.tsx 'use client' import { WagmiProvider } from 'wagmi' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { config } from './config' const queryClient = new QueryClient() export function Providers({ children }: { children: React.ReactNode }) { return ( <WagmiProvider config={config}> <QueryClientProvider client={queryClient}> {children} </QueryClientProvider> </WagmiProvider> ) } Как переключать сети без багов?
wallet_switchEthereumChain работает по-разному на разных кошельках. MetaMask Mobile показывает popup, Trust Wallet переключает автоматом, а некоторые игнорируют, если сеть не добавлена. Мы добавляем fallback: если switchChain не сработал, вызываем wallet_addEthereumChain с параметрами. Это повышает успешность переключения до 95%. На практике отказы чаще всего связаны с отсутствием сети в конфигурации кошелька — например, Arbitrum не добавлен в Trust Wallet по умолчанию, и без fallback пользователь видит ошибку chain not added.
Сравнение подходов к интеграции
| Подход | Сложность | Гибкость | Скорость разработки |
|---|---|---|---|
| wagmi + Web3Modal | Низкая | Средняя | 1–2 дня |
| WalletConnect SDK напрямую | Высокая | Высокая | 3–5 дней |
| RainbowKit | Низкая | Низкая | 1 день |
Для большинства проектов wagmi + Web3Modal оптимален — покрывает 95% сценариев, имеет активное сообщество и частые обновления. По сравнению с прямым SDK вы получаете трёхкратное ускорение разработки и сокращение затрат вдвое.
Сравнение мобильных кошельков
| Кошелёк | Десктоп-расширение | Поддержка deep-link | Переключение сетей |
|---|---|---|---|
| MetaMask Mobile | Да | Да | Popup |
| Trust Wallet | Нет | Да | Автоматическое |
| Rainbow | Нет | Да | Popup |
На практике Trust Wallet ведёт себя непредсказуемо с EIP-1559 — иногда игнорирует тип транзакции. Мы учитываем такие особенности и выставляем maxPriorityFeePerGas принудительно.
Обработка типичных ошибок
- Hydration mismatch в Next.js — оберните компоненты с wallet state в
'use client'и читайте состояние черезuseEffect. - Mobile deep links не работают — Web3Modal обрабатывает автоматически. Для кастомного UI укажите параметр
redirect. - Session expiry — слушайте событие
session_expireи показывайте тост с предложением переподключиться.
Что входит в работу
- Настройка проекта WalletConnect Cloud и получение projectId.
- Интеграция wagmi и Web3Modal (или альтернатив).
- Конфигурация сессий и обработка переподключения.
- Тестирование на iOS/Android: MetaMask Mobile, Trust Wallet, Rainbow.
- Обработка edge cases: ошибки сети, отклонение транзакции, смена аккаунта.
- Документация интеграции для вашей команды.
- Поддержка в течение 30 дней после сдачи.
Наш опыт и гарантии
За 10+ лет мы интегрировали WalletConnect в более 20 dApp — от NFT-маркетплейсов до DeFi-протоколов. Гарантируем стабильную работу на всех популярных мобильных кошельках. Получите консультацию по интеграции — это бесплатно. Свяжитесь с нами для оценки вашего проекта.







