Skip to content

Releases: WrBug/PolyHermes

v1.1.12: 修复最大仓位金额未生效和交易receipt解析问题

13 Jan 21:17

Choose a tag to compare

Bug 修复

1. 修复最大仓位金额未生效的问题 ⚠️ 重要

  • 问题:当只配置了 maxPositionValue(最大仓位金额)但未配置 maxSpreadminOrderDepth 时,仓位检查被跳过导致过滤失效
  • 影响:最大仓位金额限制功能完全失效
  • 修复:将仓位检查移到 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 - 修复订单通知发送问题

12 Jan 19:40

Choose a tag to compare

v1.1.11 - 修复订单通知发送问题

🐛 Bug 修复

修复下单成功不发送 Telegram 通知的问题

问题描述
v1.1.10 版本引入的双重检查逻辑存在严重错误:

  • 在保存 notificationSent = true 后立即查询检查是否已发送
  • 由于查询的是自己刚刚保存的状态,条件永远为 true
  • 导致所有订单通知都被跳过,用户收不到下单成功的消息

修复方案

  • 移除 OrderStatusUpdateService 中错误的双重检查逻辑
  • 修复买入订单和卖出订单通知逻辑(共 3 处)
  • 改为标记为已发送后立即发送通知
  • 利用数据库状态防止并发任务重复发送(第一个任务标记后,其他任务会跳过)

影响范围

  • 修复文件:OrderStatusUpdateService.kt
  • 代码变更:+58 行,-90 行(净减少 32 行代码)
  • 恢复功能:买入订单通知、卖出订单通知

升级建议

  • 这是一个紧急修复,建议立即升级
  • 修复后,下单成功将正常发送 Telegram 通知

📝 完整更新日志

查看 RELEASE.md 获取详细的版本更新日志。

v1.1.10

12 Jan 07:04

Choose a tag to compare

v1.1.10

🚀 主要功能

📢 推送已过滤订单功能

  • 新增推送已过滤订单功能(pushFilteredOrders),默认关闭

    • 支持在模板和跟单配置中配置是否推送被过滤的订单通知
    • 开启后,当订单因过滤条件(价格区间、订单深度、价差、仓位限制等)被过滤时,会发送 Telegram 通知
    • 帮助用户了解哪些订单被过滤以及过滤原因
  • 数据库迁移

    • 添加 push_filtered_orders 字段到 copy_trading_templates
    • 添加 push_filtered_orders 字段到 copy_trading
    • 迁移脚本:V24__add_push_filtered_orders_to_templates.sql
  • 后端实现

    • 在实体类(CopyTradingTemplateCopyTrading)中添加 pushFilteredOrders 字段
    • 在 DTO 中添加字段支持(创建、更新、查询)
    • 在 Service 中处理字段的创建、更新和传递
    • 在发送过滤订单通知时检查 pushFilteredOrders 字段,只有为 true 时才发送
  • 前端实现

    • 在模板新增、编辑、推送页面添加"推送已过滤订单"开关
    • 在跟单配置新增、编辑页面添加"推送已过滤订单"开关
    • 从模板创建跟单配置时,自动填充 pushFilteredOrders 字段
    • 支持多语言(中文、繁体中文、英文)

🔍 优化订单列表筛选功能

  • 支持按市场标题搜索

    • 买入订单列表:添加市场标题筛选,移除方向筛选
    • 卖出订单列表:添加市场标题筛选,将方向筛选改为状态筛选
    • 已成交订单列表:添加市场标题筛选和市场列显示
  • 改进分组体验

    • 记录用户的分组偏好到 localStorage,跨会话持久化
    • 所有搜索输入框添加 0.5 秒防抖优化,提升性能
  • 后端优化

    • MarketGroupedOrdersRequest 添加 marketIdmarketTitle 字段
    • 买入/卖出订单分组接口支持市场 ID 模糊匹配和市场标题关键字筛选

⚡ 优化跟单关系统计性能

  • 移除未实现盈亏计算

    • 移除未实现盈亏和持仓价值的计算逻辑
    • 总盈亏现在仅包含已实现盈亏,计算更准确
    • 简化盈亏百分比计算,仅基于已实现盈亏
  • 性能提升

    • 从 1+N 次网络请求减少到 0 次
    • 删除不再使用的方法和依赖注入
    • 统计查询速度显著提升

🐳 Docker 容器时区配置

  • 支持通过 .env 自定义时区
    • docker-compose.ymldocker-compose.prod.yml 中添加时区环境变量配置
    • 支持通过 TZ 环境变量自定义容器时区
    • 默认使用系统时区

🐛 Bug 修复

修复跟单配置更新时清空可选字段无法保存的问题

  • 问题:修改跟单配置时,清空价格区间、最大仓位数量、截止时间等可选字段后,无法保存到数据库

  • 修复

    • 修复价格区间(minPrice/maxPrice)清空后无法保存的问题
    • 修复最大仓位数量(maxPositionCount)清空后无法保存的问题
    • 修复市场截止时间(maxMarketEndDate)清空后无法保存的问题
    • 修复其他可选字段(minOrderDepth/maxSpread/maxPositionValue)清空后无法保存的问题
  • 实现方案

    • 前端:清空字段时传空字符串或 -1 标记,让后端识别为清空操作
    • 后端:处理空字符串和 -1 标记,正确设置为 null 以清空字段

修复新建和编辑页面的截止时间输入框交互问题

  • 问题:删除截止时间输入框内容后,失去焦点会自动填充 1
  • 修复
    • min1 改为 0,允许空值
    • 优化 onChange 处理,当值为 0nullundefined 时设置为 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 添加 marketIdmarketTitle 字段

前端变更

  • 新增字段
    • 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(如果这是最新版本)

🔗 相关链接


发布日期: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(如果这是最新版本)

🔗 相关链接


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_modekeywords(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(如果这是最新版本)

🔗 相关链接

Read more

v1.1.9: 修复盈亏统计计算错误问题

10 Jan 09:54

Choose a tag to compare

🐛 Bug 修复

修复盈亏统计计算错误问题

  • 问题:在仓位检查时,刚创建的订单可能因仓位更新延迟被误判为已卖出,导致盈亏统计计算错误
  • 修复
    • 优化自动卖出订单筛选逻辑,在 SQL 层直接过滤创建时间超过阈值的订单
    • 新增 findUnmatchedBuyOrdersByOutcomeIndexOlderThan Repository 方法,提高查询效率
    • 统一使用 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

09 Jan 03:10

Choose a tag to compare

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_modekeywords(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 行代码

🎯 升级建议

  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(如果这是最新版本)

🔗 相关链接

v1.1.7

07 Jan 04:52

Choose a tag to compare

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_ROOTLOG_LEVEL_APP 环境变量配置日志级别
    • docker-compose.ymldocker-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.mdREADME_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)

合约调用修复

📝 升级说明

数据库升级

  • 无需数据库迁移:本次更新不涉及数据库结构变更

配置更新

  • 可选配置:新增日志级别环境变量,如不配置将使用默认值
    • 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

🔗 相关链接


发布日期:2026-01-07

v1.1.6

05 Jan 03:03

Choose a tag to compare

v1.1.6 Release Notes

🚀 新功能

  • 跟单仓位检查优化: 引入本地数据库订单跟踪机制,解决持仓推送延迟问题。支持混合检查模式(本地 DB + 外部持仓),自动取最大值确保风控精准。
  • 通知系统增强:
    • 支持 Telegram 通知图标自定义。
    • 增加更详细的 FAK 订单错误调试日志,便于排查成交问题。
  • 前端体验升级: 优化跟单订单列表,增加活跃加载状态、刷新按钮,提升交互流畅度。

🛠️ 修复与优化

  • 交易精度修正:
    • 修正 copyRatio 缩放逻辑(百分比换算)。
    • 下单价格策略调整:买单向上取整,卖单向下取整,严格匹配 USDC 2位小数精度。
    • 完善最小下单金额(Share)的向上取整逻辑,确保起步订单成功率。
  • 通知去重: 修复相同订单 ID 可能触发重复 Telegram 通知的问题。
  • 性能优化:
    • 优化订单状态轮询逻辑,通过 SQL 过滤已完全匹配的订单,降低系统负载。
    • 移除冗余的 Activity 轮询接口逻辑,专注链上 WebSocket 推送。
  • 连接管理: 重构链上 WebSocket 连接管理,提升连接稳定性和重连效率。

v1.1.5

04 Jan 05:09

Choose a tag to compare

🔧 功能优化与改进

前端优化

优化 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. 代码清理:移除不再使用的刷新代理钱包接口

🔗 相关链接

🙏 致谢

感谢所有贡献者和测试用户的反馈与支持!

v1.1.4

03 Jan 13:56

Choose a tag to compare

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 通知功能

01 Jan 21:13

Choose a tag to compare

🚀 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 Token
  • TELEGRAM_CHAT_ID: Telegram Chat ID(支持个人和群组)