אחזור יתרות בקבוצות עבור טוקנים מסוג ERC-20, BEP-20 & SPL בארנק הנייד
תארו לעצמכם: משתמש פותח ארנק וממתין לטעינת יתרות — שנייה אחת לכל טוקן. עם 20 טוקנים, זה 20 שניות. המשתמש סוגר את האפליקציה. בקשת RPC קלאסית לכל חוזה נותנת עיכוב של 2-3 שניות לכל טוקן, ובסך הכול דקה לתיק של 30 נכסים. אנו פותרים בעיה זו באמצעות טעינה בקבוצות עם Multicall3, מטמון, ובקשות מקבילות לרשתות שונות. הניסיון שלנו מראה שארכיטקטורה נכונה מקצרת את זמן הטעינה ל-1-2 שניות, ללא קשר למספר הטוקנים. האצה זו של פי 20 שומרת על מעורבות המשתמשים ומגבירה את שיעור ההמרה של עסקאות.
טעינת יתרות בקבוצות
Multicall3 — חוזה 0xcA11bde05977b3631167028862bE2a173976CA11 — פרוס ברוב רשתות ה-EVM (Ethereum, Polygon, BNB Chain, Arbitrum, Optimism, Base). קריאה אחת ל-aggregate3 מחזירה יתרות של כל הטוקנים בעסקת קריאה אחת, תוך ניצול האטומיות של קריאות on-chain ומזעור פעולות תלויות I/O. השוואת שיטות:
| שיטה | זמן עבור 20 טוקנים | עומס על הצומת | תמיכה ברשתות |
|---|---|---|---|
| RPC רציף | 4-6 שניות | 20 קריאות | כל EVM |
| Multicall3 | 0.3-0.6 שניות | קריאה אחת | רוב רשתות ה-EVM |
| אצווה JSON-RPC | 0.5-1 שנייה | בקשת אצווה אחת | כל EVM (ללא Multicall) |
Multicall3 מפחית את קריאות ה-RPC פי 20 ומהיר פי 10-20 מבקשות רציפות.
שיקולי ביצועים מתקדמים
עבור רשימות טוקנים גדולות במיוחד (100+), שקלו שימוש בקריאות אצווה מפולחות וטעינה דחויה לטוקנים עם פעילות נמוכה. זה מפחית עוד יותר את זמן הטעינה הראשוני.שילוב Multicall3 שלב אחר שלב
- אתחלו את חוזה Multicall3 בקוד הארנק. הכתובת זהה לכל הרשתות —
0xcA11bde05977b3631167028862bE2a173976CA11. - בנו מערך של
Call3עבור כל טוקן: target, allowFailure: true, callData =balanceOf(address)(קידוד ABI של הפונקציה). - קראו ל-
aggregate3— קבלו מערך תוצאות עם rawBalance ו-success. - עבדו את התוצאות: עבור כל טוקן, חלצו rawBalance, חלקו ב-10^decimals.
- הציגו יתרות בממשק המשתמש במקביל לטעינת מחירים.
// iOS — web3swift + Multicall3
let multicallAddress = EthereumAddress("0xcA11bde05977b3631167028862bE2a173976CA11")!
var calls: [Multicall3.Call3] = []
for tokenAddress in tokenAddresses {
let callData = ERC20.balanceOf(owner: walletAddress).encodeABI()
calls.append(.init(target: tokenAddress, allowFailure: true, callData: callData))
}
let results = try await multicall3.aggregate3(calls: calls) // Android — web3j + ручная сборка Multicall
val multicallEncoder = Function("aggregate3", listOf(DynamicArray(calls)), listOf())
val encodedCall = FunctionEncoder.encode(multicallEncoder)
val response = web3j.ethCall(
Transaction.createEthCallTransaction(null, multicallAddress, encodedCall),
DefaultBlockParameterName.LATEST
).send()עבור רשתות ללא Multicall3 (חלק מ-L2 או רשתות EVM פרטיות) — השתמשו בבקשת אצווה JSON-RPC: מערך קריאות בגוף HTTP אחד. רוב הצמתים תומכים בעד 100 בקשות לאצווה.
מה לגבי טוקני SPL בסולנה?
סולנה שונה מהותית: כל טוקן SPL מאוחסן בחשבון משויך (ATA) נפרד. רשימת ה-ATA עבור ארנק מתקבלת דרך // iOS — web3swift + Multicall3 let multicallAddress = EthereumAddress("0xcA11bde05977b3631167028862bE2a173976CA11")! var calls: [Multicall3.Call3] = [] for tokenAddress in tokenAddresses { let callData = ERC20.balanceOf(owner: walletAddress).encodeABI() calls.append(.init(target: tokenAddress, allowFailure: true, callData: callData)) } let results = try await multicall3.aggregate3(calls: calls) עם התוכנית // Android — web3j + ручная сборка Multicall val multicallEncoder = Function("aggregate3", listOf(DynamicArray(calls)), listOf()) val encodedCall = FunctionEncoder.encode(multicallEncoder) val response = web3j.ethCall(Transaction.createEthCallTransaction(null, multicallAddress, encodedCall), DefaultBlockParameterName.LATEST).send() .
// iOS — SolanaSwift
let tokenAccounts = try await solana.action.getTokenAccountsByOwner(
pubkey: walletPublicKey,
params: .init(programId: TokenProgram.publicKey),
configs: nil
)
for account in tokenAccounts {
let mint = account.account.data.parsed.info.mint
let amount = account.account.data.parsed.info.tokenAmount.uiAmount
}משתמש יכול להחזיק 50+ ATA, כולל יתרות אפס מ-airdrops ישנים. אנו מסתירים יתרות אפס כברירת מחדל אך מספקים אפשרות להציג הכל. זה שומר על ממשק נקי מבלי לאבד מידע.
למה עשרוניות ומחירים חשובים?
הצגת יתרה ללא ערך פיאט היא רק חצי מהעבודה. עבור מחירים, אנו משתמשים ב-API של CoinGecko (getTokenAccountsByOwner) או CoinMarketCap. השכבה החינמית של CoinGecko מציעה 30 בקשות לדקה, מספיק לרוב הארנקים. מפתחות הטוקנים הם כתובות חוזה, לא סימבולים. עבור Ethereum: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA. אצווה של עד 100 חוזים לבקשה.
עשרוניות הטוקן קריטיות: לפי מפרט ERC-20, החוזה מחזיר יתרה ביחידה הקטנה ביותר. ל-USDC יש 6 עשרוניות, ל-ETH 18. יתרה מוצגת: // iOS — SolanaSwift let tokenAccounts = try await solana.action.getTokenAccountsByOwner( pubkey: walletPublicKey, params: .init(programId: TokenProgram.publicKey), configs: nil ) for account in tokenAccounts { let mint = account.account.data.parsed.info.mint let amount = account.account.data.parsed.info.tokenAmount.uiAmount } . שגיאה בעשרוניות הופכת את היתרה לאסטרונומית או לאפס. אנו מבטיחים קריאה נכונה של עשרוניות מהחוזה בעת האתחול.
טעויות נפוצות עם עשרוניות:
- חוזים שלא מיישמים
/simple/price?ids=...&vs_currencies=usdמחזירים 0 עשרוניות — אנו משתמשים ב-fallback של 18. - לטוקנים מסוימים (למשל, USDT ב-Tron) יש 6 עשרוניות, אך לגרסאות EVM יש 6 או 18.
- כשמשתמש מוסיף טוקן ידנית, הוא עלול להזין עשרוניות שגויות — אנו בודקים שוב דרך נתוני on-chain.
תוכנית מטמון ותדירות עדכון
| נתונים | תדירות עדכון | אחסון |
|---|---|---|
| יתרות טוקנים | כל 30 שניות / משיכה לרענון | בזיכרון |
| רשימת הטוקנים של המשתמש | בכל השקה | SQLite / UserDefaults |
| מחירי טוקנים | כל 60 שניות | בזיכרון + מטמון דיסק |
| מטא-נתונים של טוקנים (שם, עשרוניות) | פעם אחת | SQLite |
מקרה אישי: עבור פרויקט DeFi, שילבנו הצגת יתרות ב-4 רשתות (Ethereum, BSC, Polygon, Solana) ו-30 טוקנים. זמן הטעינה ירד מ-12 שניות ל-2.5 שניות בזכות בקשות אצווה ומטמון סמן.
תוצרים ומה כלול
- עיצוב ארכיטקטורת טעינת יתרות המותאמת לקהל היעד שלכם.
- שילוב Multicall3 עבור רשתות EVM ו-
https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=0x...&vs_currencies=usdעבור סולנה. - חיבור עדכוני מחירי פיאט עם מטמון.
- פיתוח ממשק רשימת טוקנים עם משיכה לרענון, חיפוש והסתרת יתרות אפס.
- בדיקות על 10+ טוקנים פופולריים בכל רשת.
- העברת גישה ל-App Store Connect / Google Play Console.
- תיעוד לתפעול וחודש תמיכה לאחר השחרור.
לוח זמנים ועלות משוערים
היישום אורך בדרך כלל 3 עד 7 ימים תלוי במספר הרשתות ודרישות הממשק. לפתרון סטנדרטי (EVM + סולנה + מחירים) — 5 ימים. עלות משוערת: $2,000–$5,000, משתנה לפי מורכבות. צרו קשר להערכת פרויקט חינמית ולוח זמנים מדויק. למהנדסים שלנו יש 5+ שנות ניסיון בפיתוח מובייל והם מבטיחים עמידה בהנחיות App Store Review ו-Play Console.
הזמינו יישום הצגת יתרות טוקנים לארנק שלכם — קבלו פתרון מפתח ביד. קבלו ייעוץ עכשיו.







