# Uniswap v3 Core
- URL: <https://uniswap.org/whitepaper-v3.pdf>
- Description:
- Type: #link
- Highlights
- a position only needs to hold enough of asset X to cover price movement to its upper bound, because upwards price movement1 corresponds to depletion of the X reserves. Similarly, it only needs to hold enough of asset Y to cover price movement to its lower bound
-
- Highlights
- a position only needs to hold enough of asset X to cover price movement to its upper bound, because upwards price movement1 corresponds to depletion of the X reserves. Similarly, it only needs to hold enough of asset Y to cover price movement to its lower bound
- In Uniswap v2, each pool contract tracks the pool’s current reserves, 𝑥 and 𝑦. In Uniswap v3, the contract could be thought of as having virtual reserves—values for 𝑥 and 𝑦 that allow you to describe the contract’s behavior (between two adjacent ticks) as if it followed the constant product formula. Instead of tracking those virtual reserves, however, the pool contract tracks two different values: liquidity (𝐿) and sqrtPrice ( √ 𝑃). These could be computed from the virtual reserves with the following formulas: 𝐿 = √ 𝑥𝑦 (6.3) √ 𝑃 = r 𝑦 𝑥 (6.4) Conversely, these values could be used to compute the virtual reserves: 𝑥 = 𝐿 √ 𝑃 (6.5) 𝑦 = 𝐿 · √ 𝑃 (6.6)