Skip to content

Commit 871bf6a

Browse files
committed
assert fee and reserves logic
1 parent fe42bcf commit 871bf6a

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

test/EulerSwapHook.fees.t.sol

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ contract EulerSwapHookTest is EulerSwapTestBase {
4343
}
4444

4545
function test_SwapExactIn_withLpFee() public {
46+
(uint112 r0, uint112 r1,) = eulerSwap.getReserves();
47+
4648
uint256 amountIn = 1e18;
49+
uint256 amountInWithoutFee = amountIn * eulerSwap.feeMultiplier() / 1e18;
4750
uint256 amountOut =
4851
periphery.quoteExactInput(address(eulerSwap), address(assetTST), address(assetTST2), amountIn);
4952

@@ -61,12 +64,26 @@ contract EulerSwapHookTest is EulerSwapTestBase {
6164

6265
assertEq(zeroForOne ? uint256(-int256(result.amount0())) : uint256(-int256(result.amount1())), amountIn);
6366
assertEq(zeroForOne ? uint256(int256(result.amount1())) : uint256(int256(result.amount0())), amountOut);
67+
68+
// assert fees were not added to the reserves
69+
(uint112 r0New, uint112 r1New,) = eulerSwap.getReserves();
70+
if (zeroForOne) {
71+
assertEq(r0New, r0 + amountInWithoutFee);
72+
assertEq(r1New, r1 - amountOut);
73+
} else {
74+
// oneForZero, so the curve received asset1
75+
assertEq(r0New, r0 - amountOut);
76+
assertEq(r1New, r1 + amountInWithoutFee);
77+
}
6478
}
6579

6680
function test_SwapExactOut_withLpFee() public {
81+
(uint112 r0, uint112 r1,) = eulerSwap.getReserves();
82+
6783
uint256 amountOut = 1e18;
6884
uint256 amountIn =
6985
periphery.quoteExactOutput(address(eulerSwap), address(assetTST), address(assetTST2), amountOut);
86+
uint256 amountInWithoutFee = (amountIn * 1e18) / (2e18 - eulerSwap.feeMultiplier());
7087

7188
assetTST.mint(anyone, amountIn);
7289

@@ -82,6 +99,17 @@ contract EulerSwapHookTest is EulerSwapTestBase {
8299

83100
assertEq(zeroForOne ? uint256(-int256(result.amount0())) : uint256(-int256(result.amount1())), amountIn);
84101
assertEq(zeroForOne ? uint256(int256(result.amount1())) : uint256(int256(result.amount0())), amountOut);
102+
103+
// assert fees were not added to the reserves
104+
(uint112 r0New, uint112 r1New,) = eulerSwap.getReserves();
105+
if (zeroForOne) {
106+
assertEq(r0New, r0 + amountInWithoutFee, "A");
107+
assertEq(r1New, r1 - amountOut, "B");
108+
} else {
109+
// oneForZero, so the curve received asset1
110+
assertEq(r0New, r0 - amountOut, "C");
111+
assertEq(r1New, r1 + amountInWithoutFee, "D");
112+
}
85113
}
86114

87115
function _swap(PoolKey memory key, bool zeroForOne, bool exactInput, uint256 amount) internal {

0 commit comments

Comments
 (0)