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

# Technical Concepts

> Exponent Core architecture from stripping vaults, yield positions, yield collection, and emissions

***

This page covers concepts specific to Exponent Core. For general protocol concepts, see:

* [SY, PT, YT](/developers/learn/emitted-tokens) — Token mechanics, exchange rate, pricing
* [Strip, Trade, and Redeem](/developers/guides/strip-and-merge) — The full strip → trade → yield → merge → redeem flow
* [Maturity](/home/learn/post-maturity) — Before/at/after maturity behavior

***

## Vault

An Exponent Core vault is a single yield stripping market with a fixed maturity date. It holds the underlying in the form of SY in escrow, tracks the SY exchange rate, and mints PT and YT when users strip.

Each vault also owns its own `YieldTokenPosition` — this collects yield on unstaked YT (YT that was minted via strip but hasn't been deposited into a user's position). When a user deposits YT into their own position, yield tracking transfers from the vault's position to theirs.

In the SDK, the `Vault` class is the primary entry point for interacting with a market. See the [Vault Account Reference](/developer-core/account-references/vault) for the full onchain struct.

***

## Yield Token Position

YT is a regular SPL token — the program cannot track yield on tokens held in a wallet. To earn yield, you deposit YT into a `YieldTokenPosition`, a per-user, per-vault PDA that escrows your YT and records the current SY exchange rate as your entry point (`last_seen_index`).

When you later stage yield, the program computes the delta between your entry rate and the current rate to determine how much interest you've earned. Earned amounts move into the position's `staged` field, where they can be collected.

See the [YieldTokenPosition Account Reference](/developer-core/account-references/yield-token-position) for the full onchain struct.

***

## Yield Collection

Collecting yield is a multi-step process:

1. **Initialize position** — Create a `YieldTokenPosition` for the user via `ixInitializeYieldPosition`. One-time per vault.
2. **Deposit YT** — Transfer YT into the position via `ixDepositYt`. Yield tracking starts from this point.
3. **Stage yield** — Call `ixStageYield` to compute earned interest and emissions. This updates `last_seen_index` and moves earned amounts into `staged`.
4. **Collect** — Call `ixCollectInterest` (for SY interest) or `ixCollectEmission` (for reward tokens) to withdraw staged amounts.

<Tip>
  `ixStripFromBase` combines steps 1–2 by automatically depositing YT into the yield position after stripping. The position must be initialized first.
</Tip>

See the [Exponent Core SDK Quickstart](/developer-core/core-sdk) for code examples.

***

## Emissions

Emissions are auxiliary reward tokens distributed to YT depositors, separate from SY interest. For example, a vault wrapping a Kamino lending position might distribute KMNO tokens as emissions.

Each vault can have multiple emission tokens. The vault tracks each emission's index via `EmissionInfo`, and each yield position tracks its own per-emission state via `YieldTokenTracker`.

Emissions use a per-share index model:

```text theme={null}
earned = (current_index - last_seen_index) × sy_balance
```

* `current_index` — the vault's `EmissionInfo.final_index`, synced from the SY program's `SyState.emission_indexes`
* `last_seen_index` — the position's `YieldTokenTracker.last_seen_index`, updated when yield is staged
* `sy_balance` — the position's SY-equivalent balance (YT converted to SY at `final_sy_exchange_rate`)

To collect: call `ixStageYield` first (updates both interest and emission trackers), then `ixCollectEmission` with the emission index (0-based, matching the vault's emission list).
