77fe0fa679
Co-authored-by: Cursor <cursoragent@cursor.com>
3.0 KiB
3.0 KiB
修复报告:期权币本位高危缺陷(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_captests.test_options_partial_close_accumtests.test_options_profit_exit_recycletests.test_options_btc_pnl_usdt
4. 审计轮次
| 轮次 | 结果 |
|---|---|
| 修复前 | 多条 Critical/High(见审计报告 §3) |
| 第 1 轮 Bugbot | 2 High → 已修 |
| 第 2 轮 Bugbot + 人工 | 无确认残留 High/Critical |
详见:docs/审计报告-高危修复-2026-10-07.md
5. 部署建议
- 推送本仓库后,对所有实例(含模拟盘「波段-复利」)远程更新并重启
- 验证:中控平仓后自动卖回;粉尘不再显示/不拦开仓;模拟盘不再频繁「数据库锁定」
- 若仍见旧 pending 桥:开仓流程会自动清粉尘;或重启后再试一次开仓
6. 未改(有意保留)
- 永续监控
check_order_monitors长连接(Medium,非本次高危范围) - 粉尘仍会留在交易所账户内,仅程序忽略展示与重试