Інтеграція WalletConnect у мобільні крипто-додатки
WalletConnect — відкритий протокол для з'єднання мобільних гаманців з DApp. Користувачі сканують QR-код або переходять за deep link, щоб встановити безпечне зашифроване з'єднання між гаманцем і веб-додатком без зберігання приватних ключів на сервері DApp.
WalletConnect v2: що змінилось
WalletConnect v1 був позначений як deprecated у 2023 році. v2 (тепер називається Web3Modal SDK / AppKit) використовує централізований relay-сервер, але зберігає end-to-end криптографію. Ключові відмінності від v1:
- Підтримка декількох мереж в одній сесії
- Обов'язковий Project ID з
cloud.walletconnect.com - Sign API v2 протокол замість Legacy API
- Namespace-based запити:
eip155:1для Ethereum mainnet,solana:mainnetдля Solana
Реалізація на iOS (Swift)
Офіційний SDK — WalletConnectSwiftV2. Встановіть через SPM:
// Package.swift або Xcode Package Manager
.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.sessionProposalPublisher
.receive(on: DispatchQueue.main)
.sink { [weak self] proposal in
// Показуємо користувачу список запрошених методів і мереж
self?.showApprovalAlert(proposal: proposal)
}
.store(in: &cancellables)
При одобренні створіть namespace об'єкт з підтримуваними методами (eth_sendTransaction, personal_sign, eth_signTypedData) і викличте Sign.instance.approve(proposalId:namespaces:).
Обробка запитів на підпис
Після встановлення сесії DApp відправляє запити. Найпоширеніший — personal_sign:
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)
Важливо: ніколи не підписуйте автоматично — кожен запит на підпис потребує явного підтвердження користувача.
Deep link для мобільного використання
WalletConnect підтримує два режими: QR-коди (для desktop DApp) та Universal Link / Custom URL Scheme (для мобільних DApp). Для wallet-to-wallet з'єднання користувачі натискають кнопку в мобільному браузері DApp, який перенаправляє їх через deep link з wc:// URI.
Обробляйте URI в SceneDelegate / @main App:
.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).
Тестування
WalletConnect надає тестовий DApp на lab.web3modal.com — корисний інструмент для тестування всіх методів підпису без реального блокчейну. Для трансакцій використовуйте тестові мережі (Sepolia, Mumbai).
Період: базова інтеграція WalletConnect v2 з personal_sign та eth_sendTransaction — 1–2 тижні. Повна підтримка multi-chain, eth_signTypedData v4, відзиву сесій та UI станів підключення — 3–4 тижні.







