77fe0fa679
Co-authored-by: Cursor <cursoragent@cursor.com>
2.8 KiB
2.8 KiB
审计报告:期权币本位 / 模拟盘锁库 / 中控超时(2026-10-07)
1. 范围
- 币本位开仓、平仓、卖回、粉尘桥
- SQLite
database is locked与中控快照超时 - 条件单、目标/翻倍出场、模拟盘到期卖币
- 中控条件单创建与持仓上限
2. 审计方法
- 静态代码审阅(开仓/卖回/监控/中控快照路径)
- Bugbot 未提交变更审阅(第 1、2 轮)
- 本地
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. 本地测试
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 拉取失败时用固定兜底,与交易所实际上调可能短暂不一致 |