משתמש מזין 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 מרובי שרשראות.
אינטגרציה שלב אחר שלב
-
התקנת ספריות. הוסיפו
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. - הגדרת לקוח. הגדירו תצורת Wagmi עם ספק mainnet.
-
יישום hooks. החליפו שדות קלט כתובת ברכיבים המשתמשים ב-
viemו-useEnsAddress. -
נורמליזציה של קלט. תמיד הפעילו
useEnsNameמ-normalize()לפני כל בקשה. -
הגדרת מטמון. ציינו
viem/ensו-staleTimeבאפשרויות ה-hook של wagmi לשימוש אופטימלי ב-RPC. - הוספת גיבוי. אם חיפוש הפוך מחזיר 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 שלכם — פנו אלינו לייעוץ.







