Интеграция с 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
    858

Интеграция с ENS (Ethereum Name Service)

ENS — стандарт de facto для human-readable адресов в Ethereum экосистеме. Вместо того чтобы строить собственный naming service, большинство dApps просто интегрируют ENS: отображают имена вместо адресов, принимают ввод имён в полях перевода, показывают аватары.

Резолвинг имён в коде

Frontend через ethers.js / 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() они дадут разные намехеши.

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-based профилей: всё что нужно хранится в resolver, читается без дополнительной инфраструктуры.

Ориентиры по сложности интеграции

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

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