# Flashloan fee of Uniswap v2
###### tags: `uniswap` `flashloan` `fee` `uniswap-v2`
Refer to [Uniswap v2 Whitepaper](https://uniswap.org/whitepaper.pdf), each swap should satisfy following formula:
$$
(x_1 - 0.003 \cdot x_{in}) \cdot (y_1 - 0.003 \cdot y_{in}) \ge x_0 \cdot y_0 \tag{1}
$$
To simplify the calculation on-chain:
$$
(1000 \cdot x_1 - 3 \cdot x_{in}) \cdot (1000 \cdot y_1 - 3 \cdot y_{in}) \ge 1000000 \cdot x_0 \cdot y_0 \tag{2}
$$
When we flash loan from Uniswap v2 pair, what is the amount including fee we should repay?
Suppose we flash loan amount of token $y$: $y_{out}$.
$x_{in}$ and $y_{in}$ are the amount of token $x$ and token $y$ to repay.
$x_0$ and $x_1$ are the balance of token $x$ before and after flash loan, respectively, $y_0$ and $y_1$ are the balance of token $y$ before and after flash loan.
The problem is to calculate $y_{in}$ using $y_{out}$.
Since we don't flash loan token $x$, so $x_{in} = 0$, $x_{out} = 0$, $x_0 = x_1$, we can simplify formula (2):
$$
1000 \cdot y_1 - 3 \cdot y_{in} \ge 1000 \cdot y_0 \tag{3}
$$
$$
y_1 - y_0 \ge \frac{3}{1000} \cdot y_{in} \tag{4}
$$
The relation between $y_{in}$ and $y_{out}$ is:
$$
y_{in} = y_1 - ( y_0 - y_{out}) \tag{5}
$$
Using formula (4) and (5):
$$
y_{in} - y_{out} \ge \frac{3}{1000} \cdot y_{in} \tag{6}
$$
We can calculate $y_{in}$:
$$
y_{in} \ge \frac{1000}{997} \cdot y_{out} \tag{7}
$$
In Solidity contract, to avoid rouding down error, we should add 1 to round up:
```solidity
uint256 repayAmount = amountOut.mul(1000).div(997).add(1)
```
where repayAmount is $y_{in}$, amountOut is $y_{out}$.
So the flashloan fee of Uniswap v2 is:
$$
\frac{1000}{997} - 1 \approx 0.0030090271 \approx 0.30090271\% \tag{8}
$$