הגדרת ENS Resolver ב-dApps עם viem ו-wagmi: אינטגרציה שלב אחר שלב

כאשר משתמשים מזינים שם ENS וה-dApp שלכם לא מזהה אותו, הפעולות מואטות והלקוחות נרתעים. אנו מגדירים את ה-ENS resolver באמצעות ערכת הכלים המודרנית viem ו-wagmi, ומבטיחים פתרון נכון של שמות וכתובות. הצוות שלנו מספק אינטגרציה מלאה, מנורמליזציה של שמות ועד לשמירת שאילתות במטמון, עם תמיכה מתמשכת לביצועים יציבים של השירות.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1335
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1031

משתמש מזין vitalik.eth בשדה הכתובת, אבל האפליקציה לא מצליחה לפתור אותה — מוכר? רזולבר ENS פותר את זה, אבל ההתקנה שלו דורשת תשומת לב לפרטים: נורמליזציה של שמות, מטמון RPC, וטיפול ברשומות הפוכות חסרות. אנו מגדירים רזולבר ENS מוכן לשימוש עם הסטאק המודרני viem/wagmi. עם ניסיון של 5+ שנים ב-web3 ויותר מתריסר dApps עם אינטגרציית ENS, אנו מבטיחים פעולה יציבה. צרו קשר לשילוב רזולבר ENS ב-dApp שלכם.

אילו בעיות אנו פותרים

שמות ENS לא תקינים. משתמשים עשויים להזין vItalik.eth או sub.vitalik.eth עם תווים של Unicode. ללא נורמליזציה (UTS-46), שמות אלה או שלא נפתרים או מחזירים כתובת שגויה. אנו מיישמים normalize() מ-viem/ens על כל קלט.

חיפוש הפוך ללא רשומה הפוכה. אם בעל הכתובת לא הגדיר רשומה הפוכה, useEnsName מחזיר null. הממשק אז מציג שם ריק במקום הכתובת. אנו מיישמים גיבוי: הצגת כתובת מקוצרת (0x12...34) והנחיה למשתמש לרשום שם ENS.

עלויות גז וזמן השהיה. כל בקשה ל-RPC של mainnet עולה כ-5000 גז ולוקחת 2–5 שניות. ללא מטמון, ה-dApp יכול לפגר. Wagmi שומר תוצאות אוטומטית דרך React Query, אבל אנו מוסיפים גם הגדרת TTL וניסיונות חוזרים ליציבות.

איך רזולבר ה-ENS שלנו עובד

ENS היא מערכת שמות מבוזרת ב-Ethereum mainnet. הפתרון מתבצע דרך חוזה רישום ה-ENS. ב-dApp, אנו משתמשים ב-hooks מוכנים useEnsAddress (ישיר) ו-useEnsName (הפוך) מ-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), אותם אנו מיישמים עבור dApps מרובי שרשראות.

אינטגרציה שלב אחר שלב

  1. התקנת ספריות. הוסיפו 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, }); ו-wagmi דרך npm או yarn.
  2. הגדרת לקוח. הגדירו תצורת Wagmi עם ספק mainnet.
  3. יישום hooks. החליפו שדות קלט כתובת ברכיבים המשתמשים ב-viem ו-useEnsAddress.
  4. נורמליזציה של קלט. תמיד הפעילו useEnsName מ-normalize() לפני כל בקשה.
  5. הגדרת מטמון. ציינו viem/ens ו-staleTime באפשרויות ה-hook של wagmi לשימוש אופטימלי ב-RPC.
  6. הוספת גיבוי. אם חיפוש הפוך מחזיר null, הציגו כתובת מקוצרת וכפתור להגדרת שם ENS.

למה לנרמל שמות ENS?

gcTime מ-normalize() ממיר את המחרוזת לתקן UTS-46, מתקן אותיות ותווים של Unicode. בלעדיו, שמות כמו viem/ens עשויים להחזיר כתובת שונה או לזרוק חריגה. בדקו גם אורך: האורך המקסימלי של שם ENS הוא 128 בתים מקודדים.

השוואה: viem לעומת ethers.js עבור ENS

פרמטר viem (wagmi) ethers.js
גודל חבילה ~20 kB (ניתן ל-tree-shaking) ~150 kB
תמיכת ENS hooks מובנים vItAlik.eth, useEnsAddress דרך useEnsName + מטמון ידני
ביצועים מהיר פי 2–3 בזכות ABI קומפקטי כבד יותר בגלל ABI מלא ב-JSON
מטמון אוטומטי (React Query) דורש יישום ידני
טיפוסים TypeScript-first, טיפוסים מלאים טיפוסים חלקיים

viem מנצח בביצועים ובנוחות — לפרויקטים חדשים אנו ממליצים על הסטאק הזה.

מה כלול בעבודה

שלב פרטים משך (ימים)
ניתוח דרישות לפתרון, בחירת ספריות 1–2
עיצוב ארכיטקטורה, טיפול בשגיאות, מטמון 2–3
יישום אינטגרציית hooks, ולידציה, נורמליזציה 3–5
בדיקות בדיקות יחידה, סימולציית כשל RPC, E2E 2–3
פריסה הגדרת mainnet, תיעוד 1–2

כלול: קוד (TypeScript), תיעוד API, הוראות בדיקה, הגדרת ניטור ראשונית (Tenderly). תמיכה לחודש לאחר המסירה. התמחור מחושב באופן אישי. קבלו ייעוץ לפרויקט שלכם.

טעויות נפוצות ואיך להימנע מהן

  • שכחתם Resolver — שמות עם תווים של Unicode קורסים. פתרון: תמיד הפעילו נורמליזציה normalize().
  • אין timeout מוגדר — בקשה ל-mainnet יכולה להיתקע ל-30+ שניות. פתרון: viem/ens עם publicClient.getEnsAddress({ ... }).
  • התעלמות מתת-דומייניםtimeout: 10000 עובד אבל vitalik.eth לא. פתרון: ולידציה דרך sub.vitalik.eth ושימוש ב-normalize() עם המבנה המלא.
  • חיפוש הפוך ללא גיבוי — ממשק ריק במקום כתובת. פתרון: תמיד הציגו כתובת מקוצרת כש-ENS חסר.

למה לבחור בגישה שלנו?

שילבנו ENS ב-12 dApps לפרויקטים של DeFi ו-NFT. אנו משתמשים באימות חוזה פורמלי (Slither + Mythril) ואופטימיזציית גז. אנו מבטיחים שהרזולבר לא יחסום את חוויית המשתמש — זמן תגובה מתחת ל-3 שניות עם RPC יציב. צרו קשר לשילוב רזולבר ENS ב-dApp שלכם — פנו אלינו לייעוץ.

שירות השמות של Ethereum