> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# svm venue: invariant

> 19 exports of the invariant venue integration in @eco-incorp/sauce/svm, including INVARIANT_PROGRAM_ID, POOL_ACCOUNT_SIZE, POOL_DISCRIMINATOR, TICK_DISCRIMINATOR, TICK_ACCOUNT_SIZE, TICKMAP_ACCOUNT_SIZE.

Solana venue integration `invariant` under `svm/venues/invariant`.

<Note>
  Generated from the type declarations shipped in `@eco-incorp/sauce` 0.99.4. Each entry shows the package authors' JSDoc and declaration for this SDK version. For runtime compatibility and deployed addresses, see [architecture and deployments](/programmable-transactions/sauce/architecture-and-deployments).
</Note>

### `INVARIANT_PROGRAM_ID`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
INVARIANT_PROGRAM_ID: Address<"HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt">
```

### `POOL_ACCOUNT_SIZE`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
POOL_ACCOUNT_SIZE = 400
```

### `POOL_DISCRIMINATOR`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

sha256('account:Pool')\[0..8].

```typescript theme={null}
POOL_DISCRIMINATOR: number[]
```

### `TICK_DISCRIMINATOR`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

sha256('account:Tick')\[0..8].

```typescript theme={null}
TICK_DISCRIMINATOR: number[]
```

### `TICK_ACCOUNT_SIZE`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
TICK_ACCOUNT_SIZE = 150
```

### `TICKMAP_ACCOUNT_SIZE`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
TICKMAP_ACCOUNT_SIZE: number
```

### `INVARIANT_MAX_BOUNDARIES`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

Shipped boundaries per direction - one ACCOUNT per boundary (no shared tick-array amortization).

```typescript theme={null}
INVARIANT_MAX_BOUNDARIES = 3
```

### `invariant`

*Variable* · `sdk/dist/svm/venues/invariant/index.d.ts`

Family facade for the recipe orchestrator (ladder-only, like orca-whirlpool/raydium-clmm).

```typescript theme={null}
invariant: {
    slug: string;
    programId: Address<"HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt">;
    tokenProgram: Address<"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA">;
    fetchPoolConfig: typeof fetchInvariantPoolConfig;
}
```

### `invariantSqrtPriceAtTick`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export declare function invariantSqrtPriceAtTick(tickIndex: number): bigint;
```

### `invariantDeltaX`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export declare function invariantDeltaX(sqrtA: bigint, sqrtB: bigint, liquidity: bigint, up: boolean): bigint;
```

### `invariantDeltaY`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export declare function invariantDeltaY(sqrtA: bigint, sqrtB: bigint, liquidity: bigint, up: boolean): bigint;
```

### `invariantNextSqrtXUp`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

get\_next\_sqrt\_price\_x\_up(price, liquidity, amount, add=true) - the ONLY branch a by-amount-in ladder ever needs.

```typescript theme={null}
export declare function invariantNextSqrtXUp(price: bigint, liquidity: bigint, amount: bigint): bigint;
```

### `invariantNextSqrtYDown`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

get\_next\_sqrt\_price\_y\_down(price, liquidity, amount, add=true).

```typescript theme={null}
export declare function invariantNextSqrtYDown(price: bigint, liquidity: bigint, amount: bigint): bigint;
```

### `invariantComputeSwapStepIn`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

compute\_swap\_step (math.rs), BY-AMOUNT-IN ONLY (the merge ladder never
quotes by-amount-out). `xToY` is derived exactly like the Rust source
(`current_price_sqrt >= target_price_sqrt`).

```typescript theme={null}
export declare function invariantComputeSwapStepIn(currentSqrt: bigint, targetSqrt: bigint, liquidity: bigint, amount: bigint, fee: bigint): InvariantSwapStep;
```

### `fetchInvariantPoolConfig`

*Function* · `sdk/dist/svm/venues/invariant/index.d.ts`

Fetch + decode one Invariant Pool and freeze both directions' boundary windows. Read-only against the loader.

```typescript theme={null}
export declare function fetchInvariantPoolConfig(load: AccountLoader, pool: Address): Promise<InvariantPoolConfig>;
```

### `InvariantSwapStep`

*Interface* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export interface InvariantSwapStep {
    nextSqrt: bigint;
    amountIn: bigint;
    amountOut: bigint;
    feeAmount: bigint;
}
```

### `InvariantBoundary`

*Interface* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export interface InvariantBoundary {
    tick: number;
    sqrtPrice: bigint;
    address: Address;
}
```

### `InvariantWindow`

*Interface* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export interface InvariantWindow {
    boundaries: InvariantBoundary[];
}
```

### `InvariantPoolConfig`

*Interface* · `sdk/dist/svm/venues/invariant/index.d.ts`

```typescript theme={null}
export interface InvariantPoolConfig extends PoolConfig {
    venue: typeof SLUG;
    direction: "xToY" | "yToX";
    tokenXMint: Address;
    tokenYMint: Address;
    tokenXReserve: Address;
    tokenYReserve: Address;
    tickmap: Address;
    windows: {
        xToY: InvariantWindow;
        yToX: InvariantWindow;
    };
}
```
