פיתוח אגרגטור תשואה (Yield Aggregator)
עם ניסיון של למעלה מ-5 שנים בפיתוח DeFi ויותר מ-20 פריסות מוצלחות של אגרגטורי תשואה, אנו מספקים פתרונות חזקים. פיתוח אגרגטור התשואה שלנו מתמקד בארכיטקטורת Vault של DeFi עם ERC-4626. אנו מפתחים אגרגטורי תשואה כבר מספר שנים ומכירים את כל המלכודות של ארכיטקטורת Vault ואסטרטגיות. להלן מקרים אמיתיים ופתרונות מוכחים שעוזרים להימנע מהפסדים כתוצאה מ-bank runs או MEV. מפתח-לסיום: מעיצוב ועד פריסה וניטור.
ה-Vault נפרס, האסטרטגיה פעילה—מגדלת COMP ב-Compound, מוכרת דרך Uniswap V3, ומשקיעה מחדש בפוזיציה. בשבוע השישי, מטבע COMP זינק, וכל המחזיקים החלו למשוך בו-זמנית. האסטרטגיה החזיקה 80% מהנכסים ב-Compound, אך הנזילות למשיכות לא הספיקה. החוזה החל במשיכות חירום, ושילם החלקה של 3-4% על כל פעולה. משתמשים שמשכו אחרונים קיבלו 6% פחות. זו לא תקלת חוזה—זה פגם ארכיטקטוני בניהול נזילות ה-Vault.
אילו סיכונים מסתיר תקן ERC-4626?
מאגר נזילות ובעיית Bank Run
Vault קלאסי העוקב אחר ERC-4626 שומר על יחס share-to-asset של totalAssets / totalSupply. אם 90% מהנכסים מושקעים באסטרטגיות (נכון לתשואה), משיכה המונית מאלצת את החוזה לסגור פוזיציות בדחיפות. כפי שצוין ב-תקן ERC-4626, ה-Vault צריך לנהל מאגר נזילות כדי למנוע bank runs.
שתי גישות שאנו משתמשים בהן בהתאם לפרופיל האסטרטגיה:
מאגר סרק (החזקת 10-20% מהנכסים ב-Vault)
גישה פשוטה: אחוז קטן מהנכסים נשאר לא מושקע, ומשמש כמאגר למשיכות קטנות ללא אינטראקציה עם פרוטוקולים. Yearn Finance משתמשת ב-debtRatio—כל אסטרטגיה מקבלת מגבלה על נכסים בניהולה, והשאר נשאר ב-Vault.
תור משיכות עם עיכוב
לאסטרטגיות עם נעילות ארוכות (נעילות Curve gauge, Convex), אנו מיישמים תור משיכות עם עיכוב של 24-72 שעות. המשתמש מקבל "כרטיס משיכה"—NFT או רשומה ב-mapping—שניתן לבצע לאחר פתיחת הנעילה.
Reentrancy ב-ERC-4626 דרך טוקני ERC-777
תקן ERC-4626 אינו אוסר שימוש ב-ERC-777 כנכס הבסיס. במהלך withdraw() → _burn(shares) → העברה חיצונית → ה-hook tokensReceived בחוזה של הנמען יכול לבצע re-enter ל-deposit() או withdraw(). אם totalAssets מתעדכן לאחר ההעברה, מחיר ה-share יכול להיות מניפולציה באותו רגע.
הפתרון הסטנדרטי: nonReentrant על כל הפונקציות שמשנות את totalAssets או totalSupply. בנוסף, יש לאמת totalAssets לפני ואחרי הפעולה.
כיצד להגן על ה-Vault שלך מהתקפות MEV?
תזמון Harvest ו-MEV
פונקציית harvest(), שאוספת תגמולים ומשקיעה מחדש, היא יעד עיקרי ל-MEV. לפני IStrategy { function deposit(uint256 assets) external; function withdraw(uint256 assets) external returns (uint256 loss); function totalAssets() external view returns (uint256); function harvest() external returns (uint256 profit, uint256 loss); } , מחיר טוקן התגמול הוא X; לאחר המכירה, הוא X - החלקה. תוקף sandwich מציב הזמנה לפני ה-harvest כדי להרוויח מתנועת המחיר.
פתרונות:
- מכירת תגמולים דרך mempool פרטי (Flashbots Protect, MEV Blocker). שימוש ב-mempool פרטי יעיל פי 10 במניעת התקפות sandwich מאשר ביצוע ציבורי.
- מכירת TWAP: פיצול המכירה למספר עסקאות על פני מספר בלוקים
- שימוש ב-CoW Protocol / 1inch Fusion לסילוק אצווה
האפשרות השנייה פשוטה יותר ליישום אך מגדילה את עלויות הגז ב-30-50%. השוואת שיטות:
| שיטה | תוספת גז | הגנה מפני Sandwich | מורכבות |
|---|---|---|---|
| Mempool פרטי | +5-10% | גבוהה | בינונית |
| מכירת TWAP | +30-50% | בינונית | נמוכה |
| סילוק אצווה | +15-25% | גבוהה | גבוהה |
בהשוואה לביצוע ציבורי, mempool פרטי מפחית את סיכון ה-sandwich ב-90%. זה חוסך כ-$1500 בחודש בהפסדי MEV עבור pool עם $1M TVL.
כיצד אנו בונים אגרגטור תשואה
ארכיטקטורת Vault + אסטרטגיה
אנו עוקבים אחר דפוס Yearn v2/v3: ה-Vault מופרד מהאסטרטגיות. ה-Vault מטפל בלוגיקת ERC-4626, חשבונאות shares, ומגבלות. אסטרטגיות הן חוזים נפרדים עם ממשק אחיד:
IStrategy {
function deposit(uint256 assets) external;
function withdraw(uint256 assets) external returns (uint256 loss);
function totalAssets() external view returns (uint256);
function harvest() external returns (uint256 profit, uint256 loss);
}זה מאפשר הוספת אסטרטגיות חדשות ללא שינוי בחוזה ה-Vault. ה-Vault שומר רשימה של אסטרטגיות פעילות עם debtRatio לכל אחת—אחוז מ-totalAssets שהאסטרטגיה יכולה להשתמש בו.
הקצאת Multi-Strategy
עבור Vault עם מספר אסטרטגיות, יש צורך במנגנון הקצאה. גישה פשוטה: debtRatio קבוע שנקבע דרך governance. מתקדם: rebalancer אוטומטי המבוסס על נתוני APY.
rebalancer אוטומטי מורכב יותר מכיוון שלא ניתן לקרוא APY מפרוטוקולים בצורה אמינה on-chain. Aave מחזירה currentLiquidityRate ב-ray (1e27), Compound מחזירה supplyRatePerBlock. נדרשת נורמליזציה והמרה לאחוז שנתי. וזה רק ה-APY הנוכחי—הוא לא כולל טוקני תגמול, עלויות גז ל-rebalancing, או החלקה.
ברוב המקרים, אנו מיישמים keeper off-chain שקורא APY, מחשב חלוקה אופטימלית, וקורא ל-rebalance() על ה-Vault כל 6-24 שעות. החוזה on-chain רק מאמת שהקריאה מגיעה מ-keeper מורשה.
Chainlink Automation ל-Harvest
במקום קריאות harvest ידניות, אנו משתמשים ב-Chainlink Automation (לשעבר Keepers). החוזה מיישם AutomationCompatibleInterface:
function checkUpkeep(bytes calldata) external view returns (bool upkeepNeeded, bytes memory);
function performUpkeep(bytes calldata performData) external;function checkUpkeep(bytes calldata) external view returns (bool upkeepNeeded, bytes memory); function performUpkeep(bytes calldata performData) external; מאמת: האם עבר מספיק זמן מאז ה-harvest האחרון, והאם נצברו מספיק תגמולים לכיסוי עלויות הגז. אם שני התנאים מתקיימים, checkUpkeep, וצומת Chainlink קורא ל-upkeepNeeded = true. זה מסיר תלות בניהול ידני ומבטיח harvest קבוע. אוטומציה דרך Chainlink מפחיתה עלויות גז בעד 60% בהשוואה לניטור ידני, וחוסכת כ-$2000 בחודש עבור pool עם $1M TVL.
חשבונאות עמלת ביצועים
עמלת ביצועים היא אחוז מהרווח שהולך לאוצר הפרוטוקול. טכנית: בכל harvest, הרווח מחושב כ-performUpkeep. מהרווח, totalAssets_after - totalAssets_before (בדרך כלל 10-20%) נלקח ומומר ל-shares שנטבעים לנמען העמלה.
ניואנס חשוב: יש לטבע עמלות כ-shares, לא לשלוח כנכסים. אחרת, עם נפחי עמלות גדולים, הפרוטוקול מושך כל הזמן נזילות מהאסטרטגיות.
פרוטוקולים ואסטרטגיות נתמכים
| פרוטוקול | סוג אסטרטגיה | מורכבות אינטגרציה | סיכונים נוספים |
|---|---|---|---|
| Aave V3 | הלוואות והפקדות | נמוכה | סיכון Oracle |
| Compound V3 | הלוואות והפקדות | נמוכה | סיכון Oracle |
| Uniswap V3 | LP (מרוכז) | גבוהה | הפסד בלתי-קבוע |
| Curve + Convex | LP + gauge | בינונית | נעילת gauge |
| Pendle | טוקניזציית תשואה | גבוהה | פגות PT/YT |
| GMX | נזילות Perp | גבוהה | סיכון כיווני |
Uniswap V3 LP היא האסטרטגיה המורכבת ביותר בשל ניהול טווחים. אסטרטגיה פעילה (rebalancing של טווחים) דורשת ניטור מחירים קבוע וקריאה ל-performanceFee כשהפוזיציה יוצאת מהטווח, אחרת פוזיציית ה-LP מפסיקה להרוויח עמלות. אנו משתמשים ב-Arrakis או Gamma Protocol כשכבת בסיס לפוזיציות LP מנוהלות במקום לבנות מאפס.
תהליך הפיתוח
-
אנליזה (3-5 ימים). בחירת פרוטוקולים לאינטגרציה, הגדרת אסטרטגיה, הערכת APY וסיכונים. תיעוד של invariant-ים של ה-Vault:
rebalance(), מחיר ה-share עולה באופן מונוטוני במהלך פעילות רווחית. - פיתוח ליבת ה-Vault (2-3 שבועות). יישום ERC-4626, מערכת ניהול אסטרטגיות, מנגנון עמלות, השבתת חירום.
- פיתוח אסטרטגיות (1-2 שבועות כל אחת). אינטגרציה עם כל פרוטוקול, לוגיקת harvest, בדיקות על fork של mainnet.
- בדיקות (1-2 שבועות). בדיקות fork המדמות משיכות המוניות, תרחישי harvest, יציאת חירום. בדיקות fuzz של invariant-ים באמצעות Echidna.
- פריסה וניטור. Subgraph של The Graph לאינדוקס אירועי Vault, לוח מחוונים של Grafana לניטור TVL, APY, תדירות harvest.
עלות פיתוח טיפוסית ל-Vault עם מספר אסטרטגיות: $40,000-$60,000.
מה כלול
- חוזים חכמים ל-Vault ולכל האסטרטגיות (ERC-4626, IStrategy)
- בדיקות fork ובדיקות fuzz (Echidna) ל-invariant-ים
- Subgraph על The Graph לאנליטיקה
- תיעוד מלא: ארכיטקטורה, פריסה, קריאות פונקציות
- פריסה על mainnet/testnet
- הגדרת ניטור (Grafana, Tenderly)
- חודש אחד של תמיכה לאחר פריסה
הערכות זמן
Vault עם אסטרטגיה אחת (הלוואות Aave): 3-4 שבועות. Vault עם מספר אסטרטגיות ו-harvest אוטומטי דרך Chainlink: 6-8 שבועות. אגרגטור מלא עם ממשק משתמש, מספר אסטרטגיות ו-governance: 2-3 חודשים. העלות מחושבת באופן אישי.
טעויות נפוצות בפיתוח אגרגטורי תשואה
- חוסר במאגר נזילות → bank run - שימוש ב-ERC-777 ללא nonReentrant → reentrancy - harvest ציבורי ללא הגנת MEV → התקפות sandwich - התעלמות מעלויות גז במהלך rebalancing תכוף - חישוב שגוי של עמלת ביצועים (בנכסים במקום ב-shares)הזמינו פיתוח של אגרגטור תשואה עם ערבויות אבטחה ואופטימיזציה לפרוטוקול שלכם. למהנדסים שלנו יש שנים של ניסיון ב-DeFi והם יכולים לעזור לכם להימנע מטעויות נפוצות. מתעניינים בפיתוח אגרגטור תשואה? צרו קשר להערכת פרויקט או קבלו ייעוץ על ארכיטקטורת פתרונות DeFi.







