Skip to main content
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

const MARKET_STATUS_FLAG_PAUSED: u8 = 1 << 0;
When the paused bit is set, user deposit and withdraw instructions are blocked.

ExponentTranchingMarket

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

pub enum TranchingMarketState {
    Uninitialized,
    Active,
    FixedTermRecovery,
}
StateDescription
UninitializedMarket has not completed initialization
ActiveNormal user deposits and withdrawals are evaluated
FixedTermRecoveryRecovery window after a covered loss. Senior withdrawals are blocked

TranchingMarketFinancials

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,
}
FieldDescriptionRaw dimension
sr_raw_net_assetSenior raw NAV from Senior-owned SYNumber NAV derived from raw SY units
jr_raw_net_assetJunior raw NAV from Junior-owned SYNumber NAV derived from raw SY units
sr_effective_net_assetSenior NAV after waterfall accountingNumber NAV
jr_effective_net_assetJunior NAV after waterfall accountingNumber NAV
sr_impermanent_lossSenior loss balance waiting for recovery or realizationNumber NAV
jr_impermanent_lossJunior loss balance waiting for recovery or realizationNumber NAV
utilizationCurrent utilization ratioNumber ratio
current_junior_return_shareLast calculated Junior return shareNumber ratio
tw_junior_return_share_accruedTime-weighted Junior return share accumulatorNumber ratio multiplied by seconds
last_sync_tsLast market sync timestampUnix timestamp seconds
last_distribution_tsLast gain distribution timestampUnix timestamp seconds
fixed_term_end_tsRecovery window end timestampUnix timestamp seconds

TrancheSupplyState

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

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

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,
}
FieldDescriptionRaw dimension
min_coverageMinimum Junior protection requirementNumber ratio
betaJunior-side exposure weight in utilization mathNumber ratio
liquidation_utilizationUtilization threshold that exits recovery and realizes lossNumber ratio
fixed_term_duration_secRecovery period duration. 0 disables fixed-term recoverySeconds
min_deposit_amountMinimum user deposit amountRaw SY units
sr_self_liquidation_bonusBonus used for Senior self-liquidation accountingNumber ratio
sr_net_asset_dust_toleranceSenior NAV dust thresholdNumber NAV
jr_net_asset_dust_toleranceJunior NAV dust thresholdNumber NAV

TranchingProtocolFeeConfig

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,
}
FieldDescriptionRaw dimension
protocol_fee_recipientRecipient that can receive accrued LP fee sharesPubkey
sr_protocol_feeFee charged on Senior-side yield retained by SeniorNumber ratio
jr_protocol_feeFee charged on Junior-side raw appreciation retained by JuniorNumber ratio
junior_return_protocol_feeFee charged on Senior-side residual return allocated to JuniorNumber ratio
senior_deposit_protocol_feeFee charged on Senior LP shares minted during depositNumber ratio
junior_deposit_protocol_feeFee charged on Junior LP shares minted during depositNumber ratio
senior_withdraw_protocol_feeFee charged on Senior LP shares burned during withdrawalNumber ratio
junior_withdraw_protocol_feeFee charged on Junior LP shares burned during withdrawalNumber ratio
Protocol fees accrue as pending raw LP shares and are minted through mintProtocolFeeShares.

TranchingMarketRoles

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.