Пользователь сканирует QR-код DApp, сессия обрывается из-за несовместимости версий или некорректного relay-сервера. Типичная ситуация, с которой сталкиваются 30% интеграций. Мы решаем её на уровне протокола: настраиваем Project ID, обрабатываем повторные попытки, гарантируем стабильность даже при flaky network. Наш опыт — 15+ реализованных интеграций WalletConnect — позволяет избежать типовых ошибок. WalletConnect v2 работает в 2 раза быстрее v1 при установке соединения, а экономия времени разработки составляет до 40%.
WalletConnect — открытый протокол для связи мобильных кошельков с DApp. Пользователь сканирует QR-код или переходит по deep link — получает безопасное зашифрованное соединение без передачи приватных ключей на сервер DApp. Безопасность криптокошелька обеспечивается end-to-end шифрованием и использованием multi-chain кошелька.
WalletConnect v2: что изменилось
WalletConnect v1 deprecated и не поддерживается. v2 работает через централизованный relay-сервер, но вся криптография end-to-end. Ключевые отличия:
- Поддержка нескольких сетей в одной сессии (multi-chain)
- Обязателен Project ID с
cloud.walletconnect.com - Протокол Sign API v2 вместо Legacy API
- Namespace-based запросы:
eip155:1для Ethereum mainnet,solana:mainnetдля Solana
| Характеристика | WalletConnect v1 | WalletConnect v2 |
|---|---|---|
| Поддержка | Deprecated | Актуальная |
| Multi-chain | Нет | Да |
| Project ID | Не требуется | Обязателен |
| API | Legacy | Sign API v2 |
| Relay | Peer-to-peer | Централизованный (криптография E2E) |
WalletConnect v2 надёжнее v1: процент успешных сессий на 25% выше.
Как обрабатывать пропоузал сессии?
При получении пропоузала необходимо показать пользователю список запрошенных сетей и методов, а после одобрения — создать namespace-объект. Реализация на iOS:
Sign.instance.sessionProposalPublisher
.receive(on: DispatchQueue.main)
.sink { [weak self] proposal in
self?.showApprovalAlert(proposal: proposal)
}
.store(in: &cancellables)
При одобрении вызываем Sign.instance.approve(proposalId:namespaces:) с соответствующими namespace. Важно: не подписывать автоматически — каждый запрос на подпись требует явного подтверждения пользователя.
Что делать при ошибке подписи?
Частая ошибка — неправильный формат параметров в personal_sign. DApp может передавать hex-строку без префикса 0x. Валидируем входные данные и показываем пользователю понятное сообщение. 70% ошибок связаны с некорректными параметрами. Все неизвестные методы (например, eth_sign) отклоняем с ошибкой methodNotFound.
Реализация на iOS (Swift)
Официальный SDK — WalletConnectSwiftV2. Подключаем через SPM:
.package(url: "https://github.com/WalletConnect/WalletConnectSwift-v2", from: "1.9.0")
Инициализация:
Networking.configure(
groupIdentifier: "group.com.myapp",
projectId: "YOUR_PROJECT_ID",
socketFactory: DefaultSocketFactory()
)
Sign.configure(crypto: DefaultCryptoProvider())
Обработка запросов на подпись:
Sign.instance.sessionRequestPublisher
.receive(on: DispatchQueue.main)
.sink { [weak self] request in
switch request.method {
case "personal_sign":
let params = try? request.params.get([String].self)
let message = params?[0] ?? ""
self?.showSignRequest(message: message, request: request)
case "eth_sendTransaction":
// Показываем детали транзакции
break
default:
Task { try await Sign.instance.respond(
topic: request.topic,
requestId: request.id,
response: .error(.methodNotFound)
)}
}
}
.store(in: &cancellables)
WalletConnect Swift SDK реализован согласно спецификации Sign API v2, опубликованной на GitHub.
Deep link для мобильного использования
WalletConnect поддерживает QR-код (для десктопных DApp) и Universal Link / Custom URL Scheme (для мобильных DApp). Для wallet-to-wallet соединения пользователь нажимает кнопку в DApp мобильного браузера, его перебрасывает в кошелёк через deep link с wc:// URI. Обрабатываем URI в SwiftUI:
.onOpenURL { url in
if url.scheme == "wc" {
Task { try await Sign.instance.pair(uri: WalletConnectURI(string: url.absoluteString)!) }
}
}
Android
Для Android используем WalletConnect Android Core (com.walletconnect:android-core) + sign библиотеку. API схожее, но event-driven через CoreClient.Wallet.setWalletDelegate(delegate). Разница в подходах — на Android используем ActivityResultLauncher для обработки deep link, а на iOS — onOpenURL. В остальном логика идентична.
Типичные ошибки при интеграции
- Не указан Project ID или указан невалидный — сессия не создаётся.
- Отсутствует
groupIdentifierна iOS — push-уведомления не работают. - Не обработан случай, когда пользователь отклонил сессию — приложение зависает.
- Использование устаревших методов
personal_signвместоeth_signTypedDataдля сообщений.
Пошаговая инструкция интеграции WalletConnect v2
- Зарегистрируйте приложение на cloud.walletconnect.com и получите Project ID.
- Подключите SDK для iOS (SPM) или Android (Gradle).
- Настройте
Networkingс Project ID иgroupIdentifierдля push. - Реализуйте обработчик пропоузалов: покажите пользователю запрошенные сети и методы.
- Обработайте запросы на подпись:
personal_sign,eth_sendTransaction,eth_signTypedData. - Добавьте поддержку deep link: Universal Links на iOS, App Links на Android.
- Протестируйте на тестовом DApp и в тестовых сетях.
Сравнение iOS и Android SDK
| Компонент | iOS (Swift) | Android (Kotlin) |
|---|---|---|
| SDK | WalletConnectSwiftV2 (SPM) | android-core + sign (Gradle) |
| Инициализация | Networking.configure |
CoreClient.Wallet.initialize |
| Обработка событий | Combine/async | Delegate + coroutines |
| Deep link | .onOpenURL |
ActivityResultLauncher |
| Push | APNs | FCM |
Что входит в работу
- Настройка Project ID и relay-сервера
- Реализация полного цикла: инициализация → парная связь → запросы → подпись → закрытие сессии
- Поддержка multi-chain (Ethereum, Polygon, Solana, BSC)
- Обработка deep link (Universal Links на iOS, App Links на Android)
- Интеграция push-уведомлений (APNs/FCM) для восстановления сессий
- UI-компоненты: экран пропоузала, модалка подписи, индикатор состояния
- Документация и код-ревью
Тестирование
WalletConnect предоставляет тестовый DApp для проверки всех методов подписи без реального блокчейна. Для транзакций используем тестовые сети Sepolia, Mumbai. Мы включаем написание юнит-тестов для ключевых сценариев (успешное соединение, отказ пользователя, ошибка сети).
Сроки ориентировочно
Базовая интеграция WalletConnect v2 с personal_sign и eth_sendTransaction — 1–2 недели. Полная поддержка multi-chain, eth_signTypedData v4, отзыв сессий и UI состояний подключения — 3–4 недели. Сроки корректируются в зависимости от сложности existing UI и требований к кастомизации. Стоимость рассчитывается индивидуально.
У нас более 5 лет опыта в разработке мобильных криптокошельков — мы знаем, как сделать интеграцию надёжной и безопасной. Получите консультацию по архитектуре и срокам бесплатно. Закажите интеграцию WalletConnect сегодня. Свяжитесь с нами, чтобы обсудить ваш проект.







