订单结构
LI.FI 意图使用 OIF 的StandardOrder,它支持单链输入和多链输出。
字段参考
输出字段
选择资源锁
资源锁决定了在求解器填充订单期间用户资金如何被持有。
如果您要在其他桥接之外添加 LI.FI Intents,推荐使用 Simple Escrow。如果您正在构建资源锁优先的应用,请考虑使用 The Compact。资金存入的具体方式请参阅 Escrow 存款方式。
已部署的
InputSettlerCompact 合约尚未更新到当前版本的协议。更新后的部署上线后会公布其地址——在此之前请使用 Simple Escrow,或者如果您正在构建 Compact 集成,请联系 LI.FI。提交订单
每个 V1 报价都会返回order.openIntentTx——一笔用于开启订单的源链交易。在链上开启这个动作本身就是广播:输入结算器会发出一个开启事件,订单服务器摄取该事件,求解器随即领取该订单。不存在单独的提交调用。
不同链上,交易的形态以及发送前所需的步骤各不相同。
在 EVM 上开启
openIntentTx 携带输入结算器地址(to)、十六进制 calldata(data)以及 gas 预估值(gasRequired)。发送前,请满足 order.checks.allowances 中的每一项——每一项都断言用户为 spender 持有并已授权至少 required 数量的 token(可以是直接的 ERC-20 授权,也可以是 Permit2):
在 Tron 上开启
在 Tron 上,openIntentTx.data 是完整的 ABI calldata(函数选择器 + 参数),而不是一笔可直接广播的交易。请先授权 TRC-20 输入,然后使用 TronWeb 将该 calldata 包裹进 TriggerSmartContract 信封中;feeLimit 是以 SUN 计的能量花费上限,而非估算值:
在 Solana 上开启
在 Solana 上,openIntentTx.data 是一个序列化的交易模板。签名之前,请替换其中的占位区块哈希,并使用 openIntentTx.computeUnitsRequired 中返回的计算单元限制重建其消息:
TransactionMessage.decompile。在 dApp 中,请使用您钱包适配器的 signTransaction,而不是 Keypair。open 指令会托管输入代币并发出一个 OpenEvent;订单服务器会摄取该事件并将订单分发给求解器。这里没有预先的授权步骤:checks.allowances 始终为 [],因为 SPL 转账发生在 open 指令内部。
请将
USER_SECRET_KEY 之类的密钥保存在环境变量中——切勿硬编码,也不要在浏览器代码中暴露它们。链下提交(无 gas 与 Compact)
仅当您的集成需要链下订单提交时——无 gas 托管或已签名的 Compact 领取,二者都仅限 EVM——才使用POST /orders/submit。它不接受 Tron 或 Solana 订单。如果您使用了来自订单服务器的报价,请包含 quoteId 以获得优先处理。
orderIdentifier 和 onChainOrderId 的 meta 对象用于跟踪。
链上 vs 链下订单
订单服务器是一个便利层,而非链上订单的必需项。所有链上意图都可以在不使用它的情况下提交。一些求解器会独立检测链上意图。
交付时调用
每个MandateOutput 都支持一个 call 字段,用于在代币交付后在目标链上执行的 calldata。接收方先收到代币,然后输出 settler 在 recipient 合约上调用 outputFilled(bytes32 token, uint256 amount, bytes executionData)。
在使用交付时调用时:
- 对于每一个输出,输出结算器会先交付代币,再运行该调用
- 如果调用失败,则整个意图无法被填充
- recipient 必须是实现了
outputFilled的合约,而非 EOA - 对于多链输出,只有第一个输出应包含 calldata
outputFilled 中。如果您需要 SCA 实现,请联系 LI.FI。
Solana 不支持交付时调用。带有 Solana 输出的订单必须将回调字段留空;否则输出结算器会拒绝填充。
意图验证
在提交之前,请根据以下规则验证您的订单。安全性
- 检查 oracle 网络相对于该意图的价值是否足够安全
- 所有 oracle(输入和输出)都应属于同一个网络
- 多输出订单可能容易受到 DoS 攻击,即仅填充第一个输出。请将第一个输出设为最有价值的。
- 来自输出 settler 的调用不能用于认证,因为任何人都可以填充输出
- 将
user设置为预期的退款接收方,而非意图发起方或中继地址。
正确性
- 使用已知的、可靠的代币、结算合约和 oracle
- 使用尽可能少的代币。低价值或不知名的代币会让填充的可能性降低。
- 在
fillDeadline和expires之间留出足够的时间以适应消息传递延迟 - 确保 nonce 是唯一的。托管要求用户唯一性,而 The Compact 要求 allocator 唯一性。
- 对于 The Compact,确保所有输入共享同一个 allocator,且资源锁的过期时间在意图过期时间之后
后续步骤
跟踪订单状态
监控订单进度并处理终态
请求报价
在构造订单之前获取求解器定价
结算
托管和 Compact 注册详情
Oracle 系统
Oracle 网络和验证

