@catalyst-team/poly-sdk 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +545 -812
  2. package/README.zh-CN.md +645 -342
  3. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
  4. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/integration/arbitrage-service.integration.test.js +267 -0
  6. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  7. package/dist/__tests__/integration/data-api.integration.test.js +6 -3
  8. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -1
  9. package/dist/__tests__/integration/market-service.integration.test.d.ts +10 -0
  10. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration/market-service.integration.test.js +173 -0
  12. package/dist/__tests__/integration/market-service.integration.test.js.map +1 -0
  13. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
  14. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
  16. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  17. package/dist/__tests__/integration/trading-service.integration.test.d.ts +10 -0
  18. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/integration/trading-service.integration.test.js +58 -0
  20. package/dist/__tests__/integration/trading-service.integration.test.js.map +1 -0
  21. package/dist/clients/clob-api.d.ts +73 -0
  22. package/dist/clients/clob-api.d.ts.map +1 -1
  23. package/dist/clients/clob-api.js +60 -0
  24. package/dist/clients/clob-api.js.map +1 -1
  25. package/dist/clients/data-api.d.ts +319 -14
  26. package/dist/clients/data-api.d.ts.map +1 -1
  27. package/dist/clients/data-api.js +342 -15
  28. package/dist/clients/data-api.js.map +1 -1
  29. package/dist/clients/subgraph.d.ts +196 -0
  30. package/dist/clients/subgraph.d.ts.map +1 -0
  31. package/dist/clients/subgraph.js +332 -0
  32. package/dist/clients/subgraph.js.map +1 -0
  33. package/dist/clients/websocket-manager.d.ts +3 -0
  34. package/dist/clients/websocket-manager.d.ts.map +1 -1
  35. package/dist/clients/websocket-manager.js +10 -3
  36. package/dist/clients/websocket-manager.js.map +1 -1
  37. package/dist/core/cache.d.ts +1 -0
  38. package/dist/core/cache.d.ts.map +1 -1
  39. package/dist/core/cache.js +1 -0
  40. package/dist/core/cache.js.map +1 -1
  41. package/dist/core/errors.d.ts +2 -1
  42. package/dist/core/errors.d.ts.map +1 -1
  43. package/dist/core/errors.js +2 -0
  44. package/dist/core/errors.js.map +1 -1
  45. package/dist/core/rate-limiter.d.ts +2 -1
  46. package/dist/core/rate-limiter.d.ts.map +1 -1
  47. package/dist/core/rate-limiter.js +5 -0
  48. package/dist/core/rate-limiter.js.map +1 -1
  49. package/dist/core/types.d.ts +100 -12
  50. package/dist/core/types.d.ts.map +1 -1
  51. package/dist/core/types.js.map +1 -1
  52. package/dist/core/types.test.d.ts +7 -0
  53. package/dist/core/types.test.d.ts.map +1 -0
  54. package/dist/core/types.test.js +122 -0
  55. package/dist/core/types.test.js.map +1 -0
  56. package/dist/index.d.ts +76 -18
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +125 -132
  59. package/dist/index.js.map +1 -1
  60. package/dist/services/arbitrage-service.d.ts +3 -2
  61. package/dist/services/arbitrage-service.d.ts.map +1 -1
  62. package/dist/services/arbitrage-service.js +58 -40
  63. package/dist/services/arbitrage-service.js.map +1 -1
  64. package/dist/services/market-service.d.ts +108 -8
  65. package/dist/services/market-service.d.ts.map +1 -1
  66. package/dist/services/market-service.js +352 -36
  67. package/dist/services/market-service.js.map +1 -1
  68. package/dist/services/onchain-service.d.ts +309 -0
  69. package/dist/services/onchain-service.d.ts.map +1 -0
  70. package/dist/services/onchain-service.js +417 -0
  71. package/dist/services/onchain-service.js.map +1 -0
  72. package/dist/services/realtime-service-v2.d.ts +361 -0
  73. package/dist/services/realtime-service-v2.d.ts.map +1 -0
  74. package/dist/services/realtime-service-v2.js +840 -0
  75. package/dist/services/realtime-service-v2.js.map +1 -0
  76. package/dist/services/realtime-service.d.ts +17 -17
  77. package/dist/services/realtime-service.d.ts.map +1 -1
  78. package/dist/services/realtime-service.js +91 -59
  79. package/dist/services/realtime-service.js.map +1 -1
  80. package/dist/services/smart-money-service.d.ts +196 -0
  81. package/dist/services/smart-money-service.d.ts.map +1 -0
  82. package/dist/services/smart-money-service.js +358 -0
  83. package/dist/services/smart-money-service.js.map +1 -0
  84. package/dist/services/trading-service.d.ts +156 -0
  85. package/dist/services/trading-service.d.ts.map +1 -0
  86. package/dist/services/trading-service.js +356 -0
  87. package/dist/services/trading-service.js.map +1 -0
  88. package/dist/services/wallet-service.d.ts +183 -2
  89. package/dist/services/wallet-service.d.ts.map +1 -1
  90. package/dist/services/wallet-service.js +458 -1
  91. package/dist/services/wallet-service.js.map +1 -1
  92. package/dist/utils/price-utils.test.d.ts +5 -0
  93. package/dist/utils/price-utils.test.d.ts.map +1 -0
  94. package/dist/utils/price-utils.test.js +192 -0
  95. package/dist/utils/price-utils.test.js.map +1 -0
  96. package/package.json +4 -3
  97. package/README.en.md +0 -502
@@ -6,14 +6,46 @@
6
6
  * - Position tracking
7
7
  * - Activity monitoring
8
8
  * - Sell detection for follow wallet strategy
9
+ * - Time-based leaderboard and wallet stats
9
10
  */
11
+ import { CACHE_TTL } from '../core/unified-cache.js';
12
+ /**
13
+ * Collateral Asset ID (USDC)
14
+ * In Polymarket orderbook, "0" represents the collateral token (USDC)
15
+ */
16
+ const COLLATERAL_ASSET_ID = '0';
17
+ /**
18
+ * Check if an asset ID is collateral (USDC) or outcome token
19
+ */
20
+ function isCollateralAsset(assetId) {
21
+ return assetId === COLLATERAL_ASSET_ID;
22
+ }
10
23
  export class WalletService {
11
24
  dataApi;
25
+ subgraph;
12
26
  cache;
13
- constructor(dataApi, cache) {
27
+ constructor(dataApi, subgraph, cache) {
14
28
  this.dataApi = dataApi;
29
+ this.subgraph = subgraph;
15
30
  this.cache = cache;
16
31
  }
32
+ // ===== Time Period Helpers =====
33
+ /**
34
+ * Get start timestamp for a time period
35
+ */
36
+ getPeriodStartTime(period) {
37
+ const now = Math.floor(Date.now() / 1000);
38
+ switch (period) {
39
+ case 'day':
40
+ return now - 24 * 60 * 60;
41
+ case 'week':
42
+ return now - 7 * 24 * 60 * 60;
43
+ case 'month':
44
+ return now - 30 * 24 * 60 * 60;
45
+ case 'all':
46
+ return 0;
47
+ }
48
+ }
17
49
  // ===== Wallet Analysis =====
18
50
  /**
19
51
  * Get comprehensive wallet profile with PnL analysis
@@ -88,6 +120,431 @@ export class WalletService {
88
120
  const leaderboard = await this.dataApi.getLeaderboard({ limit });
89
121
  return leaderboard.entries;
90
122
  }
123
+ // ===== Time-Based Leaderboard =====
124
+ /**
125
+ * Get leaderboard by time period using official Polymarket API
126
+ *
127
+ * Uses the official Data API which supports time period filtering.
128
+ * This is the recommended method as it uses server-side calculations.
129
+ *
130
+ * @param period - Time period: 'day', 'week', 'month', or 'all'
131
+ * @param limit - Maximum entries to return (default: 50, max: 50)
132
+ * @param sortBy - Sort criteria: 'volume' or 'pnl' (default: 'pnl')
133
+ * @param category - Market category filter (default: 'OVERALL')
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * // Get top traders of the week by PnL
138
+ * const weeklyByPnl = await walletService.getLeaderboardByPeriod('week', 20, 'pnl');
139
+ *
140
+ * // Get top traders by volume
141
+ * const weeklyByVolume = await walletService.getLeaderboardByPeriod('week', 20, 'volume');
142
+ *
143
+ * // Get politics category leaderboard
144
+ * const politics = await walletService.getLeaderboardByPeriod('week', 20, 'pnl', 'POLITICS');
145
+ * ```
146
+ */
147
+ async getLeaderboardByPeriod(period, limit = 50, sortBy = 'pnl', category = 'OVERALL') {
148
+ // Map lowercase period to API's uppercase format
149
+ const timePeriodMap = {
150
+ day: 'DAY',
151
+ week: 'WEEK',
152
+ month: 'MONTH',
153
+ all: 'ALL',
154
+ };
155
+ // Map sortBy to API's orderBy format
156
+ const orderByMap = {
157
+ volume: 'VOL',
158
+ pnl: 'PNL',
159
+ };
160
+ const timePeriod = timePeriodMap[period];
161
+ const orderBy = orderByMap[sortBy];
162
+ // Use official API
163
+ const result = await this.dataApi.getLeaderboard({
164
+ timePeriod,
165
+ orderBy,
166
+ category,
167
+ limit,
168
+ });
169
+ // Map to PeriodLeaderboardEntry format
170
+ return result.entries.map((entry, index) => ({
171
+ address: entry.address,
172
+ rank: entry.rank || index + 1,
173
+ volume: entry.volume,
174
+ pnl: entry.pnl,
175
+ // API provides combined PnL, set as total
176
+ totalPnl: entry.pnl,
177
+ realizedPnl: entry.pnl, // API doesn't separate realized/unrealized
178
+ unrealizedPnl: 0,
179
+ // API doesn't provide these breakdowns
180
+ tradeCount: entry.trades || 0,
181
+ buyCount: 0,
182
+ sellCount: 0,
183
+ buyVolume: 0,
184
+ sellVolume: 0,
185
+ makerVolume: 0,
186
+ takerVolume: 0,
187
+ // User profile
188
+ userName: entry.userName,
189
+ profileImage: entry.profileImage,
190
+ }));
191
+ }
192
+ /**
193
+ * Get a specific user's PnL and ranking for a time period
194
+ *
195
+ * Uses the official Data API's user filter to get a single user's stats.
196
+ *
197
+ * @param address - User's wallet address
198
+ * @param period - Time period: 'day', 'week', 'month', or 'all'
199
+ * @param category - Market category filter (default: 'OVERALL')
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * // Get user's weekly PnL
204
+ * const stats = await walletService.getUserPeriodPnl(address, 'week');
205
+ * console.log(`Rank: #${stats.rank}, PnL: $${stats.pnl}`);
206
+ *
207
+ * // Get user's monthly PnL in politics category
208
+ * const politicsStats = await walletService.getUserPeriodPnl(address, 'month', 'POLITICS');
209
+ * ```
210
+ */
211
+ async getUserPeriodPnl(address, period, category = 'OVERALL') {
212
+ // Map lowercase period to API's uppercase format
213
+ const timePeriodMap = {
214
+ day: 'DAY',
215
+ week: 'WEEK',
216
+ month: 'MONTH',
217
+ all: 'ALL',
218
+ };
219
+ const timePeriod = timePeriodMap[period];
220
+ // Use official API with user filter
221
+ const result = await this.dataApi.getLeaderboard({
222
+ timePeriod,
223
+ orderBy: 'PNL',
224
+ category,
225
+ user: address,
226
+ limit: 1,
227
+ });
228
+ if (result.entries.length === 0) {
229
+ return null;
230
+ }
231
+ const entry = result.entries[0];
232
+ return {
233
+ address: entry.address,
234
+ rank: entry.rank || 0,
235
+ volume: entry.volume,
236
+ pnl: entry.pnl,
237
+ totalPnl: entry.pnl,
238
+ realizedPnl: entry.pnl,
239
+ unrealizedPnl: 0,
240
+ tradeCount: entry.trades || 0,
241
+ buyCount: 0,
242
+ sellCount: 0,
243
+ buyVolume: 0,
244
+ sellVolume: 0,
245
+ makerVolume: 0,
246
+ takerVolume: 0,
247
+ userName: entry.userName,
248
+ profileImage: entry.profileImage,
249
+ };
250
+ }
251
+ /**
252
+ * Get wallet stats for a specific time period
253
+ *
254
+ * Combines data from Orderbook Subgraph (trades) and Activity Subgraph (splits/merges/redemptions)
255
+ *
256
+ * @param address - Wallet address
257
+ * @param period - Time period: 'day', 'week', 'month', or 'all'
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * // Get wallet's monthly stats
262
+ * const stats = await walletService.getWalletStatsByPeriod(address, 'month');
263
+ * console.log(`Monthly volume: $${stats.volume}`);
264
+ * ```
265
+ */
266
+ async getWalletStatsByPeriod(address, period) {
267
+ const startTime = this.getPeriodStartTime(period);
268
+ const endTime = Math.floor(Date.now() / 1000);
269
+ const cacheKey = `wallet:stats:${address}:${period}`;
270
+ return this.cache.getOrSet(cacheKey, CACHE_TTL.ACTIVITY, async () => {
271
+ // Fetch data in parallel
272
+ const [makerFills, takerFills, splits, merges, redemptions] = await Promise.all([
273
+ this.subgraph.getMakerFills(address, {
274
+ first: 1000,
275
+ where: { timestamp_gte: String(startTime) },
276
+ }),
277
+ this.subgraph.getTakerFills(address, {
278
+ first: 1000,
279
+ where: { timestamp_gte: String(startTime) },
280
+ }),
281
+ this.subgraph.getSplits(address, {
282
+ first: 500,
283
+ where: { timestamp_gte: String(startTime) },
284
+ }),
285
+ this.subgraph.getMerges(address, {
286
+ first: 500,
287
+ where: { timestamp_gte: String(startTime) },
288
+ }),
289
+ this.subgraph.getRedemptions(address, {
290
+ first: 500,
291
+ where: { timestamp_gte: String(startTime) },
292
+ }),
293
+ ]);
294
+ // Calculate volumes (amounts are in micro-units, divide by 1e6 for USDC)
295
+ const makerVolume = makerFills.reduce((sum, f) => sum + Number(f.makerAmountFilled) / 1e6, 0);
296
+ const takerVolume = takerFills.reduce((sum, f) => sum + Number(f.takerAmountFilled) / 1e6, 0);
297
+ const redemptionPayout = redemptions.reduce((sum, r) => sum + Number(r.payout) / 1e6, 0);
298
+ return {
299
+ address,
300
+ period,
301
+ startTime,
302
+ endTime,
303
+ volume: makerVolume + takerVolume,
304
+ tradeCount: makerFills.length + takerFills.length,
305
+ makerVolume,
306
+ takerVolume,
307
+ makerCount: makerFills.length,
308
+ takerCount: takerFills.length,
309
+ splitCount: splits.length,
310
+ mergeCount: merges.length,
311
+ redemptionCount: redemptions.length,
312
+ redemptionPayout,
313
+ };
314
+ });
315
+ }
316
+ /**
317
+ * Fetch all order filled events in a time period with pagination
318
+ */
319
+ async fetchAllFillsInPeriod(startTime, maxItems = 5000) {
320
+ const allFills = [];
321
+ let skip = 0;
322
+ const first = 1000;
323
+ while (allFills.length < maxItems) {
324
+ const fills = await this.subgraph.getOrderFilledEvents({
325
+ first,
326
+ skip,
327
+ where: startTime > 0 ? { timestamp_gte: String(startTime) } : undefined,
328
+ orderBy: 'timestamp',
329
+ orderDirection: 'desc',
330
+ });
331
+ if (fills.length === 0)
332
+ break;
333
+ allFills.push(...fills);
334
+ skip += first;
335
+ // Break if we got less than requested (no more data)
336
+ if (fills.length < first)
337
+ break;
338
+ }
339
+ return allFills.slice(0, maxItems);
340
+ }
341
+ /**
342
+ * Parse OrderFilledEvent into user trades
343
+ *
344
+ * OrderFilledEvent 结构:
345
+ * - makerAssetId = "0" (USDC): Maker 卖 USDC = BUY outcome token
346
+ * - makerAssetId = 长数字: Maker 卖 outcome token = SELL
347
+ */
348
+ parseOrderFilledEvent(fill) {
349
+ const timestamp = Number(fill.timestamp);
350
+ const makerSellsCollateral = isCollateralAsset(fill.makerAssetId);
351
+ if (makerSellsCollateral) {
352
+ // Maker: 卖 USDC, 买 Outcome Token = BUY
353
+ // Taker: 卖 Outcome Token, 买 USDC = SELL
354
+ const usdcAmount = Number(fill.makerAmountFilled) / 1e6;
355
+ const tokenAmount = Number(fill.takerAmountFilled) / 1e6;
356
+ const price = tokenAmount > 0 ? usdcAmount / tokenAmount : 0;
357
+ const tokenId = fill.takerAssetId;
358
+ return [
359
+ {
360
+ timestamp,
361
+ user: fill.maker.toLowerCase(),
362
+ role: 'maker',
363
+ side: 'BUY',
364
+ tokenId,
365
+ tokenAmount,
366
+ usdcAmount,
367
+ price,
368
+ },
369
+ {
370
+ timestamp,
371
+ user: fill.taker.toLowerCase(),
372
+ role: 'taker',
373
+ side: 'SELL',
374
+ tokenId,
375
+ tokenAmount,
376
+ usdcAmount,
377
+ price,
378
+ },
379
+ ];
380
+ }
381
+ else {
382
+ // Maker: 卖 Outcome Token, 买 USDC = SELL
383
+ // Taker: 卖 USDC, 买 Outcome Token = BUY
384
+ const tokenAmount = Number(fill.makerAmountFilled) / 1e6;
385
+ const usdcAmount = Number(fill.takerAmountFilled) / 1e6;
386
+ const price = tokenAmount > 0 ? usdcAmount / tokenAmount : 0;
387
+ const tokenId = fill.makerAssetId;
388
+ return [
389
+ {
390
+ timestamp,
391
+ user: fill.maker.toLowerCase(),
392
+ role: 'maker',
393
+ side: 'SELL',
394
+ tokenId,
395
+ tokenAmount,
396
+ usdcAmount,
397
+ price,
398
+ },
399
+ {
400
+ timestamp,
401
+ user: fill.taker.toLowerCase(),
402
+ role: 'taker',
403
+ side: 'BUY',
404
+ tokenId,
405
+ tokenAmount,
406
+ usdcAmount,
407
+ price,
408
+ },
409
+ ];
410
+ }
411
+ }
412
+ /**
413
+ * Update position with a trade and calculate realized PnL
414
+ *
415
+ * 买入: 增加持仓,更新平均成本
416
+ * 卖出: 减少持仓,计算已实现盈亏 = 卖出收入 - 成本基础
417
+ */
418
+ updatePositionWithTrade(position, trade) {
419
+ if (trade.side === 'BUY') {
420
+ // 买入:增加持仓,更新平均成本
421
+ const newAmount = position.amount + trade.tokenAmount;
422
+ const newTotalCost = position.totalCost + trade.usdcAmount;
423
+ const newAvgCost = newAmount > 0 ? newTotalCost / newAmount : 0;
424
+ return {
425
+ ...position,
426
+ amount: newAmount,
427
+ totalCost: newTotalCost,
428
+ avgCost: newAvgCost,
429
+ };
430
+ }
431
+ else {
432
+ // 卖出:减少持仓,计算已实现盈亏
433
+ const sellAmount = Math.min(trade.tokenAmount, position.amount);
434
+ const costBasis = sellAmount * position.avgCost;
435
+ const revenue = (sellAmount / trade.tokenAmount) * trade.usdcAmount;
436
+ const realizedPnl = revenue - costBasis;
437
+ const newAmount = position.amount - sellAmount;
438
+ const newTotalCost = newAmount > 0 ? newAmount * position.avgCost : 0;
439
+ return {
440
+ ...position,
441
+ amount: newAmount,
442
+ totalCost: newTotalCost,
443
+ realizedPnl: position.realizedPnl + realizedPnl,
444
+ };
445
+ }
446
+ }
447
+ /**
448
+ * Calculate unrealized PnL for a position
449
+ *
450
+ * 未实现盈亏 = 当前市值 - 总成本
451
+ * 假设当前价格约等于最后交易价格 (简化处理)
452
+ */
453
+ calculateUnrealizedPnl(position, lastPrice) {
454
+ if (position.amount <= 0)
455
+ return 0;
456
+ const currentValue = position.amount * lastPrice;
457
+ return currentValue - position.totalCost;
458
+ }
459
+ /**
460
+ * Aggregate user statistics with PnL calculation from order filled events
461
+ *
462
+ * 核心计算流程:
463
+ * 1. 解析 OrderFilledEvent 为标准化的 ParsedTrade
464
+ * 2. 按时间顺序处理每笔交易
465
+ * 3. 追踪每个用户每个 token 的持仓和平均成本
466
+ * 4. 卖出时计算已实现盈亏
467
+ * 5. 期末计算未实现盈亏
468
+ */
469
+ aggregateUserStatsWithPnl(fills) {
470
+ const userStats = new Map();
471
+ const lastPrices = new Map(); // 记录每个 token 的最后交易价格
472
+ // 初始化用户统计
473
+ const getOrCreateUserStats = (address) => {
474
+ let stats = userStats.get(address);
475
+ if (!stats) {
476
+ stats = {
477
+ address,
478
+ volume: 0,
479
+ tradeCount: 0,
480
+ buyCount: 0,
481
+ sellCount: 0,
482
+ buyVolume: 0,
483
+ sellVolume: 0,
484
+ realizedPnl: 0,
485
+ unrealizedPnl: 0,
486
+ positions: new Map(),
487
+ };
488
+ userStats.set(address, stats);
489
+ }
490
+ return stats;
491
+ };
492
+ // 解析所有交易
493
+ const allTrades = [];
494
+ for (const fill of fills) {
495
+ const trades = this.parseOrderFilledEvent(fill);
496
+ allTrades.push(...trades);
497
+ }
498
+ // 按时间排序 (升序,确保正确计算成本基础)
499
+ allTrades.sort((a, b) => a.timestamp - b.timestamp);
500
+ // 处理每笔交易
501
+ for (const trade of allTrades) {
502
+ const stats = getOrCreateUserStats(trade.user);
503
+ // 更新交易统计
504
+ stats.volume += trade.usdcAmount;
505
+ stats.tradeCount += 1;
506
+ if (trade.side === 'BUY') {
507
+ stats.buyCount += 1;
508
+ stats.buyVolume += trade.usdcAmount;
509
+ }
510
+ else {
511
+ stats.sellCount += 1;
512
+ stats.sellVolume += trade.usdcAmount;
513
+ }
514
+ // 更新持仓和计算已实现 PnL
515
+ let position = stats.positions.get(trade.tokenId);
516
+ if (!position) {
517
+ position = {
518
+ tokenId: trade.tokenId,
519
+ amount: 0,
520
+ avgCost: 0,
521
+ totalCost: 0,
522
+ realizedPnl: 0,
523
+ };
524
+ }
525
+ const oldRealizedPnl = position.realizedPnl;
526
+ position = this.updatePositionWithTrade(position, trade);
527
+ stats.positions.set(trade.tokenId, position);
528
+ // 累加已实现 PnL
529
+ stats.realizedPnl += position.realizedPnl - oldRealizedPnl;
530
+ // 记录最后价格
531
+ if (trade.price > 0) {
532
+ lastPrices.set(trade.tokenId, trade.price);
533
+ }
534
+ }
535
+ // 计算每个用户的未实现 PnL
536
+ for (const [, stats] of userStats) {
537
+ let totalUnrealizedPnl = 0;
538
+ for (const [tokenId, position] of stats.positions) {
539
+ if (position.amount > 0) {
540
+ const lastPrice = lastPrices.get(tokenId) || position.avgCost;
541
+ totalUnrealizedPnl += this.calculateUnrealizedPnl(position, lastPrice);
542
+ }
543
+ }
544
+ stats.unrealizedPnl = totalUnrealizedPnl;
545
+ }
546
+ return userStats;
547
+ }
91
548
  /**
92
549
  * Discover active wallets from recent trades
93
550
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-service.js","sourceRoot":"","sources":["../../src/services/wallet-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet-service.js","sourceRoot":"","sources":["../../src/services/wallet-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Price Utilities Unit Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=price-utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-utils.test.d.ts","sourceRoot":"","sources":["../../src/utils/price-utils.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}