Files
eth_hedge_sim/docs/审计说明-2026-07-30-策略SoT与资金门.md
T

81 lines
4.6 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.
# 审计说明 — 策略 SoT / 资金门 / 自动兑 USDC2026-07-30
## 基线假设
1. **不会**在交易所人工开仓/平仓。
2. **运行中不会**使用本系统「手动全平 / 手动开一组」(策略跑着时手动开仓本就 409)。
3. 以策略主线为唯一真相源:盯仓 →(等待预览兑 USDC)→ 选约 → 定仓落库 → 兑 USDC → 资金门 fail-closed → 开仓 → 锁定出场。
## 结论(三轮严格审计后)
本轮按审计清单落地后:**P0 资金门 fail-open、热切 LIVE 护栏、等待写定仓打架、force 砸单、手动/自动双管道、持仓改参、下载备份带密钥** 已关闭或显著收敛。
残留:币安 LIVE 余额仍未接入(现 fail-closed 拒绝开仓,需接余额或改手动本金);SIM 资金重置仍默认进资金账户(需划转至交易账户才能开);机内 zip 仍可能含 `.env`(仅 HTTP 下载已剥离)。
---
## 第一轮审计(改完即审 · 对照清单)
| 原发现 | 处置 | 证据 |
|--------|------|------|
| P0 资金门 fail-open | **已修** | `funds_gate_blocks`:仅双方 `is True` 放行;`None`/异常拦截。`open_pipeline.size_and_gate` + `engine`/`sim` 共用 |
| P0 热切 LIVE | **已修** | `put_runtime`:非默认 `AUTH_SECRET`;切 LIVE 强制 `running=0`/`paused` |
| P1 等待每 tick 写定仓 | **已修** | `prepare_okx_trading_usdc` / `preview_capacity_for_convert` 只预览;落库仅在 `size_and_gate` |
| P1 force 砸单 | **已修** | `force` 参数忽略,45s 冷却始终生效 |
| P1 容量 ask ≠ 选约腿 | **已修** | `assess_open_capacity(option_ask=…)``size_and_gate` 传入 `pick` 卖一 |
| P1 手动≠自动 | **已修** | `api/sim.py` 与引擎共用 `size_and_gate` |
| P1 持仓改出场/名义 | **已修** | `put_strategy_settings` 持仓禁止改 exit/qty/leverage/risk_* |
| P1 备份下载含 .env | **已修** | `materialize_download_zip` 剥离后下载 |
| P2 划转不清缓存 | **已修** | `funds.transfer` LIVE 后 `invalidate_live_balance_cache` |
| P2 SIM 弱占坑 | **已修** | `matcher.open_group` 拒绝全部 `BLOCKING_STATUSES` |
**第一轮残留:** 币安余额未接 → LIVE BN 将长期 `wait_funds`(刻意 fail-closed,非放行)。
---
## 第二轮审计(干扰/打架复查)
路径重读:`engine._tick_async``prepare_usdc_while_waiting` → pick → `size_and_gate` → LIVE `assert_safe``open_group`
| 检查点 | 结果 |
|--------|------|
| 等待阶段是否写 `perp_qty_eth`/`net_profit_target` | 否(仅 preview assess |
| 选约失败是否仍兑 USDC | 是(预览名义),不挡「无合格期权」文案分支 |
| 选约后资金门异常是否放行 | 否(`size_and_gate` 返回 ok=False |
| 手动开仓是否仍 `except: pass` | 否(409 + detail |
| 持仓 `exit_target` 与设置 | 设置被锁;盯盘用锁定目标(既有逻辑保留) |
| 自动兑与定仓顺序 | 定仓落库 → 兑 → 门;等待只有兑不落库 |
**第二轮新发现(已记残留,未扩 scope):**
- SIM`reset_from_equity` 仍进资金账户 → 交易账户空时正确 fail-closed,需手动划转(符合「只认交易账户」)。
- `state()` 空仓仍 preview 覆盖展示字段名(展示层,不写库,不改出场执行)。
---
## 第三轮审计(实盘安全 + 回归)
| 检查 | 结果 |
|------|------|
| LIVE 开仓 claim/assert | 未改坏;仍在 `size_and_gate` 之后 |
| 冷启动 AUTH_SECRET | 保留;热切现对齐 pause + secret |
| 兑汇账户 | 交易账户;与手动 `/convert` 一致 |
| 单测 | `test_funds_gate` / `test_auto_usdc` / `test_exit_lock` / `test_risk_sizing` 通过 |
| 基线「无交易所人工开平」 | 文档化;代码不依赖该行为做对账放弃 |
**第三轮残留(接受或后续):**
1. 币安 LIVE 余额未接线 → 开仓被拒直至接入或强制手动本金策略。
2. 机内自动备份 zip 默认可含 `.env`(磁盘权限模型);HTTP 下载已无密钥。
3. LIVE 兑换/划转仍无二次口令(仅登录态)——运行中无人工操作为基线时风险降低。
4. `localStorage` 长 token / XFF 登录限流等通用 Web 项未本轮改。
---
## 涉及文件
`strategy/open_pipeline.py`(新)· `open_capacity.py` · `auto_usdc.py` · `engine.py` · `api/sim.py` · `api/settings.py` · `api/funds.py` · `api/backup_routes.py` · `backup.py` · `sim/matcher.py` · `tests/test_funds_gate.py` · `tests/test_auto_usdc.py`
## 与上一份审计关系
承接 `审计说明-2026-07-29-开平仓与实盘安全.md`(开平仓 claim/recover)。本份专注 **策略 SoT 不打架 + 资金门/兑汇/热切 LIVE**