diff --git a/CHECK_AND_FIX_REPORT.md b/CHECK_AND_FIX_REPORT.md deleted file mode 100644 index f8eb54a..0000000 --- a/CHECK_AND_FIX_REPORT.md +++ /dev/null @@ -1,37 +0,0 @@ -# PolyHermes 动态更新功能 - 遗漏检查与修复报告 - -## 检查时间 -2026-01-21 03:00 - -## ✅ 已发现并修复的遗漏 - -### 1. docker-compose.prod.yml 环境变量 -- **问题**: 生产环境部署文件缺少 `ALLOW_PRERELEASE` 和 `GITHUB_REPO`。 -- **修复**: 已添加到 `docker-compose.prod.yml`。 - -### 2. 后端权限验证端点 -- **问题**: `/api/auth/verify` 端点缺失,导致 Python 更新服务无法验证管理员权限。 -- **修复**: 已在 `AuthController` 中添加 `/verify` 接口,仅允许 ADMIN 角色访问。 - -### 3. README.md 文档 -- **问题**: 未提及新功能。 -- **修复**: 已在 README 中添加"动态更新"功能说明及文档链接。 - -### 4. Docker Python 依赖优化 -- **问题**: 使用 `pip install` 可能导致依赖冲突或安装缓慢。 -- **修复**: 替换为 `apt-get install python3-flask python3-requests`,使用系统包更稳定、快速,且减小镜像体积。 - ---- - -## 🏁 最终状态 - -所有已知的遗漏都已检查并修复。系统现已准备好进行集成测试。 - -### 建议测试步骤 - -1. **本地构建测试**: `./deploy.sh` 验证 Dockerfile 更改(系统包安装)。 -2. **后端测试**: 验证 `/api/auth/verify` 接口(需登录并在 Header 带上 Token)。 -3. **流程测试**: 按计划进行 Pre-release 测试。 - ---- -**状态**: ✅ **全功能就绪,已加固** diff --git a/IMPLEMENTATION_COMPLETE.md b/IMPLEMENTATION_COMPLETE.md deleted file mode 100644 index f801e54..0000000 --- a/IMPLEMENTATION_COMPLETE.md +++ /dev/null @@ -1,301 +0,0 @@ -# PolyHermes 动态更新功能实施完成总结 - -## ✅ 全部完成! - -**实施时间**: 2026-01-21 -**总文件修改**: 12个 -**前端新增**: 1个组件 -**后端新增**: 1个服务 -**总代码行数**: 约2000行 - ---- - -## 📂 文件清单 - -### 后端实施(已完成) -1. ✅ `Dockerfile` - 混合编译方案 -2. ✅ `docker/update-service.py` - P Python Flask 更新服务(573行) -3. ✅ `docker/start.sh` - 启动3个进程 -4. ✅ `docker/nginx.conf` - Nginx 代理配置 -5. ✅ `docker-compose.yml` - 环境变量 -6. ✅ `docker-compose.test.yml` - 测试环境 -7. ✅ `.github/workflows/docker-build.yml` - CI/CD - -### 前端实施(已完成) -8. ✅ `frontend/src/pages/SystemUpdate.tsx` - 系统更新组件(334行) -9. ✅ `frontend/src/pages/SystemSettings.tsx` - 集成到系统设置 - -### 文档 -10. ✅ `docs/zh/DYNAMIC_UPDATE.md` - 完整技术文档 -11. ✅ `docs/zh/IMPLEMENTATION_SUMMARY.md` - 实施总结 -12. ✅ `verify-implementation.sh` - 验证脚本 - ---- - -## 🎯 核心功能 - -### 1. 混合编译策略 -- **GitHub Actions**: 编译1次,8分钟完成 -- **本地 deploy.sh**: 完全兼容,Docker内编译 -- **构建参数**: `BUILD_IN_DOCKER` 控制编译位置 - -### 2. Pre-release 测试 -- 测试版本不推送 `latest` 标签 -- 测试版本不触发 Telegram 通知 -- 环境变量 `ALLOW_PRERELEASE=true` 启用检测 - -### 3. 更新流程 -``` -检查版本 → 下载更新包 → 备份 → 替换文件 → 重启服务 → 健康检查 → 回滚(失败时) -``` - -### 4. 架构特点 -- **Nginx 直接代理**: `/api/update/*` → Python:9090 -- **权限验证**: Python 调用后端 `/api/auth/verify` -- **独立服务**: 更新服务与主应用分离 -- **版本追踪**: `/app/version.json` - -### 5. 前端UI -- 实时进度显示 -- 版本对比 -- Release Notes 展示 -- 一键升级 -- 自动刷新 - ---- - -## 🚀 使用流程 - -### 开发测试(Pre-release) - -```bash -# 1. 提交代码 -git add . -git commit -m "feat: 动态更新功能" -git push origin dynamic_load - -# 2. 创建测试 tag -git tag v1.3.0-beta -git push origin v1.3.0-beta - -# 3. GitHub 创建 Pre-release -# - Tag: v1.3.0-beta -# - ✅ 勾选 "This is a pre-release" -# - 发布 - -# 4. GitHub Actions 自动执行 -# - 编译前后端 -# - 打包更新包 -# - 上传到 Release Assets -# - 构建 Docker 镜像(仅 v1.3.0-beta 标签) -# -❌不推送 latest -# - ❌ 不发送 Telegram - -# 5. 测试环境部署 -docker pull wrbug/polyhermes:v1.3.0-beta -docker-compose -f docker-compose.test.yml up -d - -# 6. 测试更新功能 -# - 访问系统设置 → 系统更新 -# - 点击"检查更新"(应该检测到 v1.3.0-beta) -# - 点击"立即升级" -# - 验证更新流程 -``` - -### 生产发布 - -```bash -# 测试通过后,创建正式版本 -git tag v1.3.0 -git push origin v1.3.0 - -# GitHub 创建 Release -# - Tag: v1.3.0 -# - ❌ 不勾选 "pre-release" -# - 发布 - -# GitHub Actions 自动执行 -# - 编译前后端 -# - 打包更新包 -# - 上传到 Release Assets -# - 构建 Docker 镜像(v1.3.0 + latest) -# - ✅ 推送 latest -# - ✅ 发送 Telegram 通知 - -# 生产环境更新 -# 1. 用户访问系统设置 → 系统更新 -# 2. 点击"检查更新" -# 3. 点击"立即升级" -# 4. 等待30-60秒 -# 5. 页面自动刷新 -``` - ---- - -## 📋 验证清单 - -运行验证脚本: -```bash -./verify-implementation.sh -``` - -**预期输出**: -``` -======================================== - PolyHermes 动态更新功能验证 -======================================== - -📋 检查文件... - ✅ Dockerfile - ✅ docker/update-service.py - ✅ docker/start.sh - ✅ docker/nginx.conf - ✅ docker-compose.yml - ✅ docker-compose.test.yml - ✅ .github/workflows/docker-build.yml - ✅ docs/zh/DYNAMIC_UPDATE.md - -📋 检查关键配置... - ✅ Dockerfile 包含 BUILD_IN_DOCKER 参数 - ✅ Dockerfile 安装 Python - ✅ Nginx 配置包含更新服务代理 - ✅ docker-compose.yml 包含 ALLOW_PRERELEASE - ✅ GitHub Actions 包含 Pre-release 检测 - ✅ GitHub Actions 包含后端编译步骤 - -📋 检查 Python 语法... - ✅ update-service.py 语法正确 - -======================================== - ✅ 验证通过!所有检查项正常 -======================================== -``` - ---- - -## ⚠️ 注意事项 - -### 必须检查的端点 - -1. **健康检查端点**: `/api/system/health` - - 用于检查后端服务是否正常 - - 如果不存在,需要修改 `Dockerfile` 和 `start.sh` 中的健康检查URL - -2. **权限验证端点**: `/api/auth/verify` - - 用于验证管理员权限 - - 如果不存在,有两个选择: - - 在后端创建此端点 - - 或修改 `update-service.py` 中的权限验证逻辑 - ---- - -## 🎨 前端UI特性 - -- ✅ 当前版本显示 -- ✅ 检查更新按钮 -- ✅ 更新信息展示(版本、发布时间、Release Notes) -- ✅ 实时进度条(0-100%) -- ✅ 状态消息显示 -- ✅ 一键升级按钮 -- ✅ 错误处理和显示 -- ✅ 更新成功后自动刷新 -- ✅ 使用说明提示 - ---- - -## 📚 API 文档 - -### 前端调用的API - -| 端点 | 方法 | 说明 | 权限 | -|------|------|------|------| -| `/api/update/version` | GET | 获取当前版本 | 无 | -| `/api/update/check` | GET | 检查更新 | 无 | -| `/api/update/execute` | POST | 执行更新 | Admin | -| `/api/update/status` | GET | 获取更新状态 | 无 | -| `/api/update/logs` | GET | 获取更新日志 | Admin | - -### 响应格式 - -```json -{ - "code": 0, - "data": { - ... - }, - "message": "success" -} -``` - ---- - -## 🐛 故障排查 - -### 问题1:健康检查失败 - -**错误信息**: `后端服务启动超时` - -**解决方案**: -```bash -# 检查健康检查端点 -curl http://localhost:8000/api/system/health - -# 如果404,修改 Dockerfile 和 start.sh -# 将 /api/system/health 改为实际存在的端点 -``` - -### 问题2:权限验证失败 - -**错误信息**: `需要管理员权限` - -**解决方案**: -1. 确保前端已登录且有 Admin Token -2. 检查 `/api/auth/verify` 端点是否存在 -3. 或修改 `update-service.py` 的权限验证逻辑 - -### 问题3:更新包下载失败 - -**错误信息**: `下载更新包失败` - -**可能原因**: -- GitHub Release 未发布 -- 更新包文件名不符合规范 -- 网络连接问题 - -**解决方案**: -```bash -# 检查 Release Assets -curl https://api.github.com/repos/WrBug/PolyHermes/releases/latest - -# 确保文件名格式:polyhermes-{tag}-update.tar.gz -``` - ---- - -## 📊 性能指标 - -| 指标 | 数值 | -|------|------| -| **GitHub Actions 构建时间** | ~8分钟 | -| **更新包大小** | ~50MB | -| **更新总时长** | 30-60秒 | -| **下载时间** | 5-15秒(依网络)| -| **备份时间** | 2-5秒 | -| **解压时间** | 2-3秒 | -| **重启时间** | 10-15秒 | -| **健康检查** | 最多30秒 | - ---- - -##✅ 实施完成状态 - -**后端**: ✅ 100% 完成 -**前端**: ✅ 100% 完成 -**文档**: ✅ 100% 完成 -**测试**: ⏳ 待验证 - ---- - -**状态**: 🎉 **实施完成,准备测试!** - -**下一步**: 创建 Pre-release 进行测试验证 diff --git a/MISSING_ITEMS_CHECK.md b/MISSING_ITEMS_CHECK.md deleted file mode 100644 index a77abed..0000000 --- a/MISSING_ITEMS_CHECK.md +++ /dev/null @@ -1,31 +0,0 @@ -# PolyHermes 动态更新功能 - 遗漏检查报告 - -## 检查时间 -2026-01-21 01:46 - -## 已发现并修复的遗漏 - -### 1. ✅ docker-compose.prod.yml 缺少环境变量 -**问题**: 生产环境配置文件缺少动态更新相关的环境变量 -**修复**: 已添加 `ALLOW_PRERELEASE` 和 `GITHUB_REPO` 环境变量 - -### 2. ✅ 后端缺少权限验证端点 -**问题**: Python 更新服务需要调用 `/api/auth/verify` 验证管理员权限,但该端点不存在 -**修复**: 已在 `AuthController.kt` 中添加 `verify` 端点 - -## 继续检查项目 - -### 3. 备份文件检查 -检查是否有遗留的备份文件需要清理... - -### 4. .gitignore 文件 -检查是否需要添加临时文件到 .gitignore... - -### 5. 前端国际化 -检查是否需要为系统更新添加多语言支持... - -### 6. README 文档 -检查是否需要更新 README 说明新功能... - -### 7. 依赖检查 -检查 Python 依赖是否完整(Flask, requests)... diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100644 index d4fcbdc..0000000 --- a/RELEASE.md +++ /dev/null @@ -1,971 +0,0 @@ -# v1.1.10 - -## 🚀 主要功能 - -### 📢 推送已过滤订单功能 - -- **新增推送已过滤订单功能(pushFilteredOrders)**,默认关闭 - - 支持在模板和跟单配置中配置是否推送被过滤的订单通知 - - 开启后,当订单因过滤条件(价格区间、订单深度、价差、仓位限制等)被过滤时,会发送 Telegram 通知 - - 帮助用户了解哪些订单被过滤以及过滤原因 - -- **数据库迁移**: - - 添加 `push_filtered_orders` 字段到 `copy_trading_templates` 表 - - 添加 `push_filtered_orders` 字段到 `copy_trading` 表 - - 迁移脚本:`V24__add_push_filtered_orders_to_templates.sql` - -- **后端实现**: - - 在实体类(`CopyTradingTemplate`、`CopyTrading`)中添加 `pushFilteredOrders` 字段 - - 在 DTO 中添加字段支持(创建、更新、查询) - - 在 Service 中处理字段的创建、更新和传递 - - 在发送过滤订单通知时检查 `pushFilteredOrders` 字段,只有为 `true` 时才发送 - -- **前端实现**: - - 在模板新增、编辑、推送页面添加"推送已过滤订单"开关 - - 在跟单配置新增、编辑页面添加"推送已过滤订单"开关 - - 从模板创建跟单配置时,自动填充 `pushFilteredOrders` 字段 - - 支持多语言(中文、繁体中文、英文) - -### 🔍 优化订单列表筛选功能 - -- **支持按市场标题搜索**: - - 买入订单列表:添加市场标题筛选,移除方向筛选 - - 卖出订单列表:添加市场标题筛选,将方向筛选改为状态筛选 - - 已成交订单列表:添加市场标题筛选和市场列显示 - -- **改进分组体验**: - - 记录用户的分组偏好到 localStorage,跨会话持久化 - - 所有搜索输入框添加 0.5 秒防抖优化,提升性能 - -- **后端优化**: - - `MarketGroupedOrdersRequest` 添加 `marketId` 和 `marketTitle` 字段 - - 买入/卖出订单分组接口支持市场 ID 模糊匹配和市场标题关键字筛选 - -### ⚡ 优化跟单关系统计性能 - -- **移除未实现盈亏计算**: - - 移除未实现盈亏和持仓价值的计算逻辑 - - 总盈亏现在仅包含已实现盈亏,计算更准确 - - 简化盈亏百分比计算,仅基于已实现盈亏 - -- **性能提升**: - - 从 1+N 次网络请求减少到 0 次 - - 删除不再使用的方法和依赖注入 - - 统计查询速度显著提升 - -### 🐳 Docker 容器时区配置 - -- **支持通过 .env 自定义时区**: - - 在 `docker-compose.yml` 和 `docker-compose.prod.yml` 中添加时区环境变量配置 - - 支持通过 `TZ` 环境变量自定义容器时区 - - 默认使用系统时区 - -## 🐛 Bug 修复 - -### 修复跟单配置更新时清空可选字段无法保存的问题 - -- **问题**:修改跟单配置时,清空价格区间、最大仓位数量、截止时间等可选字段后,无法保存到数据库 -- **修复**: - - 修复价格区间(`minPrice`/`maxPrice`)清空后无法保存的问题 - - 修复最大仓位数量(`maxPositionCount`)清空后无法保存的问题 - - 修复市场截止时间(`maxMarketEndDate`)清空后无法保存的问题 - - 修复其他可选字段(`minOrderDepth`/`maxSpread`/`maxPositionValue`)清空后无法保存的问题 - -- **实现方案**: - - 前端:清空字段时传空字符串或 `-1` 标记,让后端识别为清空操作 - - 后端:处理空字符串和 `-1` 标记,正确设置为 `null` 以清空字段 - -### 修复新建和编辑页面的截止时间输入框交互问题 - -- **问题**:删除截止时间输入框内容后,失去焦点会自动填充 1 -- **修复**: - - 将 `min` 从 `1` 改为 `0`,允许空值 - - 优化 `onChange` 处理,当值为 `0`、`null` 或 `undefined` 时设置为 `undefined`(清空) - - 添加 `onBlur` 处理,确保失去焦点时如果值为空或 `0`,设置为 `undefined` - - 修改 `parser`,空值时返回空字符串而不是 `0` - -### 修复订单通知重复发送和时间显示问题 - -- **修复并发导致的重复通知问题**: - - 在 `OrderStatusUpdateService` 中实现双重检查机制 - - 先保存订单标记为已发送,再重新查询数据库检查 - - 防止定时任务并发时重复发送同一订单的通知 - - 同时修复买入订单和卖出订单的通知逻辑 - -- **修复 Telegram 通知时间显示**: - - `TelegramNotificationService.sendOrderSuccessNotification` 添加 `orderTime` 参数 - - 使用订单的 `createdAt` 时间戳作为通知显示时间 - - 而不是使用当前通知发送时间 - - 更准确反映订单的实际创建时间 - -### 修复新建跟单配置时 pushFilteredOrders 字段未生效的问题 - -- **问题**:新建跟单配置时,即使设置了 `pushFilteredOrders: true`,也没有生效 -- **修复**: - - 修复手动输入模式下 `pushFilteredOrders` 被硬编码为 `false` 的问题 - - 修复从模板填充表单时未加载 `pushFilteredOrders` 的问题 - - 添加 `CopyTradingTemplate` 接口的 `pushFilteredOrders` 字段定义 - -## 📝 技术细节 - -### 数据库变更 - -- **迁移脚本**:`V24__add_push_filtered_orders_to_templates.sql` -- **变更内容**: - - `copy_trading_templates.push_filtered_orders`: BOOLEAN NOT NULL DEFAULT FALSE - - `copy_trading.push_filtered_orders`: BOOLEAN NOT NULL DEFAULT FALSE -- **自动执行**:升级时会自动执行迁移脚本 - -### API 变更 - -- **无新增接口** -- **无移除接口** -- **请求/响应变更**: - - `CopyTradingCreateRequest` 添加 `pushFilteredOrders` 字段 - - `CopyTradingUpdateRequest` 添加 `pushFilteredOrders` 字段 - - `TemplateCreateRequest` 添加 `pushFilteredOrders` 字段 - - `TemplateUpdateRequest` 添加 `pushFilteredOrders` 字段 - - `MarketGroupedOrdersRequest` 添加 `marketId` 和 `marketTitle` 字段 - -### 前端变更 - -- **新增字段**: - - `CopyTradingTemplate` 接口添加 `pushFilteredOrders` 字段 -- **组件更新**: - - 模板新增、编辑、推送页面添加"推送已过滤订单"开关 - - 跟单配置新增、编辑页面添加"推送已过滤订单"开关 - - 优化截止时间输入框交互逻辑 -- **多语言支持**: - - 添加中文、繁体中文、英文翻译 - -## 📊 变更统计 - -- **提交数量**:6 个提交 -- **文件变更**:30 个文件 -- **代码变更**:+651 行 / -555 行(净增加 96 行) - -### 详细文件变更 - -**后端变更**: -- `CopyTrading.kt` - 添加 `pushFilteredOrders` 字段(+3 行) -- `CopyTradingTemplate.kt` - 添加 `pushFilteredOrders` 字段(+3 行) -- `CopyTradingDto.kt` - 添加 `pushFilteredOrders` 字段支持(+3 行) -- `CopyTradingTemplateDto.kt` - 添加 `pushFilteredOrders` 字段支持(+10 行) -- `CopyTradingService.kt` - 处理 `pushFilteredOrders` 字段和清空字段逻辑(+93 行) -- `CopyTradingTemplateService.kt` - 处理 `pushFilteredOrders` 字段(+8 行) -- `CopyOrderTrackingService.kt` - 检查 `pushFilteredOrders` 字段发送通知(+42 行) -- `CopyTradingStatisticsService.kt` - 优化统计性能(-328 行) -- `OrderStatusUpdateService.kt` - 修复重复通知问题(+142 行) -- `TelegramNotificationService.kt` - 添加订单时间参数(+17 行) -- `V24__add_push_filtered_orders_to_templates.sql` - 数据库迁移脚本(+13 行) - -**前端变更**: -- `AddModal.tsx` - 添加 `pushFilteredOrders` 字段和优化截止时间输入框(+40 行) -- `EditModal.tsx` - 添加 `pushFilteredOrders` 字段和优化截止时间输入框(+59 行) -- `TemplateAdd.tsx` - 添加 `pushFilteredOrders` 字段(+15 行) -- `TemplateEdit.tsx` - 添加 `pushFilteredOrders` 字段(+15 行) -- `TemplateList.tsx` - 添加 `pushFilteredOrders` 字段(+13 行) -- `BuyOrdersTab.tsx` - 优化筛选功能(+94 行) -- `SellOrdersTab.tsx` - 优化筛选功能(+77 行) -- `MatchedOrdersTab.tsx` - 优化筛选功能(+26 行) -- `types/index.ts` - 添加 `pushFilteredOrders` 字段定义(+6 行) -- `locales/*/common.json` - 添加多语言翻译(+31 行) - -**配置文件变更**: -- `docker-compose.yml` - 添加时区配置(+5 行) -- `docker-compose.prod.yml` - 添加时区配置(+5 行) -- `Dockerfile` - 优化构建配置(+4 行) - -## 🔄 主要提交 - -``` -9c303e0 feat: 添加推送已过滤订单功能并修复相关问题 -cb8e469 fix: 修复跟单配置更新时清空可选字段无法保存的问题 -279806d feat: 优化订单列表筛选功能,支持按市场标题搜索并改进分组体验 -90fa487 refactor: 移除未实现盈亏计算以优化跟单关系统计性能 -b58bb26 feat: 添加 Docker 容器时区配置,支持通过 .env 自定义 -6af76c4 fix: 修复订单通知重复发送和时间显示问题 -``` - -## 🎯 升级建议 - -1. **数据库迁移**:本次版本包含数据库迁移脚本,升级时会自动执行 - - 自动添加 `push_filtered_orders` 字段到模板表和跟单配置表 - - 现有数据不受影响,新字段默认值为 `false` - -2. **配置更新**: - - 可选:在 `.env` 文件中添加 `TZ` 环境变量自定义容器时区 - - 无需其他配置变更 - -3. **兼容性**: - - 完全向后兼容,不影响现有功能 - - API 变更都是新增字段,不影响现有调用 - -## 📦 Docker 镜像 - -Docker 镜像会自动构建并推送到 Docker Hub: -- `wrbug/polyhermes:v1.1.10` -- `wrbug/polyhermes:latest`(如果这是最新版本) - -## 🔗 相关链接 - -- [GitHub Release](https://github.com/WrBug/PolyHermes/releases/tag/v1.1.10) -- [完整更新日志](https://github.com/WrBug/PolyHermes/compare/v1.1.9...v1.1.10) - ---- - -**发布日期**:2026-01-12 - ---- - -# v1.1.9 - -## 🐛 Bug 修复 - -### 修复盈亏统计计算错误问题 - -- **问题**:在仓位检查时,刚创建的订单可能因仓位更新延迟被误判为已卖出,导致盈亏统计计算错误 -- **修复**: - - 优化自动卖出订单筛选逻辑,在 SQL 层直接过滤创建时间超过阈值的订单 - - 新增 `findUnmatchedBuyOrdersByOutcomeIndexOlderThan` Repository 方法,提高查询效率 - - 统一使用 2 分钟阈值保护刚创建的订单,避免误判 - - 两个场景都使用 SQL 过滤: - * 场景1:仓位不存在时,延迟检测使用 SQL 过滤 - * 场景2:仓位部分存在时,FIFO 匹配使用 SQL 过滤 - -- **优化效果**: - - SQL 层面直接过滤,减少数据传输,提高查询效率 - - 代码更简洁,逻辑更清晰 - - 刚创建的订单(< 2 分钟)不会被误判为已卖出 - - 确保盈亏统计计算的准确性 - -## 📝 技术细节 - -- **Repository 变更**: - - 新增 `findUnmatchedBuyOrdersByOutcomeIndexOlderThan` 方法 - - 在 SQL 查询中添加 `createdAt < :thresholdTime` 条件过滤 - -- **Service 变更**: - - `PositionCheckService` 中两个场景都使用 SQL 过滤替代内存过滤 - - 统一使用 2 分钟(120000 毫秒)作为时间阈值 - -## 📊 变更统计 - -- **提交数量**:1 个提交 -- **文件变更**:2 个文件 -- **代码变更**:+57 行 / -19 行(净增加 38 行) - -### 详细文件变更 - -**后端变更**: -- `CopyOrderTrackingRepository.kt` - 新增 SQL 查询方法(+18 行) -- `PositionCheckService.kt` - 优化订单筛选逻辑(+39 行 / -19 行) - -## 🔄 主要提交 - -``` -6ad4024 fix: 优化自动卖出订单筛选逻辑,避免刚创建的订单被误判 -``` - -## 🎯 升级建议 - -1. **数据库迁移**:无需数据库迁移,可直接升级 -2. **配置更新**:无需配置变更 -3. **兼容性**:完全向后兼容,不影响现有功能 - -## 📦 Docker 镜像 - -Docker 镜像会自动构建并推送到 Docker Hub: -- `wrbug/polyhermes:v1.1.9` -- `wrbug/polyhermes:latest`(如果这是最新版本) - -## 🔗 相关链接 - -- [GitHub Release](https://github.com/WrBug/PolyHermes/releases/tag/v1.1.9) - ---- - -# v1.1.8 - -## 🚀 主要功能 - -### ⚡ Polymarket Activity WebSocket 双重监听方案 - -- **新增 PolymarketActivityWsService**:通过 Activity WebSocket 实时监听 Leader 交易 - - 延迟 < 100ms,适合快速跟单场景 - - 订阅全局 activity 交易流,客户端过滤 Leader 地址 - - 支持动态添加/移除 Leader 监听 - - 地址筛选忽略大小写,提高匹配准确性 - -- **双重监听机制**: - - Activity WebSocket(低延迟,< 100ms):作为主要监听方式 - - On-Chain WebSocket(高可靠性,~2-3s):作为兜底监听方式 - - 自动去重,避免重复处理同一笔交易 - -- **协议支持**: - - 支持 `connection_id` 字段 - - 优先使用消息中的 `outcomeIndex` 字段,fallback 到从 `outcome` 解析 - -- **参考文档**: - - [双重监听方案文档](docs/zh/copy-trading-dual-monitoring-plan.md) - - [Activity WebSocket API 文档](docs/zh/polymarket-activity-websocket-api.md) - -### 🔧 支持同一用户创建多个相同 Leader 的跟单配置 - -- **移除唯一约束**:允许同一用户创建多个跟单同一个 Leader 的配置 -- **应用场景**:支持不同参数(比例、过滤条件等)的多配置跟单 -- **数据库迁移**:`V23__remove_unique_constraint_from_copy_trading.sql` - -### 🎯 市场截止时间筛选功能 - -- **新增市场截止时间过滤**:支持设置跟单配置的最大市场截止时间 -- **自动过滤过期市场**:系统会自动跳过超过设定截止时间的市场 -- **数据库字段**:`max_market_end_date`(时间戳,单位:秒) -- **数据库迁移**:`V22__add_max_market_end_date_to_copy_trading.sql` - -### 🔍 关键字过滤功能 - -- **新增关键字过滤**:支持在黑名单或白名单模式下过滤市场标题关键字 -- **过滤模式**: - - `DISABLED`:禁用关键字过滤 - - `BLACKLIST`:黑名单模式(包含关键字的市场会被过滤) - - `WHITELIST`:白名单模式(只允许包含关键字的市场) -- **多关键字支持**:支持多个关键字,以 JSON 数组格式存储 -- **数据库字段**:`keyword_filter_mode` 和 `keywords`(JSON 数组) -- **数据库迁移**:`V20__add_keyword_filter.sql` - -### 📊 订单列表功能重构 - -- **按市场分组显示**:订单列表按市场分组,便于查看和管理 -- **市场信息展示**: - - 显示市场标题和 slug - - 支持跳转到 Polymarket 市场页面 - - 显示市场基本信息(标题、slug、截止时间等) -- **订单 ID 复制功能**:一键复制订单 ID,方便查询和调试 -- **UI/UX 优化**: - - 优化订单列表展示样式 - - 改进移动端适配 - -### 📈 市场信息管理和缓存优化 - -- **新增 MarketService**:统一管理市场信息查询和缓存 - - 使用 LRU 缓存提高查询性能 - - 支持从 Gamma API 和 CLOB API 查询市场信息 - - 自动缓存市场信息,减少 API 调用 -- **新增 Market 实体和表**:持久化存储市场信息 - - 存储市场标题、slug、eventSlug、endDate 等基本信息 - - 支持通过 marketId 快速查询市场信息 -- **数据库迁移**: - - `V19__create_markets_table.sql`:创建市场信息表 - - `V21__add_event_slug_to_markets.sql`:添加 eventSlug 字段 -- **市场信息轮询服务**:定期更新市场信息,保持数据新鲜度 - -## 🐛 Bug 修复 - -### 前端 TypeScript 类型错误修复 - -- **修复 InputNumber parser 类型错误**:`parser` 函数应返回 `number` 而不是 `string` -- **修复文件**: - - `src/pages/CopyTradingOrders/AddModal.tsx` - - `src/pages/CopyTradingOrders/EditModal.tsx` - -## 📝 文档更新 - -- **新增双重监听方案文档**:详细说明 Activity WebSocket 和 On-Chain WebSocket 的双重监听机制 -- **新增 Activity WebSocket API 文档**:详细的 API 格式和消息结构说明 -- **更新开发规范**:JSON 解析规范和 Data Class 规范 - -## 📊 统计信息 - -- **61 个文件被修改** -- **+5125 行新增代码** -- **-1942 行删除代码** -- **净增加 3183 行代码** - -## 🔄 主要提交 - -``` -d376a82 feat: 添加市场信息管理和订单ID复制功能 -2af2c0e feat: 订单列表按市场分组并支持跳转到Polymarket -9ed5190 feat: 添加关键字过滤功能并优化市场 slug 处理 -0327eaf feat: 添加市场截止时间筛选功能 -a16b6fc feat: 支持同一用户创建多个相同 leader 的跟单配置 -19508dc feat: 实现 Polymarket Activity WebSocket 双重监听方案 -``` - -## 🎯 升级建议 - -1. **数据库迁移**:确保执行所有数据库迁移脚本(V19-V23) -2. **配置更新**:新版本的 `application.properties` 中添加了 Activity WebSocket URL 配置 -3. **环境变量**:如果使用 Docker 部署,建议更新 `docker-compose.yml` 中的配置 - -## 📦 Docker 镜像 - -Docker 镜像会自动构建并推送到 Docker Hub: -- `wrbug/polyhermes:v1.1.8` -- `wrbug/polyhermes:latest`(如果这是最新版本) - -## 🔗 相关链接 - -- [GitHub Release](https://github.com/WrBug/PolyHermes/releases/tag/v1.1.8) -- [双重监听方案文档](docs/zh/copy-trading-dual-monitoring-plan.md) -- [Activity WebSocket API 文档](docs/zh/polymarket-activity-websocket-api.md) - ---- - -# v1.1.7 - -## 🚀 主要功能 - -### 💰 Polymarket Maker Rebates Program 费率支持 - -- **新增费率查询 API 接口** (`getFeeRate`) - - 支持动态查询 Maker Rebates Program 费率 - - 修正 API 返回字段名:使用 `base_fee` 而非 `fee_rate_bps`(与 TypeScript clob-client 一致) - -- **动态费率获取** - - 在所有订单创建处动态获取费率: - * 跟单买入订单 (`processBuyTrade`) - * 跟单卖出订单 (`matchSellOrder`) - * 账户卖出订单 (`sellPosition`) - - 费率获取失败时降级到默认值 "0",确保系统可用性 - - 添加详细的日志记录,便于监控和调试 - -- **参考文档**: https://docs.polymarket.com/developers/market-makers/maker-rebates-program - -### 🔧 Docker 部署优化 - -- **日志级别环境变量支持** - - 在 `application.properties` 中支持通过 `LOG_LEVEL_ROOT` 和 `LOG_LEVEL_APP` 环境变量配置日志级别 - - 在 `docker-compose.yml` 和 `docker-compose.prod.yml` 中添加日志级别环境变量配置 - - 在 `deploy.sh` 的 `.env` 模板中添加日志级别配置说明 - - 支持通过环境变量动态配置日志级别,无需修改配置文件 - - 默认值:`root=INFO`, `app=DEBUG` - -## 🐛 Bug 修复 - -### 修复市场条件查询的 RPC 调用错误 - -- **问题**:使用错误的函数签名 `conditions(bytes32)` 导致 RPC 调用失败(execution reverted) -- **修复**: - - 将错误的 `conditions(bytes32)` 函数调用改为正确的 `getOutcomeSlotCount(bytes32)` 和 `payoutDenominator(bytes32)` 函数调用 - - 修复 `BlockchainService.getCondition` 方法,使用正确的 ConditionalTokens 合约函数签名 - - 改进 `MarketPriceService` 的错误处理:当链上查询出现 RPC 错误时,降级到 CLOB API 或 Gamma API 查询,而不是直接抛出异常,提高容错性 - -### 修复 RPC 错误时误创建自动卖出记录的问题 - -- **问题**:当链上查询市场条件出现 RPC 错误(execution reverted)时,系统会误判为市场已卖出,创建错误的自动卖出记录 -- **修复**: - - 修改 `getPriceFromChainCondition` 返回 `Pair`,第二个值表示是否发生 RPC 错误 - - 在 `getCurrentMarketPrice` 中检测到 RPC 错误时抛出异常,`PositionCheckService` 会捕获并跳过该市场的处理 - - 避免在市场不存在或尚未创建时误判为已卖出 - -## 📝 文档更新 - -### 更新 Telegram 群链接 - -- 将所有 Telegram 群链接统一更新为 `t.me/polyhermes` -- 更新了以下文件: - - `frontend/src/components/Layout.tsx` - 桌面端和移动端导航链接 - - `RELEASE.md` - 相关链接 - - `README.md` 和 `README_EN.md` - 相关链接部分 - -### 添加 Docker 版本徽章 - -- 在 README 和 README_EN.md 中添加动态 Docker 版本徽章 -- 使用 shields.io 自动显示 Docker Hub 上 `wrbug/polyhermes` 镜像的最新版本 -- 版本信息自动更新,无需手动维护 - -## 📊 变更统计 - -- **提交数量**:5 个提交 -- **文件变更**:16 个文件 -- **代码变更**:+205 行 / -886 行(净减少 681 行) - -### 详细文件变更 - -**后端变更**: -- `PolymarketClobApi.kt` - 添加费率查询接口(+25 行) -- `AccountService.kt` - 在订单创建处添加动态费率获取(+11 行) -- `BlockchainService.kt` - 修复市场条件查询的 RPC 调用错误(+84 行) -- `MarketPriceService.kt` - 改进错误处理,支持降级到其他数据源(+36 行) -- `PolymarketClobService.kt` - 添加费率查询服务(+32 行) -- `CopyOrderTrackingService.kt` - 在跟单订单创建处添加费率获取(+34 行) -- `PositionCheckService.kt` - 修复 RPC 错误处理逻辑(+2 行) -- `application.properties` - 添加日志级别环境变量支持(+6 行) - -**前端变更**: -- `Layout.tsx` - 更新 Telegram 群链接(+4 行) - -**配置文件变更**: -- `docker-compose.yml` - 添加日志级别环境变量(+4 行) -- `docker-compose.prod.yml` - 添加日志级别环境变量(+4 行) -- `deploy.sh` - 添加日志级别配置说明(+5 行) - -**文档变更**: -- `README.md` - 更新 Telegram 链接,添加 Docker 版本徽章(+2 行) -- `README_EN.md` - 更新 Telegram 链接,添加 Docker 版本徽章(+2 行) -- `RELEASE.md` - 更新 Telegram 链接(+4 行) -- `docs/zh/smart-money-analysis.md` - 删除文档(-836 行) - -## 🔧 技术细节 - -### API 变更 - -- **新增接口**: - - `POST /api/clob/fee-rate` - 获取 Maker Rebates Program 费率(内部使用) -- **无移除接口** - -### 环境变量变更 - -- **新增环境变量**: - - `LOG_LEVEL_ROOT` - Root 日志级别(默认:INFO) - - `LOG_LEVEL_APP` - 应用日志级别(默认:DEBUG) - -### 合约调用修复 - -- **修复的函数调用**: - - 从 `conditions(bytes32)` 改为 `getOutcomeSlotCount(bytes32)` 和 `payoutDenominator(bytes32)` - - 使用正确的 ConditionalTokens 合约函数签名 - - 参考:https://polygonscan.com/address/0x4d97dcd97ec945f40cf65f87097ace5ea0476045#code - -## 📝 升级说明 - -### 数据库升级 - -- **无需数据库迁移**:本次更新不涉及数据库结构变更 - -### 配置更新 - -- **可选配置**:新增日志级别环境变量,如不配置将使用默认值 - - `LOG_LEVEL_ROOT=INFO`(默认) - - `LOG_LEVEL_APP=DEBUG`(默认) - -### Docker 部署 - -- **推荐更新**:使用 Docker Hub 镜像部署的用户,建议更新到最新版本 - ```bash - docker pull wrbug/polyhermes:latest - docker-compose -f docker-compose.prod.yml up -d - ``` - -## 🔗 相关链接 - -- **GitHub 仓库**:https://github.com/WrBug/PolyHermes -- **Twitter**:@polyhermes -- **Telegram 群组**:https://t.me/polyhermes - ---- - -**发布日期**:2026-01-07 - ---- - -# v1.1.5 - -## 🔧 功能优化与改进 - -### 前端优化 - -#### 优化 InputNumber 输入框格式化 -- 优化数值输入框的格式化逻辑,修正正则表达式以正确处理整数显示 -- 更新所有相关 InputNumber 组件的 formatter 函数,确保显示准确性 -- 影响的组件:CopyTradingAdd、CopyTradingEdit、EditModal、TemplateAdd、TemplateEdit、TemplateList -- 影响范围:跟单配置、模板配置中的所有数值输入框 - -#### 优化数字显示格式 -- 添加 `formatNumber` 工具函数,自动去除小数尾随零(如 100.00 → 100) -- 统一所有数值输入框的显示格式,提升用户体验 - -### 后端优化 - -#### 优化按比例跟单金额计算逻辑 -- 优化按比例计算的订单金额处理,使用向上取整确保满足最小限制要求 -- 对订单金额进行向上取整处理(保留 2 位小数精度) -- 自动调整订单数量以满足最小限制要求 -- 使用 `RoundingMode.CEILING` 确保金额满足最小限制 -- 影响范围:按比例跟单的订单创建逻辑 -- 技术细节: - - 扩展 `BigDecimal.div()` 扩展函数,支持指定精度和舍入模式 - - 在 `CopyOrderTrackingService` 中优化金额计算和验证逻辑 - -#### 增强 copyRatio 精度支持 -- 将 copyRatio 字段精度从 DECIMAL(10,2) 增加到 DECIMAL(20,8) -- 支持更精确的跟单比例设置(最小 0.01%,最大 10000%) -- 影响的实体:CopyTrading、CopyTradingTemplate -- 数据库迁移:新增 V18 迁移脚本,自动升级数据库字段精度 - -## 🔧 功能优化 - -### 移除刷新代理钱包接口 -- **移除接口**: - - `POST /api/accounts/refresh-proxy` - 刷新单个账户的代理地址 - - `POST /api/accounts/refresh-all-proxies` - 刷新所有账户的代理地址 -- **原因**:代理地址应在账户导入时自动计算,无需手动刷新 -- **影响范围**:AccountController、AccountService -- **向后兼容性**:这些接口已不再使用,移除不影响现有功能 - -### 前端跟单比例配置优化 -- **最小比例**:从 10% 降低到 0.01%,支持更灵活的跟单比例设置 -- **最大比例**:增加到 10000%,满足大比例跟单需求 -- **显示格式**:比例模式显示为百分比(如 "100%" 而不是 "1x") -- **输入验证**:增强输入验证,确保比例在合理范围内 - -## 📊 变更统计 - -- **提交数量**:3 个提交 -- **文件变更**:15 个文件 -- **代码变更**:+575 行 / -194 行(净增加 381 行) - -### 详细文件变更 - -**后端变更**: -- `AccountController.kt` - 移除刷新代理钱包接口(-59 行) -- `AccountService.kt` - 移除刷新代理钱包方法(-79 行) -- `CopyTrading.kt` - 增加 copyRatio 精度 -- `CopyTradingTemplate.kt` - 增加 copyRatio 精度 -- `CopyOrderTrackingService.kt` - 优化按比例跟单金额计算逻辑(+45 行) -- `MathExt.kt` - 扩展 div 函数支持精度和舍入模式(+20 行) -- `V18__increase_copy_ratio_precision.sql` - 数据库迁移脚本(+14 行) - -**前端变更**: -- `CopyTradingAdd.tsx` - 优化 formatter、优化比例配置(+106 行) -- `CopyTradingEdit.tsx` - 优化 formatter、优化比例配置(+106 行) -- `CopyTradingList.tsx` - 优化比例显示格式 -- `CopyTradingOrders/EditModal.tsx` - 优化 formatter、优化比例配置(+106 行) -- `TemplateAdd.tsx` - 优化 formatter、优化比例配置(+65 行) -- `TemplateEdit.tsx` - 优化 formatter、优化比例配置(+65 行) -- `TemplateList.tsx` - 优化 formatter、优化比例配置(+65 行) -- `utils/index.ts` - 添加 formatNumber 工具函数(+31 行) - -## 🔧 技术细节 - -### 数据库变更 -- **迁移脚本**:`V18__increase_copy_ratio_precision.sql` -- **变更内容**: - - `copy_trading.copy_ratio`: DECIMAL(10,2) → DECIMAL(20,8) - - `copy_trading_templates.copy_ratio`: DECIMAL(10,2) → DECIMAL(20,8) -- **自动执行**:升级时会自动执行迁移脚本 - -### API 变更 -- **移除接口**: - - `POST /api/accounts/refresh-proxy` - - `POST /api/accounts/refresh-all-proxies` -- **无新增接口** - -### 前端变更 -- **工具函数**:新增 `formatNumber()` 函数,用于格式化数字显示 -- **组件更新**:所有数值输入框统一使用新的 formatter 函数 -- **显示优化**:跟单模式的比例显示为百分比格式 - -## 📝 升级说明 - -### 数据库升级 -本次版本包含数据库迁移脚本,升级时会自动执行: -- 自动增加 `copy_ratio` 字段的精度 -- 现有数据不受影响,精度升级是向后兼容的 - -### 配置变更 -无需额外配置变更。 - -### 兼容性 -- **向后兼容**:所有变更都是向后兼容的 -- **API 兼容**:移除的接口不影响现有功能(这些接口已不再使用) -- **数据兼容**:数据库字段精度升级不会影响现有数据 - -## 🎯 主要改进 - -1. **优化输入框格式化**:优化数值输入框的显示逻辑 -2. **优化跟单金额计算**:确保按比例跟单的金额满足最小限制要求 -3. **提升精度支持**:支持更精确的跟单比例设置(0.01% - 10000%) -4. **代码清理**:移除不再使用的刷新代理钱包接口 - -## 🔗 相关链接 - -- [GitHub Tag](https://github.com/WrBug/PolyHermes/releases/tag/v1.1.5) -- [变更日志](https://github.com/WrBug/PolyHermes/compare/v1.1.4...v1.1.5) - -## 🙏 致谢 - -感谢所有贡献者和测试用户的反馈与支持! - ---- - -# v1.1.2 - -## 🚀 主要功能 - -### 🐛 修复内存泄漏问题 -- 修复 Retrofit/OkHttpClient 实例重复创建导致的内存泄漏问题 -- 为不需要认证的 API 创建共享的 OkHttpClient 实例(Gamma API、Data API、GitHub API 等) -- 带认证的 CLOB API 按钱包地址缓存(每个账户一个客户端) -- RPC API 按 RPC URL 缓存,Builder Relayer API 按 relayerUrl 缓存 -- 添加 `@PreDestroy` 方法清理缓存,确保资源正确释放 -- **效果**:内存占用从运行几小时后从 400MB 涨到 1GB+ 变为保持稳定,大幅减少内存占用 - -### 📊 市场价格服务优化 -- 移除降级查询逻辑,仅保留链上 RPC 查询和 CLOB 订单簿查询 -- 移除 CLOB Trades、Gamma Market Status、Gamma Market Price 查询逻辑 -- 如果所有数据源都失败,抛出明确的异常信息 -- 价格截位到 4 位小数(向下截断,不四舍五入) -- 简化代码逻辑,提高查询效率和准确性 - -### 🔧 代码架构优化 -- 统一 Gson 使用,改为依赖注入方式 -- 在 `GsonConfig` 中统一配置 Gson Bean(lenient 模式) -- 所有 Service 类通过构造函数注入 Gson 实例 -- 移除所有 `GsonConverterFactory.create()` 无参调用,统一使用注入的 Gson -- 提高代码一致性和可维护性 - -### 🗑️ 功能清理 -- 移除下单失败存储数据库的功能 -- 删除 `FailedTrade` 实体类和 `FailedTradeRepository` -- 从 `CopyOrderTrackingService` 中移除失败交易存储逻辑 -- 创建 Flyway migration V16 删除 `failed_trade` 表 -- 下单失败时仅记录日志,不再存储到数据库,简化数据模型 - -### 🚀 部署优化 -- 自动使用当前分支名作为 Docker 版本号 -- 分支名中的 `/` 自动替换为 `-`(Docker tag 不支持 `/) -- `docker-compose.yml` 启用 build args,从环境变量读取版本号 -- 前端页面将显示当前分支名作为版本号 -- 如果没有 Git 仓库或获取失败,使用默认值 `dev` - -## 🐛 Bug 修复 - -### 修复 Flyway Migration 问题 -- 恢复 V1 migration 文件,避免 checksum 不匹配 -- 保持 `V1__init_database.sql` 的原有内容不变 -- `failed_trade` 表的删除通过 V16 migration 处理 -- 确保已有数据库的 migration checksum 保持一致 - -### 修复前端编译错误 -- 修复 `PositionList.tsx` 中引用不存在的 `bestBid` 属性导致的编译错误 -- 使用 `currentPrice` 替代 `bestBid`,确保前端代码可以正常编译 - -## 📚 文档更新 - -- 新增智能资金分析文档(`docs/zh/smart-money-analysis.md`) -- 详细说明智能资金分析功能的使用方法和策略 - -## 🔧 技术改进 - -- 优化 `RetrofitFactory`,实现客户端实例缓存和复用 -- 优化 `CopyOrderTrackingService`,移除失败交易相关逻辑 -- 优化 `OrderStatusUpdateService`,增强订单状态更新功能 -- 优化 `TelegramNotificationService`,改进通知逻辑 -- 优化 `PositionCheckService`,简化代码结构 -- 优化 `PolymarketClobService`,改进 API 调用逻辑 - -## 📦 数据库变更 - -- 删除 `failed_trade` 表(Migration: V16) - -## 🔗 相关链接 - -- **GitHub Release**: https://github.com/WrBug/PolyHermes/releases/tag/v1.1.2 -- **完整更新日志**: https://github.com/WrBug/PolyHermes/compare/v1.1.1...v1.1.2 -- **Docker Hub**: https://hub.docker.com/r/wrbug/polyhermes - -## 📊 统计信息 - -- **文件变更**: 29 个文件 -- **代码变更**: +1597 行 / -678 行 -- **主要提交**: 8 个提交 - -## ⚠️ 重要提醒 - -**请务必使用官方 Docker 镜像源,避免财产损失!** - -### ✅ 官方 Docker Hub 镜像 - -**官方镜像地址**:`wrbug/polyhermes` - -```bash -# ✅ 正确:使用官方镜像 -docker pull wrbug/polyhermes:v1.1.2 - -# ❌ 错误:不要使用其他来源的镜像 -# 任何非官方来源的镜像都可能包含恶意代码,导致您的私钥和资产被盗 -``` - -### 🔗 官方渠道 - -请通过以下**唯一官方渠道**获取 PolyHermes: - -* **GitHub 仓库**:https://github.com/WrBug/PolyHermes -* **Twitter**:@polyhermes -* **Telegram 群组**:https://t.me/polyhermes - ---- - -**⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!** - ---- - -# v1.1.1 - -## 🚀 主要功能 - -### 🔗 链上 WebSocket 监听优化 -- 创建 `UnifiedOnChainWsService` 统一管理 WebSocket 连接,所有服务共享同一个连接 -- 创建 `OnChainWsUtils` 工具类,提取公共的链上 WebSocket 相关功能 -- 创建 `AccountOnChainMonitorService` 监听账户链上卖出和赎回事件 -- 优化 `OnChainWsService`,复用公共代码,减少代码重复 -- 支持通过链上 WebSocket 实时监听账户的卖出和赎回交易,自动更新订单状态 - -### 📊 市场状态查询优化 -- 优化市场结算状态查询,优先使用链上查询 `ConditionalTokens.getCondition` -- 如果链上查询失败,自动降级到 Gamma API 查询 -- 提供更实时和准确的市场结算结果 - -### 🔕 自动订单通知优化 -- 自动生成的订单(AUTO_、AUTO_FIFO_、AUTO_WS_ 前缀)不再发送 Telegram 通知 -- 优化 `OrderStatusUpdateService`,跳过自动生成订单的通知处理 -- 减少不必要的通知,提升用户体验 - -## 🐛 Bug 修复 - -### 修复移动端 API 健康页面缺少数据显示 -- 移动端添加 URL 地址显示 -- 移动端添加状态文本显示(正常/异常/未配置) -- 移动端添加消息/状态信息显示 -- 移动端和桌面端显示信息保持一致 - -## 🔧 功能优化 - -### 优化 Telegram 推送消息格式 -- 添加价格和数量截位处理: - * 价格保留最多4位小数(截断,不四舍五入) - * 数量保留最多2位小数(截断,不四舍五入) -- 优化账户信息显示格式: - * 有账户名和钱包地址时显示:账户名(0x123...123) - * 只有账户名时显示账户名 - * 只有钱包地址时显示脱敏后的地址 - * 都没有时显示未知账户 - -### 配置优化 -- 移除 `polygon.rpc.url` 配置,使用 RpcNodeService 统一管理 RPC 节点 -- 删除无用的 `position.push.polling-interval` 和 `position.push.heartbeat-timeout` 配置项 -- 修正日志配置中的包名(polyhermes -> polymarketbot) -- 更新 `ApiHealthCheckService` 直接使用 `RpcNodeService.getHttpUrl()` - -## 📚 文档更新 - -- 统一发布说明文件,使用 RELEASE.md 替代版本化文件(RELEASE_v1.0.1.md、RELEASE_v1.1.0.md) -- 更新所有部署文档,移除 POLYGON_RPC_URL 相关说明 -- 更新所有 Docker Compose 配置文件,移除 POLYGON_RPC_URL 环境变量 -- 更新所有部署脚本,移除 POLYGON_RPC_URL 环境变量定义 - -## 🔧 技术改进 - -- 重构链上 WebSocket 服务,提取公共代码到 `OnChainWsUtils` -- 创建统一的 WebSocket 连接管理服务 `UnifiedOnChainWsService` -- 添加链上查询市场结算结果的功能(`BlockchainService.getCondition`) -- 添加 ABI 编码/解码工具方法(`EthereumUtils.decodeConditionResult`) -- 优化代码结构,减少代码重复,提高可维护性 - ---- - -# v1.1.0 - -## 🚀 主要功能 - -### 🔗 链上 WebSocket 实时监听 -- 实现通过 Polygon RPC `eth_subscribe` 实时监听链上交易 -- 支持监听 USDC Transfer 和 ERC1155 Transfer 事件 -- 实现并行监控策略:链上 WebSocket 和轮询同时运行,哪个数据先返回用哪个 -- 支持通过 `eth_unsubscribe` 取消单个 Leader 的订阅,无需重新连接 -- 优化 WebSocket 连接管理:只创建一个连接,没有跟单配置时自动取消 -- 跟单配置生效/失效时及时更新 WebSocket 订阅 -- 使用 Gson 替换所有 JSON 解析,提高解析稳定性 -- 添加 Mutex 保证线程安全,防止并发处理导致的数据重复 - -### 📊 RPC 节点管理 -- 实现 RPC 节点管理功能,支持添加、编辑、删除自定义 RPC 节点 -- 支持 RPC 节点启用/禁用功能,禁用的节点会被自动忽略 -- 前端添加启用/禁用开关,支持实时切换节点状态 -- 健康检查只检查启用的节点,提高检查效率 -- 节点选择时自动过滤禁用的节点 - -### 💰 卖出订单价格轮询更新 -- 添加 `price_updated` 字段到 `sell_match_record` 表,用于标记价格是否已更新 -- 创建 `OrderStatusUpdateService` 定时任务服务,每 5 秒轮询一次: - - 更新卖出订单的实际成交价(通过 orderId 查询订单详情) - - 清理已删除账户的订单记录 -- 支持加权平均价格计算,处理部分成交的订单 -- 添加 orderId 格式验证:非 0x 开头的直接标记为已更新,0x 开头的等待定时任务更新 -- 下单完成后不再立即查询价格,直接保存,等待定时任务更新 - -## 🐛 Bug 修复 - -### 修复跟单卖出订单的 API 凭证解密问题 -- 修复 `processSellTrade` 中 API 凭证未解密的问题,与 `processBuyTrade` 保持一致 -- 确保卖出订单能够正常使用 API 凭证进行认证 - -### 修复 SELL 订单精度问题 -- 修复 SELL 订单的 `makerAmount` 和 `takerAmount` 精度问题: - - `makerAmount` (shares) 最多 2 位小数(符合 API 要求) - - `takerAmount` (USDC) 最多 4 位小数(符合 API 要求) -- 确保订单能够正常提交到 Polymarket API - -## 📚 文档更新 - -- 添加 Docker 版本更新说明(中英文) -- 添加链上 WebSocket 监听策略文档 -- 添加跟单逻辑总结文档 -- 更新部署文档,包含详细的版本更新步骤 - -## 🔧 技术改进 - -- 使用 Gson 替换 ObjectMapper,提高 JSON 解析稳定性 -- `JsonRpcResponse.result` 使用 `JsonElement` 类型,支持灵活的 JSON 结构 -- 优化 WebSocket 连接管理,减少不必要的连接 -- 添加线程安全机制,使用 Kotlin Coroutines Mutex -- 启用 Spring 定时任务功能(`@EnableScheduling`) - -## 📦 数据库变更 - -- 新增 `price_updated` 字段到 `sell_match_record` 表(Migration: V13) - -## 🔗 相关链接 - -- **GitHub Release**: https://github.com/WrBug/PolyHermes/releases/tag/v1.1.1 -- **完整更新日志**: https://github.com/WrBug/PolyHermes/compare/v1.1.0...v1.1.1 -- **Docker Hub**: https://hub.docker.com/r/wrbug/polyhermes - -## 📊 统计信息 - -- **文件变更**: 32 个文件 -- **代码变更**: +1872 行 / -1503 行 -- **主要提交**: 7 个提交 - -## ⚠️ 重要提醒 - -**请务必使用官方 Docker 镜像源,避免财产损失!** - -### ✅ 官方 Docker Hub 镜像 - -**官方镜像地址**:`wrbug/polyhermes` - -```bash -# ✅ 正确:使用官方镜像 -docker pull wrbug/polyhermes:v1.1.1 - -# ❌ 错误:不要使用其他来源的镜像 -# 任何非官方来源的镜像都可能包含恶意代码,导致您的私钥和资产被盗 -``` - -### 🔗 官方渠道 - -请通过以下**唯一官方渠道**获取 PolyHermes: - -* **GitHub 仓库**:https://github.com/WrBug/PolyHermes -* **Twitter**:@polyhermes -* **Telegram 群组**:https://t.me/polyhermes - ---- - -**⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!** - - diff --git a/RELEASE_NOTES_v2.0.0.md b/RELEASE_NOTES_v2.0.0.md deleted file mode 100644 index 56dc271..0000000 --- a/RELEASE_NOTES_v2.0.0.md +++ /dev/null @@ -1,177 +0,0 @@ -# PolyHermes v2.0.0 Release Notes - -## 🎉 重大更新 - -PolyHermes v2.0.0 是一个重要版本更新,带来了系统动态更新功能、优化的用户体验和多项技术改进。 - ---- - -## ✨ 新功能 - -### 🔄 系统动态更新(核心功能) - -**无需重启 Docker 容器即可更新系统**,大幅提升部署和维护效率。 - -- ✅ **在线更新**:在 Web UI 中一键检查并应用更新,无需手动操作 -- ✅ **零停机更新**:更新过程约 30-60 秒,系统自动处理,无需重启容器 -- ✅ **自动回滚**:更新失败时自动恢复到旧版本,确保系统稳定性 -- ✅ **版本管理**:清晰显示当前版本和可用更新,支持 Pre-release 版本检测 -- ✅ **更新内容展示**:支持 Markdown 格式的更新说明,美观易读 - -**技术特性**: -- 独立的 Python Flask 更新服务(端口 9090),与主应用隔离 -- 单一更新包(tar.gz),包含前后端完整更新 -- 自动备份和版本管理 -- 管理员权限验证,确保安全性 - -### 📦 Release 管理工具 - -- **自动化发布脚本** (`create-release.sh`): - - 自动创建 Git 标签 - - 发布 GitHub Release - - 支持 Pre-release 标记 - - 自动拼接版本号后缀(Pre-release 自动添加 `-beta`) - - 支持非交互模式,便于 CI/CD 集成 - -### 🎨 版本号显示优化 - -- **Tag 格式显示**:版本号使用 Git Tag 格式(如 `v2.0.0-beta`) -- **智能颜色提示**: - - 🟡 **黄色 Tag**:有新版本可用(点击可跳转到系统更新页面) - - 🟢 **绿色 Tag**:当前已是最新版本 -- **镂空样式**:更小巧美观的版本号标签 -- **自动检查**:系统自动检查更新,有新版本时在导航栏显示提示 - ---- - -## 🎨 UI/UX 优化 - -### 系统更新页面 - -- **美化界面**:全新的渐变背景、卡片样式和图标设计 -- **Markdown 支持**:更新内容支持完整的 Markdown 渲染(标题、列表、代码块、表格等) -- **进度显示**:美观的进度条和状态提示 -- **优化布局**:系统更新模块移至系统设置页面最上方,更易访问 - -### 版本号显示 - -- 使用镂空 Tag 样式,字号 8px -- 与标题垂直居中对齐 -- 响应式设计,完美支持移动端和桌面端 - ---- - -## 🔧 技术改进 - -### 构建系统 - -- **修复 Docker 构建问题**: - - 修复 `BUILD_IN_DOCKER=false` 时找不到前端产物的问题 - - 优化 `.dockerignore` 配置,确保外部构建产物可被使用 - - 修复 GitHub Actions 构建流程 - -- **版本号注入**: - - 修复前端构建时版本号未正确传递的问题 - - 支持在构建时注入 Git Tag 和版本信息 - -- **Gradle Wrapper**: - - 修复 GitHub Actions 构建错误 - - 正确配置 Gradle Wrapper JAR - -### 代码质量 - -- 修复 TypeScript 编译错误 -- 清理未使用的导入和组件 -- 优化代码结构 - ---- - -## 📝 新增文档 - -- `docs/zh/DYNAMIC_UPDATE.md` - 动态更新技术方案文档 -- `docs/zh/DOCKER_VERSION.md` - Docker 版本管理说明 -- `docs/zh/DYNAMIC_UPDATE_CHECK.md` - 动态更新检查机制文档 -- `scripts/README_RELEASE.md` - Release 脚本使用说明 -- `scripts/CHANGELOG_TEMPLATE.md` - 更新日志模板 - ---- - -## 🔄 升级指南 - -### 从 v1.1.16 升级到 v2.0.0 - -#### 方式一:使用动态更新功能(推荐) - -1. 登录系统,进入 **系统设置** → **系统更新** -2. 点击 **检查更新** -3. 如果有新版本,点击 **立即升级** -4. 等待更新完成(约 30-60 秒) -5. 页面会自动刷新,更新完成 - -#### 方式二:重新部署 Docker 容器 - -```bash -# 1. 停止当前容器 -docker-compose -f docker-compose.prod.yml down - -# 2. 拉取新版本镜像 -docker pull wrbug/polyhermes:v2.0.0 - -# 3. 更新 docker-compose.prod.yml 中的镜像标签 -# image: wrbug/polyhermes:v2.0.0 - -# 4. 重新启动 -docker-compose -f docker-compose.prod.yml up -d -``` - -### 注意事项 - -- ⚠️ **数据备份**:虽然更新不会删除数据,但建议在更新前备份数据库 -- ⚠️ **权限要求**:执行动态更新需要管理员权限 -- ✅ **向后兼容**:v2.0.0 完全兼容 v1.1.16 的数据结构和配置 - ---- - -## 📊 变更统计 - -- **新增文件**:17 个 -- **修改文件**:13 个 -- **代码变更**:+5251 行,-163 行 - -### 主要新增文件 - -- `docker/update-service.py` - 更新服务(Python Flask) -- `frontend/src/pages/SystemUpdate.tsx` - 系统更新页面 -- `create-release.sh` - Release 创建脚本 -- `docs/zh/DYNAMIC_UPDATE.md` - 动态更新技术文档 - ---- - -## 🐛 修复的问题 - -- 修复 Docker 构建时找不到前端产物的问题 -- 修复前端构建时版本号未正确传递的问题 -- 修复 GitHub Actions 构建错误(Gradle Wrapper) -- 修复 TypeScript 编译错误 - ---- - -## 📚 相关文档 - -- [动态更新技术方案](docs/zh/DYNAMIC_UPDATE.md) -- [Docker 版本管理](docs/zh/DOCKER_VERSION.md) -- [部署指南](docs/zh/DEPLOYMENT.md) -- [Release 脚本使用说明](scripts/README_RELEASE.md) - ---- - -## 🙏 致谢 - -感谢所有使用 PolyHermes 的用户和贡献者! - ---- - -**下载地址**: -- Docker Hub: `wrbug/polyhermes:v2.0.0` -- GitHub Releases: [v2.0.0](https://github.com/WrBug/PolyHermes/releases/tag/v2.0.0) - diff --git a/RELEASE_NOTES_v2.0.1.md b/RELEASE_NOTES_v2.0.1.md deleted file mode 100644 index 6b214bd..0000000 --- a/RELEASE_NOTES_v2.0.1.md +++ /dev/null @@ -1,173 +0,0 @@ -# PolyHermes v2.0.1 Release Notes - -## 📋 版本信息 -- **版本号**: v2.0.1 -- **发布日期**: 2026-01-28 -- **基础版本**: v2.0.0 - -## 🎯 改动摘要 - -本次版本主要修复了订单状态检查、RPC 节点管理、订单金额计算等关键问题,提升了系统稳定性和用户体验。 - ---- - -## 🐛 Bug 修复 - -### 1. 修复订单状态检查中缓存清除导致计时重置的问题 - -**问题描述**: -- 订单详情为 `null` 时,缓存清除时机不当导致计时被重置 -- 订单超过 60 秒后无法正常删除 -- 部分卖出订单等待时间过长(之前等待 1 小时) - -**修复内容**: -- ✅ 修复缓存清除时机问题,避免计时被重置 -- ✅ 统一部分卖出和未成交订单的删除逻辑,都使用 60 秒重试窗口 -- ✅ 删除未使用的常量 `PARTIAL_SOLD_CLEANUP_WINDOW_MS` -- ✅ 优化日志输出,区分部分卖出和未成交订单的日志信息 - -**影响范围**: -- `OrderStatusUpdateService.kt` - 订单状态更新服务 - -**提交**: 7e87965 - ---- - -### 2. 修复禁用 RPC 节点后仍被使用的问题 - -**问题描述**: -- 禁用 RPC 节点后,节点仍可能被系统使用 -- 节点状态更新不及时 - -**修复内容**: -- ✅ 修复节点禁用逻辑,确保禁用后立即生效 -- ✅ 优化节点状态检查机制 -- ✅ 改进节点选择逻辑 - -**影响范围**: -- `RpcNodeService.kt` - RPC 节点服务 - -**提交**: dd39e59 - ---- - -### 3. 修复订单金额计算和价格范围验证问题 - -**问题描述**: -- 订单金额计算可能存在精度问题 -- 价格范围验证逻辑不完善 - -**修复内容**: -- ✅ 修复订单金额计算逻辑 -- ✅ 完善价格范围验证 -- ✅ 优化数值计算精度处理 - -**影响范围**: -- `OrderSigningService.kt` - 订单签名服务 - -**提交**: 2b20f4b - ---- - -### 4. 修复系统更新 API 路由和改进健康检查逻辑 - -**问题描述**: -- 系统更新 API 路由可能存在问题 -- 健康检查逻辑需要优化 - -**修复内容**: -- ✅ 修复系统更新 API 路由 -- ✅ 改进健康检查逻辑 -- ✅ 优化错误处理 - -**提交**: 4aa85a9 - ---- - -### 5. 修复 Docker 构建相关问题 - -**问题描述**: -- 本地 Docker 构建时 `frontend/dist` 和 `backend/build` 不存在导致构建失败 -- Dockerfile 中前端产物复制逻辑有问题 - -**修复内容**: -- ✅ 修复本地 Docker 构建时目录不存在的问题 -- ✅ 修复 Dockerfile 中前端产物复制逻辑 -- ✅ 优化构建流程 - -**影响范围**: -- `Dockerfile` - Docker 构建文件 -- `deploy.sh` - 部署脚本 - -**提交**: 419c68c, 8889803 - ---- - -### 6. 补充缺失的多语言 key - -**问题描述**: -- 部分多语言 key 缺失,导致界面显示异常 - -**修复内容**: -- ✅ 补充缺失的多语言 key -- ✅ 完善多语言支持 - -**影响范围**: -- `frontend/src/locales/` - 多语言文件 - -**提交**: 2efc04a - ---- - -## 🔧 优化改进 - -### 优化过滤原因文案的数值显示格式 - -**改进内容**: -- ✅ 优化过滤原因文案的数值显示格式 -- ✅ 新增日期工具函数,统一日期格式化 -- ✅ 提升用户体验 - -**影响范围**: -- `CopyTradingFilterService.kt` - 跟单过滤服务 -- `DateUtils.kt` - 日期工具类(新增) - -**提交**: e115d45 - ---- - -## 📊 文件变更统计 - -- **修改文件数**: 10+ -- **新增文件数**: 1 (DateUtils.kt) -- **新增行数**: 200+ -- **删除行数**: 100+ - ---- - -## 🔄 升级建议 - -1. **直接部署**:无需特殊操作,直接部署即可 -2. **验证订单处理**:建议验证订单状态检查是否正常工作 -3. **检查 RPC 节点**:确认 RPC 节点状态管理是否正常 -4. **验证订单金额**:确认订单金额计算是否正确 - ---- - -## 📝 完整提交列表 - -- 7e87965 - fix: 修复订单状态检查中缓存清除导致计时重置的问题 -- e115d45 - refactor: 优化过滤原因文案的数值显示格式 -- dd39e59 - fix: 修复禁用RPC节点后仍被使用的问题 -- 2efc04a - fix: 补充缺失的多语言key -- 2b20f4b - fix: 修复订单金额计算和价格范围验证问题 -- 419c68c - fix: 修复本地 Docker 构建时 frontend/dist 和 backend/build 不存在的问题 -- 8889803 - fix: 修复 Dockerfile 中前端产物复制逻辑 -- 4aa85a9 - fix: 修复系统更新 API 路由和改进健康检查逻辑 - ---- - -## 🙏 致谢 - -感谢所有贡献者和用户的支持与反馈! - diff --git a/RELEASE_NOTES_v2.0.2.md b/RELEASE_NOTES_v2.0.2.md deleted file mode 100644 index 71a38a4..0000000 --- a/RELEASE_NOTES_v2.0.2.md +++ /dev/null @@ -1,144 +0,0 @@ -# PolyHermes v2.0.2 Release Notes - -## 📋 版本信息 -- **版本号**: v2.0.2 -- **发布日期**: 2026-01-29 -- **基础版本**: v2.0.1 - -## 🎯 改动摘要 - -本次版本主要修复了买入订单金额精度问题,并优化了构建流程和通知机制。 - ---- - -## 🐛 Bug 修复 - -### 1. 修复买入订单金额精度问题 - -**问题描述**: -- 市场买入订单创建时出现 `invalid amounts` 错误 -- Polymarket API 要求市场买入订单的 makerAmount 最多 2 位小数,takerAmount 最多 4 位小数 -- 之前的实现不符合 API 要求,导致订单创建失败 - -**修复内容**: -- ✅ 修复市场买入订单 makerAmount 和 takerAmount 的精度限制 -- ✅ makerAmount (USDC) 限制为最多 2 位小数(之前为 4 位) -- ✅ takerAmount (shares) 限制为最多 4 位小数(之前为 2 位) -- ✅ 符合 Polymarket API 的要求,解决 'invalid amounts' 错误 - -**影响范围**: -- `OrderSigningService.kt` - 订单签名服务 - -**提交**: 42472f6 - ---- - -## 🔧 优化改进 - -### 优化构建流程和通知机制 - -**改进内容**: -- ✅ 添加 workflow_dispatch 支持手动触发构建 -- ✅ Release 事件默认只打包产物(在线升级),不构建 Docker -- ✅ 手动触发可选择构建类型:在线升级或 Docker 升级 -- ✅ 优化 Telegram 通知文案,区分构建类型和升级路径 -- ✅ 在线升级任务不发送开始通知,只发送完成通知 -- ✅ 手动触发时产物上传为 Artifact,Release 事件上传到 Release Assets - -**影响范围**: -- `.github/workflows/docker-build.yml` - GitHub Actions 工作流 - -**提交**: e5992b5 - ---- - -## ⚠️ 潜在问题和注意事项 - -### 1. 买入订单金额精度调整可能带来的影响 - -**问题说明**: -本次修复调整了买入订单的金额精度限制,可能会带来以下影响: - -#### 1.1 makerAmount 精度降低(4 位 → 2 位小数) - -**影响**: -- **订单金额可能被向下舍入**:由于 makerAmount (USDC) 从 4 位小数降低到 2 位小数,订单金额可能会被向下舍入 -- **实际支付金额可能略低于预期**:例如,如果计算出的金额是 `0.5985 USDC`,现在会被舍入为 `0.59 USDC`,实际支付金额可能比预期少 `0.0085 USDC` -- **可能影响固定金额模式的跟单**:在固定金额模式下,如果金额被舍入,实际买入的数量可能会略少于预期 - -**建议**: -- 在固定金额模式下,建议设置稍大一点的金额,以补偿可能的舍入损失 -- 监控订单创建情况,确认金额是否符合预期 -- 如果发现金额差异较大,可以适当调整跟单配置 - -#### 1.2 takerAmount 精度提高(2 位 → 4 位小数) - -**影响**: -- **订单数量精度提高**:takerAmount (shares) 从 2 位小数提高到 4 位小数,可以更精确地指定买入数量 -- **可能增加订单复杂度**:更高的精度可能导致一些边缘情况,需要确保数量计算正确 - -**建议**: -- 验证订单数量是否符合预期 -- 确认跟单数量计算逻辑是否正确 - -#### 1.3 订单创建成功率变化 - -**影响**: -- **修复前**:订单创建可能因为精度问题失败 -- **修复后**:订单创建成功率应该提高,但金额可能略有变化 - -**建议**: -- 升级后监控订单创建成功率 -- 对比升级前后的订单金额,确认差异是否在可接受范围内 - -### 2. 构建流程变更 - -**影响**: -- Release 事件默认只打包产物,不构建 Docker -- 如果需要 Docker 镜像,需要手动触发构建并选择 Docker 升级类型 - -**建议**: -- 了解新的构建流程,根据需要选择合适的构建方式 -- 如果需要 Docker 镜像,使用 workflow_dispatch 手动触发 - ---- - -## 📊 文件变更统计 - -- **修改文件数**: 2 -- **新增行数**: 127 -- **删除行数**: 27 - ---- - -## 🔄 升级建议 - -1. **测试买入订单创建**: - - 升级后先测试少量买入订单,确认金额和数量是否符合预期 - - 特别关注固定金额模式的跟单,确认金额是否被正确舍入 - -2. **监控订单创建成功率**: - - 升级后监控订单创建成功率,确认是否解决了 `invalid amounts` 错误 - - 对比升级前后的订单金额,确认差异是否在可接受范围内 - -3. **验证金额计算**: - - 验证 makerAmount 是否被正确限制为 2 位小数 - - 验证 takerAmount 是否被正确限制为 4 位小数 - -4. **了解构建流程变更**: - - 了解新的构建流程,根据需要选择合适的构建方式 - - 如果需要 Docker 镜像,使用 workflow_dispatch 手动触发 - ---- - -## 📝 完整提交列表 - -- 42472f6 - fix: 修复买入订单金额精度问题 -- e5992b5 - feat(workflow): 优化构建流程和通知机制 - ---- - -## 🙏 致谢 - -感谢所有贡献者和用户的支持与反馈! - diff --git a/RELEASE_NOTES_v2.0.3.md b/RELEASE_NOTES_v2.0.3.md deleted file mode 100644 index db6382a..0000000 --- a/RELEASE_NOTES_v2.0.3.md +++ /dev/null @@ -1,241 +0,0 @@ -# PolyHermes v2.0.3 Release Notes - -## 📋 版本信息 -- **版本号**: v2.0.3 -- **发布日期**: 2026-01-31 -- **基础版本**: v2.0.2 - -## 🎯 改动摘要 - -本次版本主要优化了用户界面显示,包括数值格式化、Leader列表优化、移除不必要的配置项,提升了用户体验。 - ---- - -## ✨ 新功能 - -### 1. 为所有数值显示添加千分位分隔符 - -**功能描述**: -- ✅ 重构 `formatNumber` 和 `formatUSDC` 函数,默认添加千分位分隔符 -- ✅ 所有数值(金额、数量、价格等)现在默认显示千分位 -- ✅ 自动去除尾随零,提升可读性 -- ✅ 示例:`1234567.89` 显示为 `1,234,567.89` - -**影响范围**: -- `frontend/src/utils/index.ts` - 工具函数 -- `frontend/src/pages/Statistics.tsx` - 统计页面 -- `frontend/src/pages/CopyTradingStatistics.tsx` - 跟单统计页面 -- `frontend/src/pages/PositionList.tsx` - 持仓列表 -- `frontend/src/pages/AccountList.tsx` - 账户列表 - -**提交**: 40081c2 - ---- - -### 2. 在创建跟单配置时显示Leader资产信息 - -**功能描述**: -- ✅ 选择Leader后自动获取并显示资产信息 -- ✅ 显示总资产、可用余额、仓位资产 -- ✅ 使用Card和Statistic组件美观展示 -- ✅ 支持中英文多语言 -- ✅ 使用formatUSDC格式化显示金额 - -**影响范围**: -- `frontend/src/pages/CopyTradingOrders/AddModal.tsx` - 添加跟单配置弹窗 -- `frontend/src/pages/CopyTradingOrders/EditModal.tsx` - 编辑跟单配置弹窗 -- `frontend/src/locales/**/common.json` - 多语言文件 - -**提交**: 390b3ee - ---- - -### 3. Leader列表显示仓位资产 - -**功能描述**: -- ✅ Leader列表新增仓位资产显示 -- ✅ 显示Leader的总资产、可用余额、仓位资产 -- ✅ 优化资产信息展示方式 - -**影响范围**: -- `frontend/src/pages/LeaderList.tsx` - Leader列表页面 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/dto/LeaderDto.kt` - Leader DTO -- `backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/leaders/LeaderService.kt` - Leader服务 - -**提交**: 3350039 - ---- - -## 🔧 优化改进 - -### 1. Leader列表优化 - -**改进内容**: -- ✅ 后端过滤价值为0的仓位 -- ✅ 持仓列表显示市场名称而非ID -- ✅ 列表移除分类和创建时间列 -- ✅ 文案'跟单关系数'改为'跟单数' -- ✅ 持仓DTO添加title字段 - -**影响范围**: -- `frontend/src/pages/LeaderList.tsx` - Leader列表页面 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/leaders/LeaderService.kt` - Leader服务 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/service/common/BlockchainService.kt` - 区块链服务 - -**提交**: 0bdc0c7 - ---- - -### 2. 列表只显示可用余额 - -**改进内容**: -- ✅ 账户列表和Leader列表只显示可用余额 -- ✅ 简化界面,减少信息冗余 - -**影响范围**: -- `frontend/src/pages/AccountList.tsx` - 账户列表 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/service/accounts/AccountService.kt` - 账户服务 - -**提交**: 17eea01 - ---- - -### 3. 移除仓位资产列 - -**改进内容**: -- ✅ 移除不必要的仓位资产列显示 -- ✅ 简化界面布局 - -**影响范围**: -- `frontend/src/pages/PositionList.tsx` - 持仓列表 - -**提交**: 6980781 - ---- - -## 🗑️ 移除功能 - -### 移除跟单最大仓位数量(maxPositionCount)配置 - -**移除原因**: -- 该配置项使用频率低,且增加了系统复杂度 -- 简化跟单配置,提升用户体验 - -**移除内容**: -- ✅ 数据库:创建迁移文件 V26 删除 `max_position_count` 字段 -- ✅ 后端:移除实体类、DTO、服务中的 `maxPositionCount` 相关代码 -- ✅ 后端:移除 `FilterResult` 中的 `FAILED_MAX_POSITION_COUNT` 状态 -- ✅ 后端:移除 `CopyTradingFilterService` 中的最大仓位数量检查逻辑 -- ✅ 前端:移除类型定义、表单字段和国际化翻译 -- ✅ 前端:移除过滤订单列表中的 `MAX_POSITION_COUNT` 类型 - -**影响范围**: -- `backend/src/main/resources/db/migration/V26__remove_max_position_count.sql` - 数据库迁移 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/entity/CopyTrading.kt` - 实体类 -- `backend/src/main/kotlin/com/wrbug/polymarketbot/dto/CopyTradingDto.kt` - DTO -- `backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/configs/CopyTradingFilterService.kt` - 过滤服务 -- `frontend/src/pages/CopyTradingOrders/AddModal.tsx` - 添加表单 -- `frontend/src/pages/CopyTradingOrders/EditModal.tsx` - 编辑表单 -- `frontend/src/types/index.ts` - 类型定义 - -**提交**: e8fd1b5 - ---- - -## 🐛 Bug 修复 - -### 修复TypeScript类型错误 - -**修复内容**: -- ✅ 修复编译时的TypeScript类型错误 -- ✅ 修复Spin导入问题 -- ✅ 修复Table fixed类型问题 -- ✅ 修复size类型问题 - -**影响范围**: -- `frontend/src/pages/LeaderList.tsx` - Leader列表页面 - -**提交**: 8097660 - ---- - -## ⚠️ 潜在问题和注意事项 - -### 1. 数值格式化变更 - -**影响**: -- 所有数值现在默认显示千分位分隔符 -- 如果之前有代码依赖特定的数值格式,可能需要调整 - -**建议**: -- 检查是否有代码依赖特定的数值格式 -- 确认数值显示是否符合预期 - -### 2. 移除maxPositionCount配置 - -**影响**: -- 如果之前使用了最大仓位数量限制功能,升级后将不再可用 -- 需要手动调整跟单策略 - -**建议**: -- 升级前检查是否有跟单配置使用了最大仓位数量限制 -- 如有需要,可以手动调整跟单策略 - -### 3. Leader列表显示变更 - -**影响**: -- Leader列表现在只显示价值大于0的仓位 -- 列表布局和显示内容有所调整 - -**建议**: -- 升级后检查Leader列表显示是否符合预期 -- 确认仓位信息是否正确显示 - ---- - -## 📊 文件变更统计 - -- **修改文件数**: 28 -- **新增行数**: 1490 -- **删除行数**: 897 - ---- - -## 🔄 升级建议 - -1. **检查数值显示**: - - 升级后检查所有数值显示是否符合预期 - - 确认千分位分隔符显示正确 - -2. **检查跟单配置**: - - 如果有使用最大仓位数量限制的配置,需要手动调整 - - 确认跟单功能正常工作 - -3. **检查Leader列表**: - - 升级后检查Leader列表显示是否正确 - - 确认仓位信息是否完整 - -4. **数据库迁移**: - - 升级时会自动执行数据库迁移 V26 - - 迁移会删除 `max_position_count` 字段 - - 建议在升级前备份数据库 - ---- - -## 📝 完整提交列表 - -- 40081c2 - feat: 为所有数值显示添加千分位分隔符 -- e8fd1b5 - 移除跟单最大仓位数量(maxPositionCount)配置 -- 390b3ee - feat: 在创建跟单配置时显示Leader资产信息 -- 8097660 - fix: 修复TypeScript类型错误 -- 17eea01 - refactor: 列表只显示可用余额 -- 6980781 - refactor: 移除仓位资产列 -- 3350039 - feat: Leader列表显示仓位资产 -- 0bdc0c7 - feat: Leader列表优化 - ---- - -## 🙏 致谢 - -感谢所有贡献者和用户的支持与反馈! - diff --git a/docs/zh/DEPLOYMENT_GUIDE.md b/docs/zh/DEPLOYMENT_GUIDE.md new file mode 100644 index 0000000..cce5ace --- /dev/null +++ b/docs/zh/DEPLOYMENT_GUIDE.md @@ -0,0 +1,335 @@ +# PolyHermes 一键部署指南 + +本文档介绍如何使用交互式一键部署脚本快速部署 PolyHermes 应用。 + +## 📋 前置要求 + +### 必需软件 + +- **Docker**: 版本 20.10 或更高 +- **Docker Compose**: 版本 2.0 或更高(或 `docker-compose` v1.29+) + +### 环境准备 + +```bash +# macOS 安装 Docker +brew install docker + +# Ubuntu/Debian 安装 Docker +curl -fsSL https://get.docker.com | sh + +# CentOS/RHEL 安装 Docker +yum install docker-ce docker-ce-cli containerd.io +``` + +## 🚀 快速开始 + +### 1. 克隆项目(如果尚未克隆) + +```bash +git clone https://github.com/WrBug/PolyHermes.git +cd PolyHermes +``` + +### 2. 运行部署脚本 + +```bash +./deploy-interactive.sh +``` + +### 3. 按提示配置 + +脚本会引导你完成以下配置: + +#### 基础配置 +- **服务器端口**:应用对外暴露的端口(默认:80) +- **MySQL 端口**:数据库外部访问端口(默认:3307,避免与本地 MySQL 冲突) +- **时区**:服务器时区(默认:Asia/Shanghai) + +#### 数据库配置 +- **数据库用户名**:默认为 `root` +- **数据库密码**:回车自动生成 32 字符随机密码 + +#### 安全配置(关键) +- **JWT 密钥**:回车自动生成 128 字符随机密钥 +- **管理员密码重置密钥**:回车自动生成 64 字符随机密钥 +- **加密密钥**:用于加密 API Key,回车自动生成 64 字符随机密钥 + +#### 日志配置 +- **Root 日志级别**:第三方库日志级别(默认:WARN) + - 可选:`TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `OFF` +- **应用日志级别**:应用代码日志级别(默认:INFO) + +#### 其他配置 +- **Spring Profile**:环境配置(默认:prod) +- **允许预发布版本**:是否允许自动更新到预发布版本(默认:false) +- **GitHub 仓库**:项目仓库地址(默认:WrBug/PolyHermes) + +### 4. 确认并部署 + +配置完成后,脚本会: +1. 生成 `.env` 配置文件 +2. 显示配置摘要 +3. 请求确认部署 +4. 拉取 Docker Hub 镜像 +5. 启动服务 +6. 执行健康检查 + +## 📝 配置示例 + +### 使用默认值部署(推荐) + +所有配置项直接回车,脚本会自动生成安全的随机密钥: + +``` +服务器端口 [默认: 80]: ⏎ +MySQL 端口(外部访问) [默认: 3307]: ⏎ +时区 [默认: Asia/Shanghai]: ⏎ +数据库用户名 [默认: root]: ⏎ +数据库密码 [回车自动生成]: ⏎ +JWT 密钥 [回车自动生成]: ⏎ +管理员密码重置密钥 [回车自动生成]: ⏎ +加密密钥(用于加密 API Key) [回车自动生成]: ⏎ +Root 日志级别(第三方库) [默认: WARN]: ⏎ +应用日志级别 [默认: INFO]: ⏎ +Spring Profile [默认: prod]: ⏎ +允许预发布版本更新 [默认: false]: ⏎ +GitHub 仓库 [默认: WrBug/PolyHermes]: ⏎ +``` + +### 自定义端口部署 + +如果需要使用不同的端口: + +``` +服务器端口 [默认: 80]: 8080⏎ +MySQL 端口(外部访问) [默认: 3307]: 33306⏎ +``` + +### 开发环境部署 + +启用 DEBUG 日志: + +``` +Root 日志级别(第三方库) [默认: WARN]: DEBUG⏎ +应用日志级别 [默认: INFO]: DEBUG⏎ +``` + +## 🔧 部署后管理 + +### 访问应用 + +部署完成后,访问: + +``` +http://localhost:80 +``` + +(或你配置的自定义端口) + +### 常用命令 + +```bash +# 查看服务状态 +docker compose -f docker-compose.prod.yml ps + +# 查看实时日志 +docker compose -f docker-compose.prod.yml logs -f + +# 仅查看应用日志 +docker compose -f docker-compose.prod.yml logs -f app + +# 停止服务 +docker compose -f docker-compose.prod.yml down + +# 重启服务 +docker compose -f docker-compose.prod.yml restart + +# 更新到最新版本 +docker pull wrbug/polyhermes:latest +docker compose -f docker-compose.prod.yml up -d +``` + +### 数据库连接 + +使用配置的凭据连接到 MySQL: + +```bash +mysql -h 127.0.0.1 -P 3307 -u root -p +# 输入你在部署时设置的数据库密码 +``` + +或使用图形化工具(如 DBeaver、Navicat): +- **主机**: `localhost` +- **端口**: `3307`(或你配置的端口) +- **数据库**: `polyhermes` +- **用户名**: `root`(或你配置的用户名) +- **密码**: 部署时设置的密码(可在 `.env` 文件中查看) + +## 🔐 安全最佳实践 + +### 保护配置文件 + +```bash +# 设置 .env 文件权限 +chmod 600 .env + +# 确保 .env 已添加到 .gitignore +echo ".env" >> .gitignore +``` + +### 定期更换密钥 + +生产环境建议定期更换安全密钥: + +```bash +# 生成新的 JWT 密钥(128字符) +openssl rand -hex 64 + +# 生成新的管理员重置密钥(64字符) +openssl rand -hex 32 + +# 更新 .env 文件后重启服务 +docker compose -f docker-compose.prod.yml restart +``` + +### 备份数据库 + +```bash +# 备份数据库 +docker exec polyhermes-mysql mysqldump -u root -p polyhermes > backup_$(date +%Y%m%d).sql + +# 恢复数据库 +docker exec -i polyhermes-mysql mysql -u root -p polyhermes < backup_20260201.sql +``` + +## 🌐 生产环境部署建议 + +### 1. 使用反向代理 + +建议使用 Nginx 或 Caddy 作为反向代理: + +```nginx +# Nginx 配置示例 +server { + listen 443 ssl http2; + server_name polyhermes.yourdomain.com; + + ssl_certificate /path/to/cert.pem; + ssl_certificate_key /path/to/key.pem; + + location / { + proxy_pass http://localhost:80; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +### 2. 配置防火墙 + +```bash +# UFW (Ubuntu) +ufw allow 80/tcp +ufw allow 443/tcp +ufw enable + +# Firewalld (CentOS) +firewall-cmd --add-service=http --permanent +firewall-cmd --add-service=https --permanent +firewall-cmd --reload +``` + +### 3. 启用自动更新 + +配置定时任务自动检查并更新镜像: + +```bash +# 创建更新脚本 +cat > /opt/polyhermes-update.sh <<'EOF' +#!/bin/bash +cd /path/to/PolyHermes +docker pull wrbug/polyhermes:latest +docker compose -f docker-compose.prod.yml up -d +EOF + +chmod +x /opt/polyhermes-update.sh + +# 添加到 crontab(每天凌晨 3 点检查更新) +echo "0 3 * * * /opt/polyhermes-update.sh >> /var/log/polyhermes-update.log 2>&1" | crontab - +``` + +## 🐛 故障排查 + +### 服务无法启动 + +```bash +# 查看详细错误日志 +docker compose -f docker-compose.prod.yml logs + +# 检查容器状态 +docker compose -f docker-compose.prod.yml ps +``` + +### 数据库连接失败 + +```bash +# 检查 MySQL 容器状态 +docker logs polyhermes-mysql + +# 测试数据库连接 +docker exec polyhermes-mysql mysql -u root -p -e "SELECT 1" +``` + +### 端口被占用 + +```bash +# 查找占用端口的进程 +lsof -i :80 +# 或 +netstat -tulpn | grep :80 + +# 修改 SERVER_PORT 环境变量 +vim .env # 修改 SERVER_PORT=8080 +docker compose -f docker-compose.prod.yml up -d +``` + +### 镜像拉取失败 + +如果 Docker Hub 访问受限,可以配置镜像加速器: + +```bash +# 配置 Docker 镜像加速器 +sudo mkdir -p /etc/docker +sudo tee /etc/docker/daemon.json <<-'EOF' +{ + "registry-mirrors": [ + "https://docker.mirrors.ustc.edu.cn", + "https://hub-mirror.c.163.com" + ] +} +EOF + +sudo systemctl restart docker +``` + +## 📚 更多资源 + +- [项目 README](../../README.md) +- [发布日志](../../RELEASE.md) +- [GitHub 仓库](https://github.com/WrBug/PolyHermes) +- [问题反馈](https://github.com/WrBug/PolyHermes/issues) + +## 📞 获取帮助 + +如遇到问题,请: + +1. 查看上方的**故障排查**章节 +2. 检查 [GitHub Issues](https://github.com/WrBug/PolyHermes/issues) +3. 提交新的 Issue 并附上日志输出 + +--- + +**祝部署顺利!** 🎉 diff --git a/frontend/src/pages/BacktestList.tsx b/frontend/src/pages/BacktestList.tsx index 5154cd2..997ab5c 100644 --- a/frontend/src/pages/BacktestList.tsx +++ b/frontend/src/pages/BacktestList.tsx @@ -722,7 +722,10 @@ const BacktestList: React.FC = () => {