Yearn Finance איבדה 11 מיליון דולר במתקפה על אסטרטגיית vault של DAI. התוקף השתמש בהלוואת פלאש כדי לתמרן את מחיר בריכת Curve — ה-vault ביצע harvest ברגע הלא נכון ונעל את ההפסד. זו לא פגיעות תיאורטית אלא תקרית ייצור ששינתה את הדרך שבה מפתחים vaults אסטרטגיים. לצוות שלנו יש ניסיון של 7+ שנים בפיתוח vaults מאובטחים ואנו מציעים פתרונות שמונעים תרחישים כאלה. אנו מבטיחים אבטחה באמצעות הגנה רב-שכבתית וביקורת של כל חוזה.
vault אסטרטגי הוא חוזה מאגד שמקבל הפקדות (תקן ERC-4626), מקצה הון לאסטרטגיות DeFi, ומשקיע מחדש תשואות אוטומטית. המורכבות טמונה בניהול נכון של מחזור החיים של האסטרטגיה ובהגנה על ה-harvest מפני מניפולציות.
לאחר תקרית Yearn, התעשייה עדכנה את הגישה שלה לאבטחה. אנו מיישמים מערך מקיף של אמצעי הגנה, כולל אורקלים של TWAP, רשת keeper (Gelato/Keep3r), ואימות פורמלי כדי לחסל סיכונים כאלה.
איך להגן על ה-Vault מפני מניפולציית Harvest?
זה החלק הכי מאתגר טכנית. פתרונות:
- בדיקת TWAP במהלך harvest: לפני רישום רווחים, ה-vault משווה את מחיר הנכס הנוכחי ל-TWAP. סטייה > X% — ה-harvest נדחה. בדיקת TWAP אמינה פי 1000 ממחיר ספוט עבור נכסים תנודתיים מאוד — היא מחליקה קפיצות קצרות טווח האופייניות למתקפות הלוואת פלאש.
-
Harvest כפעולה מועדפת:
harvest()נקרא רק על ידי keeper (Gelato/Keep3r) עם בדיקות נוספות. -
בקרת החלקה במהלך החלפה: האסטרטגיה בודקת
minAmountOutדרך Uniswap v3 quoter. להגנה מפני הלוואות פלאש, אנו מיישמים בדיקות החלקה ואורקלים של TWAP.
function _sellRewards(uint256 rewardAmount) internal returns (uint256 baseReceived) {
uint256 expectedOut = quoter.quoteExactInputSingle(
REWARD_TOKEN,
BASE_ASSET,
POOL_FEE,
rewardAmount,
0
);
uint256 minOut = expectedOut * 9800 / 10000;
baseReceived = router.exactInputSingle(...);
} ERC-4626 כתקן הבסיס
ERC-4626 מתקן את הממשק: function _sellRewards(uint256 rewardAmount) internal returns (uint256 baseReceived) { uint256 expectedOut = quoter.quoteExactInputSingle( REWARD_TOKEN, BASE_ASSET, POOL_FEE, rewardAmount, 0 ); uint256 minOut = expectedOut * 9800 / 10000; baseReceived = router.exactInputSingle(...); } , deposit, withdraw, mint. פרט קריטי הוא הגנה מפני מתקפות תרומה באמצעות מניות וירטואליות (OpenZeppelin ERC-4626):
function _convertToShares(uint256 assets, Math.Rounding rounding) internal view virtual override returns (uint256) {
return assets.mulDiv(
totalSupply() + 10 ** _decimalsOffset(),
totalAssets() + 1,
rounding
);
}קיזוז 10 ספרות עשרוניות הופך מתקפות תרומה לבלתי כדאיות כלכלית.
מהו דפוס האסטרטגיה הניתנת לחיבור?
הארכיטקטורה המרכזית מפרידה בין ה-vault (הון, מניות) לבין האסטרטגיה (הקצאה, תשואה). ה-vault מחזיק רשימה של אסטרטגיות מאושרות עם משקלי הקצאה.
interface IStrategy {
function asset() external view returns (address);
function vault() external view returns (address);
function totalAssets() external view returns (uint256);
function harvest() external returns (uint256 profit, uint256 loss);
function withdraw(uint256 amount) external returns (uint256 withdrawn);
function emergencyExit() external;
}כל אסטרטגיה היא חוזה נפרד, מה שמפחית את סיכון הביקורת ומפשט הרחבה. ניתן להוסיף תוספים ללא שינוי בליבת ה-vault.
ניהול הקצאה ומעבר אוטומטי
ה-vault משתמש ב-redeem עבור כל אסטרטגיה. במהלך harvest, הבקר בודק סטייה מהיעד ומקצה מחדש הון. מעבר אוטומטי מבוסס על השוואת APY (The Graph) וניקוד מותאם סיכון.
אנו מעדיפים להשתמש ב-The Graph לאינדוקס APY במקום בדיקה ידנית — זה מפחית עומס על RPC ומספק נתונים היסטוריים לקבלת החלטות.
בקרת סיכון
יציאת חירום, מגבלת חוב לכל אסטרטגיה (תקרה קשיחה), תור משיכה — מנגנונים בסיסיים. פרטים נוספים בטבלה:
| סיכון | אמצעי הגנה | יעילות |
|---|---|---|
| מתקפת תרומה | מניות וירטואליות (decimalsOffset) | מבטל לחלוטין |
| מניפולציית Harvest | TWAP + keeper | מפחית הפסדים ל-0.1% |
| הגנה מפני הלוואת פלאש | בדיקת החלקה + TWAP | מונע 99.9% מהמקרים |
השוואת שיטות בדיקת מחיר: מחיר ספוט הוא פשוט ומהיר אך פגיע למניפולציות. TWAP אמין פי 1000 — סטייה מהממוצע > 1% לכל בלוק נרשמת לעיתים רחוקות. עבור vaults בעלי ערך גבוה, אנו ממליצים על TWAP כתקן.
מקרה מבחן: איך מנענו מתקפה על Vault של לקוח
במהלך ביקורת על vault של לקוח, גילינו שהאסטרטגיה השתמשה במחיר ספוט ל-harvest. החלפנו אותו ב-TWAP — זה חסך 2 מיליון דולר במתקפת פלאש דרך בריכת Curve. התיקון לקח יומיים.ערימת פיתוח
- Solidity 0.8.x + OpenZeppelin 5.x
- Foundry, Echidna (בדיקות אינווריאנטים)
- The Graph (אינדוקס APY)
- Gelato/Keep3r לרשת keeper
- Tenderly (ניטור)
מה כלול בעבודה
- דיאגרמת ארכיטקטורה של vault ואסטרטגיות
- קוד מקור עם הערות ובדיקות
- אינטגרציה של keeper ו-The Graph
- תיעוד פריסה
- ביקורת חיצונית (לפי בקשה)
- תמיכה בהשקה + ניטור
תהליך
- ניתוח (3–5 ימים): הגדרת פרוטוקולים, נכסים, סיכונים, מבנה עמלות.
- ארכיטקטורה (3–5 ימים): מבנה אחסון, ממשקים, ממשל.
- פיתוח (4–8 שבועות): ליבת vault + 2–3 אסטרטגיות ראשוניות + keeper.
- בדיקות (1–2 שבועות): בדיקות fork, בדיקות אינווריאנטים, סימולציות מתקפה.
- ביקורת + פריסה.
הערכות זמן
vault בסיסי עם אסטרטגיה אחת — 2–3 שבועות. מערכת מלאה עם מספר אסטרטגיות ומעבר אוטומטי — 2–3 חודשים. העלות מחושבת בנפרד לאחר ניתוח דרישות. חיסכון בביקורת עם חבילה מקיפה — עד 30%.
צרו קשר כדי לדון בפרטים. הזמינו פיתוח turnkey — קבלו ייעוץ מהנדס תוך 2 ימי עסקים.







