求解意图
LI.FI Intents 将订单发现、填充、证明和结算相互分离。在投入库存之前,请验证每一笔订单以及每个组件地址。总体流程如下:- 用户在链上开启一笔托管订单,或签署一笔 EVM Compact 订单以提交给 LI.FI 订单服务器。
- 订单服务器对订单进行验证并广播。Compact 订单还需要分配者的共同签名。
-
求解器将订单的输出提交到输出结算合约,从而启动预言机系统。
输出结算 以
output.settler表示。 -
证明通过验证层被送达输入链。
预言机系统 在订单结构中以
inputOracle和output.oracle表示。 - 求解器将订单提交到输入结算合约,验证交付并解锁相关的输入代币。
订单类型
对于 EVM Compact 订单,你会遇到三种形式的订单,从最简略到最详尽排列:BatchClaim:一个已签名的意图,允许领取输入资产。StandardOrder:一个链上定义,包含足以传达意图的信息。- 订单服务器响应:一个经过补全的订单——即
StandardOrder加上求解器所需的链下字段,例如InputSolver和signatures。
BatchClaim 交互。链上交互使用的是 StandardOrder,而订单服务器会为其补全一次填充所需的链下字段。
Solana 同样使用
StandardOrder,但其 Borsh 结构只携带一个输入,并使用 Solana 原生类型。结构和执行上的差异请参阅 Solana vs EVM。收集订单
LI.FI Intents 提供两种接收订单的方式:- 推荐:通过 WebSocket 连接到订单服务器。
- 备选:通过存款接口监控链上存款。
StandardOrder 表示如下:
uint256[2][] inputs === [uint256 tokenId, uint256 amount][],MandateOutput 为:
填充意图
要填充一笔意图,你必须执行每一个MandateOutput。每一个都完全独立地描述了一次交付。
output.settler连同其 context 定义了这次交付——请在该结算器的接口上调用它。目前只实现了一个 OutputSettler:OutputSettlerSimple.sol,它有两个用于填充的接口:
fill(SOL 则为 native_fill)指令来填充——参见 Solana 程序参考。对于多输出意图,请确保所有输出都能被填充,最好是原子性地完成。
输出结算的架构和接口记录在结算中。
验证填充
填充意图后,必须将填充证明发送到输入链。inputOracle 和 output.oracle 必须标识同一条预言机路线上受支持的两端,但它们并不总是同一个地址。在 Solana 上,其中一个字段可能保存的是程序 id,而另一个保存的是状态 PDA。证明的验证方式高度依赖于具体的预言机;更多信息请参阅预言机系统架构。
结算订单
最后,意图必须在其到期之前完成结算。结算方式是在指定的 InputSettler 上调用finalise[withSignature]。调用者必须是填充时设定的指定求解器。

