Настройка ENS-резолвера для dApp

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Настройка ENS-резолвера для dApp
Простая
~1 рабочий день
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Настройка ENS-резольвера для dApp

ENS (Ethereum Name Service) — система DNS-подобных имён для Ethereum. Резолвинг vitalik.eth0xd8dA6BF... работает через on-chain lookup в контракте ENS Registry. В большинстве dApp это нужно в двух местах: в поле ввода адреса (пользователь вводит .eth имя вместо hex-адреса) и при отображении адресов — reverse lookup превращает 0xd8dA... в читаемое имя.

Резолвинг через viem / wagmi

Современный стек с wagmi v2 и viem предоставляет готовые хуки:

import { useEnsAddress, useEnsName, useEnsAvatar } from 'wagmi';

// Forward: имя → адрес
const { data: address } = useEnsAddress({
  name: 'vitalik.eth',
  chainId: 1, // только mainnet
});

// Reverse: адрес → имя
const { data: ensName } = useEnsName({
  address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
  chainId: 1,
});

// Аватар
const { data: avatar } = useEnsAvatar({
  name: 'vitalik.eth',
  chainId: 1,
});

ENS работает только на Ethereum mainnet (и Sepolia для тестирования). Chainid 137 (Polygon) или другие EVM-цепи — не поддерживаются нативно, хотя существуют cross-chain ENS resolver'ы в разработке (EIP-3668, CCIP-Read).

Валидация ввода в реальном времени

Стандартный UX-паттерн для поля адреса:

const resolveInput = async (input: string) => {
  if (input.endsWith('.eth')) {
    const address = await publicClient.getEnsAddress({ name: normalize(input) });
    if (!address) throw new Error('ENS name not found');
    return address;
  }
  if (isAddress(input)) return input;
  throw new Error('Invalid address or ENS name');
};

normalize() из пакета viem/ens обрабатывает Unicode-нормализацию по стандарту UTS-46 — без неё имена с нестандартными символами могут резолвиться некорректно или вообще бросать исключение.

Кэширование

ENS-запросы идут к Ethereum mainnet RPC и стоят времени. Кэшируйте результаты в памяти с TTL ~1 час — ENS-записи меняются редко. wagmi делает это автоматически через свой внутренний query cache (React Query под капотом). При самостоятельной реализации достаточно Map с timestamp'ами или SWR с соответствующим dedupingInterval.