Skip to main content
vTokens are standard fungible tokens on Soroban that represent a proportional share of a Vanna lending pool’s total assets. Three vToken contracts exist — one per pool. All vToken contracts share the same interface.

Exchange Rate

vTokens appreciate against the underlying asset as interest accrues. The exchange rate is:
Where total_assets = pool_balance + outstanding_borrows. As borrowers repay interest, total_assets grows, and each vToken is redeemable for more of the underlying. Holding vTokens is how LPs earn yield. No staking, claiming, or compounding required — yield accrues in the exchange rate.

Functions

initialize

One-time initialization. Sets the token metadata and admin. Can only be called once.

mint

Increases to’s vToken balance by amount. Only callable by the admin (the LendingPool contract). Called by the LendingPool on every deposit.

burn

Decreases from’s vToken balance by amount. Only callable by the admin (the LendingPool contract). Called by the LendingPool on every vToken redemption.

transfer

Standard token transfer. Requires from.require_auth(). vTokens are freely transferable — they can be held in any wallet or used in other DeFi protocols.

transfer_from

Allowance-based transfer. Requires spender.require_auth() and sufficient allowance from from to spender.

approve

Grants spender permission to transfer up to amount of from’s vTokens. Standard Soroban token approval with an expiration ledger.

balance

Returns the vToken balance of id.

total_supply

Returns the total number of vTokens currently in circulation.

allowance

Returns the remaining allowance that spender can transfer from from.

decimals / name / symbol

Standard token metadata.

admin

Returns the admin address (the LendingPool contract that controls mint/burn).

set_admin

Changes the admin. Requires current admin auth. Used for protocol upgrades.

Events


Storage Layout


Integration Notes

vTokens follow the Stellar Asset Interface (SEP-41) and can be held, transferred, and used as collateral in other protocols on Stellar.
To compute the current redemption value of a vToken balance: