feat(instance): add exchange account ledger tab with SSE sync
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# 审计修复报告:账户流水(2026-08-10)
|
||||
|
||||
## 范围
|
||||
|
||||
新增「账户流水」功能:`lib/account_ledger/*`、`lib/exchange/*_ledger_lib.py`、三所 `app.py` 安装、导航显示开关、前端 SSE 页。
|
||||
|
||||
## 结论
|
||||
|
||||
**可上线。** 认证、SQL、SSE 载荷范围、单实例隔离与现有实例模式一致。发现 1 项中危并已在同批修复。
|
||||
|
||||
## 发现与处理
|
||||
|
||||
| 级别 | 问题 | 处理 |
|
||||
|------|------|------|
|
||||
| 中 | `POST /api/account_ledger/refresh` 可把 `start_ms` 拉到极早,触发大量交易所分页请求;无冷却 | 同步窗口强制 `LOOKBACK_DAYS` 下限;手动同步默认 30s 冷却 |
|
||||
| 低 | 导航关闭仍可直连 URL(与数据看板相同,仅 UI 隐藏) | 保持与现有 display pref 一致;embed `tab_allowed` 仍 403 |
|
||||
| 信息 | 交易所异常文案写入 `last_error` 展示 | 可接受;未记录密钥 |
|
||||
|
||||
## 验证
|
||||
|
||||
- `python -m unittest tests.test_account_ledger_normalize` 通过
|
||||
- 三所仅增加 `install_account_ledger`,不改动开仓/风控主路径
|
||||
|
||||
## 使用提醒
|
||||
|
||||
默认导航关闭;需在系统设置打开「账户流水」。数据来自交易所,首次打开可能需等待一轮后台同步或点「立即同步」。
|
||||
@@ -0,0 +1,71 @@
|
||||
# 账户流水(三所统一)
|
||||
|
||||
从**交易所 API**拉取资金账户与交易账户账单,在实例内展示。
|
||||
不使用程序本地 `transfer_logs` 作为主数据源。
|
||||
|
||||
## 能力概览
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 导航 | 「账户流水」Tab;默认关闭,在 **系统设置 → 导航显示** 打开 |
|
||||
| Tab | **资金账户** / **交易账户** |
|
||||
| 分页 | 每页 10 条,时间倒序 |
|
||||
| 时间窗 | 跟随顶栏 UTC **预设**(与列表 `list_window` 一致) |
|
||||
| 同步 | 后台约 **120s** 拉一次交易所;完成后 **SSE** 推版本,前端自动刷新 |
|
||||
| 币种 | USDT;OKX 另含 **USDC** |
|
||||
| 三所 | Binance / OKX / Gate 同一套 UI 与路由 |
|
||||
|
||||
## 使用
|
||||
|
||||
1. 系统设置 → 导航显示 → 勾选「账户流水」→ 保存
|
||||
2. 顶栏选预设时间并点「应用」
|
||||
3. 打开「账户流水」,切换资金/交易 Tab;可点「立即同步」
|
||||
|
||||
## API
|
||||
|
||||
| 路由 | 说明 |
|
||||
|------|------|
|
||||
| `GET /api/account_ledger?account=funding\|trading&page=1` | 按当前 session 时间窗分页查询缓存 |
|
||||
| `GET /api/account_ledger/stream` | SSE,`event: ledger`,载荷含 `ledger_version` |
|
||||
| `POST /api/account_ledger/refresh` | 手动触发同步(有冷却,默认 30s) |
|
||||
|
||||
均需登录(与实例其他 API 相同)。
|
||||
|
||||
## 交易所数据源
|
||||
|
||||
| 所 | 资金账户 | 交易账户 |
|
||||
|----|----------|----------|
|
||||
| Gate | spot `account_book`(USDT) | USDT 永续 `account_book` |
|
||||
| OKX | `asset/bills`(USDT+USDC) | `account/bills` + `bills-archive`(USDT+USDC) |
|
||||
| Binance | 充提 + `fetch_transfers`(USDT) | U 本位 `fapi` income(USDT) |
|
||||
|
||||
后台默认回看 **90 天**(`ACCOUNT_LEDGER_LOOKBACK_DAYS`),写入本地 SQLite 缓存后再按顶栏时间窗过滤展示。
|
||||
「全部 / 近 6 月」等超出回看窗口的部分,仅能看到缓存内数据。
|
||||
|
||||
## 环境变量(可选)
|
||||
|
||||
| 变量 | 默认 | 说明 |
|
||||
|------|------|------|
|
||||
| `ACCOUNT_LEDGER_POLL_SEC` | `120` | 后台轮询秒数 |
|
||||
| `ACCOUNT_LEDGER_LOOKBACK_DAYS` | `90` | 拉取与手动同步上限天数 |
|
||||
| `ACCOUNT_LEDGER_MANUAL_COOLDOWN_SEC` | `30` | 手动同步冷却 |
|
||||
| `ACCOUNT_LEDGER_SSE_HEARTBEAT_SEC` | `25` | SSE 心跳 |
|
||||
|
||||
## 代码位置
|
||||
|
||||
```
|
||||
lib/account_ledger/ # DB / 同步 / SSE / 注册 / 面板
|
||||
lib/exchange/*_ledger_lib.py # 三所拉取适配
|
||||
lib/common/static/account_ledger.js
|
||||
```
|
||||
|
||||
三所 `app.py` 调用:`install_account_ledger(..., exchange_key=...)`。
|
||||
|
||||
## 审计摘要(2026-08-10)
|
||||
|
||||
- 路由均 `@login_required`;SSE 仅推版本号,不含账单正文
|
||||
- SQL 参数化;`account` 白名单;币种服务端固定
|
||||
- 前端表格字段 `escapeHtml`
|
||||
- **已修复**:手动同步强制套用 lookback 上限 + 冷却,避免滥用刷交易所 API
|
||||
|
||||
详见同目录旁注或 PR 说明;安全复查子代理结论:修复后无未关闭的中高危项。
|
||||
Reference in New Issue
Block a user