How the obSOL share price works
Shares, vesting, the virtual offset and the display multiplier: why your obSOL balance stays constant while each token is worth more SOL, and why nobody can sneak in just before rewards.
obSOL is a share token. Its supply changes only when people deposit or exit, and its price in SOL moves as the pool earns. The price is computed on chain from three numbers: the pool assets that have vested, the live mint supply, and a fixed virtual offset.
The formula
Price of one obSOL is (vested assets + offset) divided by (supply + offset), all in lamports. Shares minted for a deposit are the deposit times (supply + offset) divided by (vested assets + offset), rounded down. Redemptions round down too. Rounding always favors the pool, so a deposit followed by an exit can never return more than was put in.
Supply is never cached. It is always read from the mint, so tokens burned directly with Token-2022 are priced correctly: the same assets now back fewer shares and the price rises.
The virtual offset
The first-depositor inflation attack works by minting one share, donating a large amount to the pool, and rounding the next depositor down to zero. Oblio adds an immutable virtual offset (at least 1,000,000 lamports, enforced at initialization) to both sides of the price. A donation then moves the price by a negligible amount, and a test in the suite reproduces the classic attack to check that a victim still receives close to one-to-one shares.
Vesting: rewards arrive smoothly
Staking rewards land in stake accounts at the epoch boundary. If they were priced instantly, someone could deposit right before the rewards are counted and leave right after. Instead, when a sync discovers new profit, it is added to total assets but locked, and unlocks linearly over a vesting window. The price uses vested assets only, so new rewards drip into the share price rather than jumping in. Donations and injected rewards go through the same lock.
A loss is absorbed by unvested profit first, which protects holders from small dips.
Syncing once per epoch
Deposits and exits require that the rate was synced in the current epoch. Because rewards are credited at the start of each epoch, accepting an older rate would let late depositors capture them. The sync instruction is permissionless and takes every bucket in index order, so anyone can run it and nobody can leave a bucket out. It refuses to run while Solana is still distributing epoch rewards across partitions, so a half-distributed epoch is never priced.
The display multiplier
Wallets show obSOL through the Token-2022 ScaledUiAmount extension: each sync writes a multiplier equal to the current rate. Your raw balance does not change; the amount your wallet shows grows with the multiplier. Upward moves of the display multiplier are clamped per sync to a configured maximum, while settlement always uses the exact vested price, so a large donation can never freeze the protocol or be turned into a pause.
The multiplier is for display. Deposits and redemptions are always priced from the exact vested rate, never from the displayed value.
Stake SOL with Oblio
Receive obSOL and keep your position out of view.