Користувач вводить 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-резолвера
- Підключіть бібліотеки. Встановіть
wagmiтаviemчерез npm або yarn. - Налаштуйте клієнт. Використовуйте конфіг Wagmi з провайдером mainnet.
- Впровадьте хуки. Замініть поля вводу адреси на компоненти з
useEnsAddressтаuseEnsName. - Нормалізуйте введення. Застосовуйте
normalize()зviem/ensперед будь-яким запитом. - Налаштуйте кешування. Вкажіть
staleTimeтаgcTimeв опціях хуків wagmi для оптимального використання RPC. - Додайте 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/ensnormalize. - Не налаштували таймаут — запит до 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 — зв'яжіться для консультації.







