
The Core Idea: Shares
A vToken does not represent a fixed quantity of the underlying asset. It represents a proportional claim on the pool’s physical balance. Two values determine the exchange rate at any moment:| Value | Meaning |
|---|---|
pool_balance | The asset balance physically held by the pool contract right now - what can actually be withdrawn. |
vToken supply | Total vTokens currently in circulation. |
pool_balance rises. vToken supply does not change. So assetsPerShare rises - and every vToken holder benefits proportionally, without doing anything.
How vTokens Are Minted and Burned
On deposit - the pool calculates shares to issue:pool_balance / vToken supply. A depositor who supplies, waits, and then redeems gets back more than they put in - as long as at least one repayment with interest has occurred during that period.
When Does the Exchange Rate Rise?
The exchange rate rises whenpool_balance grows. This happens when a borrower repays their debt.
- Borrow: XLM leaves the pool.
pool_balancedrops. The exchange rate drops proportionally - but the LP’s total claim is unchanged, because the same XLM now exists as an outstanding loan. - Repayment: XLM returns to the pool. Since borrowers owe principal plus accrued interest, the interest portion is surplus. After repayment,
pool_balanceends up higher than it was before the borrow, andassetsPerSharerises above the original level.
borrows_wad grows via update_state()), but this accounting does not affect pool_balance or the vToken exchange rate. The rate only moves when tokens physically enter or leave the pool contract.
A Worked Example
Suppose a pool starts empty and an LP deposits 1,000 XLM:| Event | pool_balance | vToken supply | Exchange rate | LP vTokens | LP redeemable (liquid) |
|---|---|---|---|---|---|
| LP deposits 1,000 XLM | 1,000 | 1,000 | 1.000 | 1,000 vXLM | 1,000 XLM |
| Borrower draws 500 XLM | 500 | 1,000 | 0.500 | 1,000 vXLM | 500 XLM |
| 30 days pass, interest accrues in accounting | 500 | 1,000 | 0.500 | 1,000 vXLM | 500 XLM |
| Borrower repays 510 XLM (500 principal + 10 interest) | 1,010 | 1,000 | 1.010 | 1,000 vXLM | 1,010 XLM |
100 / 1.010 ≈ 99.01 vXLM - they enter at the current exchange rate, fairly priced against the original LP.
vToken Operations
| Action | pool_balance | vToken supply | Exchange rate |
|---|---|---|---|
| LP deposits | Increases | Increases (vTokens minted) | Unchanged |
| LP redeems | Decreases | Decreases (vTokens burned) | Unchanged |
| Borrower borrows | Decreases (XLM leaves pool) | No change | Decreases |
| Borrower repays principal only | Returns to pre-borrow level | No change | Returns to pre-borrow rate |
| Borrower repays principal + interest | Rises above pre-borrow level | No change | Rises above original rate |
| Liquidation - full debt recovered | Pool receives full repayment | No change | Rises (full recovery) |
| Liquidation - partial recovery | Pool receives partial repayment | No change | Rises less (LPs absorb the shortfall) |
What vTokens Are Not
A vToken is not:- A fixed-yield bond. Yield depends on what borrowers repay, which varies with utilization and the Rate Model.
- Risk-free. If a borrower defaults and liquidation does not recover the full debt,
pool_balancereceives less than the full repayment. The shortfall reduces the exchange rate permanently - LPs absorb it proportionally. - Always redeemable. If pool utilization is near 100%, most assets are out as active loans. Redemptions may fail until borrowers repay. This is a liquidity constraint, not a solvency problem - the debt is still tracked and will return to the pool.
- A governance token. vTokens carry no voting rights. They are purely economic claims on the pool.
Transferability
vTokens are standard fungible tokens withtransfer and transfer_from functions. They can be sent to another address, which then holds the same proportional claim on the pool. Vanna does not restrict transfers.
Supported Assets
Vanna currently deploys two vToken contracts on Stellar:| Underlying | vToken |
|---|---|
| XLM | vXLM |
| USDC | vUSDC |
Related
- Lending Pools - the pool that issues vTokens and how borrow accounting works
- Interest Rate Model - the utilization-based curve that drives borrow cost and LP yield
- Liquidation - what can cause LP loss

