@catalyst-team/poly-sdk 0.2.0 → 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.
- package/LICENSE +1 -1
- package/README.md +548 -813
- package/README.zh-CN.md +805 -0
- package/dist/__tests__/clob-api.test.d.ts +5 -0
- package/dist/__tests__/clob-api.test.d.ts.map +1 -0
- package/dist/__tests__/clob-api.test.js +240 -0
- package/dist/__tests__/clob-api.test.js.map +1 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.js +267 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
- package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.js +164 -0
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/market-service.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/market-service.integration.test.js +173 -0
- package/dist/__tests__/integration/market-service.integration.test.js.map +1 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
- package/dist/__tests__/integration/trading-service.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/trading-service.integration.test.js +58 -0
- package/dist/__tests__/integration/trading-service.integration.test.js.map +1 -0
- package/dist/__tests__/test-utils.d.ts +92 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +143 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/clients/bridge-client.d.ts +388 -0
- package/dist/clients/bridge-client.d.ts.map +1 -0
- package/dist/clients/bridge-client.js +587 -0
- package/dist/clients/bridge-client.js.map +1 -0
- package/dist/clients/clob-api.d.ts +391 -0
- package/dist/clients/clob-api.d.ts.map +1 -0
- package/dist/clients/clob-api.js +448 -0
- package/dist/clients/clob-api.js.map +1 -0
- package/dist/clients/ctf-client.d.ts +473 -0
- package/dist/clients/ctf-client.d.ts.map +1 -0
- package/dist/clients/ctf-client.js +915 -0
- package/dist/clients/ctf-client.js.map +1 -0
- package/dist/clients/data-api.d.ts +439 -0
- package/dist/clients/data-api.d.ts.map +1 -0
- package/dist/clients/data-api.js +592 -0
- package/dist/clients/data-api.js.map +1 -0
- package/dist/clients/gamma-api.d.ts +401 -0
- package/dist/clients/gamma-api.d.ts.map +1 -0
- package/dist/clients/gamma-api.js +352 -0
- package/dist/clients/gamma-api.js.map +1 -0
- package/dist/clients/subgraph.d.ts +196 -0
- package/dist/clients/subgraph.d.ts.map +1 -0
- package/dist/clients/subgraph.js +332 -0
- package/dist/clients/subgraph.js.map +1 -0
- package/dist/clients/trading-client.d.ts +252 -0
- package/dist/clients/trading-client.d.ts.map +1 -0
- package/dist/clients/trading-client.js +543 -0
- package/dist/clients/trading-client.js.map +1 -0
- package/dist/clients/websocket-manager.d.ts +103 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -0
- package/dist/clients/websocket-manager.js +200 -0
- package/dist/clients/websocket-manager.js.map +1 -0
- package/dist/core/cache-adapter-bridge.d.ts +36 -0
- package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
- package/dist/core/cache-adapter-bridge.js +81 -0
- package/dist/core/cache-adapter-bridge.js.map +1 -0
- package/dist/core/cache.d.ts +41 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +72 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +39 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +86 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +32 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +75 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/types.d.ts +402 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +19 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/types.test.d.ts +7 -0
- package/dist/core/types.test.d.ts.map +1 -0
- package/dist/core/types.test.js +122 -0
- package/dist/core/types.test.js.map +1 -0
- package/dist/core/unified-cache.d.ts +63 -0
- package/dist/core/unified-cache.d.ts.map +1 -0
- package/dist/core/unified-cache.js +114 -0
- package/dist/core/unified-cache.js.map +1 -0
- package/dist/index.d.ts +151 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +248 -0
- package/dist/index.js.map +1 -0
- package/dist/services/arbitrage-service.d.ts +409 -0
- package/dist/services/arbitrage-service.d.ts.map +1 -0
- package/dist/services/arbitrage-service.js +1440 -0
- package/dist/services/arbitrage-service.js.map +1 -0
- package/dist/services/authorization-service.d.ts +97 -0
- package/dist/services/authorization-service.d.ts.map +1 -0
- package/dist/services/authorization-service.js +279 -0
- package/dist/services/authorization-service.js.map +1 -0
- package/dist/services/market-service.d.ts +208 -0
- package/dist/services/market-service.d.ts.map +1 -0
- package/dist/services/market-service.js +774 -0
- package/dist/services/market-service.js.map +1 -0
- package/dist/services/onchain-service.d.ts +309 -0
- package/dist/services/onchain-service.d.ts.map +1 -0
- package/dist/services/onchain-service.js +417 -0
- package/dist/services/onchain-service.js.map +1 -0
- package/dist/services/realtime-service-v2.d.ts +361 -0
- package/dist/services/realtime-service-v2.d.ts.map +1 -0
- package/dist/services/realtime-service-v2.js +840 -0
- package/dist/services/realtime-service-v2.js.map +1 -0
- package/dist/services/realtime-service.d.ts +82 -0
- package/dist/services/realtime-service.d.ts.map +1 -0
- package/dist/services/realtime-service.js +182 -0
- package/dist/services/realtime-service.js.map +1 -0
- package/dist/services/smart-money-service.d.ts +196 -0
- package/dist/services/smart-money-service.d.ts.map +1 -0
- package/dist/services/smart-money-service.js +358 -0
- package/dist/services/smart-money-service.js.map +1 -0
- package/dist/services/swap-service.d.ts +217 -0
- package/dist/services/swap-service.d.ts.map +1 -0
- package/dist/services/swap-service.js +695 -0
- package/dist/services/swap-service.js.map +1 -0
- package/dist/services/trading-service.d.ts +156 -0
- package/dist/services/trading-service.d.ts.map +1 -0
- package/dist/services/trading-service.js +356 -0
- package/dist/services/trading-service.js.map +1 -0
- package/dist/services/wallet-service.d.ts +275 -0
- package/dist/services/wallet-service.d.ts.map +1 -0
- package/dist/services/wallet-service.js +630 -0
- package/dist/services/wallet-service.js.map +1 -0
- package/dist/utils/price-utils.d.ts +153 -0
- package/dist/utils/price-utils.d.ts.map +1 -0
- package/dist/utils/price-utils.js +236 -0
- package/dist/utils/price-utils.js.map +1 -0
- package/dist/utils/price-utils.test.d.ts +5 -0
- package/dist/utils/price-utils.test.d.ts.map +1 -0
- package/dist/utils/price-utils.test.js +192 -0
- package/dist/utils/price-utils.test.js.map +1 -0
- package/package.json +10 -4
- package/README.en.md +0 -538
- package/docs/00-design.md +0 -760
- package/docs/02-API.md +0 -1148
- package/docs/arb/test-plan.md +0 -387
- package/docs/arb/test-results.md +0 -336
- package/docs/arbitrage.md +0 -754
- package/docs/reports/smart-money-analysis-2025-12-23-cn.md +0 -840
- package/examples/01-basic-usage.ts +0 -68
- package/examples/02-smart-money.ts +0 -95
- package/examples/03-market-analysis.ts +0 -108
- package/examples/04-kline-aggregation.ts +0 -158
- package/examples/05-follow-wallet-strategy.ts +0 -156
- package/examples/06-services-demo.ts +0 -124
- package/examples/07-realtime-websocket.ts +0 -117
- package/examples/08-trading-orders.ts +0 -278
- package/examples/09-rewards-tracking.ts +0 -187
- package/examples/10-ctf-operations.ts +0 -336
- package/examples/11-live-arbitrage-scan.ts +0 -221
- package/examples/12-trending-arb-monitor.ts +0 -406
- package/examples/13-arbitrage-service.ts +0 -211
- package/examples/README.md +0 -179
- package/scripts/README.md +0 -163
- package/scripts/approvals/approve-erc1155.ts +0 -129
- package/scripts/approvals/approve-neg-risk-erc1155.ts +0 -149
- package/scripts/approvals/approve-neg-risk.ts +0 -102
- package/scripts/approvals/check-all-allowances.ts +0 -150
- package/scripts/approvals/check-allowance.ts +0 -129
- package/scripts/approvals/check-ctf-approval.ts +0 -158
- package/scripts/arb/faze-bo3-arb.ts +0 -385
- package/scripts/arb/settle-position.ts +0 -190
- package/scripts/arb/token-rebalancer.ts +0 -420
- package/scripts/arb-tests/01-unit-tests.ts +0 -495
- package/scripts/arb-tests/02-integration-tests.ts +0 -412
- package/scripts/arb-tests/03-e2e-tests.ts +0 -503
- package/scripts/arb-tests/README.md +0 -109
- package/scripts/datas/001-report.md +0 -486
- package/scripts/datas/clone-modal-screenshot.png +0 -0
- package/scripts/deposit/deposit-native-usdc.ts +0 -179
- package/scripts/deposit/deposit-usdc.ts +0 -155
- package/scripts/deposit/swap-usdc-to-usdce.ts +0 -375
- package/scripts/research/research-markets.ts +0 -166
- package/scripts/trading/check-orders.ts +0 -50
- package/scripts/trading/sell-nvidia-positions.ts +0 -206
- package/scripts/trading/test-order.ts +0 -172
- package/scripts/verify/test-approve-trading.ts +0 -98
- package/scripts/verify/test-provider-fix.ts +0 -43
- package/scripts/verify/test-search-mcp.ts +0 -113
- package/scripts/verify/verify-all-apis.ts +0 -160
- package/scripts/wallet/check-wallet-balances.ts +0 -75
- package/scripts/wallet/test-wallet-operations.ts +0 -191
- package/scripts/wallet/verify-wallet-tools.ts +0 -124
- package/src/__tests__/clob-api.test.ts +0 -301
- package/src/__tests__/integration/bridge-client.integration.test.ts +0 -314
- package/src/__tests__/integration/clob-api.integration.test.ts +0 -218
- package/src/__tests__/integration/ctf-client.integration.test.ts +0 -331
- package/src/__tests__/integration/data-api.integration.test.ts +0 -194
- package/src/__tests__/integration/gamma-api.integration.test.ts +0 -206
- package/src/__tests__/test-utils.ts +0 -170
- package/src/clients/bridge-client.ts +0 -841
- package/src/clients/clob-api.ts +0 -629
- package/src/clients/ctf-client.ts +0 -1216
- package/src/clients/data-api.ts +0 -469
- package/src/clients/gamma-api.ts +0 -597
- package/src/clients/trading-client.ts +0 -749
- package/src/clients/websocket-manager.ts +0 -267
- package/src/core/cache-adapter-bridge.ts +0 -94
- package/src/core/cache.ts +0 -85
- package/src/core/errors.ts +0 -117
- package/src/core/rate-limiter.ts +0 -74
- package/src/core/types.ts +0 -360
- package/src/core/unified-cache.ts +0 -153
- package/src/index.ts +0 -461
- package/src/services/arbitrage-service.ts +0 -1807
- package/src/services/authorization-service.ts +0 -357
- package/src/services/market-service.ts +0 -544
- package/src/services/realtime-service.ts +0 -196
- package/src/services/swap-service.ts +0 -896
- package/src/services/wallet-service.ts +0 -259
- package/src/utils/price-utils.ts +0 -307
- package/tsconfig.json +0 -8
- package/vitest.config.ts +0 -19
- package/vitest.integration.config.ts +0 -18
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Service
|
|
3
|
+
*
|
|
4
|
+
* Provides smart money analysis features:
|
|
5
|
+
* - Wallet profile analysis
|
|
6
|
+
* - Position tracking
|
|
7
|
+
* - Activity monitoring
|
|
8
|
+
* - Sell detection for follow wallet strategy
|
|
9
|
+
* - Time-based leaderboard and wallet stats
|
|
10
|
+
*/
|
|
11
|
+
import { DataApiClient, Position, Activity, LeaderboardEntry, LeaderboardPage, LeaderboardTimePeriod, LeaderboardOrderBy, LeaderboardCategory } from '../clients/data-api.js';
|
|
12
|
+
import { SubgraphClient } from '../clients/subgraph.js';
|
|
13
|
+
import type { UnifiedCache } from '../core/unified-cache.js';
|
|
14
|
+
/** Time period (lowercase for SDK, maps to API's uppercase) */
|
|
15
|
+
export type TimePeriod = 'day' | 'week' | 'month' | 'all';
|
|
16
|
+
/** Sort criteria for period leaderboard (official API supports PNL and VOL) */
|
|
17
|
+
export type LeaderboardSortBy = 'volume' | 'pnl';
|
|
18
|
+
export type { LeaderboardTimePeriod, LeaderboardOrderBy, LeaderboardCategory };
|
|
19
|
+
/**
|
|
20
|
+
* Parsed trade from OrderFilledEvent
|
|
21
|
+
*/
|
|
22
|
+
export interface ParsedTrade {
|
|
23
|
+
timestamp: number;
|
|
24
|
+
user: string;
|
|
25
|
+
role: 'maker' | 'taker';
|
|
26
|
+
side: 'BUY' | 'SELL';
|
|
27
|
+
tokenId: string;
|
|
28
|
+
tokenAmount: number;
|
|
29
|
+
usdcAmount: number;
|
|
30
|
+
price: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Position tracking for PnL calculation
|
|
34
|
+
*/
|
|
35
|
+
export interface TokenPosition {
|
|
36
|
+
tokenId: string;
|
|
37
|
+
amount: number;
|
|
38
|
+
avgCost: number;
|
|
39
|
+
totalCost: number;
|
|
40
|
+
realizedPnl: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* User stats with PnL
|
|
44
|
+
*/
|
|
45
|
+
export interface UserPeriodStats {
|
|
46
|
+
address: string;
|
|
47
|
+
volume: number;
|
|
48
|
+
tradeCount: number;
|
|
49
|
+
buyCount: number;
|
|
50
|
+
sellCount: number;
|
|
51
|
+
buyVolume: number;
|
|
52
|
+
sellVolume: number;
|
|
53
|
+
realizedPnl: number;
|
|
54
|
+
unrealizedPnl: number;
|
|
55
|
+
positions: Map<string, TokenPosition>;
|
|
56
|
+
}
|
|
57
|
+
export interface PeriodLeaderboardEntry {
|
|
58
|
+
address: string;
|
|
59
|
+
rank: number;
|
|
60
|
+
volume: number;
|
|
61
|
+
pnl: number;
|
|
62
|
+
totalPnl: number;
|
|
63
|
+
realizedPnl: number;
|
|
64
|
+
unrealizedPnl: number;
|
|
65
|
+
tradeCount: number;
|
|
66
|
+
buyCount: number;
|
|
67
|
+
sellCount: number;
|
|
68
|
+
buyVolume: number;
|
|
69
|
+
sellVolume: number;
|
|
70
|
+
makerVolume: number;
|
|
71
|
+
takerVolume: number;
|
|
72
|
+
userName?: string;
|
|
73
|
+
profileImage?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface WalletPeriodStats {
|
|
76
|
+
address: string;
|
|
77
|
+
period: TimePeriod;
|
|
78
|
+
startTime: number;
|
|
79
|
+
endTime: number;
|
|
80
|
+
volume: number;
|
|
81
|
+
tradeCount: number;
|
|
82
|
+
makerVolume: number;
|
|
83
|
+
takerVolume: number;
|
|
84
|
+
makerCount: number;
|
|
85
|
+
takerCount: number;
|
|
86
|
+
splitCount: number;
|
|
87
|
+
mergeCount: number;
|
|
88
|
+
redemptionCount: number;
|
|
89
|
+
redemptionPayout: number;
|
|
90
|
+
}
|
|
91
|
+
export interface WalletProfile {
|
|
92
|
+
address: string;
|
|
93
|
+
totalPnL: number;
|
|
94
|
+
realizedPnL: number;
|
|
95
|
+
unrealizedPnL: number;
|
|
96
|
+
avgPercentPnL: number;
|
|
97
|
+
positionCount: number;
|
|
98
|
+
tradeCount: number;
|
|
99
|
+
smartScore: number;
|
|
100
|
+
lastActiveAt: Date;
|
|
101
|
+
}
|
|
102
|
+
export interface WalletActivitySummary {
|
|
103
|
+
address: string;
|
|
104
|
+
activities: Activity[];
|
|
105
|
+
summary: {
|
|
106
|
+
totalBuys: number;
|
|
107
|
+
totalSells: number;
|
|
108
|
+
buyVolume: number;
|
|
109
|
+
sellVolume: number;
|
|
110
|
+
activeMarkets: string[];
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export interface SellActivityResult {
|
|
114
|
+
totalSellAmount: number;
|
|
115
|
+
sellTransactions: Activity[];
|
|
116
|
+
sellRatio: number;
|
|
117
|
+
shouldExit: boolean;
|
|
118
|
+
}
|
|
119
|
+
export declare class WalletService {
|
|
120
|
+
private dataApi;
|
|
121
|
+
private subgraph;
|
|
122
|
+
private cache;
|
|
123
|
+
constructor(dataApi: DataApiClient, subgraph: SubgraphClient, cache: UnifiedCache);
|
|
124
|
+
/**
|
|
125
|
+
* Get start timestamp for a time period
|
|
126
|
+
*/
|
|
127
|
+
private getPeriodStartTime;
|
|
128
|
+
/**
|
|
129
|
+
* Get comprehensive wallet profile with PnL analysis
|
|
130
|
+
*/
|
|
131
|
+
getWalletProfile(address: string): Promise<WalletProfile>;
|
|
132
|
+
/**
|
|
133
|
+
* Get positions for a wallet
|
|
134
|
+
*/
|
|
135
|
+
getWalletPositions(address: string): Promise<Position[]>;
|
|
136
|
+
/**
|
|
137
|
+
* Get positions for a specific market
|
|
138
|
+
*/
|
|
139
|
+
getPositionsForMarket(address: string, conditionId: string): Promise<Position[]>;
|
|
140
|
+
/**
|
|
141
|
+
* Get wallet activity with summary
|
|
142
|
+
*/
|
|
143
|
+
getWalletActivity(address: string, limit?: number): Promise<WalletActivitySummary>;
|
|
144
|
+
/**
|
|
145
|
+
* Get leaderboard
|
|
146
|
+
*/
|
|
147
|
+
getLeaderboard(page?: number, pageSize?: number): Promise<LeaderboardPage>;
|
|
148
|
+
/**
|
|
149
|
+
* Get top traders from leaderboard
|
|
150
|
+
*/
|
|
151
|
+
getTopTraders(limit?: number): Promise<LeaderboardEntry[]>;
|
|
152
|
+
/**
|
|
153
|
+
* Get leaderboard by time period using official Polymarket API
|
|
154
|
+
*
|
|
155
|
+
* Uses the official Data API which supports time period filtering.
|
|
156
|
+
* This is the recommended method as it uses server-side calculations.
|
|
157
|
+
*
|
|
158
|
+
* @param period - Time period: 'day', 'week', 'month', or 'all'
|
|
159
|
+
* @param limit - Maximum entries to return (default: 50, max: 50)
|
|
160
|
+
* @param sortBy - Sort criteria: 'volume' or 'pnl' (default: 'pnl')
|
|
161
|
+
* @param category - Market category filter (default: 'OVERALL')
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* // Get top traders of the week by PnL
|
|
166
|
+
* const weeklyByPnl = await walletService.getLeaderboardByPeriod('week', 20, 'pnl');
|
|
167
|
+
*
|
|
168
|
+
* // Get top traders by volume
|
|
169
|
+
* const weeklyByVolume = await walletService.getLeaderboardByPeriod('week', 20, 'volume');
|
|
170
|
+
*
|
|
171
|
+
* // Get politics category leaderboard
|
|
172
|
+
* const politics = await walletService.getLeaderboardByPeriod('week', 20, 'pnl', 'POLITICS');
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
getLeaderboardByPeriod(period: TimePeriod, limit?: number, sortBy?: LeaderboardSortBy, category?: LeaderboardCategory): Promise<PeriodLeaderboardEntry[]>;
|
|
176
|
+
/**
|
|
177
|
+
* Get a specific user's PnL and ranking for a time period
|
|
178
|
+
*
|
|
179
|
+
* Uses the official Data API's user filter to get a single user's stats.
|
|
180
|
+
*
|
|
181
|
+
* @param address - User's wallet address
|
|
182
|
+
* @param period - Time period: 'day', 'week', 'month', or 'all'
|
|
183
|
+
* @param category - Market category filter (default: 'OVERALL')
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* // Get user's weekly PnL
|
|
188
|
+
* const stats = await walletService.getUserPeriodPnl(address, 'week');
|
|
189
|
+
* console.log(`Rank: #${stats.rank}, PnL: $${stats.pnl}`);
|
|
190
|
+
*
|
|
191
|
+
* // Get user's monthly PnL in politics category
|
|
192
|
+
* const politicsStats = await walletService.getUserPeriodPnl(address, 'month', 'POLITICS');
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
getUserPeriodPnl(address: string, period: TimePeriod, category?: LeaderboardCategory): Promise<PeriodLeaderboardEntry | null>;
|
|
196
|
+
/**
|
|
197
|
+
* Get wallet stats for a specific time period
|
|
198
|
+
*
|
|
199
|
+
* Combines data from Orderbook Subgraph (trades) and Activity Subgraph (splits/merges/redemptions)
|
|
200
|
+
*
|
|
201
|
+
* @param address - Wallet address
|
|
202
|
+
* @param period - Time period: 'day', 'week', 'month', or 'all'
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* // Get wallet's monthly stats
|
|
207
|
+
* const stats = await walletService.getWalletStatsByPeriod(address, 'month');
|
|
208
|
+
* console.log(`Monthly volume: $${stats.volume}`);
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
getWalletStatsByPeriod(address: string, period: TimePeriod): Promise<WalletPeriodStats>;
|
|
212
|
+
/**
|
|
213
|
+
* Fetch all order filled events in a time period with pagination
|
|
214
|
+
*/
|
|
215
|
+
private fetchAllFillsInPeriod;
|
|
216
|
+
/**
|
|
217
|
+
* Parse OrderFilledEvent into user trades
|
|
218
|
+
*
|
|
219
|
+
* OrderFilledEvent 结构:
|
|
220
|
+
* - makerAssetId = "0" (USDC): Maker 卖 USDC = BUY outcome token
|
|
221
|
+
* - makerAssetId = 长数字: Maker 卖 outcome token = SELL
|
|
222
|
+
*/
|
|
223
|
+
private parseOrderFilledEvent;
|
|
224
|
+
/**
|
|
225
|
+
* Update position with a trade and calculate realized PnL
|
|
226
|
+
*
|
|
227
|
+
* 买入: 增加持仓,更新平均成本
|
|
228
|
+
* 卖出: 减少持仓,计算已实现盈亏 = 卖出收入 - 成本基础
|
|
229
|
+
*/
|
|
230
|
+
private updatePositionWithTrade;
|
|
231
|
+
/**
|
|
232
|
+
* Calculate unrealized PnL for a position
|
|
233
|
+
*
|
|
234
|
+
* 未实现盈亏 = 当前市值 - 总成本
|
|
235
|
+
* 假设当前价格约等于最后交易价格 (简化处理)
|
|
236
|
+
*/
|
|
237
|
+
private calculateUnrealizedPnl;
|
|
238
|
+
/**
|
|
239
|
+
* Aggregate user statistics with PnL calculation from order filled events
|
|
240
|
+
*
|
|
241
|
+
* 核心计算流程:
|
|
242
|
+
* 1. 解析 OrderFilledEvent 为标准化的 ParsedTrade
|
|
243
|
+
* 2. 按时间顺序处理每笔交易
|
|
244
|
+
* 3. 追踪每个用户每个 token 的持仓和平均成本
|
|
245
|
+
* 4. 卖出时计算已实现盈亏
|
|
246
|
+
* 5. 期末计算未实现盈亏
|
|
247
|
+
*/
|
|
248
|
+
private aggregateUserStatsWithPnl;
|
|
249
|
+
/**
|
|
250
|
+
* Discover active wallets from recent trades
|
|
251
|
+
*/
|
|
252
|
+
discoverActiveWallets(limit?: number): Promise<Array<{
|
|
253
|
+
address: string;
|
|
254
|
+
tradeCount: number;
|
|
255
|
+
}>>;
|
|
256
|
+
/**
|
|
257
|
+
* Detect sell activity for a wallet in a specific market
|
|
258
|
+
*/
|
|
259
|
+
detectSellActivity(address: string, conditionId: string, sinceTimestamp: number, peakValue?: number): Promise<SellActivityResult>;
|
|
260
|
+
/**
|
|
261
|
+
* Track sell ratio for multiple wallets (aggregated)
|
|
262
|
+
*/
|
|
263
|
+
trackGroupSellRatio(addresses: string[], conditionId: string, peakTotalValue: number, sinceTimestamp: number): Promise<{
|
|
264
|
+
cumulativeSellAmount: number;
|
|
265
|
+
sellRatio: number;
|
|
266
|
+
shouldExit: boolean;
|
|
267
|
+
walletSells: Array<{
|
|
268
|
+
address: string;
|
|
269
|
+
sellAmount: number;
|
|
270
|
+
}>;
|
|
271
|
+
}>;
|
|
272
|
+
private calculateSmartScore;
|
|
273
|
+
private calculateVariance;
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=wallet-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-service.d.ts","sourceRoot":"","sources":["../../src/services/wallet-service.ts"],"names":[],"mappings":"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"}
|