בניית אנליטיקת שוק DeFi דורשת לעיתים קרובות נתוני ניתוב ומחירים נקיים מאגרגטורי DEX, אך מגבלות קצב מהוות אתגר. 1inch ו-Jupiter הם מקורות מפתח, אך ל-API שלהם יש מגבלות והמסלולים משתנים תדיר. בנינו קולטן נתונים שאוסף נתונים משני האגרגטורים, מנרמל אותם, ומאחסן אותם ב-TimescaleDB או ClickHouse. עם ניסיון של 7+ שנים ב-Web3 (מעל 50 פרויקטי אגרגציה) ומאז 2018 בשוק, בנינו ארכיטקטורה עמידה בפני תקלות.
איסוף נתונים מאגרגטורי DEX כולל יותר מקריאות API מתוזמנות. זה אומר טיפול בפורמטי תגובה שונים, עקיפת מגבלות, נרמול נתונים מ-1inch (EVM) ו-Jupiter (Solana) לסכמה אחידה, ואחסונם עם חותמות זמן לאנליטיקה מאוחרת. בניסיוננו, פרויקטים דרשו איסוף נתונים עבור 500+ זוגות כל 10 שניות — דבר שדרש הקמת BullMQ ו-Redis לתיאום בקשות. התור שלנו מטפל בעד 10,000 בקשות לדקה עם זמינות של 99.9%.
מאמר זה מכסה ניתוח מסלולים מ-1inch ו-Jupiter, עקיפת מגבלות קצב, אחסון נתונים ובניית אנליטיקה. אנו מכסים גם איסוף נתוני MEV, ניתוח החלפות EVM, וטכניקות גרידה מעשיות לאגרגטורי DEX.
איסוף נתונים מ-1inch API ללא מגבלות קצב
Swap API לעומת Fusion API
Swap API (/swap/v6.0/{chain}/swap) הוא נקודת הקצה הקלאסית לאגרגציה. בקשה מחזירה:
-
txאובייקט עם נתוני עסקה מלאים -
protocols— רשימת פרוטוקולים במסלול עם חלקים -
toAmount— סכום פלט מינימלי
לגרידת נתוני מחיר ללא ביצוע החלפה, השתמשו בנקודת הקצה /quote: ללא פרמטר slippage, ללא fromAddress, מחזיר רק הצעת מחיר. זה לא מעמיס על ה-RPC ואינו דורש הרשאות.
Fusion API (/fusion/v1.0/{chain}/quote/receive) הוא מודל שונה: RFQ (בקשת הצעת מחיר) עם יצרני שוק. הניתוב אטום, פרוטוקולים אינם חשופים במלואם. לגרידת מסלולים, זה פחות שימושי.
מגבלות קצב ועקיפות
1inch Public API: בקשה אחת/שנייה, 500 אלף בקשות/חודש בחינם. לגרידה אינטנסיבית — 1inch Dev Portal עם תוכנית Pro או שימוש בנתב 1inch משלך באמצעות קריאות חוזה ישירות. קריאות חוזה ישירות מהירות פי 2 מבקשות HTTP ועוקפות מגבלות קצב לחלוטין.
קריאה ישירה ל-1inch Aggregation Router דרך eth_call — מקבלים הצעת מחיר ללא בקשת HTTP וללא מגבלות קצב. השתמשו ב-calldata מה-SDK לסימולציה:
const data = routerContract.interface.encodeFunctionData("swap", [ executor, desc, data ]);
const result = await provider.call({ to: ROUTER_ADDRESS, data });אך זה דורש הבנה של הפורמט הפנימי של 1inch — הוא משתנה בין גרסאות הנתב.
ניתוח המסלול
תגובת const data = routerContract.interface.encodeFunctionData("swap", [ executor, desc, data ]); const result = await provider.call({ to: ROUTER_ADDRESS, data }); מכילה /quote — מערך של מערכים המייצג מסלול מפוצל:
"protocols": [
[
[
{"name": "UNISWAP_V3", "part": 60, "fromTokenAddress": "...", "toTokenAddress": "..."}
],
[
{"name": "CURVE", "part": 40, ...}
]
]
]הרמה הראשונה היא נתיבים מקבילים (מפוצלים לפי נפח). הרמה השנייה היא קפיצות רציפות בתוך כל נתיב. לבניית גרף נזילות: נרמל שמות פרוטוקולים, אגרגט לפי זוגות מטבעות, עקוב אחר הדינמיקה של protocols לאורך זמן.
למה Jupiter Price API טוב יותר לאנליטיקה?
V6 Quote API
"protocols": [ [ [{"name": "UNISWAP_V3", "part": 60, "fromTokenAddress": "...", "toTokenAddress": "..."}], [{"name": "CURVE", "part": 40, ...}] ] ] התגובה כוללת part — מסלול מפורט דרך AMMs של Solana:
"routePlan": [
{
"swapInfo": {
"ammKey": "...",
"label": "Orca (Whirlpool)",
"inputMint": "...",
"outputMint": "...",
"inAmount": "1000000",
"outAmount": "998432",
"feeAmount": "3000",
"feeMint": "..."
},
"percent": 100
}
]לגרידה: GET /quote?inputMint=...&outputMint=...&amount=...&slippageBps=50 הוא המפתח הציבורי של הבריכה ב-Solana. ניתן לשאול ישירות את מצב הבריכה דרך routePlan. "routePlan": [ { "swapInfo": { "ammKey": "...", "label": "Orca (Whirlpool)", "inputMint": "...", "outputMint": "...", "inAmount": "1000000", "outAmount": "998432", "feeAmount": "3000", "feeMint": "..." }, "percent": 100 } ] הוא שם AMM קריא לאדם.
Jupiter Price API
Jupiter מספק נקודת קצה ammKey — שאילתת מחירים בכמות גדולה עבור עד 100 מטבעות לבקשה. היא מחזירה את המחיר ב-USDC עם ציון מקור הנזילות. זו לא הצעת מחיר (ללא החלקה), אלא מחיר ייחוס. היא מתעדכנת כל 30 שניות. ה-Jupiter Price API יעיל פי 10 מנקודת הקצה של 1inch למחירי מטבעות בכמות גדולה.
לבניית היסטוריית מחירים: סקרו את getAccountInfo עם הזוגות הרצויים כל 30 שניות, אחסנו ב-TimescaleDB או InfluxDB. ליום — ~2880 נקודות לזוג.
מגבלות קצב של Jupiter: API ציבורי ללא מפתח — 600 בקשות/דקה. Jupiter API Pro — גבוה יותר. לזמינות מובטחת במערכות ייצור, השתמשו ב-Jupiter self-hosted משלכם או במפתח שותף.
ארכיטקטורת הגורד
מבנה נתונים
interface RouteSnapshot {
timestamp: number;
chain: "ethereum" | "solana" | "arbitrum" | ...;
inputToken: string;
outputToken: string;
inputAmount: bigint;
outputAmount: bigint;
priceImpact: number; // в %
protocols: ProtocolHop[];
source: "1inch" | "jupiter";
}
interface ProtocolHop {
name: string;
poolAddress: string;
percentOfRoute: number;
inputAmount: bigint;
outputAmount: bigint;
} תור בקשות וניסיונות חוזרים
קולטן המטפל במספר זוגות מטבעות → בקשות מקבילות → פגיעה מהירה במגבלת הקצב. הארכיטקטורה הנכונה: תור עם Bull/BullMQ + Redis, מקביליות הניתנת להגדרה לכל מקור.
ניסיון חוזר עם השהיה אקספוננציאלית עבור 429 Too Many Requests: label. עבור 1inch — /price?ids=..., /price.
ניטור בריאות הקולטן: מדדי Prometheus interface RouteSnapshot { timestamp: number; chain: "ethereum" | "solana" | "arbitrum" | ...; inputToken: string; outputToken: string; inputAmount: bigint; outputAmount: bigint; priceImpact: number; // в % protocols: ProtocolHop[]; source: "1inch" | "jupiter"; } interface ProtocolHop { name: string; poolAddress: string; percentOfRoute: number; inputAmount: bigint; outputAmount: bigint; } , delay = Math.min(base * 2^attempt, maxDelay). התראה כאשר שיעור השגיאות > 10% במשך 5 דקות.
אחסון ושאילתות
TimescaleDB (הרחבת PostgreSQL) לסדרות זמן — מותאם לשאילתות base = 1000ms עם אגרגציה. לגרידת מסלולים בתדירות גבוהה — חלוקה לפי יום.
ClickHouse כחלופה לנפחים גבוהים מאוד (>10M שורות/יום): אחסון עמודי נותן שאילתות אנליטיות מהירות פי 10-100 על פני טווחי זמן גדולים. אחסנו מעל 100 מיליון נקודות מחיר עבור 500+ זוגות.
השוואת אחסון
| תכונה | TimescaleDB | ClickHouse |
|---|---|---|
| מותאם ל | סדרות זמן, JOINs | אנליטיקה, אגרגציות |
| תפוקה מקסימלית | עד 1M שורות/יום | >10M שורות/יום |
| מהירות שאילתה | גבוהה לשאילתות נקודתיות | גבוהה לאגרגטים |
| תחזוקה | חלוקה אוטומטית | דורש כוונון |
| זוג | שרשראות 1inch | בריכות Jupiter | תדירות |
|---|---|---|---|
| USDC/ETH | Ethereum, Arbitrum, Optimism | — | 1 דקה |
| SOL/USDC | — | Orca, Raydium | 30 שניות |
| BTC/USDC | כל EVM | — | 5 דקות |
מה כלול בעבודה
- ניתוח המטרות שלך ובחירת זוגות/תדירות סקירה.
- פיתוח קולטן הנתונים (Node.js/TypeScript) עם חוצצים וניסיונות חוזרים.
- אינטגרציה עם אחסון (TimescaleDB / ClickHouse).
- לוח מחוונים או API לגישת נתונים (Grafana, REST).
- תיעוד פורמטי נתונים ומגבלות.
- העברת גישה והדרכה לצוות שלך.
הערכות זמן ותקציב
קולטן למקור אחד (1inch או Jupiter) עם אחסון PostgreSQL — 1-2 ימים, תקציב החל מ-$1,500. קולטן רב-מקורות עם נרמול נתונים, ClickHouse ו-API אנליטי — 3-5 ימים. זמן ועלות נדונים באופן אישי — צרו קשר להערכה מדויקת.
הזמינו פיתוח קולטן נתונים למשימות שלכם — קבלו כלי אמין לאנליטיקת DeFi. צרו קשר — נבחר את הפתרון האופטימלי לזוגות ולתדירות הסקירה שלכם.







