exchange.IO("lp.remove", ...)
撤出仓位的流动性并领取手续费与奖励,全部撤出时关掉仓位、退回租金。
exchange.IO(k, positionIds)
exchange.IO(k, positionIds, ratio)
exchange.IO(k, positionIds, ratio, sell)示例
关掉全部SOL/USDC仓位,把SOL卖回USDC。
javascript
function main() {
var list = exchange.IO("lp.positions", "SOL_USDC")
if (!list || list.length == 0) {
Log("没有仓位")
return
}
var ids = list.map(function(p) { return p.id })
var r = exchange.IO("lp.remove", ids, 1, true)
if (!r) {
Log("撤出失败:", GetLastError())
return
}
r.positions.forEach(function(p) {
Log(p.id, "本金", p.principalBase, p.principalQuote, "手续费", p.feesBase, p.feesQuote,
"退租金", p.rentRefundSol, "SOL")
})
Log("卖出:", JSON.stringify(r.sells))
}返回值
| 类型 | 描述 |
object / 空值 |
|
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
positionIds | array / string | 是 | 仓位ID的数组;也可以把几个仓位ID依次写成参数(其后的数字为 |
ratio | number | 否 | 撤出的比例,(0, 1],缺省1:全部撤出并关仓;小于1时只撤一部分,仓位保留。 |
sell | bool | 否 | 为 |
参考
Jupiter exchange.IO exchange.IO("lp.decrease") exchange.IO("lp.collect") exchange.IO("lp.positions") exchange.IO("lp.add")
备注
关仓
ratio为1时撤空后在同一流程里关掉仓位,租金退回钱包(rentRefundSol):
- Meteora DLMM:撤出(
remove_liquidity_by_range2)、领取(claim_fee2、claim_reward2)后关掉仓位账户(close_position_if_empty)。超过70个bin的仓位按70个bin一段分多笔交易。 - Raydium CLMM:
decrease_liquidity_v2撤空并领取后,close_position烧掉NFT,关掉NFT账户、NFT mint与仓位账户。 - Orca Whirlpools:撤空并领取后关仓:Token-2022 NFT仓位用
close_position_with_token_extensions,旧的SPL Token NFT仓位用close_position,Position Bundle里的仓位用close_bundled_position;仓位账户、NFT mint与NFT代币账户的租金退回。锁仓(lock_position)的仓位关仓会在模拟时失败。
新建BinArray、TickArray时押的租金属于池子,不退。ratio小于1时与lp.decrease相同,只是可以一次处理多个仓位。
返回的仓位行
| 字段 | 说明 |
|---|---|
receivedBase、receivedQuote | 实际拿回的两种代币(按交易前后余额计算) |
feesBase、feesQuote | 其中的手续费部分(按发送前链上可领的量拆出) |
principalBase、principalQuote | 其中的本金部分 = 拿回的 − 手续费 |
rewards | 领到的farm奖励[{mint, symbol, amount}](不含池子的两种代币) |
rentRefundSol | 关仓退回的租金(SOL) |
feeSol | 这些交易付的网络费(SOL) |
朝向(基础币、计价币)按稳定币(其次SOL)作计价币。sells每项为{symbol, qty, txHash},卖出失败时为{symbol, qty, error};卖出是Jupiter市价单,只等广播、不等确认,用exchange.IO("receipt")查结果。
交易的执行
每笔交易发送前都用节点模拟一遍,模拟失败不发送并报出原因(DLMM、Raydium CLMM、Orca Whirlpool的错误码附名字);计算单元上限按模拟用量加余量,优先费按最近写这些账户的交易的费率取第75百分位,不超过exchange.IO("priorityFee")的上限。交易确认后才返回,实际数量按交易前后的余额计算。120秒内既没确认也证明不了过期时报outcome is unknown并附交易签名:交易可能已经上链,先用exchange.IO("receipt")核对再决定是否重试。