פיתוח אינדקס קריפטו ללא מערכת שקלול נכסים מחושבת אינו אינדקס—זו סל שרירותי. נתקלנו בפרויקטים שבהם הדומיננטיות של BTC ו-ETH באינדקס שווי שוק הגיעה ל-80%, מה שסותר את מטרת הפיזור. במקרה אמיתי אחד, אינדקס MCW על רשת Ethereum mainnet דרש ריבלנסינג יומי עם עלויות גז של $50–200 לפעולה, מה ששחק עד 30% מהתשואות השנתיות. החלפנו את המתודולוגיה ל-SQRT ועברנו ל-Arbitrum: הגז ירד ל-$2, הפיזור השתפר, והריבלנסינג הפך לנדיר. הגישה שלנו היא לבחור מתודולוגיה המותאמת למטרות התיק וליישם אותה ב-Solidity עם גז מינימלי ואמינות מקסימלית. יש לנו ניסיון של 10+ שנים ב-DeFi ופיתחנו למעלה מ-15 מערכות שקלול לאינדקסים שונים.
כיצד לבחור מערכת שקלול נכסים לאינדקס קריפטו?
שקלול לפי שווי שוק (MCW)
גישה קלאסית: משקל פרופורציונלי לשווי השוק. BTC + ETH תופסים 70–80% מכל אינדקס MCW—מה שמוביל לפיזור נמוך והטיה למניות גדולות. יישום ב-Solidity: הבאת מחירים דרך Chainlink, הכפלה בהיצע במחזור (המאוחסן מחוץ לרשת, מעודכן דרך multisig). בעיה: לא ניתן לקבל נתוני היצע בצורה אמינה על הרשת—מניפולציה דרך multisig.
שורש ריבועי של שווי שוק (SQRT MCW)
החלת sqrt על שווי השוק: משקל = sqrt(mcap_i) / sum(sqrt(mcap_j)). ETH יורד מ-65% ל-~40%, מניות קטנות מקבלות משקל ניכר. Index Coop משתמש בווריאציה ב-DPI. sqrt על הרשת—אין פונקציית sqrt מובנית ב-Solidity; יש להשתמש בשיטת Babylonian או בספריית Solmate. דוגמת קוד:
function sqrt(uint256 x) internal pure returns (uint256) {
if (x == 0) return 0;
uint256 z = (x + 1) / 2;
uint256 y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
return y;
} משקל שווה (EW)
לכל הנכסים משקל שווה—פיזור מקסימלי, אך עלויות הריבלנסינג גבוהות: עם 20 נכסים, כל שינוי מחיר יוצר סטייה. ריבלנסינג יומי על Ethereum mainnet—הפסד מובטח לגז. ריאלי רק על L2s (Arbitrum, Base) עם גז באגורות.
שקלול מותאם תנודתיות
משקל ביחס הפוך לתנודתיות—נכסים פחות תנודתיים מקבלים משקל גבוה יותר. מטרה: מזעור תנודתיות התיק הכוללת. חישוב על הרשת: מחירים היסטוריים לתנודתיות ממומשת דרך Chainlink (יקר) או חלון נע מותאם אישית. עבור 20 נכסים עם חלון של 30 יום—600 רשומות אחסון, מעודכנות פעם ביום—עומס בינוני.
| מתודולוגיה | פיזור | גז לריבלנסינג | מורכבות אורקל |
|---|---|---|---|
| שווי שוק | נמוך | נמוך | גבוהה (היצע) |
| SQRT שווי שוק | בינוני | נמוך | גבוהה (היצע) |
| משקל שווה | גבוה | גבוה | מחירים בלבד |
| מותאם תנודתיות | גבוה | בינוני | מחירים + היסטוריה |
| פונדמנטלי | בינוני | נמוך | נתוני TVL/נפח |
כיצד ליישם שקלול ב-Solidity מבלי לאבד דיוק?
חשבון נקודה קבועה לדיוק
כל החישובים במספרים שלמים עם דיוק של 18 ספרות עשרוניות (WAD = 1e18). דוגמת נורמליזציה:
uint256 totalWeight = 0;
for (uint i = 0; i < n; i++) {
totalWeight += rawWeights[i];
}
for (uint i = 0; i < n; i++) {
normalizedWeights[i] = rawWeights[i] * 1e18 / totalWeight;
}בדוק גלישה עם rawWeights גדולים וודא ש-normalizedWeights מסתכמים ל-1e18 בטווח של ±1.
טריגר ריבלנסינג
שתי גישות: מבוסס זמן (כל N בלוקים) ומבוסס סטייה (סטייה ממשקל היעד > סף, למשל 5%). מבוסס סטייה יעיל יותר: בשווקים יציבים, מעט ריבלנסינגים. יישום דרך Chainlink Automation: checkUpkeep מחזיר true אם |currentWeight - targetWeight| > סף עבור כל נכס. סף של 5% מפחית את הריבלנסינגים פי 3–5, וחוסך עד 40% בגז.
השוואת טריגרים
| פרמטר | מבוסס זמן (24 שעות) | מבוסס סטייה (סף 5%) |
|---|---|---|
| ריבלנסינגים בשנה | ~365 | ~70 |
| גז (שנתי) | גבוה | נמוך עד 40% |
| החלקה | יציבה | נמוכה יותר בשווקים רגועים |
אינטגרציה עם החלפות
במהלך ריבלנסינג, מכור נכסים בעלי משקל יתר וקנה נכסים בעלי משקל חסר. המסלול האופטימלי: דרך אגרגטור DEX (1inch, Paraswap) או ישירות דרך Uniswap v3 Universal Router. ריבלנסינג אטומי הוא קריטי: כל ההחלפות בעסקה אחת דרך multicall או try/catch עם revert. אם העסקה נכשלת באמצע, האינדקס נתקע.
מה התהליך כולל
- ניתוח דרישות—בחירת מתודולוגיה, מקורות נתונים, טריגר ריבלנסינג.
- עיצוב ארכיטקטורה—מפרט חוזה חכם, פריסת אורקל.
- פיתוח—WeightCalculator, Rebalancer, אינטגרציה עם פרוטוקולים חיצוניים.
- בדיקות—בדיקות יחידה לחישובי משקלים, בדיקות fork עם מחירים אמיתיים וסימולציית ריבלנסינג.
- פריסה ותיעוד—הוראות פריסה, כתובות חוזה, תמיכה שוטפת.
מלכודות נפוצות בעיצוב מערכת שקלול
- שימוש בנקודה צפה ב-Solidity—אסור; השתמש רק בנקודה קבועה.
- אי התחשבות בנתוני היצע ב-MCW—מוביל למשקלים שגויים כשההיצע במחזור משתנה.
- חוסר הגנה מפני החלקה בלוגיקת החלפות הריבלנסינג—יכול להוביל להתקפות סנדוויץ'.
- ריבלנסינג בעסקה אחת ללא revert על מילוי חלקי—האינדקס נתקע.
לוח זמנים ועלות
לוח הזמנים תלוי במורכבות: עבור מתודולוגיה אחת—3 עד 5 ימים; עבור מערכת רב-מתודולוגית עם מעברי ממשל—1–2 שבועות. העלות מחושבת באופן אישי לאחר דיון באינדקס שלך.
צור קשר לייעוץ—נעזור לך לבחור מתודולוגיה ולהעריך את הפרויקט. קבל ניתוח חינם של האינדקס שלך והשק שקלול עם סיכון מינימלי.







