ethereum/defi-math
DeFi Core Mathematics: AMM / Interest Rate Models / Liquidation Mechanisms
ethereumguide👥 Communityconfidence highhealth 100%
v1.0.0·Updated 3/20/2026
AMM: Constant Product Formula (Uniswap V2)
Core Formula: x * y = k (x, y are the quantities of two tokens, k is a constant)
Price Calculation
Current Price = y / x (how much y you get for 1 x)
Example: Pool has 10 ETH + 20000 USDC
ETH Price = 20000 / 10 = 2000 USDC
Swap Calculation (with 0.3% fee)
Input Δx, output Δy:
Δy = y * Δx * 997 / (x * 1000 + Δx * 997)
Example: Swap 1 ETH for USDC, pool has 10ETH + 20000USDC
Δy = 20000 * 1 * 997 / (10 * 1000 + 1 * 997)
= 19940000 / 10997
≈ 1813 USDC (price slippage ~9.35%)
Price Impact
The larger the trade size / pool depth, the greater the price impact
Price Impact = 1 - x / (x + Δx)
Example: 1 ETH / 10 ETH pool = 10% impact (very high)
1 ETH / 1000 ETH pool = 0.1% impact (normal)
Uniswap V3: Concentrated Liquidity
V3 introduces the price range concept, where LPs provide liquidity only within specified ranges:
tick: Price is represented by tick, price(tick) = 1.0001^tick
tickLower/tickUpper: Price range where liquidity is active
Virtual liquidity formulas:
L = Δx / (1/√Pa - 1/√Pb) ← Calculate required token X
L = Δy / (√Pb - √Pa) ← Calculate required token Y
Impact of Concentrated Liquidity:
- With the same capital, narrower price ranges yield higher capital efficiency (but greater IL risk)
- When price moves out of range, LP holds 100% of the depreciated asset
Interest Rate Model (Compound / Aave)
Utilization Rate
U = Total Borrowed / Total Deposits
Example: 10000 USDC deposits, 7000 USDC borrowed
U = 7000 / 10000 = 70%
Kinked Rate Model
Slope1 (normal range, U < optimal point):
Borrow Rate = BaseRate + U * Slope1
Slope2 (high-risk range, U > optimal point):
Borrow Rate = BaseRate + Optimal * Slope1 + (U - Optimal) * Slope2
Example (Aave USDC parameters):
BaseRate = 0%, Optimal = 90%, Slope1 = 4%, Slope2 = 60%
U=50%: Borrow Rate = 0 + 50%*4% = 2%
U=90%: Borrow Rate = 0 + 90%*4% = 3.6% (optimal point)
U=95%: Borrow Rate = 3.6% + 5%*60% = 6.6% (steep penalty)
U=99%: Borrow Rate = 3.6% + 9%*60% = 9%
Deposit Rate = Borrow Rate * U * (1 - Protocol Fee)
Liquidation Mechanism
Health Factor (Aave)
HF = Σ(Collateral Value × Liquidation Threshold) / Total Borrowed Value
HF > 1: Safe
HF = 1: Liquidation threshold
HF < 1: Subject to liquidation
Example:
Deposit $10000 ETH (liquidation threshold 82.5%)
Borrow $6000 USDC
HF = 10000 * 0.825 / 6000 = 1.375 (safe)
ETH drops 30% → $7000
HF = 7000 * 0.825 / 6000 = 0.9625 → Subject to liquidation
Liquidation Bonus
Liquidator repays 50% of debt (close factor = 50%)
Receives collateral + 5-15% bonus (liquidation bonus)
Example:
User owes $6000 USDC, collateral $7000 ETH (bonus 5%)
Liquidator repays $3000 USDC
Receives ETH = $3000 * 1.05 = $3150 worth of ETH
Arbitrage profit = $150
Impermanent Loss (IL)
IL = 2√r/(1+r) - 1, where r = price change ratio
Price Change → IL
+25% → -0.6%
+50% → -2.0%
+100% → -5.7% (2x price = 5.7% loss)
+200% → -13.4%
-50% → -5.7%
Price returns to original → IL = 0 (no permanent loss)
Solidity Implementation Reference:
// Calculate sqrt for V3 liquidity calculations
function sqrt(uint256 x) internal pure returns (uint256 y) {
if (x == 0) return 0;
uint256 z = (x + 1) / 2;
y = x;
while (z < y) { y = z; z = (x / z + z) / 2; }
}
// Q96 fixed-point number (Uniswap V3 internal format)
// sqrtPriceX96 = sqrt(price) * 2^96
uint160 sqrtPriceX96 = ...;
uint256 price = uint256(sqrtPriceX96) * uint256(sqrtPriceX96) >> 192;