# Pricing

Oyster AMM unifies **both concentrated liquidity and limit orders in a single model.** In smart contract terms, Range and Order can provide liquidity at each price point. For Range covering the same price point, their liquidity, or square root of k, is added for AMM curve-related calculation. For Order at the same price point, their order sizes are added together to cater to the taker’s trade size. In addition, Order is always consumed before liquidity from Range is consumed.

The collection of concentrated liquidity covering a price point and all open limit orders on the same price point is described in a struct called **Pearl** and is stored in the smart contract indexed by price. Oyster AMM can be viewed as the collection of Pearl along with the AMM price curve.

In fact, Pearl serves as the pool for limit orders from makers, which is also the key to the feasibility of the asynchronous design of limit orders in Oyster AMM. In this way, logic on the takers’ side is simplified greatly, where takers take as much as they want and nothing more. With Pearl's fungible approach, the gas cost of a trade is directly proportional to the price impact, i.e., the number of ticks crossed.

For a trade of size S0, the process of trading, or consuming unified liquidity, follows the steps below.

1. Check if there are unfilled limit orders in the Pearl of current price P0.
   1. If not, go to step 2 with S1 = S0.
   2. If so, fill the limit orders as much as possible.
      1. If S0 is fully filled, terminate. (Note that the current price does not change in this case.)
      2. If not, continue to step 2 with the remaining size S1.
2. Find the Pearl at the next price, P1.
   1. Trade for size S1 on the AMM curve between Pearl at P0 and P1.
      1. If S1 is fully filled, terminate. (Note that the current price does change in this case.)
      2. If not, update the current price as P1 and go to step 1 with the remaining size S2.

<div align="right"><figure><img src="/files/8RoKs5BSq0F3Z0A0Mksn" alt="" width="563"><figcaption></figcaption></figure></div>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.synfutures.com/oyster-perp/pricing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
