split-engine takes any vault share and breaks it into two transferable SPL
tokens:
- PT, Principal Token. Redeems 1:1 for the underlying vault share at maturity.
- YT, Yield Token. Captures all yield accrued between mint and maturity.
PT_supply = YT_supply = escrowed_vault_shares.
Why split?
Fixed income
Buying PT at a discount locks the yield-to-maturity as a fixed APY. You know
exactly what you’ll get back.
Leveraged yield
Buying YT is pure exposure to funding. A small principal buys a claim on all
future yield until maturity.
LP routing
PT/underlying pools (yield-amm) make the market: price PT = discounted future
value of 1 share.
Composable receipts
PT and YT are normal SPL tokens. They can be lent, used as collateral, or
routed through kUSD.
MasterChef-style yield accounting
The engine tracks yield per YT held using the classicreward_per_share pattern:
- The engine auto-claims
pendinginto the user’s account. yt_balanceis updated.reward_debt = yt_balance × reward_per_shareis reset.
Syncing with the vault
reward_per_share is driven by the vault’s share price. Anyone can call
update_rewards (a permissionless crank), which:
- Reads
vault.share_price() - Computes
delta = share_price - last_vault_share_price - Increments
reward_per_share += delta(scaled by supply) - Updates
last_vault_share_price
claim_funding, the crank cadence
matches funding cadence (hourly).
Maturity and redemption
A split-engine market is parameterized by amaturity unix timestamp.
- Before maturity: PT trades on the yield-AMM at a discount to 1:1. Holders
can
claim_yield(if they also hold YT). - At maturity:
redeem_ptbecomes available, PT burns 1:1 for vault shares. - Early exit: Burn matched PT+YT pairs (via
early_exit) to recover vault shares minus a 0.3% protocol fee, any time.
Worked example
A user with 1,000 vault shares enters a 30-day market:Read next
Yield-AMM
The yield-space invariant that prices PT vs underlying.
Fixed-rate intents
Putting the pieces together into one session.
split-engine reference
Instructions, accounts, errors.

