Limit Order (First come, First serve)
LI.FI intent limit orders are simple: single price, first execution. That means the amount set inOutputDescription is final and will be what you are paying. The output can be filled once per orderId (the output is hashed and stored in a map with orderId).
The winner of an order is the first solver to call fill(...) and set their identifier for the output.
You can identify Limit Orders by output.context of either 0x or the order type 0x00.
Exclusive Limit Order
A LI.FI intent exclusive limit orders are very similar to a LI.FI intent limit orders. Single price, first execution. Except it has a cutoff timestamp embedded that only allows a specific solver to fill the intent before. This type of intent is often used in conjunction with the LI.FI order Server Reputation to eliminate wasted gas on failed transactions. You can identify Exclusive Limit Orders by their order type0xe0. The context is encoded as: bytes1(0xe0) | bytes32(exclusiveFor) | bytes4(startTime), with startTime being the time when anyone can fill the order.
For intent issuers, it is recommended to set the exclusivity period to between 30 seconds to 1 minute but it may be shorter or longer.
Dutch Auction
LI.FI intent Dutch auctions are capped dutch auctions. They are fixed in price before and after certain timestamps. The slope, startTime, and stopTime are encoded inoutput.context.
The winner of an order is the first solver to call fill(...) and set their identifier as the output. Notice that the win selection is equivalent to the limit order, except the earlier the fill is called, the more the solver pays.
You can identify Dutch Auctions by the order type: 0x01. The context is encoded as: bytes1(0x01) | uint32(startTime) | uint32(stopTime) | uint256(slope), with the final amount being computed as:
amount + (stopTime - startTime) * slope.
You can find the on-chain implementation here.
Exclusive Dutch Auction
LI.FI intent exclusive dutch auctions are very similar to LI.FI intent dutch auctions. However, before the auction slope begins the order is exclusive to a specific solver like Exclusive Limit Order. You can identify Exclusive Dutch Auctions by their order type0xe1. The context is encoded as bytes1(0x01) | bytes32(exclusiveFor) | uint32(startTime) | uint32(stopTime) | uint256(slope).
It is important to clarify that the exclusivity window is before the dutch auction slope begins, thus if the intent is filled by the exclusive solver they will be paying the maximum price for the auction.
