כיצד להציג תשואות על עמדות DeFi בארנק נייד?
אנו פותרים כל הזמן את הבעיה של הצגת עמדות DeFi בארנקים ניידים. לקוחות רוצים לראות את כל ההשקעות שלהם — נזילות ב-Uniswap v3, סטייקינג ב-Lido, הלוואות ב-Aave — על מסך אחד. הבעיה היא שלכל פרוטוקול יש חוזה חכם משלו ונוסחת חישוב תשואה משלו. ללא אגרגטור מוכן, היישום נמשך חודשים. צברנו ניסיון באינטגרציה עם עשרות פרוטוקולים ואנו מבטיחים פעילות יציבה.
מקורות נתונים לעמדות DeFi
- DeFi Llama API — אגרגטור פרוטוקולים חינמי. נקודת הקצה
/tvl/{protocol}מחזירה TVL,/yieldsמחזירה APY עדכני לפי מאגרים. זה טוב להצגת נתוני שוק אך אינו מספק עמדות עבור כתובת ספציפית. - Zapper API / Zerion API — אגרגטורי תיקים. בקשה אחת עם כתובת ארנק מחזירה את כל עמדות ה-DeFi בפרוטוקולים נתמכים עם יתרה עדכנית ורווח והפסד. Zerion תומך ב-400+ פרוטוקולים על 10+ רשתות. הם בתשלום אך חוסכים חודש פיתוח (הפחתת עלות של 60–70%).
- קריאות ישירות לחוזה חכם דרך
eth_call— עבור פרוטוקולים ספציפיים או נתונים מותאמים אישית שאינם זמינים באגרגטורים.
מדוע אגרגטור עדיף על קריאות ישירות?
אגרגטור (Zerion או Zapper) מספק כיסוי של 400+ פרוטוקולים ב-1–2 שבועות אינטגרציה, בעוד אינטגרציה ישירה עם פרוטוקול אחד אורכת 2–4 שבועות. זה מהיר פי 4 ומפחית משמעותית את עלויות הפיתוח — חיסכון בתקציב יכול להגיע לאלפי דולרים לכל פרוטוקול.
| שיטה | מספר פרוטוקולים | זמן אינטגרציה | דיוק נתונים |
|---|---|---|---|
| אגרגטור (Zerion) | 400+ | 1–2 שבועות | בינוני (תלוי ב-API) |
| קריאות ישירות (Aave) | 1 בכל פעם | 2–4 שבועות לכל פרוטוקול | גבוה (בלוקצ'יין) |
| Subgraph (Uniswap) | 1 בכל פעם | 1–2 שבועות | גבוה (נתונים מתועדים) |
כיצד לקרוא עמדה ישירות מחוזה Aave v3?
עבור Aave v3, החוזה הראשי הוא UiPoolDataProviderV3. eth_call אחד מחזיר את כל הנתונים עבור כל יתרות המשתמש:
דוגמה לקריאה ל-Aave v3
final contract = DeployedContract(
ContractAbi.fromJson(aaveUiDataProviderAbi, 'UiPoolDataProviderV3'),
EthereumAddress.fromHex('0x91c0eA31b49B69Ea18607702c5d9aC360bf3dE7d'),
);
final result = await ethClient.call(
contract: contract,
function: contract.function('getUserReservesData'),
params: [
EthereumAddress.fromHex(poolAddressProvider),
EthereumAddress.fromHex(userAddress),
],
);
מבנה final contract = DeployedContract( ContractAbi.fromJson(aaveUiDataProviderAbi, 'UiPoolDataProviderV3'), EthereumAddress.fromHex('0x91c0eA31b49B69Ea18607702c5d9aC360bf3dE7d'), ); final result = await ethClient.call( contract: contract, function: contract.function('getUserReservesData'), params: [ EthereumAddress.fromHex(poolAddressProvider), EthereumAddress.fromHex(userAddress), ], ); מכיל UserReserveData (כמה הופקד כולל ריבית שנצברה) ו-currentATokenBalance (חוב משתנה). APY מחושב מ-currentVariableDebt של המאגר באמצעות הנוסחה liquidityRate. אימתנו חישובים על 100+ מאגרים — שגיאה של פחות מ-0.01%.
כיצד להציג עמדות Uniswap v3 עם טווח מחירים?
Uniswap v3 מורכב יותר כי כל עמדה היא NFT עם טווח נזילות מרוכז אישי. עמדות NFT מאוחסנות ב-APY = (1 + liquidityRate/10^27 / secondsPerYear)^secondsPerYear - 1 (כתובת NonfungiblePositionManager ברשת הראשית).
כדי לקבל עמדות משתמש:
-
0xC36442b4a4522E871399CD717aBDD847Ab11FE88— מספר עמדות NFT. -
balanceOf(userAddress)— מזהי טוקן עבור כל עמדה. -
tokenOfOwnerByIndex(userAddress, index)— פרמטרי עמדה: token0/token1, שכבת עמלה, tickLower, tickUpper, נזילות.
חישוב הכמות הנוכחית של token0/token1 מ-positions(tokenId) ומה-liquidity הנוכחי הוא מתמטיקה לא טריוויאלית לפי נוסחאות מ-המסמך הלבן של Uniswap v3. עדיף להשתמש ב-sqrtPriceX96 המוכן ב-JS דרך גשר WebView או להעביר את הנוסחאות ל-Dart/Kotlin/Swift. פשוט יותר: Uniswap Subgraph על The Graph מחזיר @uniswap/v3-sdk עם position, collectedFeesToken0, collectedFeesToken1, depositedToken0 מחושבים כבר.
מה לגבי הפסד בלתי נמנע בחישוב רווח והפסד?
רווח והפסד = (ערך נוכחי של העמדה בדולרים) - (ערך השקעה ראשוני בדולרים). המלכוד הוא הפסד בלתי נמנע. אם השקעת 1 ETH + 1000 USDC במאגר Uniswap v3, ו-ETH עולה — במאגר יהיה פחות ETH ויותר USDC. השוואה פשוטה של יתרה נוכחית ליתרה ראשונית בדולרים אינה מספיקה — צריך להתחשב בהפסד הבלתי נמנע יחסית לאסטרטגיית החזקה. להצגת רווח והפסד למשתמש: אנו מציגים "עמלות שנצברו" בנפרד מ"שינוי מחיר של נכסי הבסיס" — זה מובן יותר ממספר רווח והפסד יחיד.
כיצד לייעל עדכוני נתונים ושמירה במטמון?
נתוני DeFi משתנים עם כל בלוק (~12 שניות באת'ריום). שליפתם בכל פתיחת מסך מספיקה; משיכה לרענון היא תבנית UX סטנדרטית. שמירה במטמון עם TTL של 60 שניות: משתמשים לא מצפים לדיוק בזמן אמת עבור הלוואות. עבור עמדות סטייקינג עם הצטברות תשואה איטית (Lido stETH) — אנו מחשבים מקומית תשואה שנצברה על בסיס APY נוכחי וזמן מאז העדכון האחרון, ומציגים הערכה אופטימית ללא בקשות נוספות.
| תרחיש | תדירות בקשות | TTL במטמון | הערות |
|---|---|---|---|
| פתיחת מסך עמדות | בכל פתיחה | 60 שניות | משיכה לרענון מעדכנת |
| סטייקינג (Lido) | כל 5 דקות | 300 שניות | הערכת תשואה מקומית |
| משיכה לרענון | לפי בקשה | — | עדכון מאולץ |
מה כלול בעבודה וכיצד אנו עושים זאת
שלבי אינטגרציה:
- ניתוח פרוטוקולים — קביעה אילו פרוטוקולי DeFi לתמוך, בחירת מקור נתונים אופטימלי (אגרגטור או חוזה ישיר).
- אינטגרציית אגרגטור — חיבור Zerion או Zapper לכיסוי מהיר של 400+ פרוטוקולים.
- קריאות מותאמות אישית — יישום
depositedToken1ישיר או Subgraph עבור פרוטוקולים ספציפיים. - חישוב רווח והפסד ו-APY — יישום נוסחאות, אימות על נתונים היסטוריים.
- אופטימיזציית מטמון — הגדרת TTL, הערכות מקומיות לסטייקינג.
- בדיקות והשקה — כיסוי בבדיקות יחידה, בדיקות אינטגרציה על רשתות בדיקה.
מה תקבלו כתוצאה
- הצגת עמדות עבור פרוטוקולים מועדפים (Aave, Uniswap, Compound, Lido וכו')
- חישוב יתרה נוכחית ו-APY
- הצגת עמלות שנצברו ורווח והפסד
- שמירה במטמון עם TTL מתאים
- תמיכה רב-רשתית (Ethereum, Arbitrum, Optimism, Base)
לוח זמנים: אינטגרציה דרך אגרגטור עם הצגת עמדות — 1–2 שבועות. אינטגרציה ישירה עם 3–5 פרוטוקולים עם חישוב רווח והפסד מותאם אישית — 4–6 שבועות. עלות מחושבת באופן אישי. הניסיון שלנו — 7+ שנים בפיתוח נייד ו-15+ פרויקטי DeFi — מבטיח עמידה בלוחות זמנים. צרו קשר כדי לדון בפרויקט שלכם. בקשו ייעוץ — נעזור ליישם ארנק DeFi עם תצוגת תשואות באפליקציה הניידת שלכם.







