Skip to main content
LI.FI Intents 支持四种订单类型:简单限价订单、荷兰式拍卖、独占限价订单和独占荷兰式拍卖。每个意图输出都编码了一种特定的订单类型。一般来说,所有输出都应为同一种订单类型。 对于包含多个输出的订单,第一个输出的求解器将始终是输入的接收者。在所有输出都被填充之前,输入无法被领取。拍卖 在链上进行,赢家由速度决定。
由于第一个输出的求解器拥有该订单,他们可以控制其余输出何时被填充——对于按时间定价的输出(荷兰式拍卖),他们可以一直等到价格触底再填充。意图签发者应避免在非第一个输出上使用荷兰式订单类型,或为可信的求解器添加独占性。
大多数 LI.FI intents 都是独占限价订单——这也是 LI.FI widget 和大多数其他集成商所签发的类型。

限价订单(先到先得)

LI.FI intent 限价订单很简单:单一价格、先执行。这意味着 MandateOutput 中设置的金额是最终金额,也就是你将要支付的金额。每个 orderId 的输出只能被填充一次(输出会被哈希并与 orderId 一起存储在映射中)。 订单的赢家是第一个调用 fill(...) 并为该输出设置其标识符的求解器。 你可以通过 output.context 为 0x 或订单类型 0x00 来识别限价订单。

独占限价订单

独占限价订单的工作方式与限价订单相同——单一价格、先执行——只有一处不同:其 context 内嵌了一个截止时间戳,在此之前只有一个指定的求解器可以填充该订单。这种类型的意图通常与 LI.FI 订单服务器的信誉机制结合使用,以消除因失败交易而浪费的 gas。 你可以通过订单类型 0xe0 来识别独占限价订单。其 context 编码为:bytes1(0xe0) | bytes32(exclusiveFor) | bytes4(startTime),其中 startTime 是任何人都可以填充该订单的时间。 意图签发者通常应将独占期设置为 30 到 60 秒,不过它可以更短或更长。

荷兰式拍卖

LI.FI intent 荷兰式拍卖是有上限的荷兰式拍卖。它们在特定时间戳之前和之后价格固定。slope、startTime 和 stopTime 编码在 output.context 中。 订单的赢家是第一个调用 fill(...) 并为该输出设置其标识符的求解器。赢家的选择方式与限价订单相同,只是调用 fill 的时间越早,你支付的越多。 你可以通过订单类型 0x01 来识别荷兰式拍卖。其 context 编码为:bytes1(0x01) | uint32(startTime) | uint32(stopTime) | uint256(slope),最终金额计算如下:
拍卖的最大金额为 amount + (stopTime - startTime) * slope。 你可以在此处找到链上实现。

独占荷兰式拍卖

LI.FI intent 独占荷兰式拍卖与 LI.FI intent 荷兰式拍卖非常相似。不过,在拍卖 slope 开始之前,该订单对某个特定求解器是独占的,就像独占限价订单一样。 你可以通过订单类型 0xe1 来识别独占荷兰式拍卖。其 context 编码为 bytes1(0xe1) | bytes32(exclusiveFor) | uint32(startTime) | uint32(stopTime) | uint256(slope)。 独占窗口位于荷兰式拍卖 slope 开始之前,因此如果独占求解器在此窗口内填充,他们将支付拍卖的最高价格。

Solana 编码说明

Solana 的 output_settler_simple 支持相同的四种订单类型,使用相同的类型字节(0x00、0x01、0xe0、0xe1)和相同的载荷布局,所有整数均为大端序。具体的 context 大小列表见 Solana 程序。 需要了解的三个 Solana 错误名称:未知的类型字节会导致 NotImplemented 失败,载荷长度错误会导致 InvalidContextDataLength,在他人的独占窗口内填充则会导致 ExclusiveTo。
slope 和结算金额受 Solana u64 限制。 虽然 slope 编码为 32 字节(与 EVM 的 uint256 字段一致),但 Solana 结算器会将其收窄为 u64:高 24 字节必须为零。计算得出的输出金额也必须能容纳进 u64——SPL 代币金额本身就是 u64。这与 EVM 结算器不同,后者将 slope 视为完整的 uint256,并且一旦超过 stopTime,无论 slope 大小如何都会返回最小金额。如果一笔荷兰式(或独占荷兰式)订单签名时 slope > u64::MAX——或其结算金额超过 u64::MAX——在 Solana 上解析时会被拒绝,即使拍卖已经触底也永远无法被填充。在构造发往 Solana 的跨链荷兰式订单时,请确保 slope 和最大结算金额都落在 u64 范围内。