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

跨链桥(经LI.FI聚合的Across、Stargate、CCTP等):查询支持的链与代币、报价、模拟,把代币从本交易所对象的链转到另一条EVM链或Solana,并查询到账进度。

exchange.IO(k)
exchange.IO(k, chain)
exchange.IO(k, params)
exchange.IO(k, params, stateOverride)
exchange.IO(k, txHash, options)
exchange.IO(k, key)

示例

  • 报价并模拟:把0.01个ETH从本链跨到Arbitrum(只读,不花钱)。

    javascript
    function main() { var params = {toChain: "arb", fromToken: "ETH", toToken: "ETH", amount: 0.01} var q = exchange.IO("bridge.quote", params) if (!q) { Log("报价失败:", GetLastError()) return } Log("经", q.toolName, "到", q.toChainName, "预计到账", q.toAmount, "至少", q.toAmountMin, "耗时约", q.executionDuration, "秒") q.feeCosts.forEach(function (f) { Log("费用:", f.name, f.amount, f.token, f.included ? "已含在报价里" : "另付") }) // 钱包余额不够时,给钱包临时补100个ETH再模拟 var ov = {} ov[exchange.IO("address")] = {balance: "0x56bc75e2d63100000"} var s = exchange.IO("bridge.simulate", q, ov) Log(s ? "模拟通过,调用合约 " + s.to : "模拟失败: " + GetLastError()) }
  • 完整流程:报价 → 模拟 → 发送 → 每20秒查询进度直到到账。

    javascript
    function main() { // 把本链的20 USDC转到Arbitrum上的本钱包 var params = {toChain: "arb", fromToken: "USDC", toToken: "USDC", amount: 20} var q = exchange.IO("bridge.quote", params) if (!q || !exchange.IO("bridge.simulate", q)) { Log("报价或模拟失败:", GetLastError()) return } var r = exchange.IO("bridge.send", q) if (!r) { Log("发送失败:", GetLastError()) return } Log("源链交易", r.txHash, "经", r.tool) while (true) { Sleep(20000) var st = exchange.IO("bridge.status", r.txHash, {toChain: "arb", bridge: r.tool}) if (!st) { continue } Log(st.status, st.substatus || "") if (st.status == "DONE") { Log("到账", st.receiving.amount, st.receiving.token.symbol, st.receiving.txLink) break } if (st.status == "FAILED" || st.status == "INVALID") { Log("跨链失败:", st.substatusMessage) break } } }
  • 列出支持的链,报价跨到Solana。

    javascript
    function main() { var chains = exchange.IO("bridge.chains") Log("支持", chains.length, "条链,如", chains[0].name, chains[0].key) // 跨到Solana必须写toAddress(Solana地址) var q = exchange.IO("bridge.quote", {toChain: "Solana", fromToken: "USDC", toToken: "USDC", amount: 50, toAddress: "你的Solana地址", order: "CHEAPEST"}) Log(q ? [q.toolName, q.toAmount, q.toAmountMin] : GetLastError()) }

返回值

类型描述

object / array / bool / 空值

随指令而定:bridge.chains、bridge.tokens返回数组,bridge.apiKey返回是否已设置Key,其它返回对象,字段见备注。出错(参数错误、余额不够、被限频rate limited (HTTP 429 …)等)时返回空值,GetLastError()中有原因。

参数

名称类型必填描述

k

string

是

指令名:bridge.chains、bridge.tokens、bridge.quote、bridge.simulate、bridge.send、bridge.status、bridge.apiKey,各自的参数见备注。

chain

string / number

否

bridge.tokens:链ID、LI.FI的链key或链名,不传为本链。

params

object

否

bridge.quote、bridge.simulate、bridge.send:跨链参数{toChain, fromToken, toToken, amount, ...},或bridge.quote的结果;各项见备注。

stateOverride

object

否

bridge.simulate:eth_call的状态覆盖,用来给钱包临时补余额。

txHash

string

否

bridge.status:bridge.send返回的源链交易哈希。

options

object

否

bridge.status:{toChain, bridge},可以加快查找。

key

string

否

bridge.apiKey:LI.FI的API Key,传""清除。

参考

备注

各指令:

指令参数说明与返回
bridge.chains无LI.FI支持的链(EVM链与Solana),缓存1小时:{id, key, name, chainType, nativeToken}数组,chainType为EVM或SVM
bridge.tokens[chain]LI.FI认识的某条链上的代币(缺省为本链),缓存1小时:{symbol, address, decimals, name, priceUSD}数组
bridge.quoteparams跨链报价(只读),字段见下
bridge.simulateparams或报价结果[, stateOverride]重新报价并用eth_call执行LI.FI给出的交易,不签名、不广播
bridge.sendparams或报价结果重新报价、授权、模拟后签名广播;只等源链交易广播,不等到账
bridge.statustxHash[, {toChain, bridge}]跨链进度
bridge.apiKey[key]设置LI.FI的API Key(只对本交易所对象生效,不回显),传""清除,不传只查询;返回是否已设置Key

params的各项(不认识的键报错):

键说明
toChain目标链:链ID(如42161)、LI.FI的链key(如arb)或链名(如Arbitrum、Solana)
fromToken本链代币:代币表里的名字(如USDC、ETH)或合约地址
toToken目标链代币:名字或地址,由LI.FI解析为它的标准代币(如Arbitrum上的USDC是原生USDC,不是USDC.e)
amountfromToken的数量(代币单位),超出代币精度的位舍去
toAddress收款地址;目标为EVM链时缺省为本钱包,目标为Solana时必须传Solana地址
slippage滑点,缺省为exchange.IO("slippage")的值
orderCHEAPEST或FASTEST
allowBridges、denyBridges只用、不用哪些桥(LI.FI的桥名,数组或逗号分隔)

报价结果{tool, toolName, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, fromAmountRaw, toAmountRaw, toAmountMinRaw, fromAmountUSD, toAmountUSD, slippage, toAddress, feeCosts, gasCosts, executionDuration, approvalAddress, steps, transactionId, request}:tool为选中的桥;数量为代币单位(*Raw为最小单位原值);toAmountMin为扣除滑点后保证到手的数量;feeCosts为[{name, amount, token, amountUSD, percentage, included}](included为false的费用另付);gasCosts为源链gas估算;executionDuration为预计耗时(秒);approvalAddress为需要授权的合约(原生币为null);steps为各步骤(cross为跨链,swap为兑换);request为参数原样回显。bridge.simulate的结果另有simulated(true)、to、value、walletBalance,补过授权时有allowanceOverride。

bridge.simulate:代币授权不够时自动用state override补成无限额度(同exchange.IO("simulate", ...));余额不会自动补,用原生币跨链时在stateOverride里给钱包补balance即可。余额不够导致失败时报错里给出钱包余额。

bridge.send的步骤:重新报价 → 检查余额 → 代币对LI.FI的approvalAddress授权不够时先授权(按exchange.IO("approve")的exact/max,USDT这类先清零,等授权上链;授权后再报价一次)→ eth_call模拟 → 签名广播。gasLimit取估算×gasMultiplier与LI.FI建议值中较大的一个。返回{txHash, tool, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, toAddress, value, transactionId},txHash为源链交易,可用exchange.IO("receipt", ...)查回执。传报价结果时按其中的request重新报价,实际成交以新报价为准,toAmountMin由交易在链上保证。

bridge.status返回{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为实际到账。刚广播时LI.FI可能还没收录,返回NOT_FOUND,继续轮询即可(建议间隔10~30秒);options的toChain、bridge(发送结果的tool)可以加快查找。

跨链是异步的,到账要几秒到几十分钟(见executionDuration),必须轮询bridge.status确认;跨虚拟机(EVM↔Solana)必须传toAddress,地址写错的资金无法找回;目标链需要有gas才能继续使用到账的代币。没有API Key时LI.FI按出口IP限频(/quote两小时75次,bridge.quote、bridge.simulate、bridge.send各用一次),同一托管者上的策略共用额度,设置Key后每分钟100次。先用小额测试。