Skip to main content
要结算 LI.FI Intents 订单,最多可能需要 2 笔交易:
  1. 提交消息验证
  2. 在资源锁上终结订单。

Oracle 验证

有关如何为 oracle 系统转发证明的说明,请参阅验证中的相应章节。

终结订单

一旦观察到 OutputProven 事件,输出即已被验证,此时可以调用 finalise
根据所使用的 settler,您需要调用具有不同 abi 的 finalise 函数。InputSettlerCompact 使用需要签名的 finalise 函数,而 InputSettlerEscrow 则不需要。 对于 InputSettlerCompact,请提交 StandardOrder、以 bytes.concat(sponsor, allocator) 形式附加的签名、填充的时间戳(可从 OutputFilled 事件中读取)以及解算器的标识符。如果存在多个输出,请始终按其在订单中的位置对列表进行索引。然后即可调用 finalise。InputSettlerEscrow 的流程相同,只是不提供签名。
如果一个订单包含多个输出,且两个解算器填充了不同的输出,那么第一个输出的解算器就是规范解算器。

签名终结

解算器必须是 finalise 的调用者,因为他们可以重定向资金并修改可选的回调。对于某些解算器而言,这是不可能的,例如当解算器被设置为一个资金池时。在这种情况下,可以使用 finaliseWithSignature 配合一个 EIP-712 AllowOpen 签名:
这允许任何持有该签名的人使用签名的 destination 和可选的 call 调用 Input Settler 的 finalise 函数。

回调

某些解算器可能会使用回调来配置接收到的资金。finalise[WithSignature]call 参数通过 orderFinalised 将提供的负载转发到 destination
要求 orderFinalised 调用不能失败。 对于同链意图,orderFinalised 在输入被支付给 destination 之后、但在输出证明被验证之前执行。这允许解算器在填充意图之前,在一笔原子交易中收集意图输入。