fix: correct LP fee from 3% to 0.3%

Runtime LPFee = 3 means 3/1000 = 0.3%, not 3%.
Updated AMM calculations in TokenSwap, SwapInterface, and PoolDashboard.
This commit is contained in:
2026-02-04 21:53:35 +03:00
parent 3a94838937
commit 1e2efbac99
3 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -290,7 +290,7 @@ const PoolDashboard = () => {
// This is a simplified calculation
// Real APR = (24h fees × 365) / TVL
const dailyVolumeEstimate = totalLiquidityUSD * 0.1; // Assume 10% daily turnover
const dailyFees = dailyVolumeEstimate * 0.03; // 3% fee
const dailyFees = dailyVolumeEstimate * 0.003; // 0.3% fee
const annualFees = dailyFees * 365;
const apr = (annualFees / totalLiquidityUSD) * 100;
+4 -4
View File
@@ -105,10 +105,10 @@ const TokenSwap = () => {
const reserveOut = isAsset0ToAsset1 ? reserve1 : reserve0;
// Uniswap V2 AMM formula (matches Substrate runtime exactly)
// Runtime: amount_in_with_fee = amount_in * (1000 - LPFee) = amount_in * 970
// LPFee = 30 (3% fee, not 0.3%!)
// Formula: amountOut = (amountIn * 970 * reserveOut) / (reserveIn * 1000 + amountIn * 970)
const LP_FEE = 30; // 3% fee
// Runtime: amount_in_with_fee = amount_in * (1000 - LPFee) = amount_in * 997
// LPFee = 3 (0.3% fee - standard DEX fee)
// Formula: amountOut = (amountIn * 997 * reserveOut) / (reserveIn * 1000 + amountIn * 997)
const LP_FEE = 3; // 0.3% fee
const amountInWithFee = amountIn * (1000 - LP_FEE); // = amountIn * 970
const numerator = amountInWithFee * reserveOut;
const denominator = reserveIn * 1000 + amountInWithFee;
+1 -1
View File
@@ -135,7 +135,7 @@ export const SwapInterface: React.FC<SwapInterfaceProps> = ({ pools }) => {
const reserveIn = isForward ? activePool.reserve1 : activePool.reserve2;
const reserveOut = isForward ? activePool.reserve2 : activePool.reserve1;
const toAmountRaw = getAmountOut(fromAmountRaw, reserveIn, reserveOut, 30); // 3% fee
const toAmountRaw = getAmountOut(fromAmountRaw, reserveIn, reserveOut, 3); // 0.3% fee
const toAmountDisplay = formatTokenBalance(toAmountRaw, toTokenInfo.decimals, 6);
setToAmount(toAmountDisplay);