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

# Struct reference

> Public and helper structures declared by the current Shield Swap AMM program.

This page matches `shield_swap.aleo` at source commit `b66d4f2`.

## Market state

### `PoolState`

`token0: field`, `token1: field`, `fee: u16`, `enabled: bool`.

Token identifiers are sorted. The AMM stores and calculates all token amounts in each token program's native base units. The current struct has no decimal scale fields.

### `Slot`

`tick: i32`, `tick_spacing: u32`, `sqrt_price: u256::U256`, `fee_protocol: u8`, `liquidity: u128`, `fee_growth_global0_x_128: u256::U256`, `fee_growth_global1_x_128: u256::U256`, `max_liquidity_per_tick: u128`, `protocol_fees0: u128`, `protocol_fees1: u128`, `next_init_below: i32`, `next_init_above: i32`.

### `Tick`

`pool: field`, `liquidity_net: i128`, `liquidity_gross: u128`, `tick: i32`, `fee_growth_outside0_x_128: u256::U256`, `fee_growth_outside1_x_128: u256::U256`, `prev: i32`, `next: i32`.

### `Position`

`token_id: field`, `pool: field`, `tick_lower: i32`, `tick_upper: i32`, `liquidity: u128`, `fee_growth_inside0_last_x_128: u256::U256`, `fee_growth_inside1_last_x_128: u256::U256`, `tokens_owed0: u128`, `tokens_owed1: u128`.

## Keys and identifiers

### `PoolKey`

`token0: field`, `token1: field`, `fee: u16`.

### `PairKey`

`token0: field`, `token1: field`. It omits the fee so one pair pause spans all fee tiers.

### `TickKey`

`pool: field`, `tick: i32`.

### `SwapKey`

`pool: field`, `zero_for_one: bool`, `amount_in: u128`, `sqrt_price_limit: u256::U256`, `recipient: address`, `nonce: u64`, `caller: address`.

### `TokenIDPreimage`

`request: MintPositionRequest`, `recipient: address`, `nonce: field`.

### `ChecksumEdition`

`checksum: [u8; 32]`, `edition: u16`. The upgrade constructor hashes this value into a multisig operation ID.

### `MerkleProof`

`siblings: [field; 16]`, `leaf_index: u32`. The AMM accepts two proofs for each non-inclusion check and permits a maximum effective tree depth of 15.

## Requests and outputs

### `MintPositionRequest`

`pool: field`, `tick_lower: i32`, `tick_upper: i32`, `amount0_desired: u128`, `amount1_desired: u128`, `amount0_min: u128`, `amount1_min: u128`, `tick_lower_hint: i32`, `tick_upper_hint: i32`.

### `SwapRequest`

`pool: field`, `zero_for_one: bool`, `amount_in: u128`, `amount_out_min: u128`, `sqrt_price_limit: u256::U256`, `recipient: address`, `nonce: u64`, `deadline: u32`.

The deadline is an Aleo block height.

### `SwapHop`

`pool: field`, `zero_for_one: bool`, `sqrt_price_limit: u256::U256`.

### `SwapMultiHopRequest`

`token_in: field`, `token_out: field`, `amount_in: u128`, `amount_out_min: u128`, `recipient: address`, `hop0: SwapHop`, `hop1: SwapHop`, `hop2: SwapHop`, `hop_count: u8`, `nonce: u64`, `deadline: u32`, `caller: address`.

The current finalizer accepts only two or three active hops.

### `SwapOutput`

`recipient: address`, `caller: address`, `token_in: field`, `token_out: field`, `amount_out: u128`, `amount_remaining: u128`.

Single-hop and multi-hop swaps use this same shape. A multi-hop output refunds only unspent original route input. It does not store one refund slot per hop.

## Swap-loop helpers

### `SwapIterCfg`

`z: bool`, `lim: u256::U256`, `fee_pips: u32`, `fee_protocol: u8`, `slot_fg0: u256::U256`, `slot_fg1: u256::U256`.

### `SwapIterState`

`sp: u256::U256`, `rem: u128`, `out: u128`, `fg: u256::U256`, `liq: u128`, `tk: i32`, `crossed: bool`, `pf: u128`, `nb: i32`, `na: i32`.

`u256::U256` contains `hi: u128` and `lo: u128`. Fee growth and square-root prices both use this wide type, but they have different semantic units.
