פיתוח מעקב תיק קריפטו

איגוד יתרות תיק קריפטו היא אחת המשימות המאתגרות ביותר בפיתוח Web3. משתמש עשוי להחזיק נכסים בעשרות רשתות (Ethereum, Polygon, Arbitrum, Solana), במאות טוקנים, בפרוטוקולי DeFi כמו Uniswap V3 עם מתמטיקת עמדות ייחודית, ובבורסה מרכזית

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1003
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1269
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    719
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1009

איגום יתרות פורטפוליו של מטבעות קריפטו הוא אחת המשימות המאתגרות ביותר בפיתוח Web3. משתמש עשוי להחזיק נכסים בעשרות רשתות (Ethereum, Polygon, Arbitrum, Solana), במאות טוקנים, בפרוטוקולי DeFi כמו Uniswap V3 עם מתמטיקת פוזיציות ייחודית, ובבורסות מרכזיות. כל מקור דורש גישה משלו לאחזור נתונים. אם לא מתכננים את הארכיטקטורה מההתחלה, המערכת תפגר, תמצה את מגבלות ה-RPC, ותפיק PnL שגוי. צברנו ניסיון על 30+ פרויקטים כאלה ואנחנו יודעים כיצד להימנע מהמלכודות. Multicall3 הוא אחד הכלים המרכזיים המאפשר איגום נתונים מרשתות EVM עם תקורה מינימלית.

החלטות ארכיטקטוניות מרכזיות

כיצד לאגד יתרות מרשתות שונות?

יתרות On-chain

רשתות EVM: יתרה מקומית דרך eth_getBalance, יתרות ERC-20 מורכבות יותר — קריאת RPC אחת מחזירה את היתרה של טוקן אחד בכתובת אחת. עם 50 טוקנים × 5 רשתות = 250 קריאות. הפתרון הוא Multicall3 (פרוס על כל רשתות ה-EVM בכתובת 0xcA11bde05977b3631167028862bE2a173976CA11). קריאת RPC אחת במקום 50 — זה פי 50 מהר יותר ומפחית עלויות תשתית בעד 90%. Multicall3 הוא חוזה מנוסה בשימוש באלפי פרויקטים. תיעוד Multicall3 ממליץ על בקשות אצווה להפחתת עומס.

import { createPublicClient, http, parseAbi } from "viem"; import { mainnet } from "viem/chains"; const client = createPublicClient({ chain: mainnet, transport: http() }); const MULTICALL3 = "0xcA11bde05977b3631167028862bE2a173976CA11"; const ERC20_ABI = parseAbi(["function balanceOf(address) view returns (uint256)"]); async function getTokenBalances( walletAddress: `0x${string}`, tokenAddresses: `0x${string}`[] ) { const calls = tokenAddresses.map((tokenAddress) => ({ address: tokenAddress, abi: ERC20_ABI, functionName: "balanceOf" as const, args: [walletAddress], })); return client.multicall({ contracts: calls }); } 

חלופה: Alchemy/Moralis Token API — בקשה אחת מחזירה את כל יתרות ה-ERC-20 עם מטא数据和 מחיר בדולרים. בתשלום, אבל חוסך זמן פיתוח. עבור Solana אנו משתמשים ב-import { createPublicClient, http, parseAbi } from "viem"; import { mainnet } from "viem/chains"; const client = createPublicClient({ chain: mainnet, transport: http() }); const MULTICALL3 = "0xcA11bde05977b3631167028862bE2a173976CA11"; const ERC20_ABI = parseAbi(["function balanceOf(address) view returns (uint256)"]); async function getTokenBalances( walletAddress: `0x${string}`, tokenAddresses: `0x${string}`[] ) { const calls = tokenAddresses.map((tokenAddress) => ({ address: tokenAddress, abi: ERC20_ABI, functionName: "balanceOf" as const, args: [walletAddress], })); return client.multicall({ contracts: calls }); } או Anchor לקריאת חשבונות.

פוזיציות DeFi

זה החלק המורכב ביותר בטראקר. פוזיציית נזילות ב-Uniswap V3, בטחון ב-Aave, טוקנים מוחזקים ב-Curve — כל פרוטוקול מאחסן נתונים אחרת. השוו בין גישות:

גישה מהירות מורכבות עלות
קריאות חוזה ישירות גבוהה (תלוי במספר הבקשות) גבוהה (נדרשת מתמטיקת ticks) חינם (רק גז)
The Graph subgraphs בינונית (שאילתות GraphQL) בינונית (לימוד הסכמה) חינם (אירוח)
אגרגטורים (DeBank, Zapper) גבוהה (נתונים במטמון) נמוכה (API יחיד) בתשלום (מנוי)

עבור רוב הפרויקטים, אנו ממליצים על שילוב: קריאות ישירות לפרוטוקולים מרכזיים + אגרגטורים לזנב הארוך. לדוגמה, עבור Uniswap V3 אנו משתמשים בחוזי getMultipleAccounts ו-positions, ועבור Curve ב-tick. שגיאת חישוב PnL יכולה להתרחש עקב דה-סנכרון בין מחיר לבלוק — אנו פותרים זאת על ידי קשירת תמונות מצב למספרי בלוקים.

יתרות CEX

APIs של בורסות מחזירות יתרות באופן מיידי אך דורשות מפתח API לקריאה בלבד מהמשתמש. אנו משתמשים ב-CCXT — ספרייה עם ממשק אחיד ל-100+ בורסות.

import ccxt from "ccxt"; async function getBinanceBalances(apiKey: string, secret: string) { const exchange = new ccxt.binance({ apiKey, secret, sandbox: false }); const balance = await exchange.fetchBalance(); return balance.total; // { BTC: 0.5, ETH: 2.3, USDT: 1000 } } 

CCXT היא ספריית קוד פתוח פופולרית התומכת ב-100+ בורסות.

מדוע אסטרטגיית עדכון נתונים חשובה

יש לעדכן נתונים, אבל לא להכות ב-RPC כל שנייה. אסטרטגיה:

סוג נתונים תדירות עדכון סיבה
יתרות On-chain כל 30–60 שניות בלוק חדש
יתרות CEX כל 30 שניות מגבלות API
פוזיציות DeFi כל 2–5 דקות משתנות לאט
מחירי טוקנים כל 10–30 שניות קריטי ל-P&L
PnL היסטורי משימת רקע, 1/שעה חישוב כבד

משימות רקע דרך Redis + BullMQ עם תורים נפרדים. תוצאות נשמרות במטמון ב-Redis, והפרונטאנד קורא מהמטמון. לזמן אמת, השתמשו ב-Server-Sent Events או WebSocket עם עדכוני push.

אחסון נתונים היסטוריים

למעקב P&L, יש צורך בתמונות מצב של הפורטפוליו לאורך זמן. TimescaleDB (הרחבת PostgreSQL) הוא אידיאלי:

CREATE TABLE portfolio_snapshots ( user_id UUID, snapshot_at TIMESTAMPTZ NOT NULL, total_usd NUMERIC(20, 2), breakdown JSONB ); SELECT create_hypertable('portfolio_snapshots', 'snapshot_at'); 

שאילתת P&L על פני תקופה:

SELECT time_bucket('1 day', snapshot_at) AS day, last(total_usd, snapshot_at) AS end_of_day_value FROM portfolio_snapshots WHERE user_id = $1 AND snapshot_at > NOW() - INTERVAL '30 days' GROUP BY day ORDER BY day; 

כיצד להגדיר Multicall3 בפרויקט שלך

  1. התקן את viem: get_balances.
  2. ייבא את createPublicClient ותצורת רשת.
  3. קרא ל-import ccxt from "ccxt"; async function getBinanceBalances(apiKey: string, secret: string) { const exchange = new ccxt.binance({ apiKey, secret, sandbox: false }); const balance = await exchange.fetchBalance(); return balance.total; // { BTC: 0.5, ETH: 2.3, USDT: 1000 } } עם מערך של חוזים ופונקציות.
  4. עבד את התוצאה — היא מחזירה מערך של אובייקטים עם שדות result ו-error.

גישה סטנדרטית זו, המתוארת בתיעוד OpenZeppelin, ממליצה להשתמש ב-Multicall3 לבקשות אצווה להפחתת עומס RPC.

מה כלול בעבודה

אנו מספקים סט מלא של תיעוד, קוד מקור עם הערות, הוראות פריסה, גישה למאגר Git, וחודש תמיכה לאחר ההשקה. במידת הצורך, אנו מאמנים את הצוות שלך על השימוש במערכת.

הערכות לוחות זמנים

טראקר פורטפוליו MVP יכול להיות מוכן תוך שבועיים בלבד. פתרונות מלאים עם רשתות מרובות, אינטגרציות DeFi ו-P&L היסטורי אורכים בדרך כלל 4–8 שבועות בהתאם למורכבות. לוח הזמנים המדויק נקבע לאחר ביקורת טכנית ראשונית.

טעויות נפוצות שיש להימנע מהן

  • שימוש בקריאות RPC בודדות לכל טוקן במקום אצווה עם Multicall3.
  • התעלמות מחותמות זמן ברמת הבלוק בעת חישוב PnL, הגורמת לאי-התאמות מחירים.
  • אי-שמירת תגובות API במטמון כראוי, מה שמוביל לבעיות מגבלת קצב.
  • שכחת טיפול במקרי קצה כמו טוקנים עם יתרת אפס או קריאות חוזה שנכשלו.

נתקלנו בכל המלכודות הללו בפרויקטים שלנו ואנחנו יודעים כיצד לבנות מערכות חזקות מההתחלה.

דונו בדרישות שלכם עם המהנדסים שלנו — נבחן את הפרויקט ביום אחד ונציע את הפתרון האופטימלי. הזמינו טראקר פורטפוליו סוהר עם אחריות איכות ומסירה בזמן. צרו קשר כדי להתחיל.