פרוטוקול עם TVL של 50 מיליון דולר ללא ניטור נזילות DeFi אינו חוסך בכלים—זו ניהול סיכונים עיוור. כאשר 30% מהנזילות יוצאת מבריכה תוך 4 שעות עקב משיכת לוויתן, לצוות יש שתי אפשרויות: לגלות דרך התראת נזילות ולפעול, או ללמוד מציוץ שמשתמשים לא יכולים להחליף עקב החלקה גבוהה. אנו מציעים פתרון סוהר תוך 3-5 ימים: מאיסוף נתונים on-chain ועד מערכות התראה בטלגרם ו-PagerDuty. רקורד שלנו: 5+ שנים ב-DeFi, 20+ הטמעות ניטור לפרוטוקולים עם TVL מ-10 מיליון עד 500 מיליון דולר. אנו מבטיחים מסירת התראה תוך 10 שניות—פי 50 מהר יותר מסקר API של DeFi Llama. התמחור מתחיל ב-500 דולר לניטור בסיסי; פתרון מלא מ-2000 דולר. צרו קשר—נעריך את הפרויקט שלכם בחינם תוך יום אחד.
אילו מדדים לנטר ולמה זה לא טריוויאלי
ריכוז נזילות ב-Uniswap v3
ב-Uniswap v2, נזילות כוללת היא מדד ברור: reserve0 * reserve1 = k, k גדול יותר אומר החלקה טובה יותר. ב-Uniswap v3, נזילות מרוכזת ב-ticks. בריכה עשויה להיות עם TVL של 10 מיליון דולר, אבל אם 95% מרוכזים בטווח של ±2% סביב המחיר הנוכחי, תנועת מחיר מחוץ לטווח הזה מורידה את הנזילות האפקטיבית פי 20.
ניטור נכון: לא רק totalValueLocked, אלא activeLiquidity—נזילות בטווח הפעיל סביב המחיר הנוכחי. מדד מתוך ה-subgraph של Uniswap v3:
query ActiveLiquidity {
pool(id: "0x...") {
liquidity
sqrtPrice
tick
ticks(where: { liquidityNet_not: "0" }, orderBy: tickIdx) {
tickIdx
liquidityNet
}
}
}מהנתונים האלה אנו בונים תרשים עומק: כמה נזילות זמינה בתנועות מחיר של ±1%, ±5%, ±10%.
זיהוי משיכת לוויתן
ספק נזילות גדול יכול למשוך נזילות בבת אחת, ולקרוס את העומק בשוק מסוים. עבור פרוטוקול שתלוי בנזילות בבריכות מסוימות (למשל, בריכת stablecoin לפדיון), זהו סיכון קריטי.
אנו מנטרים אירועי query ActiveLiquidity { pool(id: "0x...") { liquidity sqrtPrice tick ticks(where: { liquidityNet_not: "0" }, orderBy: tickIdx) { tickIdx liquidityNet } } } (Uniswap v3) ו-Burn (Curve, Balancer) דרך מנוי WebSocket. אם ספק נזילות יחיד מושך >10% מהנזילות הכוללת—התראה מיידית.
ערימת ניטור
איסוף נתונים
שלוש שכבות של מקורות:
אירועי on-chain (זמן אמת). מנוי WebSocket של ethers.js ל-RemoveLiquidity, Sync, Swap, Mint אירועים של חוזי היעד. זמן השהיה—שניות מאישור עסקה. דורש צומת משלו או WSS מ-Alchemy/Infura עם תמיכה ב-Burn.
Subgraphs של The Graph (עיכוב של 1-5 דקות). שימושי למדדים מצטברים—TVL שעתי/יומי, נפח, עמלות. לנתונים היסטוריים ומגמות. Subgraphs רשמיים עבור Uniswap, Curve, Balancer, Aave, Compound זמינים ב-The Graph Explorer.
API של DeFi Llama (עיכוב של 10-60 דקות). שימושי להשוואות TVL בין פרוטוקולים ותמונה כוללת. לא מתאים להתראות בזמן אמת.
אחסון ויזואליזציה
TimescaleDB (הרחבת PostgreSQL)—אופטימלי לנתוני נזילות מסוג time-series. חלוקה לפי זמן, hypertables לארכיון אוטומטי של נתונים היסטוריים.
Grafana + מקור נתונים של TimescaleDB—ערימה סטנדרטית לדשבורדים. פאנלים מוגדרים מראש עבור:
- TVL של בריכה בזמן אמת
- תרשים עומק (נזילות זמינה בהחלקה נתונה)
- יחס נפח/נזילות (מדד לחץ)
- ספקי נזילות מובילים וחלקם
מערכת התראות
| מדד | סף אזהרה | סף קריטי | ערוץ |
|---|---|---|---|
| ירידת TVL | -10% בשעה | -25% בשעה | טלגרם |
| משיכת ספק נזילות יחיד | >5% מהנזילות הכוללת | >15% מהנזילות הכוללת | PagerDuty |
| החלקה (עסקה של 1%) | >0.5% | >2% | טלגרם |
| סטיית מחיר מהאורקל | >2% | >5% | PagerDuty |
| ניצול (הלוואות) | >80% | >95% | PagerDuty |
PagerDuty או OpsGenie להתראות קריטיות—הודעת push לטלפון, ללא קשר לשעה ביום. בוט טלגרם להודעות אינפורמטיביות.
Tenderly Alerts—חלופה לאירועי on-chain ללא תשתית משלו: הגדרת טריגרים דרך ממשק משתמש, webhook ל-Discord/Slack/Telegram.
חישוב וניטור APY
APY ב-DeFi הוא משתנה: תלוי בנפח (עמלות מסחר), פליטות טוקנים (תגמולי כריית נזילות), וריבית בסיסית (להלוואות).
נוסחה ל-APY של ספק נזילות ב-Uniswap v3:
dailyFees = pool.volumeUSD24h * feeTier / 1_000_000 feeAPR = (dailyFees / pool.tvlUSD) * 365 עם TVL של מיליון דולר ונפח יומי של 2 מיליון דולר בבריכה עם עמלה של 0.05% (500): eth_subscribe, dailyFees = pool.volumeUSD24h * feeTier / 1_000_000 feeAPR = (dailyFees / pool.tvlUSD) * 365 . אבל זה על TVL כולל. ספק נזילות עם פוזיציה מרוכזת בטווח הפעיל מרוויח פרופורציונלית יותר לפי הנזילות האפקטיבית שלהם.
אנו מנטרים APY לכל בריכה עם התראות על ירידות חדות—סימן לפעילות מסחר מופחתת או מעבר נפח לבריכה מתחרה.
איך לזהות משיכת נזילות גדולה?
מפורט למעלה: מעקב אחר אירועי Burn/RemoveLiquidity, הגדרת ספים וערוצי התראה. השתמשו ב-Tenderly או באינדקסר משלכם לאוטומציה.
תהליך ההטמעה
ההטמעה שלנו כוללת את השלבים הבאים:
- מלאי של חוזים ומדדים (יום אחד)
- הקמת איסוף נתונים (WebSocket + TimescaleDB) (1-2 ימים)
- יצירת דשבורד Grafana (יום אחד)
- הגדרת התראות (טלגרם, PagerDuty) (יום אחד)
- הדרכת צוות ומסירה (יום אחד)
| שלב | משך | תוצאה |
|---|---|---|
| מלאי של חוזים ומדדים | יום אחד | רשימת אירועים וספים עדיפים |
| הקמת איסוף נתונים (WebSocket + TimescaleDB) | 1-2 ימים | רישום אירועי on-chain בזמן אמת |
| יצירת דשבורד Grafana | יום אחד | ויזואליזציה של TVL, תרשים עומק, נפח/נזילות |
| הגדרת התראות (טלגרם, PagerDuty) | יום אחד | הודעות עבור 5-6 מדדים קריטיים |
מה כלול
- תיעוד ארכיטקטורה לניטור
- דשבורד Grafana מוגדר עם מדדים מרכזיים
- מערכת התראות עם ספים וערוצי הודעה
- סקריפטים לאיסוף נתונים ואינטגרציה עם בריכות חדשות
- הדרכת צוות (1-2 שעות)
- תמיכה לחודש אחד לאחר ההטמעה
הערכות זמן
ניטור בסיסי לפרוטוקול אחד (TVL, אירועים, התראות)—3-5 ימים. ניטור מקיף למספר פרוטוקולים עם תרשימי עומק, מעקב APY ודשבורד מותאם—עד שבועיים. התמחור נקבע באופן אישי לפי מספר הפרוטוקולים ומורכבות האינטגרציה.
דוגמת קוד לניטור אירוע Burn
const { ethers } = require("ethers");
const provider = new ethers.providers.WebSocketProvider(process.env.WSS_URL);
const poolContract = new ethers.Contract(POOL_ADDRESS, UNISWAP_V3_POOL_ABI, provider);
poolContract.on("Burn", (owner, tickLower, tickUpper, amount, amount0, amount1) => {
console.log(`Burn: owner ${owner}, amount ${amount}`);
// Проверяем долю от total liquidity
checkWhaleWithdrawal(owner, amount);
});







