# clmm_next_sqrt_price_from_output_x96

Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact output. It is deterministic and propagates NULL.

Canonical HTML: <https://determica.com/docs/functions/clmm_next_sqrt_price_from_output_x96>

- Kind: scalar function
- Category: [Fixed-point and AMM math](/docs/category/fixed-point-and-amm-math.md)
- Tags: Clmm Math, Deterministic, Offline, Types

Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact output. It is deterministic and propagates NULL.

## Overload 1: clmm_next_sqrt_price_from_output_x96(UINT256, UINT256, UINT256, BOOLEAN)

```sql
clmm_next_sqrt_price_from_output_x96(UINT256, UINT256, UINT256, BOOLEAN)
```

Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact output. It is deterministic and propagates NULL.

- Kind: scalar
- Execution context: Offline
- Behavior: Transform
- Execution modes: Offline
- Input shape: Scalar Arguments
- Planning contract: Runtime
- Cardinality: One Per Input
- Determinism: Deterministic
- Return shape: Scalar
- Schema stability: Fixed
- Stability: Stable
- Side effects: None documented

### Inputs

- `sqrt_price_x96` (UINT256; required; positional) — UINT256 sqrt(currency1/currency0) * 2^96 within the inclusive TickMath bounds.
- `liquidity` (UINT256; required; positional) — UINT256 SQL value restricted to [1, 2^128 - 1].
- `amount_out` (UINT256; required; positional) — UINT256 raw units of currency1 when zero_for_one, else currency0.
- `zero_for_one` (BOOLEAN; required; positional) — BOOLEAN true pays currency0 for currency1 and lowers price; false pays currency1 for currency0 and raises price.

### Returns

Next exact-output price

UINT256 next Q64.96 price, using SqrtPriceMath output rounding so at least the requested output is covered. Zero amount returns the current price. NULL input returns NULL. Invalid price, zero or above-uint128 liquidity, insufficient virtual reserves, price under/overflow, or an out-of-range result errors.

- `sqrt_price_next_x96` (UINT256)

Next exact-output price. UINT256 next Q64.96 price, using SqrtPriceMath output rounding so at least the requested output is covered. Zero amount returns the current price. NULL input returns NULL. Invalid price, zero or above-uint128 liquidity, insufficient virtual reserves, price under/overflow, or an out-of-range result errors.

### Examples

_Local SQL · Local_

```sql
SELECT clmm_next_sqrt_price_from_output_x96(79228162514264337593543950336::UINT256, 1000000000000000000::UINT256, 100000000000000000::UINT256, true)::VARCHAR AS sqrt_price_next_x96;
-- => [{"sqrt_price_next_x96":"71305346262837903834189555302"}]
```

## Guidance

### Uniswap v4-compatible local math boundary

These generic helpers follow Uniswap v4 core TickMath, SqrtPriceMath, SwapMath, and TickBitmap conventions. Q64.96 square-root price means sqrt(currency1 / currency0) * 2^96, using raw token units.

- Use them as deterministic evidence about one hydrated pool state, price range, bitmap word, or swap step.
- They do not fetch state, resolve dynamic fees or hooks, cross ticks and update liquidity, iterate bitmap words, apply slippage policy, select routes, produce calldata, or return a complete executable quote.
- Pin onchain reads before use. The six-argument swap-step fee denominator and the bitmap result diagnostics are Determica extensions, not Uniswap v4 interfaces.

```sql
WITH bounds AS (
  SELECT
    clmm_tick_to_sqrt_price_x96(-60) AS sqrt_price_a_x96,
    clmm_tick_to_sqrt_price_x96(60) AS sqrt_price_b_x96
)
SELECT clmm_amount0_delta_x96(
  sqrt_price_a_x96,
  sqrt_price_b_x96,
  1000000::UINT256,
  false
) AS amount0
FROM bounds;
```

## Related functions

- [clmm_swap_step_x96](/docs/functions/clmm_swap_step_x96.md) — Usually Before
- [clmm_amount0_delta_x96](/docs/functions/clmm_amount0_delta_x96.md) — See Also
- [clmm_amount1_delta_x96](/docs/functions/clmm_amount1_delta_x96.md) — See Also
