Інтеграція з ENS (Ethereum Name Service)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з ENS (Ethereum Name Service)
Простий
від 1 дня до 3 днів
Часті запитання

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

Етапи блокчейн-розробки

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

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

Інтеграція з ENS (Ethereum Name Service)

ENS — це de facto стандарт для людиночитаних адрес в екосистемі Ethereum. Замість розробки власного сервісу імен, більшість dApp просто інтегрують ENS: відображають імена замість адрес, приймають введення імен у полях переводу, показують аватари.

Розв'язування імен у коді

Frontend через ethers.js / viem

// ethers.js v6
const provider = new ethers.JsonRpcProvider(RPC_URL);

// Пряме розв'язування: ім'я → адреса
const address = await provider.resolveName("vitalik.eth");
// "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"

// Зворотне розв'язування: адреса → ім'я
const name = await provider.lookupAddress("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045");
// "vitalik.eth" або null, якщо зворотний запис не встановлен

// Аватар
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() вони дають різні namehashes.

On-chain розв'язування

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 дороговартісне.

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

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-профілів: все необхідне зберігається в resolver, читається без додаткової інфраструктури.

Орієнтири складності інтеграції

Функція Складність Строк
Відображення імені замість адреси Мінімальна 0.5 дня
Введення ENS у поле переводу Мінімальна 1 день
Аватар у UI Низька 1 день
Текстові записи / профіль Низька 1-2 дні
On-chain розв'язування в контракті Середня 2-3 дні

Базова інтеграція ENS в існуючий dApp — 2-3 робочих дні.