@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.
- package/README.md +545 -812
- package/README.zh-CN.md +645 -342
- 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/data-api.integration.test.js +6 -3
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -1
- 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/clients/clob-api.d.ts +73 -0
- package/dist/clients/clob-api.d.ts.map +1 -1
- package/dist/clients/clob-api.js +60 -0
- package/dist/clients/clob-api.js.map +1 -1
- package/dist/clients/data-api.d.ts +319 -14
- package/dist/clients/data-api.d.ts.map +1 -1
- package/dist/clients/data-api.js +342 -15
- package/dist/clients/data-api.js.map +1 -1
- 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/websocket-manager.d.ts +3 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -1
- package/dist/clients/websocket-manager.js +10 -3
- package/dist/clients/websocket-manager.js.map +1 -1
- package/dist/core/cache.d.ts +1 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +1 -0
- package/dist/core/cache.js.map +1 -1
- package/dist/core/errors.d.ts +2 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +2 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/rate-limiter.d.ts +2 -1
- package/dist/core/rate-limiter.d.ts.map +1 -1
- package/dist/core/rate-limiter.js +5 -0
- package/dist/core/rate-limiter.js.map +1 -1
- package/dist/core/types.d.ts +100 -12
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- 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/index.d.ts +76 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -132
- package/dist/index.js.map +1 -1
- package/dist/services/arbitrage-service.d.ts +3 -2
- package/dist/services/arbitrage-service.d.ts.map +1 -1
- package/dist/services/arbitrage-service.js +58 -40
- package/dist/services/arbitrage-service.js.map +1 -1
- package/dist/services/market-service.d.ts +108 -8
- package/dist/services/market-service.d.ts.map +1 -1
- package/dist/services/market-service.js +352 -36
- package/dist/services/market-service.js.map +1 -1
- 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 +17 -17
- package/dist/services/realtime-service.d.ts.map +1 -1
- package/dist/services/realtime-service.js +91 -59
- package/dist/services/realtime-service.js.map +1 -1
- 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/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 +183 -2
- package/dist/services/wallet-service.d.ts.map +1 -1
- package/dist/services/wallet-service.js +458 -1
- package/dist/services/wallet-service.js.map +1 -1
- 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 +4 -3
- package/README.en.md +0 -502
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TradingService
|
|
3
|
+
*
|
|
4
|
+
* Trading service using official @polymarket/clob-client.
|
|
5
|
+
*
|
|
6
|
+
* Provides:
|
|
7
|
+
* - Order creation (limit, market)
|
|
8
|
+
* - Order management (cancel, query)
|
|
9
|
+
* - Rewards tracking
|
|
10
|
+
* - Balance management
|
|
11
|
+
*
|
|
12
|
+
* Note: Market data methods have been moved to MarketService.
|
|
13
|
+
*/
|
|
14
|
+
import { ClobClient, Side as ClobSide, OrderType as ClobOrderType, } from '@polymarket/clob-client';
|
|
15
|
+
import { Wallet } from 'ethers';
|
|
16
|
+
import { ApiType } from '../core/rate-limiter.js';
|
|
17
|
+
import { PolymarketError, ErrorCode } from '../core/errors.js';
|
|
18
|
+
// Chain IDs
|
|
19
|
+
export const POLYGON_MAINNET = 137;
|
|
20
|
+
export const POLYGON_AMOY = 80002;
|
|
21
|
+
// CLOB Host
|
|
22
|
+
const CLOB_HOST = 'https://clob.polymarket.com';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// TradingService Implementation
|
|
25
|
+
// ============================================================================
|
|
26
|
+
export class TradingService {
|
|
27
|
+
rateLimiter;
|
|
28
|
+
cache;
|
|
29
|
+
config;
|
|
30
|
+
clobClient = null;
|
|
31
|
+
wallet;
|
|
32
|
+
chainId;
|
|
33
|
+
credentials = null;
|
|
34
|
+
initialized = false;
|
|
35
|
+
tickSizeCache = new Map();
|
|
36
|
+
negRiskCache = new Map();
|
|
37
|
+
constructor(rateLimiter, cache, config) {
|
|
38
|
+
this.rateLimiter = rateLimiter;
|
|
39
|
+
this.cache = cache;
|
|
40
|
+
this.config = config;
|
|
41
|
+
this.wallet = new Wallet(config.privateKey);
|
|
42
|
+
this.chainId = (config.chainId || POLYGON_MAINNET);
|
|
43
|
+
this.credentials = config.credentials || null;
|
|
44
|
+
}
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Initialization
|
|
47
|
+
// ============================================================================
|
|
48
|
+
async initialize() {
|
|
49
|
+
if (this.initialized)
|
|
50
|
+
return;
|
|
51
|
+
// Create CLOB client with L1 auth (wallet)
|
|
52
|
+
this.clobClient = new ClobClient(CLOB_HOST, this.chainId, this.wallet);
|
|
53
|
+
// Get or create API credentials
|
|
54
|
+
if (!this.credentials) {
|
|
55
|
+
const creds = await this.clobClient.createOrDeriveApiKey();
|
|
56
|
+
this.credentials = {
|
|
57
|
+
key: creds.key,
|
|
58
|
+
secret: creds.secret,
|
|
59
|
+
passphrase: creds.passphrase,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Re-initialize with L2 auth (credentials)
|
|
63
|
+
this.clobClient = new ClobClient(CLOB_HOST, this.chainId, this.wallet, {
|
|
64
|
+
key: this.credentials.key,
|
|
65
|
+
secret: this.credentials.secret,
|
|
66
|
+
passphrase: this.credentials.passphrase,
|
|
67
|
+
});
|
|
68
|
+
this.initialized = true;
|
|
69
|
+
}
|
|
70
|
+
async ensureInitialized() {
|
|
71
|
+
if (!this.initialized || !this.clobClient) {
|
|
72
|
+
await this.initialize();
|
|
73
|
+
}
|
|
74
|
+
return this.clobClient;
|
|
75
|
+
}
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// Trading Helpers
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Get tick size for a token
|
|
81
|
+
*/
|
|
82
|
+
async getTickSize(tokenId) {
|
|
83
|
+
if (this.tickSizeCache.has(tokenId)) {
|
|
84
|
+
return this.tickSizeCache.get(tokenId);
|
|
85
|
+
}
|
|
86
|
+
const client = await this.ensureInitialized();
|
|
87
|
+
const tickSize = await client.getTickSize(tokenId);
|
|
88
|
+
this.tickSizeCache.set(tokenId, tickSize);
|
|
89
|
+
return tickSize;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if token is neg risk
|
|
93
|
+
*/
|
|
94
|
+
async isNegRisk(tokenId) {
|
|
95
|
+
if (this.negRiskCache.has(tokenId)) {
|
|
96
|
+
return this.negRiskCache.get(tokenId);
|
|
97
|
+
}
|
|
98
|
+
const client = await this.ensureInitialized();
|
|
99
|
+
const negRisk = await client.getNegRisk(tokenId);
|
|
100
|
+
this.negRiskCache.set(tokenId, negRisk);
|
|
101
|
+
return negRisk;
|
|
102
|
+
}
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// Order Creation
|
|
105
|
+
// ============================================================================
|
|
106
|
+
/**
|
|
107
|
+
* Create and post a limit order
|
|
108
|
+
*/
|
|
109
|
+
async createLimitOrder(params) {
|
|
110
|
+
const client = await this.ensureInitialized();
|
|
111
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
112
|
+
try {
|
|
113
|
+
const [tickSize, negRisk] = await Promise.all([
|
|
114
|
+
this.getTickSize(params.tokenId),
|
|
115
|
+
this.isNegRisk(params.tokenId),
|
|
116
|
+
]);
|
|
117
|
+
const orderType = params.orderType === 'GTD' ? ClobOrderType.GTD : ClobOrderType.GTC;
|
|
118
|
+
const result = await client.createAndPostOrder({
|
|
119
|
+
tokenID: params.tokenId,
|
|
120
|
+
side: params.side === 'BUY' ? ClobSide.BUY : ClobSide.SELL,
|
|
121
|
+
price: params.price,
|
|
122
|
+
size: params.size,
|
|
123
|
+
expiration: params.expiration || 0,
|
|
124
|
+
}, { tickSize, negRisk }, orderType);
|
|
125
|
+
const success = result.success === true ||
|
|
126
|
+
(result.success !== false &&
|
|
127
|
+
((result.orderID !== undefined && result.orderID !== '') ||
|
|
128
|
+
(result.transactionsHashes !== undefined && result.transactionsHashes.length > 0)));
|
|
129
|
+
return {
|
|
130
|
+
success,
|
|
131
|
+
orderId: result.orderID,
|
|
132
|
+
orderIds: result.orderIDs,
|
|
133
|
+
errorMsg: result.errorMsg,
|
|
134
|
+
transactionHashes: result.transactionsHashes,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
errorMsg: `Order failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create and post a market order
|
|
147
|
+
*/
|
|
148
|
+
async createMarketOrder(params) {
|
|
149
|
+
const client = await this.ensureInitialized();
|
|
150
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
151
|
+
try {
|
|
152
|
+
const [tickSize, negRisk] = await Promise.all([
|
|
153
|
+
this.getTickSize(params.tokenId),
|
|
154
|
+
this.isNegRisk(params.tokenId),
|
|
155
|
+
]);
|
|
156
|
+
const orderType = params.orderType === 'FAK' ? ClobOrderType.FAK : ClobOrderType.FOK;
|
|
157
|
+
const result = await client.createAndPostMarketOrder({
|
|
158
|
+
tokenID: params.tokenId,
|
|
159
|
+
side: params.side === 'BUY' ? ClobSide.BUY : ClobSide.SELL,
|
|
160
|
+
amount: params.amount,
|
|
161
|
+
price: params.price,
|
|
162
|
+
}, { tickSize, negRisk }, orderType);
|
|
163
|
+
const success = result.success === true ||
|
|
164
|
+
(result.success !== false &&
|
|
165
|
+
((result.orderID !== undefined && result.orderID !== '') ||
|
|
166
|
+
(result.transactionsHashes !== undefined && result.transactionsHashes.length > 0)));
|
|
167
|
+
return {
|
|
168
|
+
success,
|
|
169
|
+
orderId: result.orderID,
|
|
170
|
+
orderIds: result.orderIDs,
|
|
171
|
+
errorMsg: result.errorMsg,
|
|
172
|
+
transactionHashes: result.transactionsHashes,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
errorMsg: `Market order failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// Order Management
|
|
185
|
+
// ============================================================================
|
|
186
|
+
async cancelOrder(orderId) {
|
|
187
|
+
const client = await this.ensureInitialized();
|
|
188
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
189
|
+
try {
|
|
190
|
+
const result = await client.cancelOrder({ orderID: orderId });
|
|
191
|
+
return { success: result.canceled ?? false, orderId };
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
async cancelOrders(orderIds) {
|
|
199
|
+
const client = await this.ensureInitialized();
|
|
200
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
201
|
+
try {
|
|
202
|
+
const result = await client.cancelOrders(orderIds);
|
|
203
|
+
return { success: result.canceled ?? false, orderIds };
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel orders failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async cancelAllOrders() {
|
|
211
|
+
const client = await this.ensureInitialized();
|
|
212
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
213
|
+
try {
|
|
214
|
+
const result = await client.cancelAll();
|
|
215
|
+
return { success: result.canceled ?? false };
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel all failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
async getOpenOrders(marketId) {
|
|
223
|
+
const client = await this.ensureInitialized();
|
|
224
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
225
|
+
const orders = await client.getOpenOrders(marketId ? { market: marketId } : undefined);
|
|
226
|
+
return orders.map((o) => {
|
|
227
|
+
const originalSize = Number(o.original_size) || 0;
|
|
228
|
+
const filledSize = Number(o.size_matched) || 0;
|
|
229
|
+
return {
|
|
230
|
+
id: o.id,
|
|
231
|
+
status: o.status,
|
|
232
|
+
tokenId: o.asset_id,
|
|
233
|
+
side: o.side.toUpperCase(),
|
|
234
|
+
price: Number(o.price) || 0,
|
|
235
|
+
originalSize,
|
|
236
|
+
filledSize,
|
|
237
|
+
remainingSize: originalSize - filledSize,
|
|
238
|
+
associateTrades: o.associate_trades || [],
|
|
239
|
+
createdAt: o.created_at,
|
|
240
|
+
};
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
async getTrades(marketId) {
|
|
245
|
+
const client = await this.ensureInitialized();
|
|
246
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
247
|
+
const trades = await client.getTrades(marketId ? { market: marketId } : undefined);
|
|
248
|
+
return trades.map((t) => ({
|
|
249
|
+
id: t.id,
|
|
250
|
+
tokenId: t.asset_id,
|
|
251
|
+
side: t.side,
|
|
252
|
+
price: Number(t.price) || 0,
|
|
253
|
+
size: Number(t.size) || 0,
|
|
254
|
+
fee: Number(t.fee_rate_bps) || 0,
|
|
255
|
+
timestamp: Number(t.match_time) || Date.now(),
|
|
256
|
+
}));
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// ============================================================================
|
|
260
|
+
// Rewards
|
|
261
|
+
// ============================================================================
|
|
262
|
+
async isOrderScoring(orderId) {
|
|
263
|
+
const client = await this.ensureInitialized();
|
|
264
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
265
|
+
const result = await client.isOrderScoring({ order_id: orderId });
|
|
266
|
+
return result.scoring;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
async areOrdersScoring(orderIds) {
|
|
270
|
+
const client = await this.ensureInitialized();
|
|
271
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
272
|
+
return await client.areOrdersScoring({ orderIds });
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
async getEarningsForDay(date) {
|
|
276
|
+
const client = await this.ensureInitialized();
|
|
277
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
278
|
+
const earnings = await client.getEarningsForUserForDay(date);
|
|
279
|
+
return earnings.map(e => ({
|
|
280
|
+
date: e.date,
|
|
281
|
+
conditionId: e.condition_id,
|
|
282
|
+
assetAddress: e.asset_address,
|
|
283
|
+
makerAddress: e.maker_address,
|
|
284
|
+
earnings: e.earnings,
|
|
285
|
+
assetRate: e.asset_rate,
|
|
286
|
+
}));
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
async getCurrentRewards() {
|
|
290
|
+
const client = await this.ensureInitialized();
|
|
291
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
292
|
+
const rewards = await client.getCurrentRewards();
|
|
293
|
+
return rewards.map(r => ({
|
|
294
|
+
conditionId: r.condition_id,
|
|
295
|
+
question: r.question,
|
|
296
|
+
marketSlug: r.market_slug,
|
|
297
|
+
eventSlug: r.event_slug,
|
|
298
|
+
rewardsMaxSpread: r.rewards_max_spread,
|
|
299
|
+
rewardsMinSize: r.rewards_min_size,
|
|
300
|
+
tokens: r.tokens.map(t => ({
|
|
301
|
+
tokenId: t.token_id,
|
|
302
|
+
outcome: t.outcome,
|
|
303
|
+
price: t.price,
|
|
304
|
+
})),
|
|
305
|
+
rewardsConfig: r.rewards_config.map(c => ({
|
|
306
|
+
assetAddress: c.asset_address,
|
|
307
|
+
startDate: c.start_date,
|
|
308
|
+
endDate: c.end_date,
|
|
309
|
+
ratePerDay: c.rate_per_day,
|
|
310
|
+
totalRewards: c.total_rewards,
|
|
311
|
+
})),
|
|
312
|
+
}));
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
// ============================================================================
|
|
316
|
+
// Balance & Allowance
|
|
317
|
+
// ============================================================================
|
|
318
|
+
async getBalanceAllowance(assetType, tokenId) {
|
|
319
|
+
const client = await this.ensureInitialized();
|
|
320
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
321
|
+
const result = await client.getBalanceAllowance({
|
|
322
|
+
asset_type: assetType,
|
|
323
|
+
token_id: tokenId,
|
|
324
|
+
});
|
|
325
|
+
return { balance: result.balance, allowance: result.allowance };
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
async updateBalanceAllowance(assetType, tokenId) {
|
|
329
|
+
const client = await this.ensureInitialized();
|
|
330
|
+
return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
|
|
331
|
+
await client.updateBalanceAllowance({
|
|
332
|
+
asset_type: assetType,
|
|
333
|
+
token_id: tokenId,
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
// ============================================================================
|
|
338
|
+
// Account Info
|
|
339
|
+
// ============================================================================
|
|
340
|
+
getAddress() {
|
|
341
|
+
return this.wallet.address;
|
|
342
|
+
}
|
|
343
|
+
getWallet() {
|
|
344
|
+
return this.wallet;
|
|
345
|
+
}
|
|
346
|
+
getCredentials() {
|
|
347
|
+
return this.credentials;
|
|
348
|
+
}
|
|
349
|
+
isInitialized() {
|
|
350
|
+
return this.initialized;
|
|
351
|
+
}
|
|
352
|
+
getClobClient() {
|
|
353
|
+
return this.clobClient;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=trading-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trading-service.js","sourceRoot":"","sources":["../../src/services/trading-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,88 @@
|
|
|
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
|
*/
|
|
10
|
-
import { DataApiClient, Position, Activity, LeaderboardEntry, LeaderboardPage } from '../clients/data-api.js';
|
|
11
|
+
import { DataApiClient, Position, Activity, LeaderboardEntry, LeaderboardPage, LeaderboardTimePeriod, LeaderboardOrderBy, LeaderboardCategory } from '../clients/data-api.js';
|
|
12
|
+
import { SubgraphClient } from '../clients/subgraph.js';
|
|
11
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
|
+
}
|
|
12
91
|
export interface WalletProfile {
|
|
13
92
|
address: string;
|
|
14
93
|
totalPnL: number;
|
|
@@ -39,8 +118,13 @@ export interface SellActivityResult {
|
|
|
39
118
|
}
|
|
40
119
|
export declare class WalletService {
|
|
41
120
|
private dataApi;
|
|
121
|
+
private subgraph;
|
|
42
122
|
private cache;
|
|
43
|
-
constructor(dataApi: DataApiClient, cache: UnifiedCache);
|
|
123
|
+
constructor(dataApi: DataApiClient, subgraph: SubgraphClient, cache: UnifiedCache);
|
|
124
|
+
/**
|
|
125
|
+
* Get start timestamp for a time period
|
|
126
|
+
*/
|
|
127
|
+
private getPeriodStartTime;
|
|
44
128
|
/**
|
|
45
129
|
* Get comprehensive wallet profile with PnL analysis
|
|
46
130
|
*/
|
|
@@ -65,6 +149,103 @@ export declare class WalletService {
|
|
|
65
149
|
* Get top traders from leaderboard
|
|
66
150
|
*/
|
|
67
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;
|
|
68
249
|
/**
|
|
69
250
|
* Discover active wallets from recent trades
|
|
70
251
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-service.d.ts","sourceRoot":"","sources":["../../src/services/wallet-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wallet-service.d.ts","sourceRoot":"","sources":["../../src/services/wallet-service.ts"],"names":[],"mappings":"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"}
|