Receipt Tokens
Understand how each token type works, how it accumulates yield, and how rFlow calculates its value when selling future returns.
Overview#
Receipt Tokens are tokens you receive when you deposit assets into a DeFi protocol. They represent your position and automatically accumulate the generated yields.
Two Types of Compounding
The number of tokens stays constant, but their value increases via a growing exchange rate (kUSDC, mSOL, jitoSOL)
Trading fees accumulate on the position and must be claimed manually (Meteora LP, Raydium LP)
Kamino (kTokens)#
Kamino kUSDC
Kamino Finance - Lending
When you deposit USDC on Kamino Lend, you receive kUSDC. These tokens use a growing exchange rate to represent accumulated interest.
Kamino kSOL
Kamino Finance - Lending
Same mechanism as kUSDC but for SOL deposits. The SOL/kSOL exchange rate increases over time.
Marinade (mSOL)#
Marinade Staked SOL
Marinade Finance - Liquid Staking
mSOL is Marinade's liquid staking token. When staking SOL through Marinade, you receive mSOL which continuously appreciates against SOL thanks to staking rewards.
Why 20% discount?
- Exposure to SOL price volatility
- Slashing risk (very low but exists)
- Variability in Solana staking rewards
Jito (jitoSOL)#
Jito Staked SOL
Jito - MEV-Enhanced Liquid Staking
jitoSOL works like mSOL but with a MEV boost. Jito redistributes part of MEV profits to stakers, resulting in a slightly higher APY.
Solend (cTokens)#
Solend cUSDC
Solend/Save - Lending
Solend cTokens (now Save) work exactly like Compound's cTokens on Ethereum - a growing exchange rate represents accumulated interest.
Meteora LP Positions#
Meteora DLMM Positions
Meteora - Concentrated Liquidity LP
Different from other tokens!
When you sell future yields from a Meteora position on rFlow:
- You lock the Position NFT in a rFlow vault
- Fees accumulated before the deal remain yours (claim before)
- During the deal, the buyer can claim accumulated fees
- At settlement, the NFT returns to the seller (with the LP principal)
How We Calculate Value#
Here's how rFlow determines the value of your tokens at lock time:
1. Exchange Rate Tokens (kUSDC, mSOL, jitoSOL)
1// On-chain settlement formula2const exchangeRateAtLock = getExchangeRate(mint); // e.g., 1.05043const principalValue = tokenAmount * exchangeRateAtLock;45// At settlement (90 days later)6const currentExchangeRate = getExchangeRate(mint); // e.g., 1.06547const currentValue = tokenAmount * currentExchangeRate;8const actualYield = currentValue - principalValue;910// Distribution11const yieldTokens = tokenAmount * (actualYield / currentValue);12const principalTokens = tokenAmount - yieldTokens;1314// buyer receives: yieldTokens15// seller receives: principalTokens2. Meteora LP Positions
1// Fee estimation at deal creation2const poolMetrics = await fetchPoolMetrics(poolAddress);3const positionShare = positionValue / poolTVL;4const dailyFees = poolMetrics.fees30d / 30;56const estimatedFees = dailyFees * positionShare * durationDays;7const suggestedPrice = estimatedFees * (1 - DISCOUNT_RATE);89// During deal: buyer claims fees directly from Meteora10// At settlement: NFT returns to seller