Skip to main content
Exponent has three core systems — Core, CLMM, and Orderbook. Each serves a different purpose. Pick the one that matches what you’re building.

What are you building?

I want to…Use
Split yield-bearing assets into PT + YT, lock a fixed rate, or get leveraged yield exposureCoreQuickstart →
Swap PT/YT instantly at market price, or provide concentrated liquidity for feesCLMMQuickstart →
Place limit orders at a specific implied APY, with passive fills and YT yield accrualOrderbookQuickstart →
Deposit into a managed vault, earn yield through diversified strategies, and withdraw through a queueVault SDKQuickstart →

Comparison

CoreCLMMOrderbook
What it doesSplit yield-bearing assets into PT + YTAMM for swapping PT and YTLimit order book for PT and YT
ExecutionInstantInstantInstant (market) or queued (limit)
PricingSY exchange rateAMM curve (APY-based ticks)Implied APY
Price impactNoneSlippage on large tradesNone (limit orders)
FeesProtocol fee on accrued yieldDynamic swap fee (decays toward maturity)Maker/taker fees (decay toward maturity)
Best forCreating PT/YT positionsFast swaps, providing liquidityActive strategies, precise APY targeting
SDK classVault, YtPositionMarketThreeOrderbook

Strategy Vaults

Strategy Vaults are a higher-level abstraction: rather than interacting with yield stripping, CLMM, or orderbook directly, depositors provide capital to a managed vault that deploys it into approved strategies (Kamino Lending, Marginfi, etc.) through policy-gated execution. Vaults issue LP tokens representing proportional ownership and use a queued withdrawal process. See the Vault SDK for details.

Quick SDK Examples

Core — strip base assets into PT + YT

const vault = await Vault.load(env, connection, vaultAddress)

const ix = await vault.ixStripFromBase({
  owner: wallet.publicKey,
  amountBase: 1_000_000n,
})

CLMM — buy PT with base assets

const market = await MarketThree.load(env, connection, marketAddress)

const { ixs, setupIxs } = await market.ixWrapperBuyPt({
  owner: wallet.publicKey,
  minPtOut: 950_000_000n,
  baseIn: 1_000_000_000n,
})

Orderbook — post a limit order at a target APY

const orderbook = await Orderbook.load(env, connection, orderbookAddress)

const { ix, setupIxs } = await orderbook.ixWrapperPostOffer({
  trader: wallet.publicKey,
  price: 0.12,              // 12% implied APY
  amount: 1_000_000_000n,
  offerType: OfferType.BuyYt,
  offerOption: offerOptions("FillOrKill", [false]),
  virtualOffer: false,
  expirySeconds: 86_400 * 7,
  mintSy: syMintAddress,
})

Get Started

Need to combine systems (e.g. strip + sell PT on CLMM for a fixed rate)? See the Trading Guide.