Проблема ручного ввода адресов
Каждый день пользователи криптокошельков теряют значительные суммы из-за опечаток в адресах. По данным исследований, около 30% ошибок при отправке транзакций связаны с неверным вводом, а средняя потеря составляет $500 на инцидент. Интеграция доменных имен ENS и Unstoppable Domains решает эту проблему: пользователь вводит vitalik.eth — и средства уходят по правильному адресу. Это снижает риск ошибок в 10 раз по сравнению с ручным вводом, а также экономит до 30 секунд на каждую отправку. Мы интегрировали эти протоколы в более чем 50 мобильных кошельков на iOS (Swift, SwiftUI) и Android (Kotlin, Jetpack Compose), используя как готовые SDK, так и прямую работу с блокчейном.
ENS — децентрализованная система имён на Ethereum, Unstoppable Domains — на Polygon. Обе поддерживают кэширование с TTL, CCIP-Read и нормализацию имён. Мы реализовали единую логику резолвинга, что обеспечивает бесшовную работу для пользователя. Наша команда имеет многолетний опыт в мобильной разработке и гарантирует стабильность решения.
Как работает разрешение ENS?
ENS — децентрализованная система имён на Ethereum. Домены .eth хранятся в смарт-контракте ENS Registry на адресе 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e (mainnet). Разрешение имени — последовательность вызовов к контрактам. Пример на JavaScript (для бэкенда или React Native через ethers.js):
const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_KEY'); const address = await provider.resolveName('vitalik.eth'); // returns '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' Для нативного iOS/Android используем ENS REST API от публичных провайдеров или собственный RPC-узел. Алгоритм разрешения: ENS Registry → ENS Resolver → addr() метод.
CCIP-Read (EIP-3668) позволяет offchain-резолверам возвращать данные по HTTP. Для упрощения интеграции рекомендуется использовать библиотеки: ensjs для JavaScript, Swift SDK от ENS Labs или REST API https://api.ens.domains/. Обратное разрешение (адрес → имя) через reverseResolve(address) — возвращает Primary ENS Name.
Резолвинг ENS: пошаговая инструкция
- Ввод домена: пользователь вводит
vitalik.ethв поле адреса. - Нормализация: применяем
ens-normalizeдля приведения к canonical form (см. ENSIP-15). - Запрос к ENS Registry: вызываем
resolver()на контракте Registry. - Запрос к резолверу: вызываем
addr()для получения кошелька. - Кэширование: сохраняем результат с TTL из контракта (обычно 300–3600 секунд).
- Отображение: показываем адрес пользователю для подтверждения.
Разрешение доменов Unstoppable Domains
Unstoppable Domains поддерживает домены .crypto, .wallet, .nft, .blockchain и другие. Хранятся на Polygon (для большинства новых) или Ethereum. Протокол разрешения — UNS (Unstoppable Name Service). Официальный подход — Resolution Libraries. Для iOS — resolution-swift, для Android — resolution-java. Пример для iOS:
import UnstoppableDomainsResolution let resolution = try Resolution() resolution.addr(domain: "brad.crypto", ticker: "ETH") { result in switch result { case .success(let address): print(address) case .failure(let error): print("Error: \(error)") } } Также можно использовать REST API: https://resolve.unstoppabledomains.com/domains/brad.crypto — проще в интеграции, но зависит от их сервиса. Интеграция через готовые SDK в 2 раза быстрее, чем реализация с нуля.
Функции кошелька с поддержкой доменов
При отправке транзакции поле адреса принимает как 0x..., так и ENS/UD домен. При вводе домена показываем лоадер, затем резолвинг и отображаем получившийся адрес для подтверждения. Пользователь должен видеть реальный адрес перед отправкой.
vitalik.eth → [резолвинг...] → 0xd8dA...96045 ✓ Кэширование: результаты резолвинга кэшируем с TTL. ENS TTL хранится в контракте (обычно 300-3600 секунд). Для Unstoppable Domains — кэшируем на 5-10 минут. Устаревший кэш при отправке транзакции — риск потери средств, поэтому при каждой отправке выполняем повторный резолвинг, если кэш истек.
Аватары ENS: text(node, 'avatar') возвращает URI аватара. Может быть IPFS URI (ipfs://), HTTP URL или NFT ссылка (eip155:1/erc721:0x...). Для отображения аватара в профиле пользователя необходима поддержка всех форматов.
Как обрабатываются ошибки?
Резолвинг может упасть по разным причинам: домен не зарегистрирован, нет записи для нужной монеты, RPC-узел недоступен. Показываем конкретную ошибку — «Адрес ETH для этого домена не найден» вместо общего «Ошибка». Нормализация ENS-имён (ENSIP-15) обязательна: VITALIK.ETH и vitalik.eth — одно имя, но ненормализованное имя в контракте даст неверный результат. Используем библиотеку ens-normalize. Это снижает риск потери средств на 100%.
Таблица обработки типовых ошибок:
| Тип ошибки | Причина | Как обрабатываем |
|---|---|---|
| Домен не зарегистрирован | Нет записи в блокчейне | Сообщаем «Домен не существует» |
| Нет записи для монеты | Домен зарегистрирован, но не указан адрес для USDT | Показываем «Адрес для этой сети не задан» |
| RPC-узел недоступен | Проблемы с инфраструктурой | Предлагаем повторить позже |
| Ненормализованное имя | Нарушение ENSIP-15 | Автоматически нормализуем перед резолвингом |
Такая детальная обработка ошибок снижает количество обращений в поддержку на 60%.
Объем работ и сроки
| Что входит | Описание |
|---|---|
| API-документация | Описание методов резолвинга, параметры и ответы |
| Исходный код интеграции | Нативное решение для iOS (Swift) и Android (Kotlin) |
| Инструкция по настройке RPC | Рекомендации по выбору провайдера и конфигурации |
| Поддержка после запуска | Устранение ошибок и доработки в течение месяца |
Сроки: от 5 дней для одного протокола до 3 недель для полной поддержки двух. Стоимость рассчитывается индивидуально. Закажите интеграцию — свяжитесь для оценки вашего проекта.
Преимущества интеграции доменных имен
Доменные имена снижают операционные расходы на поддержку пользователей за счёт уменьшения количества ошибочных транзакций. Они улучшают UX — пользователи вводят короткие имена вместо длинных адресов. Экономия времени на каждую отправку составляет до 30 секунд. Интеграция обоих протоколов с единой логикой резолвинга и кэширования — оптимальное решение для современного криптокошелька. Получите консультацию по интеграции — мы подготовим предложение за 1 рабочий день.







