exchange.IO("lp.remove", ...)
撤出仓位的流动性并领取手续费,全部撤出时销毁仓位NFT;多个仓位合成一笔交易。
exchange.IO(k, positionIds)
exchange.IO(k, positionIds, ratio)
exchange.IO(k, positionIds, ratio, sell)示例
撤出全部仓位,拿回的ETH卖成USDC。
javascript
function main() {
var ids = exchange.IO("lp.positions", "ETH_USDC").filter(function (p) {
return !p.closed
}).map(function (p) { return p.id })
if (ids.length == 0) {
Log("没有仓位")
return
}
var r = exchange.IO("lp.remove", ids, 1, true)
if (!r) {
Log("撤出失败:", GetLastError())
return
}
r.positions.forEach(function (p) {
Log(p.id, "到账:", p.receivedBase, "ETH +", p.receivedQuote, "USDC")
})
Log("卖出:", r.sells)
}返回值
| 类型 | 描述 |
object / 空值 |
|
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
positionIds | string / number / array | 是 | 仓位ID:单个ID(字符串或数字)或ID数组,如 |
ratio | number | 否 | 撤出的比例,大于0且不超过1,默认1(全部撤出并销毁NFT)。 |
sell | bool | 否 | 为 |
参考
Uniswap / PancakeSwap Aerodrome / Velodrome exchange.IO exchange.IO("lp.decrease") exchange.IO("lp.collect") exchange.IO("lp.positions") exchange.IO("lp.add")
备注
返回字段:txHash为交易哈希;positions逐个仓位给出撤出的本金principalBase、principalQuote,领到的手续费feesBase、feesQuote,以及实际到账receivedBase、receivedQuote(本金加手续费);sells为卖回计价币的市价单[{symbol, qty, txHash}],某笔卖出失败时该项为{symbol, qty, error},不影响其它;不卖时为空数组。数量都是可读单位,朝向按仓位的交易对(默认稳定币为计价币)。
多个仓位尽量合成一笔交易;分几笔交易时(如V3与V4/Infinity CL仓位一起传,两者的PositionManager不同)txHash为最后一笔,另有txHashes列出全部。全部撤出时同一笔交易里领取手续费并销毁NFT,之后lp.positions不再列出该仓位。
参数写法:ID后面第一个在0到1之间的数是ratio,布尔值是sell。数字写的V3仓位ID(如1)会被当成比例,ID请写成字符串或数组,如exchange.IO("lp.remove", ["1381183", "1381190"], 1, true)。
Aerodrome、Velodrome:质押着的仓位先从gauge取回(同时领走奖励,见exchange.IO("lp.unstake"))再撤;基础池子全部撤出时另发一笔claimFees领手续费。