Releases: WrBug/PolyHermes
v1.1.12: 修复最大仓位金额未生效和交易receipt解析问题
Bug 修复
1. 修复最大仓位金额未生效的问题 ⚠️ 重要
- 问题:当只配置了
maxPositionValue(最大仓位金额)但未配置maxSpread或minOrderDepth时,仓位检查被跳过导致过滤失效 - 影响:最大仓位金额限制功能完全失效
- 修复:将仓位检查移到
needOrderbook判断之前,确保无论是否需要订单簿,都会执行仓位检查 - 文件:
backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/configs/CopyTradingFilterService.kt
2. 修复交易 receipt 解析问题
- 问题:当交易 receipt 返回
JsonNull时,未进行空值检查导致空指针异常 - 修复:添加
JsonNull检查,防止解析失败时出现异常 - 文件:
backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/monitor/OnChainWsService.kt
优化
- 将 Polymarket API URL 配置改为代码常量
- 提高代码可维护性
新功能
- 添加 Activity WebSocket 消息超时检测和自动重连机制
- 提高系统稳定性,防止消息丢失
提交记录
- fix: 修复最大仓位金额未生效和交易receipt解析问题
- refactor: 将 Polymarket API URL 配置改为代码常量
- feat: 添加 Activity WebSocket 消息超时检测和自动重连机制
升级建议
强烈建议所有用户升级到此版本,特别是使用了最大仓位金额限制功能的用户。
升级后,请重启后端服务以应用修复。
v1.1.11 - 修复订单通知发送问题
v1.1.11 - 修复订单通知发送问题
🐛 Bug 修复
修复下单成功不发送 Telegram 通知的问题
问题描述:
v1.1.10 版本引入的双重检查逻辑存在严重错误:
- 在保存
notificationSent = true后立即查询检查是否已发送 - 由于查询的是自己刚刚保存的状态,条件永远为 true
- 导致所有订单通知都被跳过,用户收不到下单成功的消息
修复方案:
- 移除 OrderStatusUpdateService 中错误的双重检查逻辑
- 修复买入订单和卖出订单通知逻辑(共 3 处)
- 改为标记为已发送后立即发送通知
- 利用数据库状态防止并发任务重复发送(第一个任务标记后,其他任务会跳过)
影响范围:
- 修复文件:
OrderStatusUpdateService.kt - 代码变更:+58 行,-90 行(净减少 32 行代码)
- 恢复功能:买入订单通知、卖出订单通知
升级建议:
- 这是一个紧急修复,建议立即升级
- 修复后,下单成功将正常发送 Telegram 通知
📝 完整更新日志
查看 RELEASE.md 获取详细的版本更新日志。
v1.1.10
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 FALSEcopy_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: 修复订单通知重复发送和时间显示问题
🎯 升级建议
-
数据库迁移:本次版本包含数据库迁移脚本,升级时会自动执行
- 自动添加
push_filtered_orders字段到模板表和跟单配置表 - 现有数据不受影响,新字段默认值为
false
- 自动添加
-
配置更新:
- 可选:在
.env文件中添加TZ环境变量自定义容器时区 - 无需其他配置变更
- 可选:在
-
兼容性:
- 完全向后兼容,不影响现有功能
- API 变更都是新增字段,不影响现有调用
📦 Docker 镜像
Docker 镜像会自动构建并推送到 Docker Hub:
wrbug/polyhermes:v1.1.10wrbug/polyhermes:latest(如果这是最新版本)
🔗 相关链接
发布日期:2026-01-12
v1.1.9
🐛 Bug 修复
修复盈亏统计计算错误问题
-
问题:在仓位检查时,刚创建的订单可能因仓位更新延迟被误判为已卖出,导致盈亏统计计算错误
-
修复:
- 优化自动卖出订单筛选逻辑,在 SQL 层直接过滤创建时间超过阈值的订单
- 新增
findUnmatchedBuyOrdersByOutcomeIndexOlderThanRepository 方法,提高查询效率 - 统一使用 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: 优化自动卖出订单筛选逻辑,避免刚创建的订单被误判
🎯 升级建议
- 数据库迁移:无需数据库迁移,可直接升级
- 配置更新:无需配置变更
- 兼容性:完全向后兼容,不影响现有功能
📦 Docker 镜像
Docker 镜像会自动构建并推送到 Docker Hub:
wrbug/polyhermes:v1.1.9wrbug/polyhermes:latest(如果这是最新版本)
🔗 相关链接
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解析
- 支持
-
参考文档:
🔧 支持同一用户创建多个相同 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.tsxsrc/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 双重监听方案
🎯 升级建议
- 数据库迁移:确保执行所有数据库迁移脚本(V19-V23)
- 配置更新:新版本的
application.properties中添加了 Activity WebSocket URL 配置 - 环境变量:如果使用 Docker 部署,建议更新
docker-compose.yml中的配置
📦 Docker 镜像
Docker 镜像会自动构建并推送到 Docker Hub:
wrbug/polyhermes:v1.1.8wrbug/polyhermes:latest(如果这是最新版本)
🔗 相关链接
- GitHub Release
- 双重监听方案文档
- [Activity WebSock...
v1.1.9: 修复盈亏统计计算错误问题
🐛 Bug 修复
修复盈亏统计计算错误问题
- 问题:在仓位检查时,刚创建的订单可能因仓位更新延迟被误判为已卖出,导致盈亏统计计算错误
- 修复:
- 优化自动卖出订单筛选逻辑,在 SQL 层直接过滤创建时间超过阈值的订单
- 新增
findUnmatchedBuyOrdersByOutcomeIndexOlderThanRepository 方法,提高查询效率 - 统一使用 2 分钟阈值保护刚创建的订单,避免误判
- 两个场景都使用 SQL 过滤:
- 场景1:仓位不存在时,延迟检测使用 SQL 过滤
- 场景2:仓位部分存在时,FIFO 匹配使用 SQL 过滤
📝 技术细节
-
Repository 变更:
- 新增
findUnmatchedBuyOrdersByOutcomeIndexOlderThan方法 - 在 SQL 查询中添加
createdAt < :thresholdTime条件过滤
- 新增
-
Service 变更:
PositionCheckService中两个场景都使用 SQL 过滤替代内存过滤- 统一使用 2 分钟(120000 毫秒)作为时间阈值
📊 变更统计
- 提交数量:2 个提交
- 文件变更:3 个文件
- 代码变更:+124 行 / -38 行(净增加 86 行)
🔗 相关链接
v1.1.8
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解析
- 支持
-
参考文档:
🔧 支持同一用户创建多个相同 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.tsxsrc/pages/CopyTradingOrders/EditModal.tsx
📝 文档更新
- 新增双重监听方案文档:详细说明 Activity WebSocket 和 On-Chain WebSocket 的双重监听机制
- 新增 Activity WebSocket API 文档:详细的 API 格式和消息结构说明
- 更新开发规范:JSON 解析规范和 Data Class 规范
📊 统计信息
- 61 个文件被修改
- +5125 行新增代码
- -1942 行删除代码
- 净增加 3183 行代码
🎯 升级建议
- 数据库迁移:确保执行所有数据库迁移脚本(V19-V23)
- 配置更新:新版本的
application.properties中添加了 Activity WebSocket URL 配置 - 环境变量:如果使用 Docker 部署,建议更新
docker-compose.yml中的配置
📦 Docker 镜像
Docker 镜像会自动构建并推送到 Docker Hub:
wrbug/polyhermes:v1.1.8wrbug/polyhermes:latest(如果这是最新版本)
🔗 相关链接
v1.1.7
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<BigDecimal?, Boolean>,第二个值表示是否发生 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 镜像部署的用户,建议更新到最新版本
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.6
v1.1.6 Release Notes
🚀 新功能
- 跟单仓位检查优化: 引入本地数据库订单跟踪机制,解决持仓推送延迟问题。支持混合检查模式(本地 DB + 外部持仓),自动取最大值确保风控精准。
- 通知系统增强:
- 支持 Telegram 通知图标自定义。
- 增加更详细的 FAK 订单错误调试日志,便于排查成交问题。
- 前端体验升级: 优化跟单订单列表,增加活跃加载状态、刷新按钮,提升交互流畅度。
🛠️ 修复与优化
- 交易精度修正:
- 修正
copyRatio缩放逻辑(百分比换算)。 - 下单价格策略调整:买单向上取整,卖单向下取整,严格匹配 USDC 2位小数精度。
- 完善最小下单金额(Share)的向上取整逻辑,确保起步订单成功率。
- 修正
- 通知去重: 修复相同订单 ID 可能触发重复 Telegram 通知的问题。
- 性能优化:
- 优化订单状态轮询逻辑,通过 SQL 过滤已完全匹配的订单,降低系统负载。
- 移除冗余的 Activity 轮询接口逻辑,专注链上 WebSocket 推送。
- 连接管理: 重构链上 WebSocket 连接管理,提升连接稳定性和重连效率。
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-proxyPOST /api/accounts/refresh-all-proxies
- 无新增接口
前端变更
- 工具函数:新增
formatNumber()函数,用于格式化数字显示 - 组件更新:所有数值输入框统一使用新的 formatter 函数
- 显示优化:跟单模式的比例显示为百分比格式
📝 升级说明
数据库升级
本次版本包含数据库迁移脚本,升级时会自动执行:
- 自动增加
copy_ratio字段的精度 - 现有数据不受影响,精度升级是向后兼容的
配置变更
无需额外配置变更。
兼容性
- 向后兼容:所有变更都是向后兼容的
- API 兼容:移除的接口不影响现有功能(这些接口已不再使用)
- 数据兼容:数据库字段精度升级不会影响现有数据
🎯 主要改进
- 优化输入框格式化:优化数值输入框的显示逻辑
- 优化跟单金额计算:确保按比例跟单的金额满足最小限制要求
- 提升精度支持:支持更精确的跟单比例设置(0.01% - 10000%)
- 代码清理:移除不再使用的刷新代理钱包接口
🔗 相关链接
🙏 致谢
感谢所有贡献者和测试用户的反馈与支持!
v1.1.4
v1.1.4 Release Notes(GitHub Releases 使用)
🎉 新功能
WebSocket 票据认证
- 添加 WebSocket 票据服务,使用短期有效的一次性票据替代 JWT token
- 增强 WebSocket 连接安全性
钱包类型支持
- 添加钱包类型(walletType)字段支持,区分 Magic 和 Safe 两种钱包类型
- 支持在账户导入时选择钱包类型
- 根据钱包类型正确计算代理地址
账户导入 UI 优化
- 账户导入改为 Modal 弹窗,提升用户体验
- 默认钱包类型设置为 Web3 Wallet(Safe)
- 优化钱包类型说明文本
🐛 问题修复
- 修复 walletType 字段的持久化和使用问题
- 修复 WebSocket 内存泄漏问题(添加定时清理任务)
- 修复 walletTypeHelp Tooltip 换行显示问题
- 更新多语言文本:将 "MetaMask(浏览器钱包)" 改为 "Web3钱包"
📊 变更统计
- 文件变更:30 个文件
- 代码变更:+919 行 / -177 行
- 数据库迁移:新增 V17 迁移脚本
📝 升级说明
本次版本包含数据库迁移脚本,升级时会自动执行。
🔗 变更日志
v1.1.3: 添加 Telegram 通知功能
🚀 v1.1.3 发布
✨ 新功能
- Telegram 通知集成
- 添加 PR 合并到 main 分支时的自动 Telegram 通知
- 添加 Docker 镜像构建前和构建成功时的自动 Telegram 通知
- 支持 Markdown 转 HTML 格式,美化消息显示
- 消息内容简洁,仅包含标题、版本号等关键信息
- PR 仅关闭(未合并)时不发送通知
🐛 Bug 修复
- 优化订单状态更新逻辑,避免误删订单和匹配明细
- 先检查 HTTP 状态码,非 200 的都跳过,不删除订单
- 只有当 HTTP 200 且响应体为 null 时,才表示订单不存在
- 保护已部分卖出的订单,如果已部分卖出则保留用于统计
- 避免因临时网络问题或 API 错误导致订单和 sell_match_detail 被误删
- 修复 workflow YAML 语法错误
- 修复 docker-build.yml 和 telegram-notify.yml 中的多行字符串格式问题
- 移除 heredoc 格式,使用 echo 命令构建 Python 脚本
- 确保所有 workflow 文件符合 GitHub Actions YAML 语法规范
🔧 改进
- 优化通知消息格式,移除冗余信息(作者、仓库、变更统计、提交记录、PR 描述等)
- Docker 构建成功后添加部署文档链接
- 通知失败不会影响构建流程
📝 配置说明
需要在 GitHub Secrets 中配置:
TELEGRAM_BOT_TOKEN: Telegram Bot TokenTELEGRAM_CHAT_ID: Telegram Chat ID(支持个人和群组)