Налаштування ENS-резолвера в dApp з viem та wagmi: покрокова інтеграція

Користувач вводить `vitalik.eth` у поле адреси, а додаток не може перетворити ім'я — знайома ситуація? ENS-резолвер вирішує це завдання, але його налаштування потребує уваги до деталей: нормалізація імен, кешування RPC-запитів, обробка відсутніх reverse record. Ми налаштовуємо ENS-резолвер під ключ

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1009

Користувач вводить vitalik.eth у поле адреси, а додаток не може перетворити ім'я — знайома ситуація? ENS-резолвер вирішує це завдання, але його налаштування потребує уваги до деталей: нормалізація імен, кешування RPC-запитів, обробка відсутніх reverse record. Ми налаштовуємо ENS-резолвер під ключ з використанням сучасного стеку viem/wagmi. Досвід 5+ років у web3, більше десятка dApp з ENS — гарантуємо стабільну роботу. Замовте інтеграцію ENS-резолвера у ваше dApp.

Які проблеми вирішуємо

Невалідні ENS-імена. Користувач може ввести vItalik.eth або sub.vitalik.eth з Unicode-символами. Без нормалізації (UTS-46) такі імена або не резолвляться, або повертають невірну адресу. Ми застосовуємо normalize() з viem/ens на кожному вводі.

Reverse lookup без зворотного запису. Якщо власник адреси не встановив reverse record, хуки useEnsName повертають null. В результаті інтерфейс показує порожнє ім'я замість адреси. Ми реалізуємо fallback: відображаємо скорочену адресу (0x12...34) і пропонуємо користувачеві зареєструвати ENS.

Витрати газу та час очікування. Кожен запит до mainnet RPC коштує близько 5000 gas і займає 2–5 секунд. Без кешування dApp може гальмувати. Wagmi автоматично кешує результати через React Query, але ми додатково налаштовуємо TTL та retry для стабільності.

Як працює ENS-резолвер?

ENS — це децентралізована система імен на Ethereum mainnet. Перетворення відбувається через контракт ENS Registry. У dApp ми використовуємо готові хуки useEnsAddress (forward) і useEnsName (reverse) з wagmi v2:

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 для тестування). Для кросчейн-резолвінгу існують рішення на основі EIP-3668 (CCIP-Read), які ми впроваджуємо для мультичейн dApp.

Покрокова інтеграція ENS-резолвера

  1. Підключіть бібліотеки. Встановіть wagmi та viem через npm або yarn.
  2. Налаштуйте клієнт. Використовуйте конфіг Wagmi з провайдером mainnet.
  3. Впровадьте хуки. Замініть поля вводу адреси на компоненти з useEnsAddress та useEnsName.
  4. Нормалізуйте введення. Застосовуйте normalize() з viem/ens перед будь-яким запитом.
  5. Налаштуйте кешування. Вкажіть staleTime та gcTime в опціях хуків wagmi для оптимального використання RPC.
  6. Додайте fallback. Якщо reverse lookup повернув null, відображайте скорочену адресу та кнопку «Задати ENS-ім'я».

Чому важливо нормалізувати ENS-імена?

normalize() з viem/ens приводить рядок до стандарту UTS-46, коригуючи регістр та Unicode-символи. Без неї імена типу vItAlik.eth можуть повернути іншу адресу або викинути виняток. Також перевіряйте довжину: максимальна довжина ENS-імені — 128 байт у закодованому вигляді.

Порівняння viem та ethers.js для ENS

Параметр viem (wagmi) ethers.js
Розмір бандла ~20 kB (tree-shakeable) ~150 kB
Підтримка ENS Вбудовані хуки useEnsAddress, useEnsName Через Resolver + ручне кешування
Продуктивність У 2–3 рази швидше завдяки компактному ABI Важче через повний JSON ABI
Кешування Автоматичне (React Query) Потребує ручної реалізації
Типізація TypeScript-first, повна типізація Часткова типізація

viem виграє за продуктивністю та зручністю — для нових проектів рекомендуємо саме цей стек.

Що входить у роботу з налаштування ENS-резолвера

Етап Деталі Термін (днів)
Аналіз Вимоги до резолвінгу, вибір бібліотеки 1–2
Проектування Архітектура, обробка помилок, кешування 2–3
Реалізація Інтеграція хук��в, валідація, нормалізація 3–5
Тестування Unit-тести, симуляція RPC failure, E2E 2–3
Деплой Налаштування mainnet, документація 1–2

Входить: кодова база (TypeScript), документація API, інструкція з тестування, первинне налаштування моніторингу (Tenderly). Підтримка 1 місяць після здачі. Вартість розраховується індивідуально. Отримайте консультацію щодо вашого проекту.

Типові помилки та як їх уникнути

  • Забули normalize() — імена з Unicode-символами падають. Рішення: завжди застосовуйте viem/ens normalize.
  • Не налаштували таймаут — запит до mainnet може зависнути на 30+ секунд. Рішення: publicClient.getEnsAddress({ ... }) з timeout: 10000.
  • Ігноруєте subdomains — vitalik.eth працює, а sub.vitalik.eth — ні. Рішення: перевіряйте ім'я через normalize() та використовуйте getEnsAddress з повною структурою.
  • Reverse без fallback — порожній інтерфейс замість адреси. Рішення: завжди показуйте скорочену адресу при відсутності ENS.

Чому варто обрати наш підхід?

Ми впровадили ENS у 12 dApp для DeFi та NFT-проектів. Використовуємо формальну верифікацію контрактів (Slither + Mythril) та оптимізацію газу. Гарантуємо, що резолвер не блокуватиме UX — час відповіді менше 3 секунд при стабільному RPC. Замовте інтеграцію ENS-резолвера у ваше dApp — зв'яжіться для консультації.

Ethereum Name Service