Skip to main content

Vault Depositors and LP Tokens

A Strategy Vault is a shared pool of capital managed by a manager. Depositors interact with Strategy Vaults by:
  1. Depositing a supported token → receive Vault LP tokens representing their share
  2. Queuing a withdrawal → lock LP tokens and request redemption
  3. Filling the withdrawal (manager) → LP tokens are burned and underlying tokens are allocated
  4. Executing the withdrawal → receive underlying tokens
Strategy Vault LP tokens are fungible SPL tokens. Their value appreciates as the vault earns yield and grows AUM.

Token Entries

Each Strategy Vault can have one or more token entries — a configuration object for each accepted deposit token. A token entry specifies:
  • mint — the token’s SPL mint address
  • interfaceType — the protocol this token is deployed into (exponent, kamino, titan, etc.)
  • priceId — how this token’s price is derived (simple oracle or multiply)
  • tokenEscrow / tokenSquadsAccount — the onchain escrow accounts

Vault Policies

Policies are Squads-level constraints that govern what actions the vault’s smart account can take. Before any strategy interaction, a matching policy must exist onchain. See Policy Builders for setup details.

Protocol Integrations

Exponent Strategy Vault Policies support several protocol interactions, all executed through the createVaultSyncTransaction builder:
Strip base tokens into PT + YT and merge them back through the Exponent Core program.
import { coreAction } from "@exponent-labs/exponent-sdk";

const strip = coreAction.strip({
  vault: new PublicKey("..."),
  amountBase: 1_000_000_000n,
});
See Core Instructions for full usage.

Withdrawal Queue

Withdrawals from the vault are not instant. The process is as follow:
  1. Queue — depositor calls ixQueueWithdrawal({ depositor, lpAmount }). LP tokens are moved to escrow and a withdrawal account is created. The method returns { ix, withdrawalKeypair } — save the keypair’s public key for later.
  2. Fill — the vault manager calls fillWithdrawal to associate underlying tokens with the withdrawal request. LP tokens are burned at this step.
  3. Execute — depositor calls ixExecuteWithdrawal({ owner, withdrawalAccount, tokenAccountPairs }) to receive their underlying tokens.
Save the withdrawalKeypair.publicKey returned from step 1 — you’ll need it to execute the withdrawal. If lost, you can recover it by querying withdrawal accounts via RPC.

AUM Calculation

The vault tracks total AUM as:
AUM = aum_in_base + aum_in_base_in_positions
  • aum_in_base — tokens currently sitting in vault escrows (not deployed)
  • aum_in_base_in_positions — tokens deployed into strategy positions, valued in base units
Prices are read from the ExponentPrices global account, which aggregates oracle data.