用途
本 Skill 是一份面向开发者的 0x 代币兑换操作指南,目标是在用户想要在 EVM 链上兑换代币时,给出从取价、获取确定报价到执行兑换的完整步骤。它同时支持标准兑换(用户自行支付 gas)与无 gas 兑换(0x 从卖出代币中支付 gas)。
主要能力与覆盖流程
- 三种兑换流的选择:AllowanceHolder(默认推荐,适合多数集成方、多签钱包及从 v1 升级的团队)、Permit2(适合限时授权、批量操作或已有 Permit2 授权额度的用户)、Gasless(仅支持 ERC-20 卖出代币,适合没有原生代币支付 gas 的用户)。
- 分步指导:Step 1 收集兑换参数;Step 2 选择兑换流;Step 3 展示指示性价格;Step 4 获取确定报价;Step 5 说明执行步骤;Step 6 输出兑换摘要。
- 支持链信息:Ethereum、Arbitrum、Base、Optimism、Polygon、BNB、Avalanche、Blast、Mantle、Scroll、Sonic、Abstract、Berachain、HyperEVM、Ink、Linea、Mode、Monad、Unichain、World Chain 等,并区分各链支持的 Swap API / Gasless API。
- 附带常见以太坊主网代币地址(WETH、USDC、USDT、DAI、WBTC)。
使用方式
需要收集的参数包括:sellToken(ERC-20 合约地址,不接受代币符号)、buyToken、sellAmount 或 buyAmount(代币基础单位)、chainId、taker(报价必需,/price 不需要)。若字段缺失需先向用户询问。
调用要求:每次请求需带请求头 0x-api-key: YOUR_API_KEY(可在 dashboard.0x.org 免费获取)与 0x-version: v2;Base URL 为 https://api.0x.org;代码中使用环境变量名 ZERO_EX_API_KEY。
指导原则明确要求:不要自行用 WebFetch 构造原始 0x API HTTP 请求;应先通过 mcp__0x-mcp__searchDocs 查询当前端点细节,再向用户输出 fetch/axios 代码,由用户在自己的环境中运行。
各流程执行要点:
- AllowanceHolder:若
quote.issues.allowance不为 null,先授权 AllowanceHolder 合约(spender 从响应读取),随后直接发送交易,无需类型化数据签名。 - Permit2:授权 Permit2 合约(地址 0x000000000022d473030f116ddee9f6b43ac78ba3),签署 EIP-712 消息(需从 types 中移除 EIP712Domain),将签名按长度前缀追加到 calldata 后发送交易。
- Gasless:签署报价中的 approval(如存在)与 trade 两个 EIP-712 对象,POST 到
https://api.0x.org/gasless/submit,再轮询https://api.0x.org/gasless/status/{tradeHash}直到 succeeded、failed 或 confirmed。
适用场景
适用于在 EVM 链上进行代币兑换的开发者与集成方,包括需要标准自付 gas 兑换、限时授权或批量操作、以及用户无原生代币支付 gas 的无 gas 兑换等场景。指南建议:用户不持有 gas 时默认无 gas 模式;卖出原生 ETH/MATIC/BNB 时默认标准模式(无 gas 仅支持 ERC-20 卖出代币);未明确指定时默认 AllowanceHolder。
安全规则与错误处理
- 不要授权 Settler 合约(transaction.to 可能指向 Settler);只授权响应中
issues.allowance.spender或allowanceTarget给出的地址。 - 不要硬编码 spender 地址,必须从 API 响应读取。
- 报价约 30 秒过期,获取后应立即提交。
- 检查
simulationIncomplete为 true 时需警告交易可能回滚;检查liquidityAvailable为 false 时应提示用户调整金额或更换链。 - 常见错误:400 Bad Request(参数缺失或无效,检查 validationErrors)、INSUFFICIENT_ASSET_LIQUIDITY(减少金额或换链)、issues.balance 不为 null(余额不足)、无 gas 不支持原生代币卖出(回退到 Swap API v2)、授权错误(先执行 approve 步骤)。未列出的错误可调用
mcp__0x-mcp__searchDocs查询错误码。