בונים pool מותאם אישית של Uniswap v4? המעבר הארכיטקטוני ל-hooks מציג גם גמישות וגם מורכבות. Hooks מאפשרים לכם להריץ קוד שרירותי לפני ואחרי כל פעולת pool — אתחול, החלפה, הוספה/הסרה של נזילות, תרומה. זה פותח מכניקות שלא היו זמינות ב-v2 ו-v3: עמלות דינמיות, ספרי הזמנות on-chain, איזון מחדש אוטומטי, הגנת MEV ישירות בתוך ה-pool. המחיר של הגמישות הוא מורכבות: חוזה ה-hook רץ בתוך PoolManager דרך קריאה חוזרת של unlock עם מערכת חשבונאות של BalanceDelta. שגיאה אחת ב-hook יכולה לנעול את כל ה-pool או לרוקן נזילות. הניסיון שלנו של 10+ שנים ב-DeFi ו-50+ פרויקטי blockchain מבטיח בטיחות ויעילות.
תחילת פיתוח Pool מותאם אישית של Uniswap v4
ארכיטקטורת Uniswap v4: מה השתנה מהותית
ב-v2/v3, כל pool הוא חוזה נפרד. ב-v4, כל ה-pools חיים בתוך PoolManager אחד. זה מקצר את עלות יצירת pool מכ-500k ל-~150k gas, והופך החלפות מרובות-קפיצים להרבה יותר זולות (ללא העברות בין חוזים). חשבונאות הטוקנים משתמשת ב-PoolManager — לא העברות אמיתיות, אלא deltas שמצטברים ומסתדרים בסוף קריאת unlock. בזמן ש-PoolKey נעול (בתוך beforeSwap אחד), טוקנים לא זזים פיזית. זה מאפשר flash accounting: החלפה, שימוש בטוקנים שהתקבלו לכל מטרה, החזרת החוב — הכל בעסקה אחת ללא flash loan. חיסכון ב-gas מגיע ל-40% בהשוואה ל-v3.
מערכת ה-Hooks: כתובת כ-Bitmask
חוזה ה-hook נרשם ביצירת ה-pool דרך afterSwap. כתובת ה-hook מקודדת קריאות חוזרות מותרות דרך bits מובילים: bits ספציפיים חייבים להיות מוגדרים כדי להפעיל hooks תואמים. beforeAddLiquidity — bit 7, v4-template — bit 6, beforeInitialize — bit 5, וכן הלאה. זה אומר שאי אפשר לבחור את כתובת ה-hook באופן שרירותי — חייבים לכרות כתובת vanity עם ה-bits הנדרשים דרך CREATE2. כלים: afterInitialize מ-Uniswap, סקריפטים של Foundry לכריית כתובות. יש 14 hooks אפשריים:
| Hook | תיאור |
|---|---|
beforeAddLiquidity / afterAddLiquidity |
לפני/אחרי יצירת pool |
beforeRemoveLiquidity / afterRemoveLiquidity |
לפני/אחרי הוספת נזילות |
beforeSwap / afterSwap |
לפני/אחרי הסרה |
beforeDonate / afterDonate |
לפני/אחרי החלפה |
beforeSwapReturnDelta / afterSwapReturnDelta |
לפני/אחרי תרומה ל-pool |
afterAddLiquidityReturnDelta |
שינוי פלט ההחלפה |
afterRemoveLiquidityReturnDelta |
לקיחת עמלות אחרי החלפה |
lpFeeOverride |
התאמת יתרת LP |
beforeSwap |
התאמת יתרת בעת הסרה |
איך עובדים Uniswap v4 Hooks?
עמלות דינמיות דרך beforeSwap
ב-v3, עמלות קבועות (0.05%, 0.3%, 1%). ב-v4, ה-hook יכול להחזיר afterSwap ישירות ב-PoolManager, ולשנות את העמלה עבור כל החלפה באופן דינמי. זה מאפשר:
- עמלות תלויות תנודתיות: הזנת מחיר של Chainlink + חלון תנודתיות נע → עמלה של 1% בזמן תנודתיות גבוהה, 0.05% בזמן נמוכה. LPs מקבלים פיצוי הוגן על סיכון אובדן זמני.
- עמלות מבוססות TWAP: אם המחיר הנוכחי חורג מ-TWAP ביותר מ-X%, הגדל את העמלה — הגנה מפני ארביטראז' מונע אורקל.
פקודות Limit דרך Hooks מבוססי Tick
עם PoolManager, ה-hook יודע שהתרחשה החלפה והמחיר זז. אם ה-tick הנוכחי חוצה רמה שנקבעה מראש — בצע פקודת limit: קנה/מכור נזילות ממפה של פקודות. זהו ספר הזמנות limit on-chain מלא ללא sequencer מרכזי. מורכבות: gas עבור מעבר על פקודות. פתרון: ביצוע עצלן — פקודות מתבצעות באינטראקציית ה-tick הבאה.
TWAMM (Time-Weighted Average Market Maker)
פקודות גדולות מחולקות לפקודות וירטואליות קטנות שמבוצעות ברציפות לאורך זמן. ה-hook צובר טוקנים מפקודות TWAMM ומבצע אותן בהדרגה דרך ה-pool, תוך הימנעות מ-slippage. זה פותר את בעיית פקודות ה-whale — החלפה של $10M בבלוק אחד מזיזה את המחיר ויוצרת הזדמנויות sandwich. hook של TWAMM פורס אותה על פני 1000 בלוקים. מתמטיקה: פקודות וירטואליות מחושבות דרך נוסחת התפלגות אקספוננציאלית.
בפרויקט אחד, בנינו hook של עמלה תלוית תנודתיות: בזמן קריסת שוק, העמלות עלו אוטומטית ל-1% והגנו על LPs, בעוד שבתקופות רגועות הן ירדו ל-0.05%. זה הפחית את האובדן הזמני ב-30% בהשוואה ל-pool סטטי של 0.3%.
טעויות נפוצות בפיתוח Hooks
- Reentrancy דרך
NoSuchPool. ל-AlreadyUnlockedיש lock משלו, אבל ה-hook יכול לקרוא לחוזים חיצוניים שנכנסים שוב ל-pool.PoolManager,DeltaNotSettled— שגיאות נפוצות. כלל: ב-hooks, הימנעו מקריאות חיצוניות מלבד בקשות קריאה בלבד. - BalanceDelta שגוי. ה-hook מחזיר delta של טוקן. אם מחושב לא נכון —
afterSwapReturnDeltaנכשל עםPoolManager. מקרה נפוץ:PoolSwapTestמנסה לקחת יותר מה-delta אחרי ההחלפה. - כריית כתובות לייצור. כריית CREATE2 לוקחת מדקות עד שעות בהתאם למספר ה-bits הנדרשים. עבור 14 hooks — ~16,384 ניסיונות בממוצע.
למה Pools מותאמים אישית של v4 עדיפים על v3?
מכיוון שכל הקוד רץ בתוך forge script אחד, תקורה מקריאות בין-חוזים מופחתת. עמלות דינמיות מושכות LPs בזמן תנודתיות גבוהה, והגנת MEV מפחיתה הפסדים מהתקפות sandwich. כתוצאה מכך, pools הופכים ליעילים ובטוחים יותר. חיסכון ב-gas ביצירת pool — עד 350k gas, בהחלפות מרובות-קפיצים — עד 40%.
איך אנחנו מפתחים Pool מותאם אישית: 5 שלבים
- ניתוח ועיצוב (2–3 ימים). קביעת מכניקת pool, סט hooks, לוגיקת BalanceDelta. מפרט פורמלי של invariant.
- פיתוח חוזה ה-hook (3–5 ימים). יישום קריאות חוזרות, כריית כתובות, חוזי עזר.
- בדיקות (3–5 ימים). בדיקות יחידה, בדיקות אינטגרציה דרך
PoolSwapTest, בדיקות fuzz, בדיקות fork. - ביקורת (2–3 ימים). Slither, סקירה ידנית המתמקדת ב-reentrancy ו-BalanceDelta.
- פריסה ואימות (יום אחד). דרך Foundry
forge scriptעם אימות Etherscan.
סה"כ: 1–2 שבועות עבור hook עם מכניקה אחת. מערכות מורכבות — 4–6 שבועות.
מה כלול בעבודה
- ניתוח דרישות ועיצוב מכניקה
- פיתוח חוזים חכמים (hooks, חוזי עזר)
- בדיקות (יחידה, אינטגרציה, fuzz, fork)
- ביקורת אבטחה (Slither, סקירה ידנית)
- פריסה עם אימות
- תיעוד והמלצות תפעוליות
- תמיכה בהשקה
צרו קשר כדי לדון בפרויקט שלכם. נעריך את המורכבות ונציע פתרון אופטימלי סוהר. קבלו ייעוץ לפרויקט שלכם — השאירו בקשה.







