The three transactions
TX1, Open the session + deposit
intent-router::create_session(target_rate, duration, amount, market, pool)delta-vault::deposit(amount, open_perp=true, size_amount)intent-router::record_step1, reads vault share delta, asserts delivery.
TX2, Split + attest
split-engine::deposit(vault_shares)intent-router::record_step2, asserts PT + YT minted 1:1.
Client pseudocode
What the router enforces on step 3
The tx reverts unless . If the AMM moved against you between TX2 and TX3,record_step3 reverts
your PT + YT stay in your wallet, and you can retry or unwind manually.
What you’re left with
- PT equal to your original share count, redeemable 1:1 at maturity.
- USDC received from selling YT, the prepaid fixed yield.
- An on-chain receipt (
IntentFulfilledevent) any integrator can verify.
Read next
Fixed-rate intents concept
Why this is split across three txs.
intent-router reference
Account + instruction layout.

