API 参考 - Alpha Book
跳转至

API 参考

Unify 的接口不是一个 REST 端点清单,而是两条独立的通道: 同步控制面**和**异步热路径。 分开设计的理由很直白——账户查询可以等几十毫秒,订单和成交不行。


接口分层

通道 技术栈 承载内容
同步控制面 Connect RPC 账户管理、风控查询、密钥注册
异步热路径 NATS JetStream 订单提交、成交事件、余额更新、行情分发

控制面用 RPC 是因为它是请求-响应语义,你要一个确定的答案。 热路径用事件流是因为行情和成交是推送,不是问答—— 把它们塞进 REST 轮询里,你会同时得到延迟和速率限制两种惩罚。


认证模型

Unify 不做「API Key + Secret」那套。 认证基于双密钥模型:

  • Master Key:链上身份锚点,keccak256(CAIP-10) 得到 bytes32 account_hash。只有入金、出金、授权/撤销 Agent 三件事
  • Agent Key / Shadow Session Key:Ed25519 会话密钥,签所有下单与撤单请求。没有托管权限,有 valid_until 有效期和 nonce 防重放

注册与撤销是链上合约调用(registerAgent / revokeAgent), 日常下单签名是链下 Ed25519——不消耗 gas。 这个划分决定了你什么时候要等区块确认,什么时候不用。

签名字符串由 LedgerFlow 规范化

你不需要自己拼签名负载。意图交给 LedgerFlow, 它做语义验证、规范化成 Unify 签名字符串、再用会话密钥签名。 手写签名字符串最常见的失败不是算法错,是规范化顺序错—— 而这种错误只有在主网才会暴露成「签名无效」。


请求语义

类别 通道 说明
账户与子账户查询 控制面 主账户 + 子账户体系
风控与额度查询 控制面 冻结、保证金、持仓上限
密钥注册 / 撤销 链上 + 控制面 合约调用后同步状态
下单 / 撤单 热路径 Ed25519 签名,链下撮合
成交与余额推送 热路径 JetStream 事件流
行情分发 热路径 JetStream 事件流

策略约束随请求生效

语义守卫在签名之前评估约束,约束写在授权阶段:

JSON
{
  "operation": "unify.perps.orderExecute",
  "constraints": {
    "allowedSymbols": ["BTC-USDC-PERP", "ETH-USDC-PERP"],
    "maxLeverage": 10,
    "maxOrderNotionalAtomic": "5000000000",
    "allowedSubaccounts": [0]
  }
}

超过 maxLeverage 或不在 allowedSymbols 里的意图拿不到签名。 这不是服务端的礼貌拒绝,是本地根本不签—— 意味着越权请求连网络都不会出。


环境隔离

主网与测试网用**环境域签名字符串**严格隔离。 同一份意图在两个环境得到不同的签名域, 所以测试网签名无法在主网重放,反之亦然。

重放保护不是可选项

nonce 递增 + 环境域隔离 + valid_until 有效期,三层缺一层都能被重放。 跨链、跨环境的签名字符串如果共用一个域,一次泄露就是全环境通杀。


官方接口文档

具体的端点路径、请求字段与 SDK 以 Unify 官方文档为准—— 接口在稳定但尚未冻结,写死在书里只会过期。 本页讲的是**分层与认证模型**,这部分不会随端点改名而失效。