输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所

给已有的仓位加仓:按仓位的区间与现价把预算拆成两种代币,缺的那种先换。

exchange.IO(k, positionId, budget)
exchange.IO(k, positionId, budget, options)

示例

给第一个SOL/USDC仓位加仓50 USDC。

javascript
function main() { var list = exchange.IO("lp.positions", "SOL_USDC") if (!list || list.length == 0) { Log("没有SOL/USDC仓位") return } var r = exchange.IO("lp.increase", list[0].id, 50, {symbol: "SOL_USDC"}) if (!r) { Log("加仓失败:", GetLastError()) return } Log(r.id, "加入", r.amountBase, "SOL", r.amountQuote, "USDC", "交易", r.txHash) }

返回值

类型描述

object / 空值

{txHash, swapTxHash, id, symbol, amountBase, amountQuote, feeSol}:amountBase、amountQuote为实际存入的数量(按交易前后余额计算),swapTxHash为先换币的交易签名(没有换币为null)。余额不足、仓位不属于本钱包、模拟或交易失败时返回空值。

参数

名称类型必填描述

k

string

是

固定为lp.increase,用于加仓。

positionId

string

是

仓位ID(lp.positions的id,如meteora:仓位地址、raydium:NFT mint、orca:NFT mint;只写地址也认)。仓位必须属于本钱包。

budget

number

是

加仓金额,按计价币计。

options

object

否

{symbol, shape, slippage}:symbol为交易对,决定朝向与budget的币种(缺省稳定币、其次SOL为计价币);shape为DLMM的形状(缺省spot);slippage为价格保护,缺省0.01。

参考

备注

加仓的规划、换币与执行同lp.add:先按仓位的区间与最新池价规划,余额不足时报错,需要时先用Jupiter市价单换币并等确认,再重新规划、发送一笔交易。

各协议的差别
  • Meteora DLMM:按shape在仓位的bin上分配,只支持不超过70个bin的仓位(更宽的仓位一笔交易放不下,报错)。
  • Raydium CLMM:用increase_liquidity_v2。两种代币都要时以一种定量(SOL那一侧优先),另一种的上限为价格在slippage内浮动时的最大用量(不少于计划量 × (1 + slippage));只要一种(区间整个在现价一侧)时按流动性加,另一种的上限为价格浮进区间时要补的量。
  • Orca Whirlpools:不限宽度,两种代币的数量作为上限交给链上,链上按执行时的价格算出能加的最大流动性。

交易的执行

每笔交易发送前都用节点模拟一遍,模拟失败不发送并报出原因(DLMM、Raydium CLMM、Orca Whirlpool的错误码附名字);计算单元上限按模拟用量加余量,优先费按最近写这些账户的交易的费率取第75百分位,不超过exchange.IO("priorityFee")的上限。交易确认后才返回,实际数量按交易前后的余额计算。120秒内既没确认也证明不了过期时报outcome is unknown并附交易签名:交易可能已经上链,先用exchange.IO("receipt")核对再决定是否重试。