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

按建仓计划构造全部建仓交易,用节点模拟执行,不签名、不广播。

exchange.IO(k, plan)
exchange.IO(k, plan, payer)

示例

  • 规划后先模拟,模拟通过再建仓。

    javascript
    function main() { var plan = exchange.IO("lp.plan", {symbol: "SOL_USDC", budget: 100, range: {pct: [-5, 5]}}) if (!plan) { Log("规划失败:", GetLastError()) return } var sim = exchange.IO("lp.simulate", plan) if (!sim) { Log("模拟出错:", GetLastError()) return } sim.positions.forEach(function(p) { Log(p.ok ? "成功" : "失败", p.amountBase, "SOL", p.amountQuote, "USDC", "计算单元", p.unitsConsumed, p.error || "") }) Log("全部通过:", sim.ok, sim.note) }
  • 以另一个钱包为付款人验证计划(只读)。

    javascript
    var PAYER = "" // 填一个持有SOL和USDC的钱包地址 function main() { if (!PAYER) { Log("请先把PAYER设为一个钱包地址") return } var sim = exchange.IO("lp.simulate", {symbol: "SOL_USDC", budget: 200, range: {pct: [-3, 3]}, shape: "spot", protocol: "meteora"}, PAYER) if (!sim) { Log("模拟出错:", GetLastError()) return } Log(sim.protocol, sim.pool, "付款人", sim.payer, "全部通过", sim.ok) sim.positions.forEach(function(p) { Log("bin", p.lowerBinId, p.upperBinId, p.ok, p.unitsConsumed, p.txBytes, p.error || "") }) }

返回值

类型描述

object / 空值

{pool, protocol, payer, ok, positions, swapNeeded, shortfall, note}:ok为全部建仓交易都模拟成功,positions为每笔交易的模拟结果,字段见备注。模拟失败不算出错(看ok与各行的error);规划出错、请求失败时返回空值。

参数

名称类型必填描述

k

string

是

固定为lp.simulate,用于模拟建仓。

plan

object

是

lp.plan返回的计划,或计划参数(同lp.plan的params)。

payer

string

否

另一个钱包地址:以它为付款人和仓位主人模拟(只读,不需要它的私钥),用于自己钱包没钱时验证计划。

参考

备注

模拟什么
  • 先按计划的params在最新池价与付款人余额下重新规划,再为每个仓位构造一笔完整的建仓交易,用节点的simulateTransaction执行(不验签)。
  • 不换币:计划要先换币(swap不为null)时按换完的数量模拟,swapNeeded为true;要换币或有shortfall时note提醒付款人必须持有计划的数量模拟才能通过,否则note为空串。
  • 各协议的交易:DLMM为新建BinArray、建仓位账户、建ATA、包装SOL、加流动性、解包;Raydium为建ATA、包装SOL、open_position_with_token22_nft(建仓位NFT与仓位账户,缺的TickArray由程序新建)、解包;Orca为建ATA、包装SOL、新建变长TickArray(initialize_dynamic_tick_array)、开仓(open_position_with_token_extensions)、按数量上限加流动性(increase_liquidity_by_token_amounts_v2)、解包。

positions的每一项
字段说明
position这次模拟新生成的仓位账户(DLMM)或仓位NFT mint(Raydium、Orca)地址;lp.add会另外生成
lowerBinId、upperBinId区间(Raydium、Orca为tickLower、tickUpper)
amountBase、amountQuote这笔交易存入的两种代币
ok、err、error是否成功、节点返回的原始错误、失败原因(DLMM、Raydium CLMM、Orca Whirlpool的错误码附名字)
logs程序日志的尾部
unitsConsumed、txBytes消耗的计算单元、交易字节数

常见失败:AccountNotFound为付款人没有SOL(新钱包或空钱包);余额不够计划的数量时程序报代币不足。自己的钱包还没入金时,可以把payer设为一个持有两种代币的公开钱包来验证计划本身。