משתמש הפקיד 100 ETH בכספת ב-Curve, אך עקב החמצת קציר (harvest) במשך חודש, ה-APY הסתיים ב-30% נמוך מהתחזית. זהו תרחיש טיפוסי: ללא קומפאונדינג אוטומטי, ריבית דריבית לא עובדת, ואיסוף תגמולים ידני (קציר) דורש זמן ועלויות גז. אנו בונים כספות תשואה (yield vaults) — חוזים חכמים שמשקיעים מחדש תשואות אוטומטית, ומבטלים קציר ידני. רכיב DeFi מרכזי זה מתמודד עם אתגרים כמו מי משלם על הקומפאונדינג, כיצד להימנע מהחלקת מחיר (slippage) בעת מכירת אסימוני תגמול, וכיצד להגן מפני התקפות ריינטרנסי (reentrancy) דרך אסימונים עם הוקס (hooks). למהנדסים שלנו, עם ניסיון של 5+ שנים ב-DeFi, יש 10+ כספות שהושקו ברשת המרכזית (mainnet), ואנחנו מוכנים לחלוק שיטות עבודה מומלצות.
כיצד פועלת כספת תשואה עם קומפאונדינג אוטומטי?
כספת תשואה מקבלת כספי משתמשים, מפקידה אותם בפרוטוקול (Aave, Compound, Curve, Convex), אוספת אסימוני תגמול שנצברו, ומשקיעה אותם מחדש. בפועל, עולות בעיות לא טריוויאליות: מי משלם על הקומפאונדינג, כיצד להימנע מהחלקת מחיר בעת מכירת תגמולים, וכיצד לא ליפול קורבן לריינטרנסי דרך אסימונים עם הוקס.
מי קורא לקציר ומי משלם?
קומפאונדינג אוטומטי דורש קריאות תקופתיות לפונקציית harvest() — איסוף תגמולים והשקעה מחדש. מישהו חייב לשלם עבור עסקה זו.
-
קציר ללא הרשאה (Permissionless harvest): כל אחד יכול לקרוא ל-
harvest()ולקבל פרס (בדרך כלל 0.5-1% מהתגמולים שנאספו). זה זול פי 10 משומר (keeper) אך פחות אמין ל-TVL נמוך. עם TVL נמוך בכספת, הקציר קורה לעיתים רחוקות, וה-APY נמוך מהפרסום. -
קציר מבוסס שומר (Keeper-based harvest): לפי תיעוד Chainlink Automation (https://docs.chain.link/chainlink-automation), הגדרת טריגר אורכת דקות. Chainlink Automation או Gelato Network קוראים ל-
harvest()בלוח זמנים או כאשר סף תגמולים מושג. אמין יותר מאשר ללא הרשאה, אך דורש מימון ב-LINK. Gelato מקזזת תשלום מהתגמולים עצמם דרך ממשקIAutomate. - קציר בכל הפקדה/משיכה: האפשרות הפשוטה ביותר, אך בהפקדה הראשונה לכספת חדשה, אתה משלם גז עבור קציר של אפס תגמולים.
אנו בדרך כלל משתמשים בגישה היברידית: שומר מתוזמן עם קציר ללא הרשאה כגיבוי.
מתמטיקת קומפאונדינג ושגיאות צבירה
APY עם קומפאונדינג: (1 + r/n)^n - 1, כאשר r הוא השיעור השנתי ו-n הוא מספר תקופות הקומפאונדינג בשנה. עם קומפאונדינג יומי (n=365) ו-APR של 20%, ה-APY הוא 22.13%. עם קומפאונדינג שבועי (n=52), ה-APY הוא 21.94%. ההבדל קטן, אך תדירות שגויה בחזית (frontend) מאכזבת משתמשים.
שגיאת עיגול: כל פעולת קומפאונדינג shares * pricePerShare לא תמיד מתחלקת שווה בשווה ב-totalAssets. השגיאה המצטברת על פני אלפי קומפאונדינגים יכולה להפוך למשמעותית. פתרון: אחסן את totalAssets כערך מדויק, ועדכן אותו אטומית בכל פעולה. אפקט הריבית דריבית עובד ללא אובדן.
כיצד להגדיר שומר Chainlink Automation
- פרוס את חוזה הכספת ורשום upkeep ב-Chainlink Automation.
- ב-
checkUpkeep(), החזרtrueכאשר תגמולים מצטברים עוברים סף (לדוגמה, 1000 אסימונים). - ב-
performUpkeep(), קרא ל-harvest()ושרוף את עמלת השומר. - הגדר את מרווח הבדיקה (minWaitSeconds) ותקציב ב-LINK.
זה מבטיח קומפאונדינג קבוע גם ב-TVL נמוך.
אסטרטגיה — הליבה של הכספת
אינטגרציה עם Curve + Convex
אסטרטגיה קלאסית: הפקדת USDC → Curve 3pool (USDC/USDT/DAI) → קבלת 3CRV → החזקה ב-Convex Finance → קבלת תגמולי CRV + CVX → מכירת CRV/CVX עבור USDC → הוספה חזרה ל-3pool. עקומות האינטראקציה ב-Solidity:
// Deposit в Curve ICurvePool(POOL_3CRV).add_liquidity([amount, 0, 0], minLpTokens); // Stake LP в Convex IConvexBooster(BOOSTER).deposit(pid, lpAmount, true); // Claim rewards IConvexRewardPool(REWARD_POOL).getReward(address(this), true); // Sell CRV via Uniswap V3 ISwapRouter(UNISWAP_ROUTER).exactInputSingle(params); סיכון החלקת מחיר בעת מכירת תגמולים: אם הכספת צוברת 50,000 CRV ומוכרת את כולם בעסקה אחת, השפעת המחיר היא 2-5%. פתרון: פיצול המכירה למספר חלקים (// Deposit в Curve ICurvePool(POOL_3CRV).add_liquidity([amount, 0, 0], minLpTokens); // Stake LP в Convex IConvexBooster(BOOSTER).deposit(pid, lpAmount, true); // Claim rewards IConvexRewardPool(REWARD_POOL).getReward(address(this), true); // Sell CRV via Uniswap V3 ISwapRouter(UNISWAP_ROUTER).exactInputSingle(params); ) או שימוש ב-1inch לניתוב אופטימלי דרך מספר בריכות.
ניהול עמלות
מבנה עמלות סטנדרטי לכספת תשואה:
- עמלת ביצועים: 10-20% מהתשואה המצטברת לכל קציר. הולכת לאוצר הפרוטוקול. לכספת עם TVL של $10M, עמלה של 15% מייצרת $1.5M בשנה.
- עמלת ניהול: 0.5-2% שנתית על ה-TVL. נצברת ברציפות על ידי הגדלת totalAssets לטובת האוצר.
- עמלת משיכה: 0-0.1%. אופציונלית, כדי להרתיע מהפקדות לטווח קצר.
יישום עמלת ניהול ללא עסקאות נפרדות: בכל קריאה ל-slicedSell, חשב את totalAssets() והפחת מערך ההחזר. מניות האוצר נטבעות בעת הקציר.
השוואת מודלי קציר
השוואת מודלי קציר
| מודל | יתרונות | חסרונות | עלויות גז |
|---|---|---|---|
| פרס ללא הרשאה | אפס עלויות שומר | תדירות לא צפויה | OPEX על פרס (0.5-1% תגמולים) |
| שומר (Chainlink) | מחזוריות מובטחת | עלויות LINK | $2-5 ל-upkeep ליום |
| בהפקדה/משיכה | פשטות, ללא תלות חיצונית | קציר נדיר ב-TVL נמוך | כלול בגז של המשתמש |
אילו סיכונים עולים בעבודה עם כספות תשואה?
ריינטרנסי דרך ERC-777 ואסימוני Callback
פונקציית הקציר מבצעת מספר קריאות חיצוניות: claim → swap → deposit. אסימוני ERC-777 קוראים להוק elapsed_seconds * annualFeeRate / SECONDS_IN_YEAR * tvl על הנמען. אם הכספת מקבלת ERC-777, במהלך tokensReceived ההוק עשוי לקרוא ל-claim או deposit לפני שקציר מסתיים. דפוס הגנה: withdraw על nonReentrant, harvest, deposit.
התקפות סנדוויץ' על עסקאות קציר
withdraw ציבורי נראה ב-mempool. בוטים של MEV מבצעים סנדוויץ': קניית CRV לפני עסקת הקציר, מכירה אחריה. הפחתה: דדליין על העסקה (מקסימום 1-2 בלוקים), harvest() קפדני באמצעות אורקל TWAP במקום מחיר ספוט. מחיר TWAP מדויק פי 3 ממחיר ספוט בשווקים תנודתיים. minAmountOut. TWAP על פני 30 דקות — Uniswap V3 amountOutMin = twapPrice * amount * (1 - maxSlippage). חלופה: Flashbots Private Transactions.
מניפולציית מחירים דרך Flash Loans
אסטרטגיה שקוראת מחיר ספוט מ-AMM כדי לחשב יחס קומפאונדינג פגיעה: הלוואת פלאש מזיזה זמנית את המחיר. פתרון: לעולם אל תשתמש במחיר ספוט של AMM לקבלת החלטות על סכומים. השתמש רק ב-TWAP או Chainlink לחישובי מחירים.
מחסן הפיתוח
Solidity 0.8.x + OpenZeppelin 5.x (ERC-4626, ReentrancyGuard, Pausable, AccessControl). Foundry לבדיקות עם fork tests על הרשת המרכזית. Chainlink Automation לשומר. 1inch Fusion API לעסקאות אופטימליות.
| סיכון | וקטור | הגנה |
|---|---|---|
| ריינטרנסי | הוקים של ERC-777 ב-claim | nonReentrant על כל הפונקציות שמשנות מצב |
| סנדוויץ' | קציר ציבורי | TWAP minAmountOut + Flashbots |
| מניפולציית מחירים | מחירי ספוט של AMM | Chainlink / TWAP לחישובים |
| שגיאת עמלה מצטברת | totalAssets לא מדויק | חשבונאות מדויקת, עדכון בכל פעולה |
| קומפאונדינג נדיר מדי | TVL לא מספק | שומר + ללא הרשאה עם פרס |
תהליך העבודה
- ניתוח (2-3 ימים). פרוטוקולי יעד, מבנה עמלות, תדירות קומפאונדינג, דרישות שומר.
- עיצוב (3-5 ימים). ארכיטקטורת כספת ERC-4626, חוזה אסטרטגיה נפרד לשדרוגיות, חשבונאות עמלות.
- פיתוח (2-4 שבועות). כספת → אסטרטגיה → אינטגרציית שומר → חזית (wagmi + viem).
- בדיקות. Foundry fork tests: מחזור מלא הפקדה → רווח → קציר → משיכה על מצב הרשת המרכזית. Fuzz על סכומים ותזמון.
- ביקורת. ביקורת חיצונית נדרשת כאשר TVL > $500k. הכספות שלנו עוברות אימות פורמלי.
מה כלול בתוצאה?
- קוד מקור של חוזים חכמים (מאומת ב-Etherscan)
- תיעוד ארכיטקטורה והוראות פריסה
- שומר Chainlink Automation מוגדר
- אינטגרציה עם 1inch לעסקאות אופטימליות
- דוח ביקורת (אם נדרש)
- הדרכת צוות ותמיכה במהלך ההשקה
הערכות זמן ועלות
כספת פשוטה על פרוטוקול אחד עם Chainlink Automation — 1-2 שבועות. כספת עם אסטרטגיה מרובת-פרוטוקולים עם ניתוב תגמולים אופטימלי והגנה מפני סנדוויץ' — 4-8 שבועות. העלות נקבעת לאחר הגדרת האסטרטגיה ודרישות האבטחה. דנו בפרטים — נכין הצעה מותאמת אישית.
הזמינו פיתוח כספת תשואה עם קומפאונדינג אוטומטי — קבלו ייעוץ חינם. למהנדסים שלנו עם ניסיון של 5+ שנים ב-DeFi יש 10+ כספות שיושמו עבור פרוטוקולים ידועים. תארו את המשימה שלכם, ואנחנו נציע את הפתרון האופטימלי.







