Skip to main content
订单(意图)描述了用户想要什么:输入资产、期望的输出、结算参数和截止时间。构造完成后,将其提交到订单服务器以分发到解算器网络。

订单结构

LI.FI 意图使用 OIF 的 StandardOrder,它支持单链输入和多链输出。

字段参考

输出字段


选择资源锁

资源锁决定了在解算器填充订单期间用户资金如何被持有。 如果您要在其他桥接之外添加 LI.FI Intents,推荐使用 Simple Escrow。如果您正在构建资源锁优先的应用,请考虑使用 The Compact。有关注册详情,请参阅输入结算。

提交订单

对于非无 gas 的托管集成,请在链上提交订单(例如通过 open / openFor 流程),并使用订单服务器进行报价发现 + 状态跟踪。 仅当您的集成需要链下订单提交时(例如无 gas 托管或签名的 Compact 领取),才使用 POST /orders/submit。如果您使用了来自订单服务器的报价,请包含 quoteId 以获得优先处理。
响应包含完整的订单、关联的报价(如有)以及一个带有 orderIdentifier 和 onChainOrderId 的 meta 对象用于跟踪。
这是一个参考模板。CatalystCompactOrder 提交需要 sponsor 签名或 Compact 注册的交易哈希。在主网上线之前,请始终在 order-dev.li.fi 上进行验证。

链上 vs 链下订单

订单服务器是一个便利层,而非链上订单的必需项。所有链上意图都可以在不使用它的情况下提交。一些解算器会独立检测链上意图。

交付时调用

每个 MandateOutput 都支持一个 call 字段,用于在代币交付后在目标链上执行的 calldata。接收方先收到代币,然后输出 settler 在 recipient 合约上调用 outputFilled(bytes32 token, uint256 amount, bytes executionData)。 在使用交付时调用时:
  • 对于每个单独的输出,代币在调用执行之前交付
  • 如果调用失败,则整个意图无法被填充
  • recipient 必须是实现了 outputFilled 的合约,而非 EOA
  • 对于多链输出,只有第一个输出应包含 calldata
对于任意合约调用,请使用批处理合约或 Single-Call Architecture (SCA) 包装器,因为调用被包装在 outputFilled 中。如果您需要 SCA 实现,请联系 LI.FI。

意图验证

在提交之前,请根据以下规则验证您的订单。

安全性

  1. 确保 oracle 网络相对于意图价值是安全的
  2. 所有 oracle(输入和输出)都应属于同一个网络
  3. 多输出订单可能容易受到 DoS 攻击,即仅填充第一个输出。请将第一个输出设为最有价值的。
  4. 来自输出 settler 的调用不能用于认证,因为任何人都可以填充输出
  5. 将 user 设置为预期的退款接收方,而非意图发起方或中继地址。
确保退款接收方能够正确接收和处理资金。使用无法接受代币的地址(例如没有 receive 函数的合约,或错误的链地址)将导致资金永久损失。

正确性

  1. 使用已知的、可靠的代币、结算合约和 oracle
  2. 使用尽可能少的代币。低价值或不知名的代币会降低填充的可能性。
  3. 在 fillDeadline 和 expires 之间留出足够的时间以适应消息传递延迟
  4. 确保 nonce 是唯一的。托管要求用户唯一性,而 The Compact 要求 allocator 唯一性。
  5. 对于 The Compact,确保所有输入共享同一个 allocator,且资源锁的过期时间在意图过期时间之后

后续步骤

跟踪订单状态

监控订单进度并处理终态

请求报价

在构造订单之前获取解算器定价

输入结算

托管和 Compact 注册详情

Oracle 系统

Oracle 网络和验证