Интеграция с ENS (Ethereum Name Service) в dApp

Интеграция с ENS (Ethereum Name Service) Отметим: когда пользователь вводит адрес `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045` вручную, вероятность ошибки — высока. Один неверный символ — и средства уходят в никуда. По статистике, 70% ошибок при переводе ETH связаны с неправильным вводом адреса.

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Интеграция с ENS (Ethereum Name Service)

Отметим: когда пользователь вводит адрес 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 вручную, вероятность ошибки — высока. Один неверный символ — и средства уходят в никуда. По статистике, 70% ошибок при переводе ETH связаны с неправильным вводом адреса. Ethereum Name Service решает это: вместо хекса — читаемое vitalik.eth. Но интеграция ENS — не просто вызов библиотеки. Без учёта нормализации имени (UTS-46), on-chain газа и формата обратной записи легко получить баги. Полная интеграция занимает от 2 до 5 рабочих дней. Наши клиенты экономят в среднем $2000 в год на переводах благодаря снижению ошибок, а поддержка — до $500 в месяц.

Зачем интегрировать ENS?

ENS — стандарт де-факто для human-readable адресов в Ethereum. Он избавляет пользователей от копирования длинных адресов и снижает количество ошибок ввода. Более 90% популярных dApps уже поддерживают ENS. Интеграция позволяет не только показывать имена, но и получать аватары, email, социальные сети из резолвера — всё в одном месте. Экономия времени пользователя — до 10 секунд на каждой транзакции.

Как происходит резолвинг ENS на фронтенде?

Основные библиотеки — ethers.js (v6) и viem. Они предоставляют методы для прямой и обратной резолюции, а также для получения аватаров.

// ethers.js v6 const provider = new ethers.JsonRpcProvider(RPC_URL); // Forward resolution: имя → адрес const address = await provider.resolveName("vitalik.eth"); // "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" // Reverse resolution: адрес → имя const name = await provider.lookupAddress("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"); // "vitalik.eth" или null если reverse record не установлен // Avatar const resolver = await provider.getResolver("vitalik.eth"); const avatar = await resolver?.getAvatar(); // URL аватара или null 
// viem import { createPublicClient, http } from "viem"; import { mainnet } from "viem/chains"; import { normalize } from "viem/ens"; const client = createPublicClient({ chain: mainnet, transport: http() }); const address = await client.getEnsAddress({ name: normalize("vitalik.eth") }); const name = await client.getEnsName({ address: "0xd8dA..." }); const avatar = await client.getEnsAvatar({ name: normalize("vitalik.eth") }); 

normalize() важен: ENS имена нормализуются по UTS-46 стандарту перед хешированием. Vitalik.ETH и vitalik.eth — одно имя, но без normalize() они дадут разные намехеши.

Почему нормализация имени критична?

Без нормализации имя MyName.eth и myname.eth будут считаться разными, что приведёт к ошибкам резолвинга. Функция normalize() из viem или библиотека UTS-46 гарантирует единообразие. На фронтенде это обязательный шаг перед каждым запросом к ENS. Не используйте сырой ввод пользователя — всегда нормализуйте.

Сравнение библиотек и методов интеграции

Параметр ethers.js viem
Размер (min+gzip) ~80KB ~50KB
Встроенная нормализация Нет (требует UTS-46) Да (метод normalize())
ENS методы resolveName, lookupAddress, getResolver getEnsAddress, getEnsName, getEnsAvatar
Тип Полноценная библиотека Тонкая обёртка

viem обрабатывает ENS-запросы в 2 раза быстрее за счёт ленивых вычислений, а размер бандла меньше почти на 40%. Для простого резолвинга viem предпочтительнее. Если вам требуется более широкая функциональность (например, работа с транзакциями), ethers.js остаётся стандартом.

Метод Библиотека Сложность Применимость
Forward resolution ethers.js/viem Низкая UI-компоненты
Reverse resolution ethers.js/viem Низкая UI-компоненты
On-chain resolution Solidity + ENS Registry Средняя Умные контракты
Text records ethers.js/viem Низкая Профили пользователей
Avatar ethers.js/viem Низкая UI-компоненты

Как резолвить ENS on-chain?

Для смарт-контрактов нужен прямой вызов ENS Registry. Приводим пример контракта:

interface IENSResolver { function addr(bytes32 node) external view returns (address); } interface IENS { function resolver(bytes32 node) external view returns (address); } contract ENSConsumer { IENS constant ENS_REGISTRY = IENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e); function resolveENS(bytes32 namehash) external view returns (address) { address resolverAddr = ENS_REGISTRY.resolver(namehash); require(resolverAddr != address(0), "No resolver"); return IENSResolver(resolverAddr).addr(namehash); } } 

Namehash для alice.eth нужно вычислить off-chain (или через ENS SDK) и передать в контракт — on-chain вычисление string namehash дорогостоящее (около 20k газа).

Текстовые записи и профили

ENS хранит произвольные текстовые записи по ключу:

const resolver = await provider.getResolver("alice.eth"); const email = await resolver?.getText("email"); const twitter = await resolver?.getText("com.twitter"); const github = await resolver?.getText("com.github"); const website = await resolver?.getText("url"); const description = await resolver?.getText("description"); 

Стандартные ключи (EIP-634): email, url, avatar, description, notice, keywords, com.twitter, com.github, com.discord, org.telegram. Это основа для ENS-based профилей: всё что нужно хранится в resolver, читается без дополнительной инфраструктуры.

Процесс работ

При заказе интеграции ENS мы предоставляем полный цикл:

  1. Аудит текущего dApp и определение точек интеграции.
  2. Разработка frontend-компонентов (ввод и отображение ENS-имён, аватаров).
  3. Реализация on-chain резолвинга при необходимости.
  4. Интеграция текстовых записей и аватаров.
  5. Тестирование на тестовой сети (Sepolia).
  6. Деплой, мониторинг и документация с примерами кода.

Сроки — от 2 до 5 рабочих дней для базовой интеграции. Стоимость рассчитывается индивидуально. Свяжитесь с нами для точной оценки под ваш проект. Получите консультацию по интеграции ENS уже сегодня.

Типичные ошибки при интеграции ENS
  • Пропуск нормализации — имена вида Vitalik.ETH и vitalik.eth должны давать один namehash. Без normalize() возможны несоответствия.
  • Игнорирование gas cost для on-chain — вызов resolver() и addr() в контракте стоит газа, использовать только при необходимости.
  • Ошибка в namehash — если передать неправильный node, резолвинг вернёт address(0).

Наш опыт

Мы внедрили ENS в 30+ dApps за 5+ лет работы, включая DeFi и NFT-маркетплейсы. Наши инженеры глубоко знают специфику ENS: от нормализации до оптимизации газа. Гарантируем стабильность и совместимость с последними версиями библиотек. Поддержка после внедрения — 1 месяц.