# clmm_next_sqrt_price_from_input_x96

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

Canonical HTML: <https://determica.com/docs/functions/clmm_next_sqrt_price_from_input_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 input. It is deterministic and propagates NULL.

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

```sql
clmm_next_sqrt_price_from_input_x96(UINT256, UINT256, UINT256, BOOLEAN)
```

Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact input. 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_in` (UINT256; required; positional) — UINT256 raw units of currency0 when zero_for_one, else currency1.
- `zero_for_one` (BOOLEAN; required; positional) — BOOLEAN true swaps currency0 in for currency1 out and lowers price; false swaps currency1 in for currency0 out and raises price.

### Returns

Next exact-input price

UINT256 next Q64.96 price, using SqrtPriceMath input rounding so the pool is not overpaid. Zero amount returns the current price. NULL input returns NULL. Invalid price, zero or above-uint128 liquidity, price under/overflow, or an out-of-range result errors.

- `sqrt_price_next_x96` (UINT256)

Next exact-input price. UINT256 next Q64.96 price, using SqrtPriceMath input rounding so the pool is not overpaid. Zero amount returns the current price. NULL input returns NULL. Invalid price, zero or above-uint128 liquidity, price under/overflow, or an out-of-range result errors.

### Examples

_Local SQL · Local_

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

## 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
