@catalyst-team/poly-sdk 0.1.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 (244) hide show
  1. package/.env +0 -0
  2. package/README.md +803 -0
  3. package/dist/__tests__/clob-api.test.d.ts +5 -0
  4. package/dist/__tests__/clob-api.test.d.ts.map +1 -0
  5. package/dist/__tests__/clob-api.test.js +240 -0
  6. package/dist/__tests__/clob-api.test.js.map +1 -0
  7. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  8. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  9. package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
  10. package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  11. package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
  12. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
  14. package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
  15. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  16. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
  18. package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  19. package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
  20. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  21. package/dist/__tests__/integration/data-api.integration.test.js +161 -0
  22. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
  23. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  24. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
  26. package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  27. package/dist/__tests__/test-utils.d.ts +92 -0
  28. package/dist/__tests__/test-utils.d.ts.map +1 -0
  29. package/dist/__tests__/test-utils.js +143 -0
  30. package/dist/__tests__/test-utils.js.map +1 -0
  31. package/dist/clients/bridge-client.d.ts +388 -0
  32. package/dist/clients/bridge-client.d.ts.map +1 -0
  33. package/dist/clients/bridge-client.js +587 -0
  34. package/dist/clients/bridge-client.js.map +1 -0
  35. package/dist/clients/clob-api.d.ts +318 -0
  36. package/dist/clients/clob-api.d.ts.map +1 -0
  37. package/dist/clients/clob-api.js +388 -0
  38. package/dist/clients/clob-api.js.map +1 -0
  39. package/dist/clients/ctf-client.d.ts +473 -0
  40. package/dist/clients/ctf-client.d.ts.map +1 -0
  41. package/dist/clients/ctf-client.js +915 -0
  42. package/dist/clients/ctf-client.js.map +1 -0
  43. package/dist/clients/data-api.d.ts +134 -0
  44. package/dist/clients/data-api.d.ts.map +1 -0
  45. package/dist/clients/data-api.js +265 -0
  46. package/dist/clients/data-api.js.map +1 -0
  47. package/dist/clients/gamma-api.d.ts +401 -0
  48. package/dist/clients/gamma-api.d.ts.map +1 -0
  49. package/dist/clients/gamma-api.js +352 -0
  50. package/dist/clients/gamma-api.js.map +1 -0
  51. package/dist/clients/trading-client.d.ts +252 -0
  52. package/dist/clients/trading-client.d.ts.map +1 -0
  53. package/dist/clients/trading-client.js +543 -0
  54. package/dist/clients/trading-client.js.map +1 -0
  55. package/dist/clients/websocket-manager.d.ts +100 -0
  56. package/dist/clients/websocket-manager.d.ts.map +1 -0
  57. package/dist/clients/websocket-manager.js +193 -0
  58. package/dist/clients/websocket-manager.js.map +1 -0
  59. package/dist/core/cache-adapter-bridge.d.ts +36 -0
  60. package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
  61. package/dist/core/cache-adapter-bridge.js +81 -0
  62. package/dist/core/cache-adapter-bridge.js.map +1 -0
  63. package/dist/core/cache.d.ts +40 -0
  64. package/dist/core/cache.d.ts.map +1 -0
  65. package/dist/core/cache.js +71 -0
  66. package/dist/core/cache.js.map +1 -0
  67. package/dist/core/errors.d.ts +38 -0
  68. package/dist/core/errors.d.ts.map +1 -0
  69. package/dist/core/errors.js +84 -0
  70. package/dist/core/errors.js.map +1 -0
  71. package/dist/core/rate-limiter.d.ts +31 -0
  72. package/dist/core/rate-limiter.d.ts.map +1 -0
  73. package/dist/core/rate-limiter.js +70 -0
  74. package/dist/core/rate-limiter.js.map +1 -0
  75. package/dist/core/types.d.ts +314 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +19 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/core/unified-cache.d.ts +63 -0
  80. package/dist/core/unified-cache.d.ts.map +1 -0
  81. package/dist/core/unified-cache.js +114 -0
  82. package/dist/core/unified-cache.js.map +1 -0
  83. package/dist/index.d.ts +94 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +258 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/mcp/errors.d.ts +33 -0
  88. package/dist/mcp/errors.d.ts.map +1 -0
  89. package/dist/mcp/errors.js +86 -0
  90. package/dist/mcp/errors.js.map +1 -0
  91. package/dist/mcp/index.d.ts +62 -0
  92. package/dist/mcp/index.d.ts.map +1 -0
  93. package/dist/mcp/index.js +173 -0
  94. package/dist/mcp/index.js.map +1 -0
  95. package/dist/mcp/server.d.ts +17 -0
  96. package/dist/mcp/server.d.ts.map +1 -0
  97. package/dist/mcp/server.js +155 -0
  98. package/dist/mcp/server.js.map +1 -0
  99. package/dist/mcp/tools/guide.d.ts +12 -0
  100. package/dist/mcp/tools/guide.d.ts.map +1 -0
  101. package/dist/mcp/tools/guide.js +801 -0
  102. package/dist/mcp/tools/guide.js.map +1 -0
  103. package/dist/mcp/tools/index.d.ts +11 -0
  104. package/dist/mcp/tools/index.d.ts.map +1 -0
  105. package/dist/mcp/tools/index.js +27 -0
  106. package/dist/mcp/tools/index.js.map +1 -0
  107. package/dist/mcp/tools/market.d.ts +11 -0
  108. package/dist/mcp/tools/market.d.ts.map +1 -0
  109. package/dist/mcp/tools/market.js +314 -0
  110. package/dist/mcp/tools/market.js.map +1 -0
  111. package/dist/mcp/tools/order.d.ts +10 -0
  112. package/dist/mcp/tools/order.d.ts.map +1 -0
  113. package/dist/mcp/tools/order.js +258 -0
  114. package/dist/mcp/tools/order.js.map +1 -0
  115. package/dist/mcp/tools/trade.d.ts +38 -0
  116. package/dist/mcp/tools/trade.d.ts.map +1 -0
  117. package/dist/mcp/tools/trade.js +314 -0
  118. package/dist/mcp/tools/trade.js.map +1 -0
  119. package/dist/mcp/tools/trader.d.ts +11 -0
  120. package/dist/mcp/tools/trader.d.ts.map +1 -0
  121. package/dist/mcp/tools/trader.js +277 -0
  122. package/dist/mcp/tools/trader.js.map +1 -0
  123. package/dist/mcp/tools/wallet.d.ts +274 -0
  124. package/dist/mcp/tools/wallet.d.ts.map +1 -0
  125. package/dist/mcp/tools/wallet.js +579 -0
  126. package/dist/mcp/tools/wallet.js.map +1 -0
  127. package/dist/mcp/types.d.ts +413 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +5 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/services/authorization-service.d.ts +97 -0
  132. package/dist/services/authorization-service.d.ts.map +1 -0
  133. package/dist/services/authorization-service.js +279 -0
  134. package/dist/services/authorization-service.js.map +1 -0
  135. package/dist/services/market-service.d.ts +108 -0
  136. package/dist/services/market-service.d.ts.map +1 -0
  137. package/dist/services/market-service.js +458 -0
  138. package/dist/services/market-service.js.map +1 -0
  139. package/dist/services/realtime-service.d.ts +82 -0
  140. package/dist/services/realtime-service.d.ts.map +1 -0
  141. package/dist/services/realtime-service.js +150 -0
  142. package/dist/services/realtime-service.js.map +1 -0
  143. package/dist/services/swap-service.d.ts +217 -0
  144. package/dist/services/swap-service.d.ts.map +1 -0
  145. package/dist/services/swap-service.js +695 -0
  146. package/dist/services/swap-service.js.map +1 -0
  147. package/dist/services/wallet-service.d.ts +94 -0
  148. package/dist/services/wallet-service.d.ts.map +1 -0
  149. package/dist/services/wallet-service.js +173 -0
  150. package/dist/services/wallet-service.js.map +1 -0
  151. package/dist/utils/price-utils.d.ts +153 -0
  152. package/dist/utils/price-utils.d.ts.map +1 -0
  153. package/dist/utils/price-utils.js +236 -0
  154. package/dist/utils/price-utils.js.map +1 -0
  155. package/docs/00-design.md +760 -0
  156. package/docs/01-mcp.md +2041 -0
  157. package/docs/02-API.md +1148 -0
  158. package/docs/e2e/01-trader-tools.md +159 -0
  159. package/docs/e2e/02-market-tools.md +180 -0
  160. package/docs/e2e/03-order-tools.md +166 -0
  161. package/docs/e2e/04-wallet-tools.md +224 -0
  162. package/docs/e2e/05-trading-tools.md +327 -0
  163. package/docs/e2e/06-integration-scenarios.md +481 -0
  164. package/docs/e2e/coordinator.md +376 -0
  165. package/examples/01-basic-usage.ts +68 -0
  166. package/examples/02-smart-money.ts +95 -0
  167. package/examples/03-market-analysis.ts +108 -0
  168. package/examples/04-kline-aggregation.ts +158 -0
  169. package/examples/05-follow-wallet-strategy.ts +156 -0
  170. package/examples/06-services-demo.ts +124 -0
  171. package/examples/07-realtime-websocket.ts +117 -0
  172. package/examples/08-trading-orders.ts +278 -0
  173. package/examples/09-rewards-tracking.ts +187 -0
  174. package/examples/10-ctf-operations.ts +336 -0
  175. package/examples/11-live-arbitrage-scan.ts +221 -0
  176. package/examples/12-trending-arb-monitor.ts +406 -0
  177. package/examples/README.md +179 -0
  178. package/package.json +62 -0
  179. package/scripts/README.md +163 -0
  180. package/scripts/approvals/approve-erc1155.ts +129 -0
  181. package/scripts/approvals/approve-neg-risk-erc1155.ts +149 -0
  182. package/scripts/approvals/approve-neg-risk.ts +102 -0
  183. package/scripts/approvals/check-all-allowances.ts +150 -0
  184. package/scripts/approvals/check-allowance.ts +129 -0
  185. package/scripts/approvals/check-ctf-approval.ts +158 -0
  186. package/scripts/datas/001-report.md +486 -0
  187. package/scripts/datas/clone-modal-screenshot.png +0 -0
  188. package/scripts/deposit/deposit-native-usdc.ts +179 -0
  189. package/scripts/deposit/deposit-usdc.ts +155 -0
  190. package/scripts/deposit/swap-usdc-to-usdce.ts +375 -0
  191. package/scripts/research/research-markets.ts +166 -0
  192. package/scripts/trading/check-orders.ts +50 -0
  193. package/scripts/trading/sell-nvidia-positions.ts +206 -0
  194. package/scripts/trading/test-order.ts +172 -0
  195. package/scripts/truth.md +440 -0
  196. package/scripts/verify/test-approve-trading.ts +98 -0
  197. package/scripts/verify/test-provider-fix.ts +43 -0
  198. package/scripts/verify/test-search-mcp.ts +113 -0
  199. package/scripts/verify/verify-all-apis.ts +160 -0
  200. package/scripts/wallet/check-wallet-balances.ts +75 -0
  201. package/scripts/wallet/test-wallet-operations.ts +191 -0
  202. package/scripts/wallet/verify-wallet-tools.ts +124 -0
  203. package/src/__tests__/clob-api.test.ts +301 -0
  204. package/src/__tests__/integration/bridge-client.integration.test.ts +314 -0
  205. package/src/__tests__/integration/clob-api.integration.test.ts +218 -0
  206. package/src/__tests__/integration/ctf-client.integration.test.ts +331 -0
  207. package/src/__tests__/integration/data-api.integration.test.ts +194 -0
  208. package/src/__tests__/integration/gamma-api.integration.test.ts +206 -0
  209. package/src/__tests__/test-utils.ts +170 -0
  210. package/src/clients/bridge-client.ts +841 -0
  211. package/src/clients/clob-api.ts +629 -0
  212. package/src/clients/ctf-client.ts +1216 -0
  213. package/src/clients/data-api.ts +469 -0
  214. package/src/clients/gamma-api.ts +597 -0
  215. package/src/clients/trading-client.ts +749 -0
  216. package/src/clients/websocket-manager.ts +267 -0
  217. package/src/core/cache-adapter-bridge.ts +94 -0
  218. package/src/core/cache.ts +85 -0
  219. package/src/core/errors.ts +117 -0
  220. package/src/core/rate-limiter.ts +74 -0
  221. package/src/core/types.ts +360 -0
  222. package/src/core/unified-cache.ts +153 -0
  223. package/src/index.ts +455 -0
  224. package/src/mcp/README.md +380 -0
  225. package/src/mcp/errors.ts +124 -0
  226. package/src/mcp/index.ts +309 -0
  227. package/src/mcp/server.ts +183 -0
  228. package/src/mcp/tools/guide.ts +821 -0
  229. package/src/mcp/tools/index.ts +73 -0
  230. package/src/mcp/tools/market.ts +363 -0
  231. package/src/mcp/tools/order.ts +326 -0
  232. package/src/mcp/tools/trade.ts +417 -0
  233. package/src/mcp/tools/trader.ts +322 -0
  234. package/src/mcp/tools/wallet.ts +683 -0
  235. package/src/mcp/types.ts +472 -0
  236. package/src/services/authorization-service.ts +357 -0
  237. package/src/services/market-service.ts +544 -0
  238. package/src/services/realtime-service.ts +196 -0
  239. package/src/services/swap-service.ts +896 -0
  240. package/src/services/wallet-service.ts +259 -0
  241. package/src/utils/price-utils.ts +307 -0
  242. package/tsconfig.json +8 -0
  243. package/vitest.config.ts +19 -0
  244. package/vitest.integration.config.ts +18 -0
@@ -0,0 +1,481 @@
1
+ # Integration Scenarios E2E Test
2
+
3
+ > 完整用户场景集成测试
4
+
5
+ ---
6
+
7
+ ## 场景概览
8
+
9
+ | 场景 | 描述 | 工具组合 | 认证需求 |
10
+ |------|------|---------|---------|
11
+ | Smart Money Analysis | 聪明钱分析 | Trader + Market | 无 |
12
+ | Market Discovery | 市场发现 | Market + Order | 无 |
13
+ | Copy Trading Setup | 跟单准备 | Trader + Market + Order | 无 |
14
+ | Arbitrage Check | 套利检查 | Market + Order | 无 |
15
+ | Trading Setup | 交易准备 | Wallet | 私钥 |
16
+ | Full Trading Flow | 完整交易流 | All | API Key |
17
+
18
+ ---
19
+
20
+ ## Scenario 1: Smart Money Analysis (聪明钱分析)
21
+
22
+ ### 目标
23
+ 分析顶级交易者的策略和持仓,发现潜在的投资机会。
24
+
25
+ ### 流程
26
+ ```
27
+ ┌─────────────────────────────────────────────────────────────┐
28
+ │ Step 1: get_leaderboard(limit=10) │
29
+ │ 获取排行榜前 10 名 │
30
+ └─────────────────────────────────────────────────────────────┘
31
+
32
+
33
+ ┌─────────────────────────────────────────────────────────────┐
34
+ │ Step 2: 对每个交易者调用 get_trader_profile │
35
+ │ 筛选: winRate > 60%, positionCount > 10 │
36
+ └─────────────────────────────────────────────────────────────┘
37
+
38
+
39
+ ┌─────────────────────────────────────────────────────────────┐
40
+ │ Step 3: get_trader_positions(address) │
41
+ │ 收集所有优质交易者的当前持仓 │
42
+ └─────────────────────────────────────────────────────────────┘
43
+
44
+
45
+ ┌─────────────────────────────────────────────────────────────┐
46
+ │ Step 4: 分析持仓重叠 │
47
+ │ 找出 >= 3 个交易者共同持有的市场 │
48
+ └─────────────────────────────────────────────────────────────┘
49
+
50
+
51
+ ┌─────────────────────────────────────────────────────────────┐
52
+ │ Step 5: get_market(conditionId) + get_orderbook │
53
+ │ 深入分析这些共识市场 │
54
+ └─────────────────────────────────────────────────────────────┘
55
+ ```
56
+
57
+ ### 测试用例
58
+ ```
59
+ 1. 调用 get_leaderboard(limit=10)
60
+ 验证: 返回 10 个交易者
61
+
62
+ 2. 选择前 3 名,调用 get_trader_profile
63
+ 记录: displayName, winRate, totalVolume
64
+
65
+ 3. 调用 get_trader_positions 获取持仓
66
+ 记录: 每个交易者持有的市场 conditionId 列表
67
+
68
+ 4. 找出共同持仓
69
+ 计算: 哪些 conditionId 出现次数 >= 2
70
+
71
+ 5. 获取共识市场详情
72
+ 调用: get_market 和 get_orderbook
73
+ 输出: 市场名称、当前价格、流动性
74
+ ```
75
+
76
+ ### 预期输出
77
+ ```
78
+ Smart Money Consensus Report
79
+ ============================
80
+
81
+ Top 3 Traders Analyzed:
82
+ 1. trader_a (Rank #1) - Win Rate: 72%, Volume: $1.2M
83
+ 2. trader_b (Rank #2) - Win Rate: 68%, Volume: $980K
84
+ 3. trader_c (Rank #3) - Win Rate: 65%, Volume: $850K
85
+
86
+ Consensus Positions (2+ traders agree):
87
+ ┌────────────────────────────┬─────────┬───────────┬────────────┐
88
+ │ Market │ Side │ Avg Price │ Traders │
89
+ ├────────────────────────────┼─────────┼───────────┼────────────┤
90
+ │ Bitcoin above $100k │ YES │ $0.45 │ 3/3 │
91
+ │ Fed rate cut Q1 2025 │ YES │ $0.62 │ 2/3 │
92
+ └────────────────────────────┴─────────┴───────────┴────────────┘
93
+ ```
94
+
95
+ ---
96
+
97
+ ## Scenario 2: Market Discovery (市场发现)
98
+
99
+ ### 目标
100
+ 发现高交易量、高流动性的投资机会。
101
+
102
+ ### 流程
103
+ ```
104
+ 1. get_trending_markets(sortBy="volume", limit=10)
105
+
106
+ 2. 对每个市场调用 get_market 获取详情
107
+
108
+ 3. 对每个市场调用 get_orderbook("Yes") 和 get_orderbook("No")
109
+
110
+ 4. 计算每个市场的:
111
+ - Spread (买卖差价)
112
+ - Depth (订单深度)
113
+ - Implied Probability
114
+
115
+ 5. 排序: 按 (低 Spread + 高 Depth) 综合评分
116
+
117
+ 6. 输出: Top 5 投资机会
118
+ ```
119
+
120
+ ### 测试用例
121
+ ```
122
+ 1. 获取趋势市场
123
+ 调用: get_trending_markets(sortBy="volume", limit=10)
124
+ 验证: 返回 10 个市场
125
+
126
+ 2. 获取订单簿
127
+ 对每个市场调用:
128
+ - get_orderbook(conditionId, "Yes")
129
+ - get_orderbook(conditionId, "No")
130
+ 记录: spread, bidDepth, askDepth
131
+
132
+ 3. 计算评分
133
+ score = (1 / spread) * (bidDepth + askDepth)
134
+
135
+ 4. 排序输出
136
+ ```
137
+
138
+ ### 预期输出
139
+ ```
140
+ Market Discovery Report
141
+ =======================
142
+
143
+ Top 5 Markets by Quality Score:
144
+ ┌────────────────────────────┬─────────┬────────┬───────────┬───────┐
145
+ │ Market │ Yes │ Spread │ Depth │ Score │
146
+ ├────────────────────────────┼─────────┼────────┼───────────┼───────┤
147
+ │ Presidential Election 2024 │ $0.52 │ 0.01 │ $500K │ 95 │
148
+ │ Bitcoin EOY Price │ $0.48 │ 0.02 │ $320K │ 82 │
149
+ │ Fed Decision Jan 2025 │ $0.35 │ 0.03 │ $180K │ 65 │
150
+ └────────────────────────────┴─────────┴────────┴───────────┴───────┘
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Scenario 3: Copy Trading Setup (跟单准备)
156
+
157
+ ### 目标
158
+ 监控特定交易者的新交易,准备跟单。
159
+
160
+ ### 流程
161
+ ```
162
+ 1. get_trader_profile(address) - 确认目标交易者
163
+
164
+ 2. get_trader_trades(address, limit=20) - 获取最近交易
165
+
166
+ 3. 识别最新的交易
167
+
168
+ 4. get_market(conditionId) - 获取市场当前状态
169
+
170
+ 5. get_best_prices(conditionId) - 获取当前最优价格
171
+
172
+ 6. estimate_execution(amount) - 估算跟单成本
173
+
174
+ 7. 输出: 跟单建议
175
+ ```
176
+
177
+ ### 测试用例
178
+ ```
179
+ 1. 选择一个活跃交易者
180
+ 调用: get_leaderboard(limit=1)
181
+ 获取: 排名第一的地址
182
+
183
+ 2. 获取最近交易
184
+ 调用: get_trader_trades(address, limit=10)
185
+ 找出: 最近 1 小时内的交易
186
+
187
+ 3. 分析交易
188
+ 对于每笔新交易:
189
+ - 市场是什么?
190
+ - 买入还是卖出?
191
+ - 价格是多少?
192
+
193
+ 4. 获取当前价格
194
+ 调用: get_market + get_best_prices
195
+
196
+ 5. 估算跟单成本
197
+ 调用: estimate_execution(amount=100)
198
+
199
+ 6. 输出建议
200
+ ```
201
+
202
+ ### 预期输出
203
+ ```
204
+ Copy Trading Alert
205
+ ==================
206
+
207
+ Target: whale_trader (Rank #1)
208
+ Recent Activity: 3 new trades in last hour
209
+
210
+ Trade #1 (5 mins ago):
211
+ - Market: Bitcoin above $100k by EOY
212
+ - Action: BUY YES
213
+ - Their Price: $0.42
214
+ - Current Price: $0.44
215
+ - Price Changed: +4.8%
216
+ - Recommendation: LATE (price moved)
217
+
218
+ Trade #2 (15 mins ago):
219
+ - Market: Fed rate cut Q1
220
+ - Action: BUY YES
221
+ - Their Price: $0.58
222
+ - Current Price: $0.59
223
+ - Price Changed: +1.7%
224
+ - Estimated Cost for $500: 847 shares @ $0.59
225
+ - Recommendation: CONSIDER
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Scenario 4: Arbitrage Check (套利检查)
231
+
232
+ ### 目标
233
+ 检查市场是否存在套利机会。
234
+
235
+ ### 流程
236
+ ```
237
+ 1. get_trending_markets(limit=20)
238
+
239
+ 2. 对每个市场:
240
+ get_best_prices(conditionId)
241
+
242
+ 3. 检查套利条件:
243
+ - 买入套利: yes.bestAsk + no.bestAsk < 1.0
244
+ - 卖出套利: yes.bestBid + no.bestBid > 1.0
245
+
246
+ 4. 如果发现套利:
247
+ estimate_execution 估算实际成本
248
+
249
+ 5. 计算扣除费用后的实际收益
250
+ ```
251
+
252
+ ### 测试用例
253
+ ```
254
+ 1. 获取市场列表
255
+ 调用: get_trending_markets(limit=20)
256
+
257
+ 2. 获取价格
258
+ 对每个市场调用: get_best_prices
259
+
260
+ 3. 检查套利
261
+ 对于每个市场:
262
+ if (yes.bestAsk + no.bestAsk < 0.99):
263
+ print("买入套利机会")
264
+ if (yes.bestBid + no.bestBid > 1.01):
265
+ print("卖出套利机会")
266
+
267
+ 4. 验证套利
268
+ 调用 estimate_execution 确认实际成本
269
+
270
+ 5. 计算净收益
271
+ profit = 1.0 - (yes_cost + no_cost) - fees
272
+ ```
273
+
274
+ ### 预期输出
275
+ ```
276
+ Arbitrage Scanner Report
277
+ ========================
278
+
279
+ Scanned: 20 markets
280
+ Found: 0 arbitrage opportunities
281
+
282
+ Analysis:
283
+ - Average Yes+No Ask Sum: 1.012
284
+ - Average Yes+No Bid Sum: 0.988
285
+ - Closest to Arbitrage: "Market XYZ" (sum: 1.003)
286
+
287
+ Note: Polymarket is generally efficient.
288
+ Arbitrage opportunities are rare and short-lived.
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Scenario 5: Trading Setup (交易准备)
294
+
295
+ ### 目标
296
+ 准备钱包进行交易。
297
+
298
+ ### 前置条件
299
+ - 配置了 POLY_PRIVATE_KEY
300
+
301
+ ### 流程
302
+ ```
303
+ 1. get_token_balances() - 检查余额
304
+
305
+ 2. check_allowances() - 检查授权
306
+
307
+ 3. 如果未授权:
308
+ approve_trading()
309
+
310
+ 4. 如果需要 USDC.e:
311
+ swap(MATIC/USDC -> USDC_E)
312
+
313
+ 5. 确认准备就绪
314
+ ```
315
+
316
+ ---
317
+
318
+ ## Scenario 6: Full Trading Flow (完整交易流)
319
+
320
+ ### 目标
321
+ 从发现市场到完成交易的完整流程。
322
+
323
+ ### 前置条件
324
+ - 配置了 API Key
325
+ - 完成了交易准备
326
+
327
+ ### 流程
328
+ ```
329
+ 1. Smart Money Analysis - 发现机会
330
+
331
+ 2. Market Discovery - 确认流动性
332
+
333
+ 3. estimate_execution - 预估成本
334
+
335
+ 4. place_limit_order - 下单
336
+
337
+ 5. get_my_orders - 监控订单
338
+
339
+ 6. (可选) cancel_order - 取消/调整
340
+ ```
341
+
342
+ ---
343
+
344
+ ## 执行记录
345
+
346
+ ### 2025-12-23 测试结果
347
+
348
+ | Scenario | 状态 | 结果 | 备注 |
349
+ |----------|------|------|------|
350
+ | 1. Smart Money Analysis | ✅ PASS | 成功分析 Top 3 交易者 | 发现 Grizzlies/Pistons 共识 |
351
+ | 2. Market Discovery | ✅ PASS | 发现热门市场 | 部分体育市场已结算 |
352
+ | 3. Copy Trading Setup | ✅ PASS | 分析 #1 交易者交易 | 建议:当前不适合跟单(卖出模式) |
353
+ | 4. Arbitrage Check | ✅ PASS | 扫描 20 市场 | 无套利机会(市场有效) |
354
+ | 5. Trading Setup | ⚠️ PARTIAL | 4/5 步骤通过 | approve_trading 需要修复 provider |
355
+ | 6. Full Trading Flow | ⚠️ BLOCKED | 需要 USDC | 钱包有 MATIC 但无 USDC |
356
+
357
+ ---
358
+
359
+ ### Scenario 1 详细结果: Smart Money Analysis
360
+
361
+ **Top 3 Traders:**
362
+
363
+ | Rank | Address | Display Name | Win Rate | Volume | PnL |
364
+ |------|---------|--------------|----------|--------|-----|
365
+ | 1 | 0x4259...936f | antman-batman-superman-lakers-in-5 | 50% | $135K | $175K |
366
+ | 2 | 0xcd9b...414d | BITCOINTO500K | 44.4% | -$127K | $87K |
367
+ | 3 | 0x4924...3782 | (unnamed) | 50% | $21K | $56K |
368
+
369
+ **共识持仓**: Trader 2 和 3 对 Grizzlies vs. Thunder、Pistons 赛事有共同兴趣
370
+
371
+ ---
372
+
373
+ ### Scenario 2 详细结果: Market Discovery
374
+
375
+ **Top Markets by Quality:**
376
+
377
+ | Market | Yes Price | Spread | Total Depth |
378
+ |--------|-----------|--------|-------------|
379
+ | Fed Rate Increase Jan 2026 | 0.65c | 0.1c | $36.96M |
380
+ | TikTok Sale 2025 | 99.45c | 0.1c | $720K |
381
+ | China Invades Taiwan 2025 | 0.3c | 0.2c | $1.52M |
382
+
383
+ ---
384
+
385
+ ### Scenario 3 详细结果: Copy Trading Setup
386
+
387
+ **目标交易者**: antman-batman-superman-lakers-in-5 (Rank #1)
388
+
389
+ **最近活动**: 10 笔交易全部是 SELL(卖出)
390
+ - 49ers Spread: 卖出 Colts @ $0.39-0.40
391
+ - Utah State: 卖出 @ $0.001(清仓亏损持仓)
392
+
393
+ **跟单建议**: ❌ 不建议此时跟单
394
+ - 交易者处于退出模式
395
+ - 建议等待 BUY 信号
396
+
397
+ ---
398
+
399
+ ### Scenario 4 详细结果: Arbitrage Check
400
+
401
+ **扫描结果**:
402
+ - 市场扫描: 20 个
403
+ - 套利机会: 0 个
404
+ - 最接近套利: Yes+No Ask = 1.001 (偏离 0.1%)
405
+
406
+ **结论**: Polymarket 市场定价有效,无风险套利不可行
407
+
408
+ ---
409
+
410
+ ### Scenario 5 详细结果: Trading Setup
411
+
412
+ **测试钱包**: `0xed1050F19F2D5890FF29c2f7416de97e68069171`
413
+
414
+ **Step 1: Token Balances** ✅
415
+ | Token | Balance |
416
+ |-------|---------|
417
+ | MATIC | 200.0 |
418
+ | USDC | 0.0 |
419
+ | USDC.e | 0.0 |
420
+
421
+ **Step 2: Allowances Check** ✅
422
+
423
+ Trading Ready: **No**
424
+
425
+ 缺失授权 (7 项):
426
+ - ERC20: CTF Exchange, Neg Risk CTF Exchange, Neg Risk Adapter, Conditional Tokens
427
+ - ERC1155: CTF Exchange, Neg Risk CTF Exchange, Neg Risk Adapter
428
+
429
+ **Step 3: Approve Trading** ❌
430
+ - 错误: `missing provider (operation="call")`
431
+ - 原因: Provider/Signer 配置问题
432
+
433
+ **Step 4: Deposit Addresses** ✅
434
+ | Network | Address |
435
+ |---------|---------|
436
+ | EVM | 0x6c809Ad3fE0039Cb9E5bFC2b313854b59561909F |
437
+ | Solana | BPQrhLN38pCqkv8HfdMEpjgy6ZqfKyZyn8BmfZGaZJUc |
438
+ | Bitcoin | bc1qamd5v4djapa0a905aurcq9apc2nyjldmd8kzw6 |
439
+
440
+ **Step 5: Supported Assets** ✅
441
+ - 12 链
442
+ - 207 种资产
443
+
444
+ **结论**: 只读操作正常,写操作 (approve_trading, swap) 因 provider 配置问题失败
445
+
446
+ ---
447
+
448
+ ### Scenario 6: Full Trading Flow
449
+
450
+ **状态**: BLOCKED
451
+
452
+ **阻塞原因**:
453
+ 1. 钱包没有 USDC(只有 MATIC)
454
+ 2. 交易授权未设置
455
+ 3. Provider 配置问题导致无法执行 swap 和 approve
456
+
457
+ **前置条件**:
458
+ 1. 修复 poly-sdk 的 provider 初始化问题
459
+ 2. 执行 `approve_trading()` 授权
460
+ 3. 执行 `swap(MATIC, USDC, amount)` 获取 USDC
461
+ 4. 然后才能执行完整交易流程
462
+
463
+ ---
464
+
465
+ ## 发现的问题
466
+
467
+ | ID | 场景 | 问题描述 | 严重性 | 状态 |
468
+ |----|------|---------|--------|------|
469
+ | 1 | 2 | 已结算体育市场仍出现在 trending 结果中 | Medium | ✅ FIXED |
470
+ | 2 | 2 | get_market 返回陈旧的 slug 数据 | Low | ✅ FIXED |
471
+ | 3 | 1,4 | 11/20 市场查询 best_prices 返回 "Missing tokens" | Medium | Noted |
472
+ | 4 | 1 | leaderboard PnL 与 profile PnL 不一致 | Low | ✅ FIXED |
473
+ | 5 | 3 | 部分市场 tokenId 为空,无法查询价格 | Medium | Noted |
474
+ | 6 | 5 | approve_trading/swap 失败: "missing provider" | High | 待修复 |
475
+ | 7 | 5 | get_token_balances 失败: "Cannot read properties of null" | Medium | 待修复 |
476
+
477
+ ### 修复说明
478
+
479
+ - **Issue #1**: `get_trending_markets` 现在添加了 `closed: false` 过滤和 `endDate < now` 检查
480
+ - **Issue #2**: `getMarketByConditionId` 现在总是尝试获取 Gamma 数据,CLOB slug 不匹配时使用回退值
481
+ - **Issue #4**: `get_trader_profile` 现在显示 `officialPnl`(来自 leaderboard)并添加差异说明