exchange.IO("route", ...)
询价:列出一笔兑换在各条候选路径上的报价及最优路径,不下单。
exchange.IO(k, symbol, side, qty)示例
比较卖出1个ETH时各条路径的报价。
javascript
function main() {
var r = exchange.IO("route", "ETH_USDC", "sell", 1)
if (!r) {
Log("询价出错:", GetLastError())
return
}
if (r.best === null) {
Log("没有可用的池子")
return
}
Log("最优路径:", r.best, "可得:", r.quote, "USDC")
r.candidates.forEach(function (c) {
Log(c.route, c.quote)
})
}返回值
| 类型 | 描述 |
object / 空值 | 返回 |
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
symbol | string | 是 | 交易对,例如 |
side | string | 是 | 交易方向: |
qty | number | 是 | 基础币数量。 |
参考
Uniswap / PancakeSwap Aerodrome / Velodrome KyberSwap 1inch exchange.IO exchange.IO("simulate") exchange.IO("slippage") exchange.IO("token") exchange.CreateOrder
备注
候选路径包括本交易所的直连池子,以及经包装币或USDC/USDT中转的两跳路径。池子范围因交易所而异:Uniswap为V3各费率档、V2及不带hook的V4池子(常用费率组合的池子,加上从GeckoTerminal查到的自定义费率池子,见Uniswap / PancakeSwap页;V4经原生币或USDC/USDT中转),PancakeSwap为V3、V2及Infinity CL池子,Aerodrome、Velodrome为两代Slipstream池子及基础池子。路径写法示例:v3:WETH-500-USDC(V3,费率500即0.05%)、v2:WETH-USDC、v3:UNI-3000-USDT-100-USDC(两跳)、v4:ETH-500/10-USDC(Uniswap V4,费率500、tick间距10,ETH为原生币)、infinity:BNB-67/1-USDT(PancakeSwap Infinity CL)、cl:WETH-100-USDC(Aerodrome、Velodrome的第一代Slipstream,数字为tick间距)、cl2:WETH-500-USDC(第二代Slipstream)、volatile:AERO-USDC、stable:USDC-USDbC(基础池子)。
V3路径通过链上QuoterV2询价(完整模拟整笔兑换),V2根据池子储备在本地计算;报价均不含gas费用。
返回对象的字段:best为最优路径;quote为最优报价(卖出时为可得到的计价币数量,买入时为需花费的计价币数量);price为对应的平均价格;candidates为各候选路径的{route, quote}列表(无法报价的路径,其quote为null)。没有可用池子时仍返回对象:best、quote、price均为null,candidates为空数组(有池子但均无法报价时,candidates各项的quote为null)。若交易对中的代币无法识别、节点所在链与配置不一致等导致出错,则返回空值,原因可通过GetLastError()获取。
KyberSwap、1inch交易所对象(聚合器)只有一条候选路径,即聚合器给出的报价,路径写作kyberswap:ETH-USDC、1inch:ETH-USDC(买入时为kyberswap:USDC-ETH,先写付出的币);buy按买到qty个基础币询价,通过多次精确输入询价近似得出。PancakeSwap无法查询Infinity CL池子的链上成交记录(节点不支持eth_getLogs)时,结果中会附带warning说明原因。Uniswap暂时无法从GeckoTerminal查到常用组合以外的V4池子(如被限流)时,结果同样附带warning;在此期间仅使用常用组合的V4池子,5分钟后重新查询。