输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入

按计划用eth_call模拟建仓交易(不签名、不广播、不花钱),确认交易能执行并查看实际投入的数量。

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

示例

  • 给钱包临时补100个ETH,模拟一个现价以上、只用ETH的区间仓位。

    javascript
    function main() { var plan = exchange.IO("lp.plan", {symbol: "ETH_USDC", budget: 100, range: {pct: [2, 10]}}) var ov = {} ov[exchange.IO("address")] = {balance: "0x56bc75e2d63100000"} var r = exchange.IO("lp.simulate", plan, ov) if (!r) { Log("模拟失败:", GetLastError()) return } Log("池子:", r.pool, "附带ETH(wei):", r.value) r.positions.forEach(function (p) { Log("流动性:", p.liquidity, "投入:", p.amountBase, "ETH +", p.amountQuote, "USDC") }) }
  • Aerodrome、Velodrome:基础池子计划不需要余额就能模拟。

    javascript
    function main() { var plan = exchange.IO("lp.plan", {symbol: "ETH_USDC", budget: 100, stable: false}) var r = exchange.IO("lp.simulate", plan) Log(r.protocol, "得到LP代币:", r.lpTokens) Log("存入:", r.amountBase, "ETH +", r.amountQuote, "USDC") }

返回值

类型描述

object / 空值

{pool, positions: [{liquidity, amountBase, amountQuote}], value, swapNeeded, note},字段说明见备注。交易会回滚(余额或授权不够、价格越过保护等)时返回空值并报错。

参数

名称类型必填描述

k

string

是

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

plan

object

是

exchange.IO("lp.plan", ...)返回的计划,或计划的参数params;按其中的params用最新池价重新计算后模拟。

stateOverride

object

否

节点eth_call的状态覆盖(geth的state override set),用来给钱包临时补余额或授权,例如{"0x钱包地址": {"balance": "0x56bc75e2d63100000"}};只在本次模拟中生效。

参考

备注

返回字段:positions为各仓位实际铸造的流动性与两种代币的投入量;value为交易附带的原生币(最小单位的十进制字符串,原生币付款时非0);swapNeeded为true表示计划需要先换币,这时按换完后的数量模拟,钱包里还没有的那种代币要用stateOverride补上,否则会因转账失败回滚(报错如execution reverted: STF)。

授权:建仓交易要从钱包转出代币,钱包对PositionManager(V4/Infinity CL为Permit2)的授权不够时同样会回滚;真实建仓(lp.add)会自动授权,模拟时要么用原生币付款(不需要授权),要么在stateOverride里补上授权。只需要原生币的计划(如区间在现价以上、交易对写原生币的仓位)只要给钱包补balance就能模拟。

Uniswap、PancakeSwap的V4/Infinity CL池子:代币经Permit2付款,要补代币对Permit2的授权和Permit2里给PositionManager的额度(Permit2地址见exchange.IO("contracts")的v4.permit2);V4/Infinity CL的PositionManager不返回数量,结果中的数量为计划量,另有tickLower、tickUpper,note说明这一点(交易不回滚即说明按这组数量能执行)。

Aerodrome、Velodrome的基础池子用Router的quoteAddLiquidity模拟,不需要余额和授权,返回{pool, protocol, lpTokens, amountBase, amountQuote, swapNeeded, note}。