### 账户管理（多平台/多账户）设计文档

— 目标与范围 —

- 统一管理多平台（Pacifica/Aster/Binance …）的多个账户，提供集中注册、路由、聚合查询与事件汇聚。
- 作为“执行器/策略层”的单一入口，隐藏各接入方差异（签名、鉴权、字段规范）。

— 核心术语 —

- `ExchangeAdapter`：各交易所适配器统一接口，已定义于 `src/exchanges/ExchangeAdapter.ts`。
- `AccountManager`：集中式账户管理器，见 `src/accounts/accountManager.ts`。
- `RegisteredAccount`：注册实体，包含 `exchange/accountId/adapter/meta`。

— 架构与职责 —

- 注册/反注册：按 `(exchange, accountId)` 管理适配器实例；幂等。
- 聚合查询：跨账户聚合 `balances()` 与 `positions()`，并附加来源标签 `{ exchange, accountId }`。
- 精准路由：对单账户执行 `placeOrder/cancel/cancelAll/getOrder/openOrders/leverage/depth` 等。
- 事件汇聚：监听各适配器 `ws()`，转发常见事件（`depth/orders/trades/balance/account_info/account_positions` 等），并附 `{ exchange, accountId }` 标签。

— 统一数据模型（归一化） —

- `Balance`: `{ asset, total, free }`
- `Position`: `{ symbol, side: 'LONG'|'SHORT', qty, entryPrice, unrealizedPnl, leverage? }`
- `Order`: `{ id, symbol, status, side, type, price?, origQty, executedQty, updateTime }`
- `Depth`: `{ bids: [{price,qty}], asks: [{price,qty}], ts }`
- 符号规范：对部分接入（Pacifica）统一为基础符号（如 `BTC`）。

— AccountManager API（对上暴露） —

- 注册：`register({ exchange, accountId, adapter, meta? })`
- 查询：`list()`、`balancesAll()`、`positionsAll()`
- 路由：`getAdapter()`、`placeOrderOn()`、`cancelOrderOn()`、`cancelAllOn()`、`openOrdersOn()`、`leverageOn()`、`depthOn()`
- 广播：`cancelAllByExchange(exchange, symbol)`
- 事件：`ws()`（聚合 EventEmitter）

— Pacifica 账户相关（REST/WS） —

- REST（硬编码端点于 `PacificaClient`）：
  - 账户信息：`/api/v1/account/info`（POST）
  - 账户设置：`/api/v1/account`（GET）或文档对应的 settings 页面
  - 资金/权益/余额历史：`/api/v1/account_equity_history`、`/api/v1/account_balance_history`（见 docs 镜像 HTML）
  - 杠杆/保证金模式更新：`/api/v1/account/update-leverage`、`/api/v1/account/update-margin-mode`
  - 子账户：`/api/v1/subaccounts/create`、`/api/v1/subaccounts/transfer`
  - 签名：Ed25519（`tweetnacl+bs58`），按 `signing/implementation` 组装 `{timestamp, expiry_window, type, data}` 紧凑 JSON 后签名。
- WS：
  - 无需 login，直接订阅：`prices`、`book`、`trades`、`account_info`、`account_balance`、`account_positions`、`account_orders`。
  - 心跳：`{"method":"ping"}`，服务端返回 `{ "channel": "pong" }`。

— Aster 账户相关（REST/HMAC） —

- HMAC：`X-MBX-APIKEY` + `sha256(signature)`；
- 查询：`/fapi/v2/balance`、`/fapi/v2/positionRisk`、`/fapi/v3/openOrders`；
- 账户模式：`/fapi/v3/positionSide/dual`；
- 杠杆/保证金模式：`/fapi/v3/leverage`、`/fapi/v3/marginType`；
- 下单：`/fapi/v3/order`（x-www-form-urlencoded，链上 personal_sign 参与签名字符串）。

— 错误处理与重试 —

- HTTP 429/5xx：指数退避（基 250ms，最大 4 次）— 已在 `PacificaClient` 实装。
- 403：多为 CDN/白名单限制，打印告警并切回可用路径（如 WS/其他 REST）。
- 字段容错：缺字段跳过或用默认值，保持可用性。

— 安全与密钥管理 —

- 私钥/Agent 私钥：仅从环境读取，支持 Base58 或 JSON 数组（32/64 字节）。
- 不落盘；日志仅打印签名前缀（`PACIFICA_DEBUG=1` 时）。

— 持久化（后续） —

- 可选最小落盘：CSV/SQLite 记录净值、成交与持仓快照，支撑回放与审计。

— 测试与回归 —

- Smoke：`examples/pacifica_test.ts`、`examples/pacifica_ws_example.ts`、`examples/aster_adapter_smoke.ts`；
- 单测：对账户签名与端点映射做最小断言；
- E2E（后续）：统一 `ExchangeAdapter` 市价/限价/撤单/全撤/深度/持仓/余额。

— 路线图 —

- v1：完成 AccountManager、Pacifica/Aster 账户查询与事件汇聚、脚本与文档。
- v2：WS 数据标准化、最小持久化、pm2 运维脚本。
- v3：统一执行器接口与多账户风控（净敞口阈值/杠杆上限/风控冻结）。

— 启动自检（Init Check，Fail-fast） —

- 目的：在进程启动阶段尽早发现环境缺失/签名不一致/权限受限等问题，避免运行期隐性失败。
- 自检清单（按账户逐项执行）：
  1. 环境变量齐全：
     - Pacifica：`PACIFICA_ACCOUNT`、`PACIFICA_ACCOUNT_PRIVATE_KEY`（或 `PACIFICA_PRIVATE_KEY`）；如启用代理单：`PACIFICA_AGENT_WALLET`、`PACIFICA_AGENT_PRIVATE_KEY`；
     - Aster：`ASTER_API_KEY/ASTER_API_SECRET`（查询必需）；`ASTER_ORDER_USER/ASTER_ORDER_SIGNER/PRIVATE_KEY`（下单必需）。
  2. 密钥格式校验：
     - Pacifica：私钥 Base58 或 JSON 数组（32/64 字节）；派生公钥应等于 `PACIFICA_ACCOUNT`；否则 fail-fast；
     - Aster：`ASTER_ORDER_USER/ASTER_ORDER_SIGNER` 为合法 EVM 地址；私钥 0x 前缀、长度正确；
  3. 连通性：
     - REST 探针：Pacifica `GET /api/v1/book?symbol=BTC`、Aster `GET /fapi/v3/exchangeInfo`；
     - WS 探针（可选）：连接 `wss://.../ws` 并发送 `ping`，收到 `pong`；
  4. 权限与限速：
     - 403/401 时打印明确告警（可能为 CDN/白名单/Key 权限）；
     - 提示用户参考 `docs/accounts/ENV_VARS.md` 与接入文档；
  5. 基础 REST 校验：
     - Pacifica：`/api/v1/account/info`（POST）在账户环境完整时应成功；
     - Aster：`/fapi/v2/balance`/`/fapi/v2/positionRisk` 应成功；
  6. 时间同步（可选）：
     - 检查本地与服务端时间偏差（> 2s 提示）；
  7. 结果汇总：
     - 通过：注册账户并进入运行；
     - 失败：打印逐项失败原因并终止进程（或置为“仅订阅行情”降级模式）。

> 推荐在装配层提供 `--init-check` 开关，或默认执行；并将失败详情写入日志与控制台，方便快速排障。
