Virtual price is defined as

*virtualPrice = totalAssetBalance / totalLpSupply*

where totalAssetBalance is the summation of all balances of underlying assets and totalLpSupply is the total supply of LP tokens.

**Example A (Virtual Price Calculation):** Suppose the pool has two stablecoins USDT/USDC with balances [1M, 1M] and the total supply of syUSD (LP token) is 1.5M, then the virtual price is (1M + 1M) / 1.5M = 1.3333.

For any pool operations that converts LP token from/to underlying asset (e.g., mint syUSD with USDT or redeem syUSD for USDC), virtual price is essential the **exchange rate** between the LP token and underlying asset **if no penalty (e.g., slippage cost) happens**.

**Example B (Redeem without Penalty)**: Suppose the pool has two stablecoins USDT/USDC with balances [1M, 1M], total supply of syUSD (LP token) is 1.5M, and soft weights are [0.6, 0.6]. Redeeming **0.1M** **syUSD** for USDC will not incur a penalty (as the resulting percentages are [0.5263, 0.47368]), and as a result, the pool will return **0.13333M** **USDC** for the redemption (virtual_price = 1.3333).

**Example C (Redeem with Penalty):** Suppose the pool has two stablecoins USDT/USDC with balances [1M, 1M], total supply of syUSD (LP token) is 1.5M, and soft weights are [0.6, 0.6]. Redeeming **0.5M** syUSD for USDC will incur a penalty (as the resulting percentages will exceed 0.6), and as a result, the pool will return **less than 0.6667M USDC** for the redemption (virtual_price = 1.3333).

One common mistake in calculating virtual price is to use the exchange rate of a transaction as virtual price, which is incorrect if such a transaction incurs a penalty.

One key property of virtual price is that the value should **be non-decreasing** to reflect the accumulated interest + swap fee + penalty fee, i.e., the value of per LP token is self-value-accrued over time by earning interest + swap fee + penalty fee automatically.

**Example D (Virtual Price with Fee): **Suppose the pool has two stablecoins USDT/USDC with balances [1M, 1M], total supply of syUSD (LP token) is 1.5M. Suppose a user swaps 0.1M USDT for 0.09M USDC, the resulting pool becomes [1.1M, 0.91M], and thus the virtual price increases from 1.3333 to 1.34.

**Example F (Virtual Price with Interest)**: Suppose the pool has two stablecoins USDT/USDC with balances [1M, 1M], total supply of syUSD (LP token) is 1.5M. After some time, the pool earns interests [0.1M, 0.15M] respectively. As a result, the virtual price increases from 1.3333 to 1.5.

****