ACCOUNT_LIFECYCLE.md 2.2 KB

账户生命周期与权限/密钥

— 注册与反注册 —

  • 通过 AccountManager.register({ exchange, accountId, adapter, meta? }) 注册;重复注册幂等;
  • 通过 unregister(exchange, accountId) 移除。

— 事件标签化 —

  • AccountManager.ws() 将各适配器事件统一转发并标注 { exchange, accountId }
  • 上层可统一订阅 am:*(包含原事件名、payload 与账户标签)。

— 权限与密钥 —

  • Pacifica:账户私钥/agent 私钥为 Ed25519(Base58/JSON 数组),只能通过环境变量传入;
  • Aster:REST HMAC(API Key/Secret),交易签名需 EVM 私钥;
  • Binance:REST HMAC(API Key/Secret)。

— 安全建议 —

  • 不落盘私钥;日志仅打印签名前缀;
  • 分环境(dev/stg/prod)隔离;
  • 建议接入机密管理(或 Env 文件权限控制)。

实时状态(LiveState)与订阅

— 统一实时态(由 AccountManager 基于 WS 聚合) —

  • 字段(字符串以避免精度丢失):
    • accountEquity(ae)、marginUsed(mu)
    • posCount(pc)、openOrderCount(oc)、stopCount(sc)
    • asAssets(as,可作为资产聚合/备注)、alertWarning(aw)
    • lastInfoTs(t,毫秒)
    • balancesRaw/positionsRaw/infoRaw(保留原始载荷)

— 事件与标签 —

  • 事件名:am:account_state
  • 载荷:{ ...liveState, __am: { exchange, accountId } }

— 订阅示例(TypeScript) —

import AccountManager from '../../src/accounts/accountManager'

const am = new AccountManager()
// ... 注册各账户(am.register(...)}

am.ws().on('am:account_state', (s: any) => {
  const { exchange, accountId } = s.__am || {}
  // 统一读取账户净值/保证金使用/仓位计数等
  console.log('[state]', exchange, accountId, {
    equity: s.accountEquity,
    marginUsed: s.marginUsed,
    posCount: s.posCount,
    openOrders: s.openOrderCount,
  })
})

// 任意时刻获取当前快照
const live = am.getAllLiveStates()

— 一致性建议 —

  • 启动先用 REST 快照初始化(balances/positions),再消费 WS 增量;
  • 定期(30–60s)与 REST 对账;冲突取“更新更晚”的记录;
  • 对上层读接口可设置小 TTL(2–3s)降低抖动。