Інтеграція з 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 місяць.