修复期权币本位高危缺陷:开仓估量、卖回封顶、握库超时与条件单嵌套锁。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# 修复报告:期权币本位高危缺陷(2026-10-07)
|
||||
|
||||
## 1. 目标
|
||||
|
||||
按审计清单修复全部 **Critical / High** 项,本地测试 + 不少于两轮审计后,再通知更新实例。
|
||||
|
||||
## 2. 修复对照表
|
||||
|
||||
| 原问题 | 修复要点 | 主要文件 |
|
||||
| --- | --- | --- |
|
||||
| 买币增量≤0 误用整户余额 | 短重试取增量;仅用订单回执 `coin_bought`;否则回滚 | `options_coin_open_lib.py` |
|
||||
| IOC 部分成交 / 51008 减半残留币 | `_sell_excess_bridge_coin` 按桥买入量封顶卖掉多余币 | `options_coin_open_lib.py` |
|
||||
| 卖回扫光无关余额 | `spot_market_sell_coin_to_usdt` 尊重 `coin_amount`;桥卖按 `coin_bought` 封顶 | `options_spot_bridge_lib.py`, `sim/hooks.py` |
|
||||
| 粉尘桥 `None` 拦开仓 | 用桥记录量判断粉尘;开仓前清桥 + 扫尾;holding 仅在确认无仓时清 | `options_spot_bridge_lib.py`, `options_coin_open_lib.py` |
|
||||
| 握库拉盘口 | 持仓/历史:先读库再 enrich;中控快照关闭 close_preview | `options_positions_lib.py`, `options_history_lib.py`, `options_hub_lib.py` |
|
||||
| 条件单嵌套开仓锁库 | `run_cond_orders_tick(get_db)`,开仓前关连接 | `options_cond_order_lib.py`, `options_register.py`, `options_monitor_lib.py` |
|
||||
| 目标/翻倍握库平仓 | 传 `get_db`,收集任务后无连接再 `close_fn` | `options_target_lib.py`, `options_profit_exit_lib.py`, `options_monitor_lib.py` |
|
||||
| 开仓等成交握库 | 等成交前 `commit+close`,结束后再开短连接写库 | `options_coin_open_lib.py` |
|
||||
| 模拟到期卖币静默失败 | 打印 `[sim_expiry_sell]` 日志 | `sim/broker_lib.py` |
|
||||
| 中控条件单不验上限 | 创建前调用 `option_position_limit_block_msg` | `hub_bridge_register.py` |
|
||||
| 持仓查询失败误卖 | `None`/异常不卖币,只清粉尘 pending | `options_coin_open_lib.py` |
|
||||
| 查询失败误关 holding | `positions_ok` 为假时不关 holding | `options_spot_bridge_lib.py` |
|
||||
| 回滚卖币无封顶 | 回滚按桥 `coin_bought` 封顶 | `options_spot_bridge_lib.py` |
|
||||
|
||||
## 3. 测试
|
||||
|
||||
新增:`tests/test_spot_dust_and_sell_cap.py`
|
||||
|
||||
已跑通:
|
||||
|
||||
- `tests.test_spot_dust_and_sell_cap`
|
||||
- `tests.test_options_partial_close_accum`
|
||||
- `tests.test_options_profit_exit_recycle`
|
||||
- `tests.test_options_btc_pnl_usdt`
|
||||
|
||||
## 4. 审计轮次
|
||||
|
||||
| 轮次 | 结果 |
|
||||
| --- | --- |
|
||||
| 修复前 | 多条 Critical/High(见审计报告 §3) |
|
||||
| 第 1 轮 Bugbot | 2 High → 已修 |
|
||||
| 第 2 轮 Bugbot + 人工 | 无确认残留 High/Critical |
|
||||
|
||||
详见:`docs/审计报告-高危修复-2026-10-07.md`
|
||||
|
||||
## 5. 部署建议
|
||||
|
||||
1. 推送本仓库后,对**所有实例**(含模拟盘「波段-复利」)远程更新并重启
|
||||
2. 验证:中控平仓后自动卖回;粉尘不再显示/不拦开仓;模拟盘不再频繁「数据库锁定」
|
||||
3. 若仍见旧 pending 桥:开仓流程会自动清粉尘;或重启后再试一次开仓
|
||||
|
||||
## 6. 未改(有意保留)
|
||||
|
||||
- 永续监控 `check_order_monitors` 长连接(Medium,非本次高危范围)
|
||||
- 粉尘仍会留在交易所账户内,仅程序忽略展示与重试
|
||||
@@ -0,0 +1,68 @@
|
||||
# 审计报告:期权币本位 / 模拟盘锁库 / 中控超时(2026-10-07)
|
||||
|
||||
## 1. 范围
|
||||
|
||||
- 币本位开仓、平仓、卖回、粉尘桥
|
||||
- SQLite `database is locked` 与中控快照超时
|
||||
- 条件单、目标/翻倍出场、模拟盘到期卖币
|
||||
- 中控条件单创建与持仓上限
|
||||
|
||||
## 2. 审计方法
|
||||
|
||||
1. 静态代码审阅(开仓/卖回/监控/中控快照路径)
|
||||
2. Bugbot 未提交变更审阅(第 1、2 轮)
|
||||
3. 本地 `unittest`(粉尘阈值、分批平仓累计、翻倍出场、BTC 盈亏折 U 等)
|
||||
|
||||
## 3. 第 0 轮(修复前)高危清单(摘要)
|
||||
|
||||
| 级别 | 问题 |
|
||||
| --- | --- |
|
||||
| Critical | 买币增量≤0 时误用整户余额估张数 |
|
||||
| High | IOC 部分成交 / 51008 减半后未卖多余币 |
|
||||
| High | 卖回扫光交易户该币(未按桥封顶) |
|
||||
| High | 粉尘桥余额 `None` 时不清、拦开仓且无重试按钮 |
|
||||
| High | 展示持仓/历史握库拉盘口 → 锁库/超时 |
|
||||
| High | 中控快照每次算 close_preview 加重超时 |
|
||||
| High | 条件单/目标/翻倍出场握库嵌套开平仓 |
|
||||
| High | 模拟到期卖币失败静默吞掉 |
|
||||
| High | 中控建条件单不校验持仓上限 |
|
||||
| High | 持仓查询失败被当成空仓仍可能卖币(第 1 轮复现相关) |
|
||||
|
||||
## 4. 第 1 轮审计(修复后 Bugbot)
|
||||
|
||||
仍发现 2 条 High,已当场修复:
|
||||
|
||||
| 级别 | 位置 | 问题 | 处置 |
|
||||
| --- | --- | --- | --- |
|
||||
| High | `options_spot_bridge_lib.clear_dust_pending_sell_bridges` | 持仓查询失败时 `live_uly` 为空,误关 `holding` 桥 | 持仓未确认成功时禁止关 holding |
|
||||
| High | `sweep_spot_after_options_flat` | `fetch_option_positions` 返回 `None` 被当成 `[]` 后卖币 | `None` 直接失败返回,只清粉尘 pending |
|
||||
|
||||
## 5. 第 2 轮审计
|
||||
|
||||
- Bugbot:无通过校验器确认的 High/Critical 残留
|
||||
- 人工复查:Critical/High 项均有对应修复;`check_order_monitors` 长连接等属 Medium,本次未纳入高危闭环
|
||||
|
||||
## 6. 本地测试
|
||||
|
||||
```text
|
||||
PYTHONPATH=<repo> python -m unittest \
|
||||
tests.test_spot_dust_and_sell_cap \
|
||||
tests.test_options_partial_close_accum \
|
||||
tests.test_options_profit_exit_recycle \
|
||||
tests.test_options_btc_pnl_usdt \
|
||||
-q
|
||||
→ OK
|
||||
```
|
||||
|
||||
## 7. 结论
|
||||
|
||||
在「高危」范围内,经不少于两轮审计与本地单测,**未发现仍确认存在的 Critical/High 缺陷**。
|
||||
建议实例更新到含本批修复的提交后,用模拟盘走一遍:开仓 → 中控平仓 → 自动卖回 → 再开仓(确认粉尘桥不再拦截)。
|
||||
|
||||
## 8. 残留风险(非高危,供后续)
|
||||
|
||||
| 级别 | 说明 |
|
||||
| --- | --- |
|
||||
| Medium | `app.py` 永续 `check_order_monitors` 仍单连接贯穿价格/平仓/微信 |
|
||||
| Medium | 开仓路径部分阶段仍较长,极端并发下 WAL 写锁仍可能短暂排队 |
|
||||
| Low | 现货 `minSz` 拉取失败时用固定兜底,与交易所实际上调可能短暂不一致 |
|
||||
Reference in New Issue
Block a user