Audit fixes: LIVE symbols/fills/expiry/pending, security harden, add 更新说明.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-26 22:28:03 +08:00
parent bc8d1fb127
commit f48ea5bbcc
18 changed files with 1389 additions and 1069 deletions
+51
View File
@@ -0,0 +1,51 @@
# 比特骆驼自动化对冲系统 — 更新说明
> 每次发版 / 合并重要改动后,在本文档顶部追加一条(日期新→旧)。
> 关联审计结论写在同条「审计」小节。
---
## 2026-07-26 — 审计修复包(安全 / 下单 / 平仓)
### 变更
1. **LIVE 永续合约号**:开平仓统一用 `load_runtime_settings()` / 组内 `perp_inst_id`,修复 UI 切币安后仍用 env `ETH-USDT-SWAP` 的问题。
2. **到期平仓**:期权先走交易所真实平仓(失败且仓位已空才本地结算),并在永续失败前写入 `option_closed_perp_pending`
3. **成交完整性**:OKX/币安仅接受完全成交;账本数量按交易所 `accFillSz`/`executedQty` 回写。
4. **`ctVal`**:查不到合约面值时直接失败,禁止静默默认 `0.01`
5. **放弃期权路径**:优先交易所卖期权;仅深虚且卖不出时才残留归档。
6. **LIVE 重启**:启动时若为 LIVE,自动暂停策略,须人工再点启动。
7. **安全**:登录限流;切 LIVE 须服务端校验确认串 `LIVE`;生产关闭 `/docs`;改密后抬升 token 版本作废旧票;`.env` 写入后尽量 `chmod 600`CORS 改为同源优先。
8. **出场**:LIVE 净利加入保守平仓手续费缓冲,减少「刚达标但扣费后不够」的提前出场。
### 审计(本包改后复审)
| 项 | 状态 |
|----|------|
| 永续符号 env/DB 不一致 | **已修**`symbols.resolve_perp_inst_id` + 开平仓全路径) |
| 到期只本地结算期权 | **已修**(先交易所卖;失败才本地结算) |
| 到期永续失败无 pending | **已修**(统一 `_mark_option_closed_perp_pending` |
| partially_filled 当完成 | **已修**OKX 仅 `filled`;币安仅 `FILLED` |
| 放弃路径不卖期权 | **已缓解**(先 `close_group` 双腿;失败且深虚才残留) |
| 开仓崩溃双开 | **部分**LIVE 启动强制 `running=0`;仍缺交易所对账 |
| ctVal 静默默认 | **已修**(查不到直接报错) |
| LIVE 出场不计平仓费 | **已修**(保守 `est_close_fees` |
| 登录无限流 / LIVE 可 API 绕过确认 | **已修**(限流 + `confirm_live_phrase=LIVE` |
| `/docs` 公开 / CORS `*` / mask 泄露后缀 | **已修** |
| 改密后旧 token | **已修**`AUTH_TOKEN_VERSION` |
| 默认口令 / 公网 TLS | **未改默认口令**(部署须改 `.env`);TLS 仍靠反代 |
| 杠杆 set_leverage | **未做** |
| 平仓张数读交易所持仓 | **未做** |
### 残留风险(下次优先)
1. 启动时交易所↔本地仓位对账与开仓幂等键
2. 平仓前查询交易所实际持仓张数
3. 开仓前 `set_leverage`
4. 可选:拒绝默认 `AUTH_*` 启动(硬开关)
### 测试
- `pytest`46 passed(含 `test_symbols`、脱敏用例更新)
---