@catalyst-team/poly-mcp 0.1.0 → 0.1.1
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 +181 -237
- package/docs/e2e/01-trader-tools.md +159 -0
- package/docs/e2e/02-market-tools.md +180 -0
- package/docs/e2e/03-order-tools.md +166 -0
- package/docs/e2e/04-wallet-tools.md +224 -0
- package/docs/e2e/05-trading-tools.md +327 -0
- package/docs/e2e/06-integration-scenarios.md +481 -0
- package/docs/e2e/coordinator.md +376 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,49 +1,121 @@
|
|
|
1
1
|
# @catalyst-team/poly-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
AI Agent 接入 Polymarket 预测市场的 MCP Server。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 🎯 你可以做什么
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### 1. 聪明钱分析 (Smart Money Analysis)
|
|
8
|
+
```
|
|
9
|
+
get_leaderboard → 获取 Top 10 聪明钱地址
|
|
10
|
+
↓
|
|
11
|
+
get_trader_positions(address) → 查看每个钱包持仓
|
|
12
|
+
↓
|
|
13
|
+
get_trader_profile(address) → 分析盈利模式
|
|
14
|
+
```
|
|
15
|
+
**示例问题**: "Top 10 聪明钱主要在哪些市场有持仓?"
|
|
8
16
|
|
|
9
|
-
|
|
10
|
-
npm install -g @catalyst-team/poly-mcp
|
|
11
|
-
# or
|
|
12
|
-
pnpm add -g @catalyst-team/poly-mcp
|
|
17
|
+
### 2. 交易者深度分析 (Trader Deep Dive)
|
|
13
18
|
```
|
|
19
|
+
get_trader_positions(address) → 持仓分析
|
|
20
|
+
↓
|
|
21
|
+
按 eventSlug 分组 → 识别对冲 vs 单边策略
|
|
22
|
+
↓
|
|
23
|
+
get_trader_trades(address) → 入场时机分析
|
|
24
|
+
↓
|
|
25
|
+
判断策略类型: 对冲型/方向型/套利型/做市型
|
|
26
|
+
```
|
|
27
|
+
**示例问题**: "这个交易者是什么策略类型?他的盈利主要来自哪里?"
|
|
14
28
|
|
|
15
|
-
###
|
|
29
|
+
### 3. 跟单交易 (Copy Trading)
|
|
30
|
+
```
|
|
31
|
+
get_leaderboard → 选择跟单目标
|
|
32
|
+
↓
|
|
33
|
+
get_trader_trades(address) → 监控新交易
|
|
34
|
+
↓
|
|
35
|
+
get_market + get_orderbook → 评估当前价格
|
|
36
|
+
↓
|
|
37
|
+
place_limit_order → 跟进交易
|
|
38
|
+
```
|
|
39
|
+
**示例问题**: "排名第一的交易者最近买了什么?我应该跟吗?"
|
|
16
40
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
41
|
+
### 4. 钱包追踪 (Wallet Tracking)
|
|
42
|
+
```
|
|
43
|
+
get_trader_trades(address) → 查看今日交易
|
|
44
|
+
↓
|
|
45
|
+
get_trader_positions(address) → 当前持仓
|
|
46
|
+
↓
|
|
47
|
+
get_market(conditionId) → 深入分析相关市场
|
|
21
48
|
```
|
|
49
|
+
**示例问题**: "这个钱包今天有哪些交易?表现如何?"
|
|
22
50
|
|
|
23
|
-
|
|
51
|
+
### 5. 热门市场发现 (Market Discovery)
|
|
52
|
+
```
|
|
53
|
+
search_markets(query, sortBy: 'volume') → 热门市场
|
|
54
|
+
↓
|
|
55
|
+
get_orderbook(conditionId) → 分析流动性
|
|
56
|
+
↓
|
|
57
|
+
get_leaderboard → 查看哪些聪明钱参与
|
|
58
|
+
```
|
|
59
|
+
**示例问题**: "最近24小时哪些市场交易量最大?聪明钱在买入什么?"
|
|
24
60
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
61
|
+
### 6. 体育市场策略 (Sports Strategy)
|
|
62
|
+
```
|
|
63
|
+
search_markets(query: 'NBA/NFL') → 体育市场
|
|
64
|
+
↓
|
|
65
|
+
get_market(conditionId) → 查看赔率和截止时间
|
|
66
|
+
↓
|
|
67
|
+
get_orderbook → 分析价差和深度
|
|
68
|
+
```
|
|
69
|
+
**示例问题**: "今天有哪些 NBA 比赛可以投注?赔率合理吗?"
|
|
29
70
|
|
|
30
|
-
|
|
31
|
-
|
|
71
|
+
### 7. 充值与授权 (Deposit & Auth)
|
|
72
|
+
```
|
|
73
|
+
check_allowances() → 检查授权状态
|
|
74
|
+
↓
|
|
75
|
+
approve_trading() → 一键授权所有合约
|
|
76
|
+
↓
|
|
77
|
+
swap("MATIC", "USDC", "100") → 换币
|
|
78
|
+
↓
|
|
79
|
+
deposit_usdc(100) → 充值到交易账户
|
|
80
|
+
```
|
|
81
|
+
**示例问题**: "我的钱包准备好交易了吗?帮我检查授权状态"
|
|
32
82
|
|
|
33
|
-
|
|
34
|
-
|
|
83
|
+
### 8. 执行交易 (Trading)
|
|
84
|
+
```
|
|
85
|
+
get_market(identifier) → 获取市场信息
|
|
86
|
+
↓
|
|
87
|
+
get_orderbook(conditionId) → 查看盘口深度
|
|
88
|
+
↓
|
|
89
|
+
estimate_execution(conditionId, "Yes", "BUY", 100) → 预估成交
|
|
90
|
+
↓
|
|
91
|
+
place_limit_order(conditionId, "Yes", "BUY", 0.55, 100) → 下单
|
|
92
|
+
```
|
|
93
|
+
**示例问题**: "帮我在这个市场买入 100 USDC 的 Yes"
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 📦 安装
|
|
98
|
+
|
|
99
|
+
### npm 安装 (推荐)
|
|
100
|
+
```bash
|
|
101
|
+
npm install -g @catalyst-team/poly-mcp
|
|
35
102
|
```
|
|
36
103
|
|
|
37
|
-
|
|
104
|
+
### 从源码构建
|
|
105
|
+
```bash
|
|
106
|
+
pnpm -F @catalyst-team/poly-sdk build
|
|
107
|
+
pnpm -F @catalyst-team/poly-mcp build
|
|
108
|
+
```
|
|
38
109
|
|
|
39
|
-
|
|
110
|
+
---
|
|
40
111
|
|
|
41
|
-
|
|
112
|
+
## ⚙️ MCP 配置
|
|
42
113
|
|
|
43
|
-
|
|
114
|
+
### Claude Desktop 配置
|
|
44
115
|
|
|
45
|
-
|
|
116
|
+
文件位置: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
46
117
|
|
|
118
|
+
#### 只读模式 (市场数据、钱包分析)
|
|
47
119
|
```json
|
|
48
120
|
{
|
|
49
121
|
"mcpServers": {
|
|
@@ -55,8 +127,7 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
|
|
|
55
127
|
}
|
|
56
128
|
```
|
|
57
129
|
|
|
58
|
-
####
|
|
59
|
-
|
|
130
|
+
#### 交易模式 (需要私钥)
|
|
60
131
|
```json
|
|
61
132
|
{
|
|
62
133
|
"mcpServers": {
|
|
@@ -71,29 +142,13 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
|
|
|
71
142
|
}
|
|
72
143
|
```
|
|
73
144
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
#### Read-only mode
|
|
77
|
-
|
|
145
|
+
#### 本地开发
|
|
78
146
|
```json
|
|
79
147
|
{
|
|
80
148
|
"mcpServers": {
|
|
81
149
|
"polymarket": {
|
|
82
150
|
"command": "node",
|
|
83
|
-
"args": ["/path/to/
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
#### Trading mode
|
|
90
|
-
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"mcpServers": {
|
|
94
|
-
"polymarket": {
|
|
95
|
-
"command": "node",
|
|
96
|
-
"args": ["/path/to/PerdictionRouter/packages/poly-mcp/dist/server.js"],
|
|
151
|
+
"args": ["/path/to/poly-mcp/dist/server.js"],
|
|
97
152
|
"env": {
|
|
98
153
|
"POLY_PRIVATE_KEY": "your-wallet-private-key"
|
|
99
154
|
}
|
|
@@ -102,215 +157,104 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
|
|
|
102
157
|
}
|
|
103
158
|
```
|
|
104
159
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
###
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
139
|
-
| `get_leaderboard` | Get top traders from leaderboard |
|
|
140
|
-
|
|
141
|
-
### Market Tools (public data)
|
|
142
|
-
|
|
143
|
-
| Tool | Description |
|
|
144
|
-
|------|-------------|
|
|
145
|
-
| `get_market` | Get market details by slug or conditionId |
|
|
146
|
-
| `search_markets` | Search markets by keyword |
|
|
147
|
-
| `get_trending_markets` | Get trending markets by volume/liquidity |
|
|
148
|
-
| `get_market_trades` | Get recent trades for a market |
|
|
149
|
-
|
|
150
|
-
### Order Tools (public data)
|
|
151
|
-
|
|
152
|
-
| Tool | Description |
|
|
153
|
-
|------|-------------|
|
|
154
|
-
| `get_orderbook` | Get orderbook depth for a market outcome |
|
|
155
|
-
| `get_best_prices` | Get best bid/ask prices for both outcomes |
|
|
156
|
-
| `estimate_execution` | Estimate execution price and slippage |
|
|
157
|
-
|
|
158
|
-
### Trade Tools (requires private key)
|
|
159
|
-
|
|
160
|
-
| Tool | Description |
|
|
161
|
-
|------|-------------|
|
|
162
|
-
| `place_limit_order` | Place a limit order |
|
|
163
|
-
| `place_market_order` | Place a market order |
|
|
164
|
-
| `cancel_order` | Cancel an existing order |
|
|
165
|
-
| `get_my_orders` | Get your open orders |
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 🛠️ 完整工具列表
|
|
163
|
+
|
|
164
|
+
### Trader Tools (公开数据)
|
|
165
|
+
| 工具 | 描述 |
|
|
166
|
+
|------|------|
|
|
167
|
+
| `get_trader_positions` | 获取钱包当前持仓和 PnL |
|
|
168
|
+
| `get_trader_trades` | 获取钱包交易历史 |
|
|
169
|
+
| `get_trader_profile` | 获取交易者综合分析 |
|
|
170
|
+
| `get_leaderboard` | 获取 PnL 排行榜 |
|
|
171
|
+
|
|
172
|
+
### Market Tools (公开数据)
|
|
173
|
+
| 工具 | 描述 |
|
|
174
|
+
|------|------|
|
|
175
|
+
| `get_market` | 通过 slug 或 conditionId 获取市场详情 |
|
|
176
|
+
| `search_markets` | 关键词搜索市场 |
|
|
177
|
+
| `get_trending_markets` | 获取热门市场 |
|
|
178
|
+
| `get_market_trades` | 获取市场最近成交 |
|
|
179
|
+
|
|
180
|
+
### Order Tools (公开数据)
|
|
181
|
+
| 工具 | 描述 |
|
|
182
|
+
|------|------|
|
|
183
|
+
| `get_orderbook` | 获取盘口深度 |
|
|
184
|
+
| `get_best_prices` | 获取最优买卖价 |
|
|
185
|
+
| `estimate_execution` | 预估成交价格和滑点 |
|
|
186
|
+
|
|
187
|
+
### Trade Tools (需要私钥)
|
|
188
|
+
| 工具 | 描述 |
|
|
189
|
+
|------|------|
|
|
190
|
+
| `place_limit_order` | 下限价单 |
|
|
191
|
+
| `place_market_order` | 下市价单 |
|
|
192
|
+
| `cancel_order` | 取消订单 |
|
|
193
|
+
| `get_my_orders` | 查看挂单 |
|
|
166
194
|
|
|
167
195
|
### Wallet Tools
|
|
196
|
+
| 工具 | 描述 | 需要私钥 |
|
|
197
|
+
|------|------|:--------:|
|
|
198
|
+
| `get_supported_deposit_assets` | 支持的充值资产和链 | ❌ |
|
|
199
|
+
| `get_deposit_addresses` | 获取充值地址 | ✅ |
|
|
200
|
+
| `deposit_usdc` | 充值 USDC | ✅ |
|
|
201
|
+
| `check_allowances` | 检查授权状态 | ✅ |
|
|
202
|
+
| `approve_trading` | 一键授权所有合约 | ✅ |
|
|
203
|
+
| `swap` | QuickSwap V3 换币 | ✅ |
|
|
204
|
+
| `swap_and_deposit` | 换币并充值 | ✅ |
|
|
205
|
+
| `get_token_balances` | 获取自己钱包余额 | ✅ |
|
|
206
|
+
| `get_wallet_balances` | 获取任意钱包余额 | ❌ |
|
|
207
|
+
| `get_swap_quote` | 获取换币报价 | ❌ |
|
|
208
|
+
| `get_available_pools` | 获取可用交易池 | ❌ |
|
|
168
209
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
| `
|
|
173
|
-
| `deposit_usdc` | Deposit USDC to Polymarket | Yes |
|
|
174
|
-
| `check_allowances` | Check ERC20 and ERC1155 allowances for trading | Yes |
|
|
175
|
-
| `approve_trading` | Set up all required approvals for trading | Yes |
|
|
176
|
-
| `swap` | Swap tokens on Polygon via QuickSwap V3 | Yes |
|
|
177
|
-
| `swap_and_deposit` | Swap to USDC and deposit in one operation | Yes |
|
|
178
|
-
| `get_token_balances` | Get your wallet token balances | Yes |
|
|
179
|
-
| `get_wallet_balances` | Get any wallet's token balances | No |
|
|
180
|
-
| `get_swap_quote` | Get a swap quote (check route availability) | No |
|
|
181
|
-
| `get_available_pools` | Get available QuickSwap V3 pools | No |
|
|
210
|
+
### Guide Tool
|
|
211
|
+
| 工具 | 描述 |
|
|
212
|
+
|------|------|
|
|
213
|
+
| `get_usage_guide` | 🚀 获取使用指南,AI Agent 应首先调用此工具 |
|
|
182
214
|
|
|
183
|
-
|
|
215
|
+
---
|
|
184
216
|
|
|
185
|
-
|
|
217
|
+
## 💡 Pro Tips
|
|
186
218
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
```
|
|
219
|
+
1. **AI Agent 首先调用 `get_usage_guide`** - 获取完整的使用场景指南
|
|
220
|
+
2. **用 `get_leaderboard` 获取聪明钱地址** - 这是分析的起点
|
|
221
|
+
3. **用 `search_markets` 的 tag 参数过滤** - Politics, Sports, Crypto
|
|
222
|
+
4. **分析持仓时看 `avgPrice` vs `curPrice`** - 判断盈亏状态
|
|
223
|
+
5. **查看 `volume24hr`** - 判断市场活跃度
|
|
195
224
|
|
|
196
|
-
|
|
197
|
-
```json
|
|
198
|
-
{
|
|
199
|
-
"market": {
|
|
200
|
-
"conditionId": "0x...",
|
|
201
|
-
"question": "Will Bitcoin hit $100k in 2024?",
|
|
202
|
-
"slug": "will-bitcoin-hit-100k-in-2024"
|
|
203
|
-
},
|
|
204
|
-
"prices": {
|
|
205
|
-
"yes": 0.65,
|
|
206
|
-
"no": 0.35
|
|
207
|
-
},
|
|
208
|
-
"stats": {
|
|
209
|
-
"volume": 1500000,
|
|
210
|
-
"liquidity": 250000
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
```
|
|
225
|
+
---
|
|
214
226
|
|
|
215
|
-
|
|
227
|
+
## ⚠️ 重要:USDC.e vs Native USDC
|
|
216
228
|
|
|
217
|
-
|
|
218
|
-
{
|
|
219
|
-
"name": "get_trader_positions",
|
|
220
|
-
"arguments": {
|
|
221
|
-
"address": "0x1234..."
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### Get Swap Quote
|
|
227
|
-
|
|
228
|
-
```json
|
|
229
|
-
{
|
|
230
|
-
"name": "get_swap_quote",
|
|
231
|
-
"arguments": {
|
|
232
|
-
"tokenIn": "MATIC",
|
|
233
|
-
"tokenOut": "USDC",
|
|
234
|
-
"amount": "100"
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
Response:
|
|
240
|
-
```json
|
|
241
|
-
{
|
|
242
|
-
"tokenIn": "MATIC",
|
|
243
|
-
"tokenOut": "USDC",
|
|
244
|
-
"amountIn": "100",
|
|
245
|
-
"amountOut": "55.23",
|
|
246
|
-
"route": "MATIC → WETH → USDC (multi-hop)",
|
|
247
|
-
"priceImpact": "0.15%"
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## Programmatic Usage
|
|
229
|
+
Polymarket CTF **只接受 USDC.e** (Bridged USDC)!
|
|
252
230
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
231
|
+
| Token | 地址 | CTF 兼容 |
|
|
232
|
+
|-------|------|:--------:|
|
|
233
|
+
| USDC.e (Bridged) | `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174` | ✅ |
|
|
234
|
+
| Native USDC | `0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359` | ❌ |
|
|
256
235
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
// Call any tool
|
|
261
|
-
const result = await handler('get_market', {
|
|
262
|
-
identifier: 'btc-100k',
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
console.log(result);
|
|
266
|
-
```
|
|
236
|
+
**常见错误**: 钱包显示有 USDC,但 CTF 操作失败
|
|
237
|
+
**原因**: 你有的是 Native USDC,不是 USDC.e
|
|
238
|
+
**解决**: 使用 `deposit_usdc` 通过 Bridge 自动转换
|
|
267
239
|
|
|
268
|
-
|
|
240
|
+
---
|
|
269
241
|
|
|
270
|
-
|
|
271
|
-
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
272
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
273
|
-
import { PolymarketSDK } from '@catalyst-team/poly-sdk';
|
|
274
|
-
import { registerMcpTools } from '@catalyst-team/poly-mcp';
|
|
242
|
+
## 📦 发布
|
|
275
243
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const sdk = new PolymarketSDK();
|
|
282
|
-
registerMcpTools(server, sdk);
|
|
283
|
-
|
|
284
|
-
const transport = new StdioServerTransport();
|
|
285
|
-
await server.connect(transport);
|
|
244
|
+
```bash
|
|
245
|
+
# 按顺序发布 (有依赖关系)
|
|
246
|
+
pnpm -F @catalyst-team/cache publish
|
|
247
|
+
pnpm -F @catalyst-team/poly-sdk publish
|
|
248
|
+
pnpm -F @catalyst-team/poly-mcp publish
|
|
286
249
|
```
|
|
287
250
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
```
|
|
291
|
-
packages/poly-mcp/
|
|
292
|
-
├── src/
|
|
293
|
-
│ ├── index.ts # Main exports and handler factory
|
|
294
|
-
│ ├── server.ts # Standalone MCP server (CLI entry point)
|
|
295
|
-
│ ├── types.ts # TypeScript type definitions
|
|
296
|
-
│ ├── errors.ts # Error handling utilities
|
|
297
|
-
│ └── tools/
|
|
298
|
-
│ ├── index.ts # Tool exports
|
|
299
|
-
│ ├── trader.ts # Trader analysis tools
|
|
300
|
-
│ ├── market.ts # Market discovery tools
|
|
301
|
-
│ ├── order.ts # Orderbook analysis tools
|
|
302
|
-
│ ├── trade.ts # Trading execution tools
|
|
303
|
-
│ ├── wallet.ts # Deposit and authorization tools
|
|
304
|
-
│ └── guide.ts # Usage guide tool
|
|
305
|
-
├── docs/
|
|
306
|
-
│ └── 01-mcp.md # Detailed MCP design document
|
|
307
|
-
├── package.json
|
|
308
|
-
└── README.md
|
|
309
|
-
```
|
|
251
|
+
---
|
|
310
252
|
|
|
311
|
-
##
|
|
253
|
+
## 🔗 相关资源
|
|
312
254
|
|
|
313
|
-
- `@catalyst-team/poly-sdk` -
|
|
255
|
+
- **poly-sdk**: `@catalyst-team/poly-sdk` - Polymarket SDK
|
|
256
|
+
- **文档**: `docs/01-mcp.md` - 详细设计文档
|
|
257
|
+
- **Polymarket**: https://polymarket.com
|
|
314
258
|
|
|
315
259
|
## License
|
|
316
260
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Trader Tools E2E Test
|
|
2
|
+
|
|
3
|
+
> 交易者分析工具端到端测试
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 工具清单
|
|
8
|
+
|
|
9
|
+
| 工具 | 功能 | 认证 | 优先级 |
|
|
10
|
+
|------|------|------|--------|
|
|
11
|
+
| `get_leaderboard` | 获取 PnL 排行榜 | 无 | P1 |
|
|
12
|
+
| `get_trader_profile` | 获取交易者资料 | 无 | P1 |
|
|
13
|
+
| `get_trader_positions` | 获取持仓和 PnL | 无 | P0 |
|
|
14
|
+
| `get_trader_trades` | 获取交易历史 | 无 | P1 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Test Case 1: get_leaderboard
|
|
19
|
+
|
|
20
|
+
### 1.1 默认参数
|
|
21
|
+
```
|
|
22
|
+
调用: get_leaderboard()
|
|
23
|
+
预期: 返回 10 个交易者,按 PnL 排序
|
|
24
|
+
验证:
|
|
25
|
+
- traders 数组长度 = 10
|
|
26
|
+
- 每个 trader 有 rank, address, pnl, volume
|
|
27
|
+
- rank 从 1 开始递增
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 1.2 自定义 limit
|
|
31
|
+
```
|
|
32
|
+
调用: get_leaderboard(limit=5)
|
|
33
|
+
预期: 返回 5 个交易者
|
|
34
|
+
验证:
|
|
35
|
+
- traders 数组长度 = 5
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1.3 分页测试
|
|
39
|
+
```
|
|
40
|
+
调用: get_leaderboard(limit=5, offset=5)
|
|
41
|
+
预期: 返回第 6-10 名交易者
|
|
42
|
+
验证:
|
|
43
|
+
- 第一个 trader 的 rank = 6
|
|
44
|
+
- 与 offset=0 的结果不重叠
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Test Case 2: get_trader_profile
|
|
50
|
+
|
|
51
|
+
### 2.1 有效地址
|
|
52
|
+
```
|
|
53
|
+
前置: 从 leaderboard 获取一个地址
|
|
54
|
+
调用: get_trader_profile(address=<top_trader>)
|
|
55
|
+
预期: 返回完整的交易者资料
|
|
56
|
+
验证:
|
|
57
|
+
- trader.address 匹配
|
|
58
|
+
- ranking.rank 存在
|
|
59
|
+
- performance.officialPnl 存在
|
|
60
|
+
- stats.positionCount >= 0
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2.2 无效地址
|
|
64
|
+
```
|
|
65
|
+
调用: get_trader_profile(address="0x0000000000000000000000000000000000000000")
|
|
66
|
+
预期: 返回空数据或错误
|
|
67
|
+
验证:
|
|
68
|
+
- 错误信息清晰
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Test Case 3: get_trader_positions
|
|
74
|
+
|
|
75
|
+
### 3.1 有持仓的交易者
|
|
76
|
+
```
|
|
77
|
+
前置: 从 leaderboard 获取顶级交易者
|
|
78
|
+
调用: get_trader_positions(address=<top_trader>)
|
|
79
|
+
预期: 返回持仓列表和汇总
|
|
80
|
+
验证:
|
|
81
|
+
- positions 是数组
|
|
82
|
+
- 每个 position 有 market, holding, pnl
|
|
83
|
+
- summary.totalPositions 匹配 positions.length
|
|
84
|
+
- unrealizedPnl 和 realizedPnl 有值
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 3.2 无持仓的地址
|
|
88
|
+
```
|
|
89
|
+
调用: get_trader_positions(address=<new_address>)
|
|
90
|
+
预期: 返回空持仓列表
|
|
91
|
+
验证:
|
|
92
|
+
- positions = []
|
|
93
|
+
- summary.totalPositions = 0
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Test Case 4: get_trader_trades
|
|
99
|
+
|
|
100
|
+
### 4.1 默认参数
|
|
101
|
+
```
|
|
102
|
+
前置: 从 leaderboard 获取活跃交易者
|
|
103
|
+
调用: get_trader_trades(address=<active_trader>)
|
|
104
|
+
预期: 返回最近 20 笔交易
|
|
105
|
+
验证:
|
|
106
|
+
- trades 数组长度 <= 20
|
|
107
|
+
- 每笔交易有 side, outcome, size, price, timestamp
|
|
108
|
+
- 按时间倒序排列
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 4.2 过滤 BUY
|
|
112
|
+
```
|
|
113
|
+
调用: get_trader_trades(address=<trader>, side="BUY")
|
|
114
|
+
预期: 只返回买入交易
|
|
115
|
+
验证:
|
|
116
|
+
- 所有 trade.side = "BUY"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4.3 过滤 SELL
|
|
120
|
+
```
|
|
121
|
+
调用: get_trader_trades(address=<trader>, side="SELL")
|
|
122
|
+
预期: 只返回卖出交易
|
|
123
|
+
验证:
|
|
124
|
+
- 所有 trade.side = "SELL"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 4.4 自定义 limit
|
|
128
|
+
```
|
|
129
|
+
调用: get_trader_trades(address=<trader>, limit=5)
|
|
130
|
+
预期: 返回 5 笔交易
|
|
131
|
+
验证:
|
|
132
|
+
- trades.length <= 5
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 执行记录
|
|
138
|
+
|
|
139
|
+
| Test Case | 状态 | 结果 | 备注 |
|
|
140
|
+
|-----------|------|------|------|
|
|
141
|
+
| 1.1 get_leaderboard 默认 | - | - | - |
|
|
142
|
+
| 1.2 get_leaderboard limit | - | - | - |
|
|
143
|
+
| 1.3 get_leaderboard 分页 | - | - | - |
|
|
144
|
+
| 2.1 get_trader_profile 有效 | - | - | - |
|
|
145
|
+
| 2.2 get_trader_profile 无效 | - | - | - |
|
|
146
|
+
| 3.1 get_trader_positions 有持仓 | - | - | - |
|
|
147
|
+
| 3.2 get_trader_positions 无持仓 | - | - | - |
|
|
148
|
+
| 4.1 get_trader_trades 默认 | - | - | - |
|
|
149
|
+
| 4.2 get_trader_trades BUY | - | - | - |
|
|
150
|
+
| 4.3 get_trader_trades SELL | - | - | - |
|
|
151
|
+
| 4.4 get_trader_trades limit | - | - | - |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 发现的问题
|
|
156
|
+
|
|
157
|
+
| ID | 问题描述 | 严重性 | 状态 |
|
|
158
|
+
|----|---------|--------|------|
|
|
159
|
+
| - | - | - | - |
|