Розробка системи профілів на базі ENS

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

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

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

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

  • 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
    856

Розробка системи профілів на базі ENS

ENS зберігає не лише адреси — resolver підтримує довільні текстові записи, IPFS contenthash, мультичейн адреси. Це готова інфраструктура для децентралізованої ідентичності: користувач управляє своїм профілем через ENS, додатки читають дані без централізованого сховища.

Структура ENS профілю

Стандартні поля відповідно до EIP-634:

interface ENSProfile {
  // Основна ідентичність
  name: string;           // ім'я для відображення
  description: string;   // біографія
  avatar: string;         // URL або IPFS hash зображення
  
  // Контакт
  email: string;
  url: string;            // веб-сайт
  
  // Соціальне
  "com.twitter": string;
  "com.github": string;
  "com.discord": string;
  "org.telegram": string;
  "com.reddit": string;
  
  // Професійне
  keywords: string;       // теги розділені комами
  notice: string;         // публічне оголошення
}

Читання профілю

import { createPublicClient, http } from "viem";
import { mainnet } from "viem/chains";
import { normalize } from "viem/ens";

const client = createPublicClient({ chain: mainnet, transport: http(RPC_URL) });

async function getENSProfile(nameOrAddress: string) {
  let ensName: string | null = null;
  
  // Визначаємо: це ім'я або адреса?
  if (nameOrAddress.endsWith(".eth")) {
    ensName = normalize(nameOrAddress);
  } else {
    ensName = await client.getEnsName({ address: nameOrAddress as `0x${string}` });
  }
  
  if (!ensName) return null;
  
  const [avatar, textRecords] = await Promise.all([
    client.getEnsAvatar({ name: ensName }),
    Promise.all([
      client.getEnsText({ name: ensName, key: "description" }),
      client.getEnsText({ name: ensName, key: "com.twitter" }),
      client.getEnsText({ name: ensName, key: "com.github" }),
      client.getEnsText({ name: ensName, key: "url" }),
    ]),
  ]);
  
  return {
    name: ensName,
    avatar,
    description: textRecords[0],
    twitter: textRecords[1],
    github: textRecords[2],
    website: textRecords[3],
  };
}

Резолюція аватара

ENS підтримує кілька форматів аватара:

  • HTTP/HTTPS URL: https://example.com/avatar.png
  • IPFS: ipfs://QmHash...
  • NFT посилання: eip155:1/erc721:0xContractAddr/tokenId — автоматично читає tokenURI
// viem getEnsAvatar автоматично обробляє всі формати
// і повертає кінцевий URL зображення
const avatarUrl = await client.getEnsAvatar({ name: "vitalik.eth" });

Для NFT аватарів: бібліотека запитує tokenURI → парсить metadata → повертає URL зображення. Важливо: NFT має належати власнику імені ENS — інакше аватар не відображається.

Запис профілю

import { createWalletClient, custom } from "viem";

const walletClient = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum),
});

// Адреса ENS Public Resolver (mainnet)
const RESOLVER = "0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63";
const ENS_ABI = [...] // ABI resolver

const { request } = await client.simulateContract({
  address: RESOLVER,
  abi: ENS_ABI,
  functionName: "setText",
  args: [namehash("alice.eth"), "description", "DeFi розробник"],
  account: walletClient.account,
});

await walletClient.writeContract(request);

Кеширування та продуктивність

Дані ENS змінюються рідко. Агресивне кеширування виправдане:

Поле TTL кеша
Адреса (forward resolution) 10 хвилин
Зворотна резолюція 10 хвилин
Аватар 1 година
Текстові записи 30 хвилин

Для додатків з високою нагрузкою — Redis кеш перед RPC вишиванням. Розмір кеша мінімальний (кілька KB на профіль), можна зберігати тисячі профілів.

Верифікація пов'язаних акаунтів

Верифікація Twitter/GitHub в ENS — користувач вказує хендл, але будь-хто може написати будь-який хендл. Для верифікації потрібен додатковий крок:

Перевірка через Keybase / Lens Protocol: користувач публікує криптографічне доказ (підпис гаманця) в Twitter/GitHub. Верифікатори (Keybase, Lens) перевіряють володіння.

EAS attestation: довірений верифікатор видає attestation "адреса X володіє Twitter @Y" через EAS. Профіль читає attestation, не просто текстовий запис.

Розробка системи ENS-профілів з читанням даних, кешуванням, резолюцією аватара і верифікацією пов'язаних акаунтів — 1-3 тижні в залежності від глибини функцій.