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

# ExponentTranchingMarket

> Main tranching market account structure and fields

The `ExponentTranchingMarket` account stores market configuration, SY linkage, LP mint addresses, tranche NAV accounting, supply state, risk parameters, protocol fees, roles, and SY CPI account indexes.

## Status Flags

```rust theme={null}
const MARKET_STATUS_FLAG_PAUSED: u8 = 1 << 0;
```

When the paused bit is set, user deposit and withdraw instructions are blocked.

## ExponentTranchingMarket

```rust theme={null}
pub struct ExponentTranchingMarket {
    pub address_lookup_table: Pubkey,
    pub sy_mint: Pubkey,
    pub sy_program: Pubkey,
    pub token_sy_escrow: Pubkey,
    pub mint_lp_senior: Pubkey,
    pub mint_lp_junior: Pubkey,
    pub self_address: Pubkey,
    pub return_model_storage: Pubkey,
    pub signer_bump: [u8; 1],
    pub return_model_storage_bump: [u8; 1],
    pub seed_id: [u8; 8],
    pub status_flags: u8,
    pub market_state: TranchingMarketState,
    pub financials: TranchingMarketFinancials,
    pub tranche_supply_state: TrancheSupplyState,
    pub tranche_asset_state: TrancheAssetState,
    pub risk_config: TranchingRiskConfig,
    pub protocol_fee_config: TranchingProtocolFeeConfig,
    pub reserved_padding: [u8; RETURN_MODEL_RESERVED_PADDING_SIZE],
    pub roles: TranchingMarketRoles,
    pub sy_cpi_accounts: CpiAccounts,
}
```

## TranchingMarketState

```rust theme={null}
pub enum TranchingMarketState {
    Uninitialized,
    Active,
    FixedTermRecovery,
}
```

| State               | Description                                                          |
| ------------------- | -------------------------------------------------------------------- |
| `Uninitialized`     | Market has not completed initialization                              |
| `Active`            | Normal user deposits and withdrawals are evaluated                   |
| `FixedTermRecovery` | Recovery window after a covered loss. Senior withdrawals are blocked |

## TranchingMarketFinancials

```rust theme={null}
pub struct TranchingMarketFinancials {
    pub sr_raw_net_asset: Number,
    pub jr_raw_net_asset: Number,
    pub sr_effective_net_asset: Number,
    pub jr_effective_net_asset: Number,
    pub sr_impermanent_loss: Number,
    pub jr_impermanent_loss: Number,
    pub utilization: Number,
    pub current_junior_return_share: Number,
    pub tw_junior_return_share_accrued: Number,
    pub last_sync_ts: i64,
    pub last_distribution_ts: i64,
    pub fixed_term_end_ts: i64,
}
```

| Field                            | Description                                             | Raw dimension                          |
| -------------------------------- | ------------------------------------------------------- | -------------------------------------- |
| `sr_raw_net_asset`               | Senior raw NAV from Senior-owned SY                     | `Number` NAV derived from raw SY units |
| `jr_raw_net_asset`               | Junior raw NAV from Junior-owned SY                     | `Number` NAV derived from raw SY units |
| `sr_effective_net_asset`         | Senior NAV after waterfall accounting                   | `Number` NAV                           |
| `jr_effective_net_asset`         | Junior NAV after waterfall accounting                   | `Number` NAV                           |
| `sr_impermanent_loss`            | Senior loss balance waiting for recovery or realization | `Number` NAV                           |
| `jr_impermanent_loss`            | Junior loss balance waiting for recovery or realization | `Number` NAV                           |
| `utilization`                    | Current utilization ratio                               | `Number` ratio                         |
| `current_junior_return_share`    | Last calculated Junior return share                     | `Number` ratio                         |
| `tw_junior_return_share_accrued` | Time-weighted Junior return share accumulator           | `Number` ratio multiplied by seconds   |
| `last_sync_ts`                   | Last market sync timestamp                              | Unix timestamp seconds                 |
| `last_distribution_ts`           | Last gain distribution timestamp                        | Unix timestamp seconds                 |
| `fixed_term_end_ts`              | Recovery window end timestamp                           | Unix timestamp seconds                 |

## TrancheSupplyState

```rust theme={null}
pub struct TrancheSupplyState {
    pub total_senior_lp_supply: u64,
    pub total_junior_lp_supply: u64,
    pub max_senior_lp_supply: u64,
    pub max_junior_lp_supply: u64,
    pub pending_senior_protocol_fee_lp_shares: u64,
    pub pending_junior_protocol_fee_lp_shares: u64,
    pub pending_senior_deposit_protocol_fee_lp_shares: u64,
    pub pending_junior_deposit_protocol_fee_lp_shares: u64,
    pub pending_senior_withdraw_protocol_fee_lp_shares: u64,
    pub pending_junior_withdraw_protocol_fee_lp_shares: u64,
}
```

All supply and pending-fee-share fields are `u64` values in raw LP mint units. `max_*_lp_supply` set to `0` means uncapped for that side unless another check, such as coverage, constrains deposits.

## TrancheAssetState

```rust theme={null}
pub struct TrancheAssetState {
    pub senior_sy_amount: u64,
    pub junior_sy_amount: u64,
}
```

These fields track SY amounts assigned to each tranche in raw SY token units.

## TranchingRiskConfig

```rust theme={null}
pub struct TranchingRiskConfig {
    pub min_coverage: Number,
    pub beta: Number,
    pub liquidation_utilization: Number,
    pub fixed_term_duration_sec: u32,
    pub min_deposit_amount: u64,
    pub sr_self_liquidation_bonus: Number,
    pub sr_net_asset_dust_tolerance: Number,
    pub jr_net_asset_dust_tolerance: Number,
}
```

| Field                         | Description                                                 | Raw dimension  |
| ----------------------------- | ----------------------------------------------------------- | -------------- |
| `min_coverage`                | Minimum Junior protection requirement                       | `Number` ratio |
| `beta`                        | Junior-side exposure weight in utilization math             | `Number` ratio |
| `liquidation_utilization`     | Utilization threshold that exits recovery and realizes loss | `Number` ratio |
| `fixed_term_duration_sec`     | Recovery period duration. `0` disables fixed-term recovery  | Seconds        |
| `min_deposit_amount`          | Minimum user deposit amount                                 | Raw SY units   |
| `sr_self_liquidation_bonus`   | Bonus used for Senior self-liquidation accounting           | `Number` ratio |
| `sr_net_asset_dust_tolerance` | Senior NAV dust threshold                                   | `Number` NAV   |
| `jr_net_asset_dust_tolerance` | Junior NAV dust threshold                                   | `Number` NAV   |

## TranchingProtocolFeeConfig

```rust theme={null}
pub struct TranchingProtocolFeeConfig {
    pub protocol_fee_recipient: Pubkey,
    pub sr_protocol_fee: Number,
    pub jr_protocol_fee: Number,
    pub junior_return_protocol_fee: Number,
    pub senior_deposit_protocol_fee: Number,
    pub junior_deposit_protocol_fee: Number,
    pub senior_withdraw_protocol_fee: Number,
    pub junior_withdraw_protocol_fee: Number,
}
```

| Field                          | Description                                                    | Raw dimension  |
| ------------------------------ | -------------------------------------------------------------- | -------------- |
| `protocol_fee_recipient`       | Recipient that can receive accrued LP fee shares               | `Pubkey`       |
| `sr_protocol_fee`              | Fee charged on Senior-side yield retained by Senior            | `Number` ratio |
| `jr_protocol_fee`              | Fee charged on Junior-side raw appreciation retained by Junior | `Number` ratio |
| `junior_return_protocol_fee`   | Fee charged on Senior-side residual return allocated to Junior | `Number` ratio |
| `senior_deposit_protocol_fee`  | Fee charged on Senior LP shares minted during deposit          | `Number` ratio |
| `junior_deposit_protocol_fee`  | Fee charged on Junior LP shares minted during deposit          | `Number` ratio |
| `senior_withdraw_protocol_fee` | Fee charged on Senior LP shares burned during withdrawal       | `Number` ratio |
| `junior_withdraw_protocol_fee` | Fee charged on Junior LP shares burned during withdrawal       | `Number` ratio |

Protocol fees accrue as pending raw LP shares and are minted through `mintProtocolFeeShares`.

## TranchingMarketRoles

```rust theme={null}
pub struct TranchingMarketRoles {
    pub admin: Vec<Pubkey>,
    pub sentinel: Vec<Pubkey>,
}
```

Admins can modify market parameters. Sentinels can pause or unpause the market.

## Number encoding

`Number` fields use Exponent's fixed-point representation. One unit is `1_000_000_000_000`.

Use `tranchingNumberToRaw`, `tranchingFromNumber`, or `tranchingToNumber` from the SDK to convert these values.

`Number` conversion does not apply token mint decimals. NAV values are derived from raw SY units, so UI display must also divide by the relevant token decimals.
