VeilSwap
← 全部文章
分析2026-11-108 分钟阅读

看懂兑换报价接口:rate、validUntil、routes、advantageBps(2026 实测)

报价对象里有五个多数人从不读的事实:汇率、只在小额单上出现的 120 秒 validUntil、路由数、优势分,以及藏在 400 报错里的上下限。这五个字段都会改变你下单的时机。

这篇指南为什么存在。 订单页只是包在一个很小的 JSON 对象外面的便利层:报价。页面替你做的每个决定——汇率好不好、窗口几点关、到底有几个池子在为这个币对竞价——在原始响应里就已经可见,而且都不需要鉴权。2026-11-10 10:03 到 10:17 UTC,我用几个金额和一些故意弄坏的输入,在公开接口上把 USDT→XMR(TRON 腿)跑了一遍,另外各探了一次 BTC→XMR 和反向的 XMR→USDT。下面是每个字段的含义与不含义,全部实测,不是猜的。 (XMR 换 USDT 退出路线)

响应的形状。 一个健康的响应就是一个对象:best、routes、advantageBps。best 里面是 fromAsset、toAsset、fromAmount、toAmount、rate、validUntil。整个契约就这么多——一个对象里的六个字段,外加两个标量。没有会话、没有密钥、没有签名。一次请求实测 194–604 毫秒(十次调用中位约 203 毫秒),所以每次手动决策前用脚本报一次价的成本只有五分之一秒。接口是 GET,三个查询参数:from、to、amount。

rate,以及它的 8 位数字。 rate 字段就是 toAmount 除以 fromAmount,四舍五入到 8 位有效数字。10:05:55,100 USDT 报价返回 toAmount 0.16052661、rate 0.0016052661;100.123456789012 USDT 返回 0.16074732、0.0016054911——rate 只保留 8 位有效数字。实际后果:第九位上不同的两个金额,rate 字段可能完全一样,因为 toAmount 是用原始金额算出后再舍入到 8 位小数的。不要肉眼跨走廊比较 rate——先取倒数。2026-11-10 当天,100 USDT 换 0.16082327 XMR(隐含 621.80 美元/XMR),同分钟 1 XMR 卖 540.097 USDT-TRX(两条路由 192bps)。同一分钟买卖方向差 12.9%——这是两个方向之间的价差带,不是错误。 (XMR 换 USDT 退出路线)

validUntil 是有条件的。 100 USDT 的报价带着 validUntil 2026-11-10T10:13:55.878Z——实测距响应 +119.8 秒,连续三次都是(119.8、119.8、119.1)。同一个接口,所有两条路由的单(110、130 USDT)和所有采样的 BTC 报价,validUntil 都是 null。规则不在金额本身,而在「胜出的路由是否按这个确切金额给了锁价」。小额单有 120 秒的保证价;大额或双路由的单随汇率浮动,到订单页才锁。如果你在做机器人或比价页:把 null 的 validUntil 当成「展示时需要重新报价」,而不是 bug。 (XMR 换 USDT 退出路线)

routes 与 advantageBps:深度的读数。 routes 告诉你有几条池子报价活到了竞价;advantageBps 以百分之一个百分点为单位,给胜者与亚军打分。同一天的两个读数放一起看:10:07 时 100 USDT 返回 routes=1、advantageBps=0(只有一条报价活了下来);10:12 时 110 USDT 返回 routes=2、advantageBps=0——两条报价精确到末位都一致;10:12 时 130 USDT 返回 routes=2、advantageBps=895——两条路由差了近 9%,便宜的那条以这个差距胜出。反向 1 XMR→USDT-TRX 读到 routes=2、advantageBps=192。解读:双路由走廊上出现高 bps,说明两个池子此刻对价格分歧很大——它是信号,不是保证。2026-11-10 当天 130 USDT 赢家付 0.235639 XMR(隐含 551.83 美元/XMR),现货 543.39,买 XMR 溢价 1.55%。 (XMR 换 USDT 退出路线)

400 的报错体是第二个 API。 两个响应顶得上一张表。低于下限:400 报错体写 {"error": "amount below minimum", "minAmount": 18.472402, "maxAmount": 162815.934213}。高于上限:同样的两个数字,错误串换成 {"error": "amount above maximum", ...}。两者都带上下限,所以在任何走廊上用一次探测就能拿到可用区间,不需要第二个接口——对需要在报价前先把金额夹进区间的自动化特别有用。边界随市场漂:10:03–10:06 三分钟里 USDT→XMR 的下限从 18.463823 挪到 18.472402(约四分钱),上限从 162793.649781 挪到 162815.934213(约 22 美元)。同日 BTC→XMR 边界是 0.0001825 / 2.1850807。金额填 0 或负数会被更早挡下:{"error": "amount must be a positive number"}。未知的资产 id 返回 404 {"error": "pair not supported"};缺 from 或 to 返回 400 {"error": "from/to required"}。 (XMR 换 USDT 退出路线)

目录,以及资产 id 的约定。 第二个公开接口 /api/currencies 在 10:03 UTC 返回 453 个资产、65 条网络——367 个代号,52 个标了 isStable,6 个 hasExtraId(需要备注/目的标签的资产),多网络代号前几名是 USDC 13 条、USDT 11 条、ETH 7 条、DAI 和 WBTC 各 5 条。每个条目带 id、ticker、network、name、logo、hasExtraId、featured、isStable。资产 id 的约定是「代号-网络」,而报价接口对旧别名是宽容的:2026-11-10 当天 usdt-tron 和 usdt-trx 返回逐字节相同的报价(同 toAmount 0.16082327、同 rate,validUntil 只差 0.4 秒的时钟)。目录才是事实来源,不是记忆:id 会随池子增加或移除网络而来来去去,所以运行时读列表,不要写死。 (XMR 换 USDT 退出路线)

缓存改变了「新」报价的含义。 对同一金额每秒轮询 25 秒,前四次返回完全相同的 toAmount 0.16080074,第五次变成新数字 0.16079135——报价缓存窗口实测约 8 秒,和 11 月弱网测试的结论一致。但相隔 20 秒的两次报价返回了相同金额、不同 validUntil:缓存也按完整响应键控,缓存命中的报价保留它原本的锁价窗口。汇率在下面动:间隔 30 秒的三次报价是 0.0016217233、0.0016272058、0.0016291304——100 USDT 的单在 60 秒里漂了 0.46%。实用规则:需要保证价就在它的 120 秒 validUntil 内对一份报价出手;做自动刷新的页面则在展示时重新报价,不要信缓存体。 (XMR 换 USDT 退出路线)

错误纪律,以及写脚本前要知道的一个限制。 观察到的每种失败都返回一个只带 error 字符串的 JSON 对象——没有 HTML、没有堆栈、没有静默空体。畸形输入(空 to、金额 0、负数)按顺序被拒:先查 from/to,再查正数,再查区间,最后查币对是否存在。这个顺序对自动化重要:你可以用一个对大多数走廊都有效的金额去探测币对是否存在,然后从 400 体里读精确区间。一个运行限制:密集请求会得到 HTTP 429 和一行朴素的 {"error": "rate limited"}——本次实测在每秒约一次、持续几十秒后触发,封锁持续了至少 4 分钟才放行。如果你要对这个接口写脚本:把 429 当成退避信号,不要立刻重试。

字段的边界在哪。 报价不告诉你的事:routes 背后是哪些池子、锁价能不能延长、以及你把入金送过去实际要付的网络费——费用是链一侧的事,以源资产的原生币计价(见我们的手续费预留那篇)。它告诉你的已经够你给下单计时:跨走廊比较先把 rate 取倒数、validUntil 在就尊重它、routes 和 advantageBps 当成「深度 + 分歧」信号、用一次探测拿到的 min/max 把金额夹进区间、429 就退避。整篇指南浓缩成每次决策一个 curl。以上是 2026-11-10 10:03–10:17 UTC 的快照;报价会动,实时以订单页为准。 (门罗费用机制)

常见问题

为什么我的报价有 validUntil,别人的却没有?

小额那一条腿按固定窗口锁价——2026-11-10 当天 100 USDT 的报价带着约 119.8 秒的 validUntil,而 110、130(两条路由)和三笔 BTC 报价的 validUntil 都是 null。锁价对池子是有成本的,所以只给「小到不会冲击市场」的单;更大的金额随汇率浮动,到订单页才锁。

不用界面怎么查一个币对的下限和上限?

随便用一个金额去要报价,然后读 400。低于下限时报错体写「amount below minimum」,高于上限写「amount above maximum」,两者都带 minAmount 和 maxAmount。2026-11-10 当天 USDT→XMR 是 18.472402 / 162815.934213(数字每分钟会飘几分钱),BTC→XMR 是 0.0001825 / 2.1850807。金额填 0 会先被挡下,报「amount must be a positive number」。

advantageBps 是干什么的?

它给最优路由打分,基准是次优。routes=1 时只有一条报价胜出,advantageBps 为 0;routes=2 表示两条报价里最优的那条赢了。2026-11-10 当天 130 USDT 显示 895bps(两条路由差了近 9%),1 XMR→USDT-TRX 两条路由 192bps,而一笔 110 USDT 的两条路由显示 0——两条报价精确到个位都一致。你的走廊出现高 bps 是个信号:两个池子对价格的分歧很大,这一分钟赢的那条未必下一分钟还赢。

继续阅读

全部文章 →

准备好换币了吗?

无账户 · 无 KYC · 无邮箱

立即兑换
看懂兑换报价接口:rate、validUntil、routes、advantageBps(2026 实测)