> ## Documentation Index
> Fetch the complete documentation index at: https://docs.li.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# 拍卖

> LI.FI 意图支持链上拍卖和灵活的订单类型，让您竞争填充并优化跨链结算的执行。

LI.FI 意图支持四种订单类型：简单限价订单、荷兰式拍卖、独家限价订单和独家荷兰式拍卖。每个意图输出编码特定的订单类型。通常，所有输出应该是相同的订单类型。

对于具有多个输出的订单，第一个输出的求解器将**始终**是输入的接收者。在填充所有输出之前，无法索取输入。\_拍卖\_在链上进行，获胜者由速度决定。

### 限价订单（先到先得）

LI.FI 意图限价订单很简单：单一价格，首次执行。这意味着 `OutputDescription` 中设置的金额是最终的，将是您支付的金额。每个 `orderId` 可以填充一次输出（输出被哈希并存储在带有 `orderId` 的映射中）。

订单的获胜者是第一个调用 `fill(...)` 并为输出设置其标识符的求解器。

您可以通过 `output.context` 为 `0x` 或订单类型 `0x00` 来识别限价订单。

### 荷兰式拍卖

LI.FI 意图荷兰式拍卖是有上限的荷兰式拍卖。它们在某些时间戳之前和之后的价格是固定的。斜率、startTime 和 stopTime 编码在 `output.context` 中。

订单的获胜者是第一个调用 `fill(...)` 并将其标识符设置为输出的求解器。请注意，获胜选择等同于限价订单，除了填充调用越早，求解器支付的越多。

您可以通过订单类型 `0x01` 识别荷兰式拍卖。上下文编码为：`bytes1(0x01) | uint32(startTime) | uint32(stopTime) | uint256(slope)`，最终金额计算为：

```solidity theme={"system"}
uint32 currentTime = max(block.timestamp, startTime);
if (stopTime < currentTime) return amount;
uint256 timeDiff = stopTime - currentTime;
return amount + slope * timeDiff;
```

拍卖的最大金额是 `amount + (stopTime - startTime) * slope`。

您可以在[此处找到链上实现](https://github.com/openintentsframework/oif-contracts/blob/3e4682f4366a6dd0aa46be59b5922c2231a52d41/src/output/coin/OutputSettlerCoin.sol#L60)。
