OKX Intent 概述#

OKX Intent 采用并行拍卖机制:系统在不同的时间窗口与批次中并行推进多场拍卖,并同步触发 Solver 的求解与获胜者选定流程,不需等待上一轮完全结算后才开始下一轮。此机制能更充分地利用 Solver 的算力以及链上区块时间,大幅降低从下单到结算的端到端延迟,为用户提供更稳定且更快速的交易体验。

名词说明#

名词说明
Intent Order用户基于 Intent 的订单,包含 fromTokenAddressfromTokenAmounttoTokenAddresstoTokenAmountvalidTo 等字段。
Quote用户向 Solver 获取的订单价格预估。
Orderbook用户与协议交互的入口。负责接收用户的询价请求,验证并存储用户已签名的订单。
Autopilot协议的核心调度引擎。维护全局状态、创建批次拍卖、将拍卖分发给 Solver,并选出最佳解决方案。
结算合约 (Settlement Contract)链上负责执行交易的合约。仅有白名单中的 Solver 可以调用。
Auction(拍卖)一种批次拍卖机制,将时间窗口内的所有待处理订单汇总,让 Solver 竞争以提出最佳解。
Parallel Auction(并行拍卖)多场拍卖同时进行(分发、求解、获胜者选定与结算可重叠),以缩短用户等待时间。
Solution(解)Solver 针对某场拍卖提交的可执行方案,包含哪些订单被成交、执行数量、结算价格等。
Clearing Prices(结算价)在单场拍卖的结算中,每个 Token 都有一个结算价,用于计算结算时的执行数量,以及验证每笔订单的最低收到数量是否被满足。
最低收到数量 (Minimum Received Amount)用户在获取最佳报价后,签署 Intent 订单时所指定的最低可接受收到数量。
Baseline(基准)由 Baseline Solver 提供的参考报价,作为基准用以判断某 Solver 的报价是否低于市场一般水准。
Surplus(盈余)最终实际执行结果与用户报价中可接受的最低价格之间的差额。
Score(评分)一个 Solution 中所有订单 Surplus 的加总。

系统概览#

流程#

  • Trader(用户): 发出询价请求 → 选择报价 → 签署订单(EIP-712 / eth_sign / EIP-1271 / presign)。
  • Orderbook: 验证并存储订单。
  • Autopilot: 定期将订单批次化,并行地将订单 / 结算价 / 约束条件分发给 Solver。
  • Solver: 计算最佳的撮合 / 路由方案,并提交 Solution;Autopilot 从中选出评分最高者为获胜者。
  • 获胜 Solver(链上): 调用 Settlement.settle(tokens, clearingPrices, trades, interactions[0..2]),在单笔交易中完成结算。

接入前置条件#

Solver KYB#

  • 完成 CeFi KYB 并提供 UID。

Solver 地址白名单#

  • 支持的地址类型:EOA / 合约钱包
  • 白名单申请流程:KYB 完成后 → 提交地址 → 链上白名单生效

Solver 端需提供的资料 / 信息#

合约白名单资料:

  • Chain(链)
  • Solver 地址

Gateway 白名单资料:

  • 接入域名

配置平台白名单资料:

  • Chain ID
  • Solver 地址
  • 接入域名
  • 是否需要限流要求

接入测试流程#

  • Beta 测试: 使用 Beta 环境与 Beta 合约。在 Beta 环境中测试 /quote/solve/settle 等 API,包含手续费测试与压力测试,涵盖完整的端到端流程。Solver 使用非生产订单测试。若需通过 OKX 下单,需 OKX 端配合与支持。
  • Shadow 测试: 使用生产合约进行测试。我们会提供 JS 脚本给 Solver,用于下单并完整跑通 /quote/solve/settle 流程。每条链需累积 15 笔成功订单,且成功率高于 80%。
  • Staging 测试: 使用生产合约,在生产环境中与既有 Solver 竞争。此阶段不接收真实用户订单,Solver 需自行通过 JS 脚本下单。每条链需累积 5 笔成功订单,且成功率高于 80%。
  • Go Live(正式上线): 使用生产环境、生产合约与真实生产订单,正式上线。

SLA / 性能要求#

/quote 延迟与可用性#

SLA:所有链 ≤ 2.5 秒;超时视为放弃该次报价。

指标通过标准
响应时间ALL≤ 2.5s

单笔订单拍卖响应时间#

SLA:所有链 ≤ 4 秒。

指标通过标准
响应时间ALL≤ 4s
超时放弃率ALL≤ 10%

多笔订单拍卖响应时间(各链)#

指标通过标准
响应时间ETH≤ 8s
响应时间ARB≤ 4s
响应时间Base≤ 4s
响应时间BSC≤ 6.75s
超时放弃率ALL≤ 20%

解的质量#

指标通过标准
Solution 返回率ALL≥ 80%
链上成功率(1 小时窗口)ALL≥ 80%

Deadline 内链上完成率 — 多笔订单拍卖#

指标通过标准
在区块 Deadline 内完成结算ETH≥ 80%(3 区块)
在区块 Deadline 内完成结算ARB≥ 80%(40 区块)
在区块 Deadline 内完成结算Base≥ 80%(18 区块)
在区块 Deadline 内完成结算BSC≥ 80%(40 区块)

Deadline 内链上完成率 — 单笔订单拍卖#

指标通过标准
在区块 Deadline 内完成结算ETH≥ 80%(2 区块)
在区块 Deadline 内完成结算ARB≥ 80%(30 区块)
在区块 Deadline 内完成结算Base≥ 80%(10 区块)
在区块 Deadline 内完成结算BSC≥ 80%(22 区块)

压力测试(/quote)#

以 30 QPS 并发发送 /quote 请求,验证 Solver 在高负载下的稳定性。

指标通过标准
目标 QPSALL≥ 30 QPS
高负载下 /quote 响应时间ALL≤ 2.5s
高负载下 /quote 超时率ALL≤ 10%

Solver API#

端点清单#

  • 向前兼容性: 请求 / 响应主体中可能随时新增字段,实现时请忽略未知字段,不要做严格的字段验证。
  • Solver 应依照本规格实现 API。
  • 所有端点皆使用 POST 方法,并以 JSON 作为请求主体。
  • 所有时间戳皆为毫秒(例如 172120120102)。
  • EVM 兼容链上,所有地址使用小写 0x 前缀的十六进制编码(20 bytes)。非 EVM 链则沿用其原生地址格式。
  • 数量字段使用 String 类型,以最小单位表示。
  • Solver 必须在 deadline 指定的时间内返回响应。
  • 使用 DIP 服务 — 无需白名单。
    • 若需 IP 白名单:47.243.1.144-15947.254.152.3147.89.234.16518.157.58.163.65.240.1863.181.55.143(共 21 个 IP)。
端点方法URL说明
QuotePOSThttps://your-api-endpoint.com/OKXDEX/intent/quote获取价格预估(报价)。
SolvePOSThttps://your-api-endpoint.com/OKXDEX/intent/solve对传入的拍卖进行求解。
SettlePOSThttps://your-api-endpoint.com/OKXDEX/intent/settle将已求解的拍卖结算上链。
NotifyPOSThttps://your-api-endpoint.com/OKXDEX/intent/notify接收系统通知(如停用通知等)。

统一响应结构#

响应参数

参数类型必填说明
codeInteger状态码。0 表示成功;非零表示失败。
msgString成功或错误消息。
dataObject响应内容(成功时返回)。

成功响应范例

json
{
  "code": 0,
  "msg": "success",
  "data": { ... }
}

错误响应范例

json
{
  "code": 500,
  "msg": "Internal server error",
  "data": null
}

意图系统合约地址#

Beta环境结算合约地址#

js
const contractAddress = {
    ETH: '0x1a34E1e604D8a55405172C0717B17F7631d5f265'
    ARB: '0x2889B9b5Bbb92ecF1bCf9E1D29EBb211b147b6E6'
    BASE: '0xb18792Ba1dbd677EB300660304E9E71E372DA421'
    BSC: '0xF81805E9034f4F6B3D639517Cf4760D2e924Fc39'
    Xlayer: '0x17eE0a0c329FAB417CAF88Ec812B7579d4397477'
};

正式环境结算合约地址#

js
const contractAddress = {
    ETH: '0x25ED72C3f671b626810A6dB597DCFD50F215A423'
    ARB: '0x25ED72C3f671b626810A6dB597DCFD50F215A423'
    BASE: '0x25ED72C3f671b626810A6dB597DCFD50F215A423'
    BSC: '0x25ED72C3f671b626810A6dB597DCFD50F215A423'
   Xlayer: '0x25ED72C3f671b626810A6dB597DCFD50F215A423'
};

Beta环境代币授权合约地址#

js
const contractAddress = {
    ETH: '0xfFb8322DEEeADF0d61589211493Fb2Dc668D3CC0'
    ARB: '0xF828bC75b2b63DAC9dD84642AcCe1bB88E842531'
    BASE: '0x67FA2B5E7eF52B422434b512A5790C43766Ef6F3'
    BSC: '0x7d6a100553e1bb2F98f48986381C9e6FD9945Ac6'
    Xlayer: '0x1599CF99B177E844dD182809D7A8F55E39972987'
};

正式环境代币授权合约地址#

js
const contractAddress = {
    ETH: '0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f'
    ARB: '0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58'
    BASE: '0x57df6092665eb6058DE53939612413ff4B09114E'
    BSC: '0x2c34A2Fb1d0b4f55de51E1d0bDEfaDDce6b7cDD6'
    Xlayer: '0x8b773D83bc66Be128c60e07E17C8901f7a64F000'
};