exchange.IO("lp.pools", ...)
列出代币的全部LP池子(Uniswap、PancakeSwap为V3与V4/Infinity CL池子,Aerodrome、Velodrome为Slipstream与基础池子),包括费率、现价、流动性、TVL与24小时成交额,按TVL从高到低排列。
exchange.IO(k, token)
exchange.IO(k, token, quote)示例
-
列出ETH/USDC的池子,查看TVL与成交额最大的几个。
javascriptfunction main() { var pools = exchange.IO("lp.pools", "ETH", "USDC") if (!pools) { Log("查询失败:", GetLastError()) return } pools.slice(0, 5).forEach(function (p) { Log(p.protocol, p.id, "费率:", p.feeRate, "TVL:", p.tvlUsd, "24h成交:", p.volume24hUsd) }) } -
Uniswap:列出代币的V4池子(包括常用组合以外、自定义费率的池子),再按PoolId查询其中第一个。
javascriptfunction main() { var v4 = exchange.IO("lp.pools", "UNI").filter(function (p) { return p.protocol == "v4" && !p.empty }) v4.forEach(function (p) { Log(p.symbol, "费率:", p.fee / 10000 + "%", "tick间距:", p.tickSpacing, "TVL:", p.tvlUsd) }) if (v4.length > 0) { var pool = exchange.IO("lp.pool", v4[0].id) Log(v4[0].id, pool ? "费率: " + pool.fee : GetLastError()) } } -
Aerodrome、Velodrome:在gauge仍在发放奖励的池子中,按奖励年化收益率筛选。
javascriptfunction main() { var pools = exchange.IO("lp.pools", "ETH", "USDC").filter(function (p) { return p.gaugeAlive && p.rewardAprPct !== null }) pools.sort(function (a, b) { return b.rewardAprPct - a.rewardAprPct }) pools.slice(0, 3).forEach(function (p) { Log(p.protocol, p.id, "tick间距:", p.tickSpacing, "奖励年化%:", p.rewardAprPct, "质押占比:", p.stakedShare) }) }
返回值
| 类型 | 描述 |
array / 空值 | 池子数组 |
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
token | string | 是 | 代币名称或合约地址,例如 |
quote | string | 否 | 计价币,例如 |
参考
Uniswap / PancakeSwap Aerodrome / Velodrome exchange.IO exchange.IO("lp.select") exchange.IO("lp.pool") exchange.IO("lp.plan") exchange.IO("lp.positions")
备注
返回数组中每一项的字段:
| 字段 | 说明 |
|---|---|
id | 池子ID:V3、Slipstream与基础池子为池子合约地址,V4/Infinity CL为PoolId(0x加64位十六进制);可作为lp.pool、lp.ticks和lp.plan的pool参数传入 |
protocol | 池子类型:v3、v4(Uniswap V4)、infinity(PancakeSwap Infinity CL);Aerodrome、Velodrome为slipstream、slipstream2(分别对应旧、新工厂)以及基础池子volatile、stable |
dex、symbol | 交易所名称、池子的交易对(如WETH_USDC) |
fee、feeRate | 手续费率:fee以百万分之一为单位(500即0.05%),feeRate为小数形式(0.0005);Slipstream池子的费率可能是动态的,此处为当前值 |
tickSpacing、tick | tick间距与当前tick;基础池子没有tick,值为null |
price | 现价,以计价币/代币表示 |
liquidity | 现价处的流动性(十进制字符串) |
reserveBase、reserveQuote | 池子中两种代币的余额;V4/Infinity CL为单例合约,值为null |
tvlQuote、tvlUsd | 按计价币、美元折算的TVL(V4/Infinity CL的数据取自GeckoTerminal) |
volume24hUsd、fees24hUsd | 24小时成交额与手续费收入(美元),取自GeckoTerminal,获取不到时为null |
empty | true表示现价处没有流动性,现价无参考意义:price、tvlQuote、tvlUsd为null,此类池子排在最后 |
Aerodrome、Velodrome的每一项还额外包含stable(基础池子是否为stable曲线,Slipstream为null)以及gauge信息:gauge(gauge地址)、gaugeAlive(gauge是否仍在发放奖励)、stakedShare(现价处质押在gauge中的流动性占比)、rewardsPerDay、rewardsPerDayUsd(每日发放的奖励币数量及其美元价值)、rewardAprPct(按质押部分TVL折算的奖励年化收益率,单位%)。奖励年化按当前每秒奖励外推,会随奖励币价格和质押量变化,是一个瞬时值:Slipstream池子的stakedShare是现价所在tick上已质押流动性占该处总流动性的比例,价格一变动、仓位进出区间,该值就会跳变,rewardAprPct在几分钟内可能相差数倍。用它选池或估算收益时,应间隔一段时间多次获取并取平均值。
Uniswap、PancakeSwap的V4/Infinity CL池子只列出不带hook的池子,二者都没有固定的费率档位。
Uniswap V4:原生币池子与包装币池子分别列出(如ETH_USDC与WETH_USDC)。列出的池子包括常用费率/tick间距组合(0.01%/1、0.02%/4、0.03%/6、0.04%/8、0.05%/10、0.3%/60、1%/200)上的池子,以及自定义费率与间距的池子:从GeckoTerminal上该代币的池子列表(按成交额与流动性排序的前40个)中获取Uniswap V4池子的PoolId,再通过PositionManager的poolKeys在链上反查PoolKey并核对PoolId,只保留不带hook的池子(如Robinhood上CASHCAT/USDG 0.269%、间距54的池子)。手续费不设上限,2%这类高费率池子也会列出。当代币与计价币都是中转币(包装币以及USDC、USDT等稳定币,如lp.pools("ETH", "USDC"))时,只列出常用组合;查询结果缓存1小时;GeckoTerminal暂时不可用(如被限流)时只列出常用组合,5分钟后重试。该清单仍可能遗漏池子:GeckoTerminal未收录或未进入前40名的池子,以及在PositionManager上从未创建过仓位(poolKeys查不到PoolKey)的池子,都不会列出。清单之外的不带hook的池子,可以直接将PoolId传给lp.pool、lp.plan(pool参数),前提同样是能在PositionManager上查到其PoolKey。
PancakeSwap Infinity CL:只列出手续费不超过1%的池子;列出的是兑换选路时从近期链上成交中收集到的池子,以及本进程使用过的池子。其他池子可以直接将PoolId传给lp.pool、lp.plan。
GeckoTerminal的数据在进程内缓存5分钟,由lp.select、lp.plan共用;遇到限频时会等待片刻后重试一次,仍然失败则相应字段为null。
KyberSwap、1inch交易所对象(聚合器)不支持LP指令,调用时会报错LP functions are not available for KyberSwap on Base。