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

# Trading fees and protocol share

> Fee tiers, LP fee growth, and protocol fee collection.

Each pool has one fee tier stored in `PoolState.fee`. The swap step interprets that value in parts per million. Common configured values are 100, 500, 3000, and 10000, corresponding to 0.01 percent, 0.05 percent, 0.30 percent, and 1.00 percent.

These defaults come from the bootstrap scripts. The contract allows the administrator to register other `u16` fee values and bind them to approved tick spacings.

## Fee split

For each swap step, `compute_swap_step` returns a fee amount. The program calculates:

```text theme={"languages":{"custom":["/languages/leo.tmLanguage.json"]}}
protocol_fee = fee * fee_protocol / 16
lp_fee = fee - protocol_fee
```

`fee_protocol` may be zero or an integer from 4 through 10. A nonzero setting therefore assigns 4/16 through 10/16 of the trading fee to the protocol.

## LP accounting

The LP portion is divided by active liquidity and added to the cumulative fee-growth value for the input token. That cumulative value uses 128 fractional bits in a two-limb wrapping structure.

When price crosses an initialized tick, both token fee-growth-outside values are flipped against their corresponding global values. A position's inside growth is derived from global growth and its two boundary values.

Fees become an amount owed when a position settles during increase, decrease, collect, or freeze. The `fee_owed` helper multiplies the growth delta by position liquidity and shifts out 128 fractional bits.

## Protocol accounting

The protocol share accumulates in `Slot.protocol_fees0` or `Slot.protocol_fees1`, depending on swap direction. These values use native token base units.

`collect_protocol` accepts requested native base-unit amounts, verifies that the pool has enough recorded protocol fees, executes public transfers, and subtracts the amounts from the slot.

Only the administrator may collect protocol fees. The recipient can be a separate address, but the contract does not enforce a treasury policy or revenue split.

## Rounding

Integer arithmetic leaves a fraction below one Q128 unit when fee growth is computed. The implementation discards that sub-Q128 remainder for the step. It is not carried into a later step, which prevents dust earned under one active-liquidity set from being credited after the set changes.

Read [Q128 fee growth](../math/q128-fee-growth) and [Fee entitlements](../liquidity/fee-entitlements) before implementing independent fee reconciliation.
