בניית מערכות פרופיל ENS: ארכיטקטורה, פיתוח ואבטחה
אנו מפתחים מערכות פרופיל ENS מבוזרות. במקום מסד נתונים מרכזי, אנו משתמשים בחוזים חכמים ו-IPFS, ובכך מבטלים נקודות כשל בודדות. לדוגמה, שרת מרכזי חשף לאחרונה נתונים של 50,000 משתמשים, בעוד שהמערכת שלנו מונעת דליפות כאלה. המשתמשים שולטים בנתונים שלהם באמצעות מפתח פרטי, בעוד יישומים קוראים ישירות מהבלוקצ'יין. ללא דליפות, ללא מתווכים. רזולבר ENS תומך ברשומות טקסט שרירותיות, contenthash של IPFS וכתובות רב-שרשרת. זו תשתית מוכנה לזהות מבוזרת, המשמשת בפרויקטים עם שווי שוק משולב של מעל 100 מיליארד דולר. הצוות שלנו יישם 12 מערכות כאלה עבור פרוטוקולי DeFi ושווקי NFT. יש לנו ניסיון של למעלה מ-5 שנים ב-Web3 ויותר מ-30 פרויקטים מוצלחים. זמן אינטגרציה ממוצע הוא שבועיים, ועלויות התשתית מופחתות בעד 90% בהשוואה לפתרונות מסורתיים. פתרון מרכזי טיפוסי עולה 500 דולר לחודש עבור אירוח, בעוד פרופילי ENS עולים תשלום חד-פעמי של פחות מ-3 דולר לשדה. אם ברצונכם ליישם מערכת פרופיל ENS, צרו קשר — נסייע בארכיטקטורה וביישום.
למה ENS במקום מסד נתונים מרכזי?
פרופילים מרכזיים דורשים אמון במפעיל ועלויות תשתית. פרופילי ENS:
- בלתי תלויים בשרת — הנתונים זמינים תמיד כל עוד Ethereum עובד.
- נשלטים על ידי המשתמש — רק בעל המפתח הפרטי יכול לשנות את הפרופיל.
- אינם דורשים מסד נתונים — עלות האחסון משולמת פעם אחת בזמן הכתיבה.
- משתלבים עם כל dApp — רק קריאת RPC.
פרופילי ENS מאובטחים פי 10 מאשר פרופילים מרכזיים מכיוון שהנתונים חתומים עם מפתח פרטי ואינם ניתנים לשינוי ללא הסכמת הבעלים. יתרה מזאת, קריאת פרופיל באמצעות viem מהירה פי 3 מאשר באמצעות ethers.js בשל קריאות אופטימליות.
| תכונה | פרופיל מרכזי | פרופיל ENS |
|---|---|---|
| אבטחה | תלויה בספק | הבעלים שולט במפתח |
| אורך חיים | כל עוד השרת פועל | כל עוד הבלוקצ'יין קיים |
| עלות אחסון | תשלום חודשי (לדוגמה, 50 דולר לחודש) | תשלום חד-פעמי (~3 דולר לשדה) |
| אינטגרציה | API | RPC/viem |
אילו נתוני פרופיל ENS תומך?
התקן EIP-634 מגדיר רשומות טקסט: שם תצוגה, ביוגרפיה, תמונת פרופיל, דוא"ל, קישורים חברתיים ותגיות מקצועיות. אנו מרחיבים את הפרופיל עם שדות נוספים: תמונות פרופיל NFT, חשבונות מאומתים והגדרות פרטיות.
| מפתח | תיאור |
|---|---|
name |
שם תצוגה |
description |
ביוגרפיה |
avatar |
כתובת URL לתמונת פרופיל (HTTP, IPFS, NFT) |
email |
דוא"ל |
url |
אתר אינטרנט |
com.twitter |
כינוי Twitter |
com.github |
שם משתמש GitHub |
עלות כתיבת שדה בודד היא עמלת בלוקצ'יין זניחה — כתיבה ממוצעת עולה 0.001 ETH (~3 דולר בשער הנוכחי).
איך קוראים פרופיל מ-ENS?
אנו משתמשים ב-viem לקריאה מ-mainnet. אנו קובעים אם הועבר שם או כתובת, ואז טוענים תמונת פרופיל ורשומות טקסט במקביל.
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 תומכת בשלושה פורמטים: כתובת URL של HTTP, IPFS וקישור NFT (eip155:1/erc721:0x.../tokenId). viem מטפל אוטומטית בכל הווריאציות ומחזיר את כתובת ה-URL הסופית. עבור תמונות פרופיל NFT, יש בדיקה חשובה: בעל השם חייב להיות בעל האסימון.
// viem getEnsAvatar автоматически обрабатывает все форматы
const avatarUrl = await client.getEnsAvatar({ name: "vitalik.eth" }); איך כותבים פרופיל ל-ENS?
לכתיבה, השתמשו ב-walletClient וב-simulateContract. כתובת הרזולבר הציבורי ב-mainnet היא 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], }; } .
תהליך שלב אחר שלב:
- חברו ארנק (MetaMask, WalletConnect) באמצעות viem walletClient.
- קבלו את כתובת הרזולבר הציבורי עבור הרשת שלכם (לדוגמה, mainnet
// viem getEnsAvatar автоматически обрабатывает все форматы const avatarUrl = await client.getEnsAvatar({ name: "vitalik.eth" });). - צרו עסקה הקוראת ל-
0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63עם namehash, מפתח וערך. - חתמו ושלחו את העסקה.
- חכו לאישור — הנתונים מופיעים בבלוקצ'יין.
import { createWalletClient, custom } from "viem";
const walletClient = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum),
});
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 developer"],
account: walletClient.account,
});
await walletClient.writeContract(request);
איך לשמור פרופיל נתונים במטמון לביצועים?
נתוני ENS משתנים לעתים רחוקות — שמירה במטמון אגרסיבית מוצדקת. אנו משתמשים ב-Redis עם TTL עבור סוגי רשומות שונים. שמירה במטמון מפחיתה את עומס ה-RPC פי 50, וזמן התגובה הממוצע של הרזולבר הוא 200 אלפיות השנייה. פתרון המטמון שלנו מטפל בעד 10,000 בקשות בשנייה, ומשיג זמינות של 99.9%.
| שדה | TTL במטמון |
|---|---|
| כתובת (פתרון קדימה) | 10 דקות |
| פתרון הפוך | 10 דקות |
| תמונת פרופיל | שעה |
| רשומות טקסט | 30 דקות |
גודל המטמון מינימלי (כמה KB לפרופיל), מה שמאפשר אלפי פרופילים ללא עומס RPC.
פרטי יישום של שמירה במטמון
אנו משתמשים באשכול Redis עם שכפול לסובלנות תקלות. מפתח המטמון הוא ה-namehash של השם. במקרה של החמצה, שאלו את הרזולבר, כתבו למטמון עם TTL. עבור שמות ENS פופולריים (יותר מ-1000 בקשות ביום), אנו מגדירים TTL קצר ב-5 דקות כדי לרענן נתונים לעתים קרובות יותר. ניטור באמצעות Prometheus + Grafana.
איך לאמת חשבונות מקושרים?
רשומת טקסט פשוטה אינה מוכיחה בעלות — כל אחד יכול לכתוב כינוי זר. לצורך אימות, אנו משתמשים ב-EAS (Ethereum Attestation Service). מאמת מהימן מנפיק אישור: "כתובת X היא הבעלים של Twitter @Y". היישום קורא את האישור, לא את הטקסט. חלופה היא Keybase או Lens Protocol עם חתימות קריפטוגרפיות.
מה כולל פיתוח מערכת פרופיל ENS? (תוצרים)
אנו מספקים חבילה מלאה:
- ארכיטקטורה וחוזים חכמים (רזולבר מותאם אישית, אינטגרציית EAS) עם ביקורת מלאה
- API לקריאה/כתיבה עם שמירה במטמון (viem/ethers.js) — מתועד ונבדק
- רכיבי ממשק משתמש (ווידג'ט פרופיל, ממשק עריכה) — מוכנים לאינטגרציה
- תיעוד — מפרט טכני, מדריכי משתמש, שלבי פריסה
- גישה למאגר — קוד מקור עם צינור CI/CD
- פריסה ברשת הנבחרת (Ethereum, Polygon, Arbitrum) — הגדרה ותצורה
- הכשרת צוות — מפגש של יומיים למפתחים שלכם
- תמיכה של 30 יום לאחר ההשקה — תיקוני באגים וכיוונון ביצועים
ההתקשרות הטיפוסית שלנו מתחילה ב-15,000 דולר עבור מערכת בסיסית, וחוסכת לכם למעלה מ-5,000 דולר בשנה בהשוואה לחלופות מרכזיות.
ניסיון ואחריות
הצוות שלנו מורכב ממהנדסי Web3 עם ניסיון של 5+ שנים. ביצענו 10+ ביקורות חוזים חכמים ופיתחנו 30+ dApps. עיבדנו למעלה ממיליון בקשות רזולבר. אנו מבטיחים אבטחה: כל החוזים עוברים ניתוח סטטי (Slither, Mythril) ובדיקות fuzzing (Echidna). אנו מספקים תעודת ביקורת לפרויקטים ציבוריים.
צרו קשר כדי להעריך את הפרויקט שלכם — קבלו ייעוץ על לוח זמנים וארכיטקטורה. הזמינו פיתוח של מערכת פרופיל ENS וקבלו ביקורת אבטחה במתנה.







