Files
crypto_okx/docs/审计报告-高危修复-2026-10-07.md
T

69 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 审计报告:期权币本位 / 模拟盘锁库 / 中控超时(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` 拉取失败时用固定兜底,与交易所实际上调可能短暂不一致 |