4f7fef145f
- Backend: Spring Boot + Kotlin implementation - Account management with private key import - Leader management - Copy trading configuration - Order synchronization - Balance and position queries via Polymarket API - Ethereum RPC integration for USDC balance - Proxy address calculation - Frontend: React + TypeScript - Account management UI - Mobile responsive design - Account import with private key/mnemonic support - Balance display and account details modal - Database: MySQL with Flyway migrations - API Integration: Polymarket CLOB API, Data API, Ethereum RPC
6.5 KiB
6.5 KiB
后端实现总结
已完成的工作
1. 项目基础结构 ✅
- ✅ 创建了完整的后端项目目录结构
- ✅ 配置了
application.properties配置文件 - ✅ 创建了 Spring Boot 主应用类
- ✅ 配置了 Gradle 构建文件
2. 工具类 ✅
从 /Users/wrbug/hype-quant/quant/src/main/kotlin/com/hypequant/util 拷贝并适配了以下工具类:
- ✅
SafeConvertExt.kt- 安全类型转换扩展函数 - ✅
MathExt.kt- BigDecimal 数学运算扩展函数 - ✅
SystemExt.kt- 系统环境变量工具 - ✅
OkHttpExt.kt- OkHttp 客户端扩展函数 - ✅
CategoryValidator.kt- 分类验证工具类(新增)
3. Polymarket API 封装 ✅
3.1 CLOB API ✅
- ✅ 定义了
PolymarketClobApi接口 - ✅ 实现了
PolymarketClobService服务封装 - ✅ 支持的功能:
- 获取订单簿
- 获取价格信息
- 获取中间价
- 创建订单
- 获取活跃订单
- 取消订单
- 获取交易记录
3.2 Gamma API ✅
- ✅ 定义了
PolymarketGammaApi接口 - ✅ 实现了
PolymarketGammaService服务封装 - ✅ 支持的功能:
- 获取市场列表(带分类验证)
- 获取市场详情
- 搜索市场(带分类验证)
- 获取事件列表(带分类验证)
- 获取体育市场
- 获取加密货币市场
4. WebSocket 转发服务 ✅
- ✅ 实现了
PolymarketWebSocketHandler- WebSocket 处理器 - ✅ 实现了
PolymarketWebSocketClient- Polymarket RTDS 客户端 - ✅ 配置了
WebSocketConfig- WebSocket 配置 - ✅ 支持双向消息转发:
- 前端 → 后端 → Polymarket RTDS
- Polymarket RTDS → 后端 → 前端
5. 统一响应格式 ✅
- ✅ 创建了
ApiResponse统一响应格式 - ✅ 提供了便捷的响应创建方法:
success()- 成功响应error()- 错误响应paramError()- 参数错误authError()- 认证错误notFound()- 资源不存在businessError()- 业务逻辑错误serverError()- 服务器错误
6. Controller 实现 ✅
- ✅ 实现了
MarketController- 市场相关接口 - ✅ 提供的接口:
POST /api/markets/list- 获取市场列表POST /api/markets/detail- 获取市场详情POST /api/markets/search- 搜索市场POST /api/markets/sports- 获取体育市场POST /api/markets/crypto- 获取加密货币市场
7. 配置类 ✅
- ✅
RetrofitConfig- Retrofit 和 API 客户端配置 - ✅
WebSocketConfig- WebSocket 配置
项目结构
backend/
├── src/main/kotlin/com/wrbug/polymarketbot/
│ ├── api/ # API 接口定义
│ │ ├── PolymarketClobApi.kt
│ │ └── PolymarketGammaApi.kt
│ ├── config/ # 配置类
│ │ ├── RetrofitConfig.kt
│ │ └── WebSocketConfig.kt
│ ├── controller/ # 控制器
│ │ └── MarketController.kt
│ ├── dto/ # 数据传输对象
│ │ └── ApiResponse.kt
│ ├── service/ # 服务层
│ │ ├── PolymarketClobService.kt
│ │ └── PolymarketGammaService.kt
│ ├── util/ # 工具类
│ │ ├── SafeConvertExt.kt
│ │ ├── MathExt.kt
│ │ ├── SystemExt.kt
│ │ ├── OkHttpExt.kt
│ │ └── CategoryValidator.kt
│ ├── websocket/ # WebSocket 处理
│ │ ├── PolymarketWebSocketHandler.kt
│ │ └── PolymarketWebSocketClient.kt
│ └── PolymarketBotApplication.kt # 主应用类
├── src/main/resources/
│ └── application.properties # 配置文件
├── build.gradle.kts # Gradle 构建配置
└── settings.gradle.kts # Gradle 设置
关键特性
1. 分类验证
所有涉及分类的接口都会验证分类参数,仅支持 sports 和 crypto:
// 自动验证分类
CategoryValidator.validate(category)
2. 统一错误处理
所有接口统一返回 ApiResponse 格式,包含:
code: 错误码data: 响应数据msg: 错误消息
3. WebSocket 转发
前端通过 ws://localhost:8000/ws/polymarket 连接,后端自动转发到 Polymarket RTDS。
4. 异步支持
所有 API 调用使用 Kotlin Coroutines 的 suspend 函数,Controller 层使用 runBlocking 调用。
依赖说明
主要依赖:
- Spring Boot 3.2.0
- Kotlin 1.9.20
- Retrofit 2.9.0
- OkHttp 4.12.0
- Java-WebSocket 1.5.4
- MySQL Connector 8.2.0
配置说明
环境变量
DB_USERNAME: 数据库用户名DB_PASSWORD: 数据库密码SERVER_PORT: 服务器端口(默认 8000)POLYMARKET_API_KEY: Polymarket API Key(可选)
application.properties
# Polymarket API 配置
polymarket.clob.base-url=https://clob.polymarket.com
polymarket.gamma.base-url=https://gamma-api.polymarket.com
polymarket.rtds.ws-url=wss://ws-live-data.polymarket.com
polymarket.api-key=${POLYMARKET_API_KEY:}
使用示例
1. 获取市场列表
curl -X POST http://localhost:8000/api/markets/list \
-H "Content-Type: application/json" \
-d '{
"category": "sports",
"active": true,
"limit": 20
}'
2. WebSocket 连接
const ws = new WebSocket('ws://localhost:8000/ws/polymarket');
ws.onopen = () => {
// 订阅市场数据
ws.send(JSON.stringify({
type: 'subscribe',
channel: 'market',
market: 'market_id'
}));
};
ws.onmessage = (event) => {
console.log('收到消息:', event.data);
};
下一步工作
-
数据库实体和 Repository
- 创建 Market、Order、Trade 等实体类
- 实现对应的 Repository 接口
- 创建 Flyway 迁移脚本
-
数据同步服务
- 实现市场数据同步任务
- 实现价格更新任务
- 实现订单状态同步
-
订单管理 Controller
- 实现订单创建接口
- 实现订单查询接口
- 实现订单取消接口
-
测试
- 单元测试
- 集成测试
- API 测试
-
文档
- API 文档
- 部署文档
注意事项
- 分类限制: 严格限制只支持
sports和crypto两个分类 - WebSocket: 生产环境需要配置正确的 CORS 策略
- API Key: 某些接口需要配置 Polymarket API Key
- 错误处理: 所有异常都会被捕获并返回统一格式的错误响应