OKX Intent 概述#
OKX Intent 采用并行拍卖机制:系统在不同的时间窗口与批次中并行推进多场拍卖,并同步触发 Solver 的求解与获胜者选定流程,不需等待上一轮完全结算后才开始下一轮。此机制能更充分地利用 Solver 的算力以及链上区块时间,大幅降低从下单到结算的端到端延迟,为用户提供更稳定且更快速的交易体验。
名词说明#
| 名词 | 说明 |
|---|---|
| Intent Order | 用户基于 Intent 的订单,包含 fromTokenAddress、fromTokenAmount、toTokenAddress、toTokenAmount、validTo 等字段。 |
| 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 在高负载下的稳定性。
| 指标 | 链 | 通过标准 |
|---|---|---|
| 目标 QPS | ALL | ≥ 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-159、47.254.152.31、47.89.234.165、18.157.58.16、3.65.240.18、63.181.55.143(共 21 个 IP)。
- 若需 IP 白名单:
| 端点 | 方法 | URL | 说明 |
|---|---|---|---|
| Quote | POST | https://your-api-endpoint.com/OKXDEX/intent/quote | 获取价格预估(报价)。 |
| Solve | POST | https://your-api-endpoint.com/OKXDEX/intent/solve | 对传入的拍卖进行求解。 |
| Settle | POST | https://your-api-endpoint.com/OKXDEX/intent/settle | 将已求解的拍卖结算上链。 |
| Notify | POST | https://your-api-endpoint.com/OKXDEX/intent/notify | 接收系统通知(如停用通知等)。 |
统一响应结构#
响应参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | Integer | 是 | 状态码。0 表示成功;非零表示失败。 |
msg | String | 否 | 成功或错误消息。 |
data | Object | 否 | 响应内容(成功时返回)。 |
成功响应范例
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'
};
