输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
Hyperliquid
Lighter
edgeX
Aster
Aevo
Pendle
WOOFi Pro
Uniswap / PancakeSwap
Aerodrome / Velodrome
KyberSwap
1inch
EVM DEX通用指令
Jupiter
OKX DEX
DEX策略示例
预测市场
证券与期货
链上与自定义接入

Uniswap与PancakeSwap两个交易所对象各在一条链上连接本交易所的池子,把链上兑换映射为现货交易函数。两者的池子结构相同:V2池子、V3池子,以及单例合约里的V4池子(PancakeSwap称为Infinity CL,下文合称V4/Infinity CL;只使用不带hook的池子,原生币直接参与兑换、不经包装币);代币表、兑换、订单、撤单、LP与跨链桥的用法也相同,所以合写一页。两者的差别:

比较项UniswapPancakeSwap
链Ethereum、Arbitrum、Base、BNB Chain、Unichain、Polygon、OP Mainnet、Robinhood、Arc(缺省Ethereum)Ethereum、Arbitrum、Base、BNB Chain(缺省BNB Chain)
V2池子Ethereum、Unichain、Robinhood、Arc上使用,手续费0.3%四条链都使用,手续费0.25%
V3费率档0.01%、0.05%、0.3%、1%0.01%、0.05%、0.25%、1%
V4/Infinity CLUniswap V4,九条链都可用(Arc只用ERC20形态的USDC,原生USDC的池子看不到);池子来自常用费率组合与GeckoTerminal(见下文),手续费不设上限Infinity CL,只在BNB Chain与Base上可用,只用手续费不超过1%的池子;Infinity的Bin池子不支持
V4/Infinity CL仓位IDv4:编号inf:编号
兑换与授权合约Uniswap的Universal Router与Permit2PancakeSwap自己的Universal Router与Permit2

Uniswap V4也没有固定费率档。连接器先按Uniswap常用的费率/tick间距组合(0.01%/1、0.02%/4、0.03%/6、0.04%/8、0.05%/10、0.3%/60、1%/200)找池子,再从GeckoTerminal上代币的池子列表(前两页,即按成交与流动性排的前40个)取Uniswap V4池子的PoolId,用PositionManager的poolKeys在链上反查PoolKey,核对PoolId、只留不带hook的,补上自定义费率与间距的池子(如Robinhood上CASHCAT/USDG 0.269%、间距54的池子)。lp.pools、lp.select、lp.plan、兑换选路与K线选池都用这些池子。只替不是中转币(包装币与USDC、USDT等稳定币)的代币去查,两边都是中转币的交易对(如ETH_USDC)只用常用组合;查到的结果在进程内缓存1小时。这份清单仍可能漏掉池子:GeckoTerminal没收录或排不进前40个的、PositionManager上从未建过仓位(poolKeys查不到PoolKey)的池子都找不到;GeckoTerminal暂时不可用(如限流)时只用常用组合,5分钟后再试,exchange.IO("route", ...)结果带warning说明原因。不在清单里的不带hook的池子可以直接用PoolId传给lp.pool、lp.plan(pool),前提同样是PositionManager上查得到它的PoolKey。Uniswap V4池子的手续费不设上限(V4的静态手续费最高可到100%,如Robinhood上CASHCAT/ETH 2%的池子),兑换报价由链上V4Quoter按池子实际费率算出;手续费不超过1%的限制只适用于PancakeSwap的Infinity CL。

PancakeSwap的Infinity CL没有固定费率档,连接器用eth_getLogs从最近的链上成交中收集池子,长时间没有成交的池子不会被使用;所配节点查不了日志时(BSC官方节点bsc-dataseed一律拒绝eth_getLogs,drpc等免费节点限流)改用本链默认公共节点查这些公开成交,仍查不到时exchange.IO("route", ...)结果带warning说明原因。

每笔兑换在所有可用池子的直连路径和经中转币的两跳路径中选报价最好的一条。V4/Infinity CL路径通过Universal Router兑换,代币授权经过Permit2合约(见exchange.IO("approve", ...))。

同一套实现的还有Aerodrome / Velodrome(Slipstream与基础池子,gauge质押)和兑换聚合器KyberSwap、1inch。PancakeSwap、Aerodrome、Velodrome原是Uniswap交易所「DEX」配置项的选项,2026年10月起是独立的交易所;Uniswap交易所的「DEX」配置项已去掉,以前在那里选了它们的旧配置启动时报错(如Velodrome is now its own exchange: add a Velodrome exchange instead of Uniswap with Dex=Velodrome),请改建对应的交易所。

名称与配置
exchange.GetName()类型别名
Uniswap现货—
PancakeSwap现货Pancake
配置项必填默认值
---
链是Uniswap:Ethereum;PancakeSwap:BNB
钱包私钥是—
节点地址否Uniswap:https://ethereum-rpc.publicnode.com,https://eth.drpc.org;PancakeSwap:https://bsc-dataseed.binance.org,https://bsc-rpc.publicnode.com
节点认证否—

表中长说明的其余部分:

  • 节点地址:查询订单状态需要节点能查到已上链交易的回执:publicnode的Base、BNB Chain、Arbitrum公共节点查不到回执(要求归档权限),不要单独使用。

交易对与合约代码

交易对示例:ETH_USDC、WETH_USDC

交易对写作ETH_USDC,原生币(ETH、BNB、POL)与包装币(WETH、WBNB、WPOL)是两个不同的资产,如BNB Chain上的BNB_USDT与WBNB_USDT。以下几条链只有Uniswap支持:Polygon的原生币为POL;Arc链用USDC支付gas,原生余额与USDC代币(0x3600000000000000000000000000000000000000)是同一笔资金,交易对写作WETH_USDC、EURC_USDC;Robinhood链上没有USDC和USDT,主流稳定币为USDG,交易对写作ETH_USDG;Unichain、Polygon上的USDT写作USDT0。

代币表以外的代币用exchange.IO("token", name, address)登记后即可写在交易对里。

专属IO指令
指令参数说明返回值
transferto, amount[, token]从配置的钱包转出原生币或ERC20代币(token为代币名或合约地址,不传为原生币);amount可传all转出全部(原生币扣除手续费)。只等交易广播,不等上链。见子页exchange.IO("transfer", ...)。{txHash, from, to, token, tokenAddress, amount, raw}
receipttxHash[, waitMs]查询本链任意交易的回执(不限本交易所对象发出的),可以等待上链(最多10分钟)。查询订单时传订单ID中逗号后面的交易哈希。见子页exchange.IO("receipt", ...)。已上链返回{txHash, status, blockNumber, gasUsed, fee}(status为success或reverted),未上链返回{txHash, pending: true, known}。
routesymbol, side, qty只询价不下单:列出一笔兑换各条候选路径的报价和最优路径。qty一律是基础币数量:sell按精确输入卖出qty,buy按精确输出买到qty(与市价买单按计价币金额下单不同)。见子页exchange.IO("route", ...)。{symbol, side, qty, best, quote, price, candidates};V4/Infinity CL池子没能收集齐时另有warning说明原因(Uniswap为GeckoTerminal暂时查不到常用组合以外的V4池子,PancakeSwap为节点查不了日志、收集不到Infinity池子)。
simulatesymbol, side, qty[, price[, stateOverride[, route]]]按下单逻辑(选路、询价、价格保护)构造兑换交易,只用eth_call模拟执行,不签名、不广播、不花费gas。见子页exchange.IO("simulate", ...)。{route, exactIn, amountIn, amountOut, quoted, executed, value, calls},补过授权时另有allowanceOverride。
token[name, address]登记代币,登记后的代币可以直接写在交易对里;不传参数时列出代币表。见子页exchange.IO("token", ...)。登记时返回{symbol, address, decimals},列表时返回{symbol, address, decimals, native}数组。
wrapamount原生币包装成包装币(例如ETH→WETH),1:1、无滑点、只花gas;不接受all(要留gas)。见子页exchange.IO("wrap", ...)。{txHash, action, from, to, amount, raw}
unwrapamount包装币解包成原生币(例如WETH→ETH),amount可传all。见子页exchange.IO("unwrap", ...)。{txHash, action, from, to, amount, raw}
approve["exact" | "max"]代币授权模式:exact(默认)每次只授权本次兑换需要的数量,max授权无限额度。不传参数时查询。见子页exchange.IO("approve", ...)。当前模式。
slippage[ratio]市价单的滑点保护比例,范围[0, 0.5),默认0.005(0.5%)。不传参数时查询。见子页exchange.IO("slippage", ...)。当前滑点比例。
deadline[seconds]交易有效期(秒),范围10到86400,默认120。不传参数时查询。见子页exchange.IO("deadline", ...)。当前截止时间(秒)。
cancelWait[seconds]撤单时等待结果的最长时间(秒),范围0到600,默认30;0表示发出撤单交易后立即返回。不传参数时查询。见子页exchange.IO("cancelWait", ...)。当前等待时间(秒)。
gasMultiplier[x]gas上限倍数,范围1到5,默认1.2:交易的gasLimit为节点估算的gas乘以该倍数。见子页exchange.IO("gasMultiplier", ...)。当前倍数。
base[url]不传参数时返回当前节点地址;传入地址时切换节点。多个节点写成逗号分隔的字符串(传数组时只使用第一个地址)。换节点后第一次请求会核对节点所在的链,与配置的链不一致时报错。切换前的地址。
sendBaseurl设置只用来广播交易的节点(私有交易通道)。与Web3不同:不返回设置前的地址,不传参数时不查询,传空字符串不会清除设置。true
address—配置的私钥对应的钱包地址(0x开头的小写地址)。—
contracts—本交易所在本链上的部署信息:合约地址、手续费档和内置代币列表快照。对象:dex、chainId、chain、router、quoterV2、v3Factory、v3Fees、positionManager、v2Factory、v2Fee(百万分之一,3000即0.3%)、wrappedNative、v4、tokenList(代币列表快照的生成时间embeddedAt、代币数tokens、常用币数core);本链没有的部署为null。(详见表下)
lp.poolstoken[, quote]列出代币的全部V3与V4/Infinity CL池子(指定计价币,或本链的包装币、USDC、USDT):费率、tick间距、现价、流动性、池子两种代币的余额与TVL;24小时成交与手续费取自GeckoTerminal(取不到时为null;结果在进程内缓存5分钟,lp.select、lp.plan共用,限流时等一会儿重试一次)。见子页exchange.IO("lp.pools", ...)。[{id, protocol, dex, symbol, fee, feeRate, tickSpacing, tick, price, liquidity, reserveBase, reserveQuote, tvlQuote, tvlUsd, volume24hUsd, fees24hUsd, empty}],price为计价币/代币。
lp.selecttoken, budget[, options]在lp.pools列出的池子里按规则自动选池:options.fee指定费率时该费率的池子满足流动性门槛就选它(exact为true时只用该费率);否则在TVL不低于max(5000美元, 预算)的池子里选24小时成交最大的,没有成交数据时选TVL最大的。见子页exchange.IO("lp.select", ...)。lp.pools的一行,另带reason(选择理由)。
lp.poolpoolId池子实时状态。见子页exchange.IO("lp.pool", ...)。{id, protocol, currency0, currency1, token0, token1, fee, tickSpacing, tick, sqrtPriceX96, price0, price1, liquidity},price0为1个token0值多少token1。(详见表下)
lp.tickspoolId, tickLower, tickUpper[, step]tick区间内的流动性分布:每段的流动性和两种代币数量(按已初始化的tick细分求和),step为合并成的段宽(tick,默认等于tick间距)。区间超过120个位图字时报错。见子页exchange.IO("lp.ticks", ...)。{pool, tick, token0, token1, segments: [{tickLower, tickUpper, price0Lower, price0Upper, liquidity, amount0, amount1, current}]}
lp.planparams建仓计划(只读,不花钱)。见子页exchange.IO("lp.plan", ...)。{params, symbol, pool, protocol, fee, tickSpacing, tick, price, shape, budget, budgetUsd, positions: [{tickLower, tickUpper, priceLower, priceUpper, liquidity, amountBase, amountQuote, share}], needBase, needQuote, haveBase, haveQuote, swap, payWith, shortfall, shareOfPool, volume24hUsd, estDailyFeesUsd, slippageBps, layers, layersRequested, warning?};swap为建仓前需要换的币({side, amount, currency}或null)。
lp.simulateplan[, stateOverride]按计划用eth_call执行建仓交易(不签名、不广播),确认能成交及实际投入数量。见子页exchange.IO("lp.simulate", ...)。{pool, positions: [{liquidity, amountBase, amountQuote}], value, swapNeeded, note}
lp.addplan按计划建仓:需要时先用市价单换币,再授权,一笔交易创建全部仓位,等上链后返回。见子页exchange.IO("lp.add", ...)。{txHash, swapTxHash, pool, positions: [{id, tickLower, tickUpper, priceLower, priceUpper, liquidity, amountBase, amountQuote}]}
lp.increasepositionId, budget[, options]给仓位加仓:budget(计价币)按仓位区间与现价的配比拆成两种代币,缺的那种先换。见子页exchange.IO("lp.increase", ...)。{txHash, swapTxHash, id, liquidity, amountBase, amountQuote}
lp.decreasepositionId, ratio[, options]按比例(0到1)减仓,同时领取全部手续费,仓位保留。options.slippage价格保护,options.sell为true时把拿回的代币卖成计价币。见子页exchange.IO("lp.decrease", ...)。{txHash, positions: [{id, symbol, principalBase, principalQuote, feesBase, feesQuote, receivedBase, receivedQuote}], sells}
lp.collectpositionIds[, sell]领取手续费,多个仓位合成一笔交易;sell为true时把领到的代币卖成计价币。见子页exchange.IO("lp.collect", ...)。同lp.decrease。
lp.removepositionIds[, ratio[, sell]]撤出流动性并领取手续费,多个仓位合成一笔交易;ratio默认1(全部撤出并销毁仓位NFT),小于1时只撤一部分;sell为true时卖回计价币。见子页exchange.IO("lp.remove", ...)。同lp.decrease。
lp.positions[filter[, wallet]]钱包的全部V3与V4/Infinity CL仓位:区间、是否在区间内、流动性、当前数量与价值、未领手续费。见子页exchange.IO("lp.positions", ...)。[{id, pool, protocol, symbol, fee, tickLower, tickUpper, priceLower, priceUpper, price, tick, inRange, liquidity, amountBase, amountQuote, value, feesBase, feesQuote, feesValue, closed}],value、feesValue按计价币计。
lp.historypositionId仓位资金流水:存入、撤出本金、领取手续费,以及按当前池价折算的盈亏(现值 + 已领手续费 + 已撤本金 − 存入本金,不含gas)。见子页exchange.IO("lp.history", ...)。{id, symbol, events: [{action, block, txHash, liquidity, amountBase, amountQuote}], depositedBase, depositedQuote, withdrawnBase, withdrawnQuote, feesCollectedBase, feesCollectedQuote, price, pnlQuote, note};V4/Infinity CL仓位为{id, pool, symbol, events: [{action, block, txHash, liquidity}], position, note}。
lp.trackpositionIds登记V4/Infinity CL仓位ID(如(Uniswap:["v4:123456"];PancakeSwap:["inf:123456"]);与交易所对象不符的前缀报错),之后lp.positions会查这些仓位(归属每次按链上核对,转走的不列)。见子页exchange.IO("lp.track", ...)。本进程记住的全部仓位ID。
bridge.chains—跨链桥(LI.FI)支持的链:EVM链与Solana,缓存1小时。见子页exchange.IO("bridge.*", ...)。{id, key, name, chainType, nativeToken}数组,chainType为EVM或SVM。
bridge.tokens[chain]LI.FI认识的某条链上的代币(缺省为本链),缓存1小时。见子页exchange.IO("bridge.*", ...)。{symbol, address, decimals, name, priceUSD}数组。
bridge.quoteparams跨链报价(只读),源链为本交易所对象的链。见子页exchange.IO("bridge.*", ...)。{tool, toolName, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, fromAmountRaw, toAmountRaw, toAmountMinRaw, fromAmountUSD, toAmountUSD, slippage, toAddress, feeCosts, gasCosts, executionDuration, approvalAddress, steps, transactionId, request}:数量为代币单位(*Raw为最小单位原值);toAmountMin为扣除滑点后保证到手的数量;feeCosts为[{name, amount, token, amountUSD, percentage, included}](included为false的费用另付);gasCosts为源链gas估算;executionDuration为预计耗时(秒);approvalAddress为需要授权的合约(原生币、Solana为null);steps为各步骤(cross为跨链,swap为兑换);request为参数原样回显。
bridge.simulateparams|quote[, stateOverride]重新报价,用eth_call执行LI.FI给出的交易,不签名、不广播、不花gas。见子页exchange.IO("bridge.*", ...)。bridge.quote的结果,另有simulated(true)、to、value、walletBalance,补过授权时有allowanceOverride。
bridge.sendparams|quote跨链转出:重新报价 → 检查余额 → 代币对LI.FI的approvalAddress授权不够时先授权(按exchange.IO("approve")的exact/max,USDT这类先清零,等授权上链;授权过就再报价一次)→ eth_call模拟 → 签名广播;gasLimit取eth_estimateGas估算×gasMultiplier与LI.FI建议的gasLimit中较大的一个(桥合约还会调用别的合约,估算可能偏少),实际只按用量扣费。见子页exchange.IO("bridge.*", ...)。{txHash, tool, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, toAddress, value, transactionId},txHash为源链交易哈希,可用receipt查回执。
bridge.statustxHash[, options]跨链进度(LI.FI /status),参数为bridge.send返回的源链交易哈希;options可给{toChain, bridge}加快查找。见子页exchange.IO("bridge.*", ...)。{status, substatus, substatusMessage, tool, sending, receiving, fromAddress, toAddress, explorer, bridgeExplorer}:status为NOT_FOUND、INVALID、PENDING、DONE、FAILED;DONE时substatus为COMPLETED(按报价到账)、PARTIAL(收到的是别的代币)或REFUNDED(已退回);sending、receiving为{txHash, txLink, chainId, amount, amountRaw, token, timestamp},receiving.amount与receiving.token为实际到账的数量与代币。
bridge.apiKey[key]设置LI.FI的API Key(请求头x-lifi-api-key,只对本交易所对象生效,不回显),传""清除;不传参数只查询。没有Key时按出口IP限频,见下文。见子页exchange.IO("bridge.*", ...)。是否已设置Key(布尔值)。

表中长说明的其余部分:

  • contracts的返回值:positionManager为V3的PositionManager;v4为V4/Infinity CL的合约(flavor为(Uniswap:uniswap-v4;PancakeSwap:pancakeswap-infinity-cl)),含LP用的positionManager(Uniswap:Uniswap V4的PositionManager;PancakeSwap:Infinity的CLPositionManager);另有aerodrome,为null。

通用指令currency见exchange.IO。

不支持通用指令api(调用时报错并返回空值)。

函数支持差异

不支持(调用时报错并返回空值):exchange.GetTickers、exchange.GetHistoryOrders、exchange.ModifyOrder、exchange.CreateConditionOrder、exchange.ModifyConditionOrder、exchange.CancelConditionOrder、exchange.GetConditionOrder、exchange.GetConditionOrders、exchange.GetHistoryConditionOrders。

以回退方式支持:

  • exchange.GetRecords:原生周期为1分钟、5分钟、15分钟、1小时、4小时、12小时、1天(GeckoTerminal的周期);其它周期由托管者合成:分钟级以上的周期由原生周期合并,秒级周期由exchange.GetTrades()的链上成交逐笔累积(首次调用只有最近约10分钟成交覆盖的那几根,之后随每次调用累积;还没有成交时报错并说明原因,取成交失败时报错带上失败原因)。

注意事项
函数行为
exchange.GetTicker()买一、卖一为约1000美元规模的实际可成交价;链上没有24小时统计。买卖两边各取最优池子,跨池偶尔交叉时两边都给中间价,Info.crossed写明交叉幅度
exchange.GetDepth()由逐档递增规模的链上询价推算:规模从约1000美元递增到100万美元,默认5档、最多10档。买卖两边取各自最优的池子,跨池偶尔交叉(买一高于卖一)时,交叉的价格按中间价给出、数量不变,Info.crossed写明中间价与交叉幅度
exchange.GetTrades()该交易对各个池子最近约10分钟区块内的链上成交,每次最多500条
exchange.GetRecords()K线来自GeckoTerminal的池子级数据:取本交易所上该交易对在GeckoTerminal美元流动性最深的池子(V2、V3、V4/Infinity CL池子都参与比较,交易对写原生币时原生币池与包装币池都算;选中的池子缓存1小时)。价格为该池子的逐笔成交价(含池子手续费,与exchange.GetTicker()的中间价可能相差约一个池子费率),单位为计价币/基础币,Volume为基础币数量;没有成交的周期按上一根收盘价补平、成交量为0,最后一根可能尚未收盘。GeckoTerminal的数据有几十秒到1分钟的延迟,公开接口约每分钟10次:同一周期的K线缓存1分钟,请求在托管者内排队,被限频时等待重试,仍不行时报错。GeckoTerminal没有收录本交易所上该交易对的任何池子时报错
exchange.GetMarkets()内置与已登记代币两两配对、链上确实有池子的交易对;含包装币的交易对另列一行原生币写法。TickSize固定为1e-8,PricePrecision为8,AmountPrecision为代币精度,MinNotional为0
exchange.GetOrders()只列出本进程发出、还没上链的兑换交易(保存在内存里,重启后清空)
exchange.GetAssets()原生币和代币表中各代币的钱包余额
exchange.CreateOrder()立即在链上兑换:限价为最差成交价,按当前报价达不到限价时直接报错、不发交易;市价按滑点保护;市价买入时数量为要花费的计价币。最优路径是V4/Infinity CL且还需要额外的Permit2授权交易时,只有V4/Infinity CL的报价比最好的V2/V3至少好0.1%才选V4/Infinity CL。下单附加参数slippage覆盖本单滑点,route(v2、v3、v4、hop、direct)限定路径类型,v4指V4/Infinity CL池子
exchange.GetOrder()订单ID形如ETH_USDC,0x…(交易对、逗号、交易哈希),状态来自交易回执;原交易的nonce已被撤单交易(或其它交易)占用时显示为已撤销。订单号只含交易对和交易哈希,不含链;Info中有chainId与链名chain,跨链汇总订单时用它找回所属的链;在别的链的交易所对象上查询会报错“not found on <链>”
exchange.CancelOrder()发送同nonce的替换交易(向自己转0金额),并等待结果(默认最多30秒,见exchange.IO("cancelWait", ...)):撤单交易先上链返回true;原订单已经上链或先于撤单上链时返回false(撤单没成功,但不是调用错误),原因见GetLastError();等待超时返回true,表示撤单已提交
区间流动性(LP)

exchange.IO("lp.*", ...)指令提供V3池子与不带hook的V4/Infinity CL池子的区间流动性:选池、规划与模拟、建仓、加减仓、领手续费、撤出和仓位查询。仓位是PositionManager的NFT:V3仓位的id即NFT编号;V4/Infinity CL仓位带前缀,Uniswap写成v4:编号、PancakeSwap写成inf:编号,因为它与V3的PositionManager编号会重复。V3与V4/Infinity CL仓位可以在同一条指令里一起传,各发一笔交易。

写指令(lp.add、lp.increase、lp.decrease、lp.collect、lp.remove)在交易上链后返回;之后一分钟内的链上读取都不早于该交易所在的区块(公共节点背后的负载均衡可能落到还没同步到这一块的机器),所以紧接着调用下一条指令不会按旧状态构造交易。建仓时原生币按当前gas价留出约300万gas的手续费,其余可用于建仓。

监控与撤退由策略自己做:lp.positions给出是否在区间内、当前价值与未领手续费,策略据此决定调仓或止损(出区间后自动调仓的完整策略见LP自动调仓,更多见DEX策略示例)。

风险:

  • 无常损失:价格偏离建仓价越远,仓位价值相对单纯持有越低;单边上涨时仓位逐步卖出代币,下跌时逐步买入。
  • 价格出区间后仓位只剩一种代币,不再赚手续费,直到价格回到区间。
  • 每次建仓、调仓、领取、撤出都是链上交易,频繁调仓的gas成本可能超过手续费收入;更适合Base、Arbitrum、BNB Chain等低gas的链。
  • 计划中的预估日手续费按过去24小时成交与当前占池比例估算,不代表未来收益。
跨链桥(bridge)

exchange.IO("bridge.*", ...)经LI.FI聚合的跨链桥(Across、Stargate、CCTP、deBridge、Mayan、Relay、NEAR Intents等)把代币从本交易所对象的链转到另一条链,支持EVM链之间以及EVM与Solana之间(源链为本交易所对象的链)。报价与交易由LI.FI给出,由托管者授权、eth_call模拟后签名广播。请求带集成方标识integrator=fmz,不加收任何费用;报价中的LIFI Fixed Fee等是LI.FI与桥自己的费用,已计入toAmount。

典型流程:bridge.quote看报价 → bridge.simulate模拟 → bridge.send发出 → 每10~30秒bridge.status直到DONE或FAILED。

  • 跨链是异步的:bridge.send返回时只是源链交易已广播,到账要几秒到几十分钟(见报价的executionDuration),必须轮询bridge.status确认;PARTIAL表示目标链收到的是别的代币,REFUNDED表示已退回源链。
  • 跨虚拟机(EVM↔Solana)必须传toAddress,地址格式按目标链检查;地址写错的资金无法找回。
  • 风险:桥合约与跨链消息的安全风险由各桥承担;报价随时变化,bridge.send发出前会重新报价;目标链需要有gas才能继续使用到账的代币。先用小额测试。
  • 限频:没有API Key时LI.FI按出口IP限频,/quote两小时75次(bridge.quote、bridge.simulate、bridge.send各用一次,授权后再报价时多一次),其它接口每分钟100次;同一托管者上的策略共用额度。用exchange.IO("bridge.apiKey", key)设置Key后每分钟100次。被限频时报错rate limited (HTTP 429 …)。