Skip to content

Commit 8e6fc4f

Browse files
committed
rounding test case
1 parent 5893e3f commit 8e6fc4f

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

src/MaglevEulerSwap.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ contract MaglevEulerSwap is MaglevBase {
3333
_py = params.py;
3434
_cx = params.cx;
3535
_cy = params.cy;
36-
_fee = Math.max(params.fee, 1.0000000000001e18); // minimum fee required to compensate for rounding
36+
_fee = 1e18 + params.fee;
37+
//_fee = Math.max(1e18 + params.fee, 1.0000000000001e18); // minimum fee required to compensate for rounding
3738
}
3839

3940
// FIXME: how to charge fees?

test/EulerSwap.t.sol

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import {MaglevEulerSwap as Maglev} from "../src/MaglevEulerSwap.sol";
1313
contract EulerSwapTest is MaglevTestBase {
1414
Maglev public maglev;
1515

16+
uint256 minFee = 0.0000000000001e18;
17+
1618
function setUp() public virtual override {
1719
super.setUp();
1820

1921
vm.prank(owner);
2022
maglev = new Maglev(
21-
_getMaglevBaseParams(), Maglev.EulerSwapParams({px: 1e18, py: 1e18, cx: 0.4e18, cy: 0.85e18, fee: 0})
23+
_getMaglevBaseParams(), Maglev.EulerSwapParams({px: 1e18, py: 1e18, cx: 0.4e18, cy: 0.85e18, fee: minFee})
2224
);
2325

2426
vm.prank(holder);
@@ -67,7 +69,7 @@ contract EulerSwapTest is MaglevTestBase {
6769
int256 origNAV = getHolderNAV();
6870

6971
vm.prank(owner);
70-
maglev.setEulerSwapParams(Maglev.EulerSwapParams({px: px, py: py, cx: 0.4e18, cy: 0.85e18, fee: 0}));
72+
maglev.setEulerSwapParams(Maglev.EulerSwapParams({px: px, py: py, cx: 0.4e18, cy: 0.85e18, fee: minFee}));
7173

7274
uint256 amountIn = 1e18;
7375
uint256 amountOut = maglev.quoteExactInput(address(assetTST), address(assetTST2), amountIn);
@@ -120,7 +122,7 @@ contract EulerSwapTest is MaglevTestBase {
120122
oracle.setPrice(address(assetTST), unitOfAccount, price);
121123

122124
vm.prank(owner);
123-
maglev.setEulerSwapParams(Maglev.EulerSwapParams({px: px, py: py, cx: cx, cy: cy, fee: 0}));
125+
maglev.setEulerSwapParams(Maglev.EulerSwapParams({px: px, py: py, cx: cx, cy: cy, fee: minFee}));
124126

125127
int256 origNAV = getHolderNAV();
126128

@@ -147,4 +149,19 @@ contract EulerSwapTest is MaglevTestBase {
147149

148150
assertGe(getHolderNAV(), origNAV);
149151
}
152+
153+
function test_roundingFailure() public {
154+
vm.skip(true);
155+
156+
vm.prank(owner);
157+
maglev.setEulerSwapParams(Maglev.EulerSwapParams({px: 1e18, py: 1e18, cx: 0.4e18, cy: 0.85e18, fee: 0}));
158+
159+
uint256 amountIn = 1.4e18;
160+
uint256 amountOut = maglev.quoteExactInput(address(assetTST), address(assetTST2), amountIn);
161+
162+
assetTST.mint(address(this), amountIn);
163+
assetTST.transfer(address(maglev), amountIn);
164+
maglev.swap(0, amountOut, address(this), "");
165+
assertEq(assetTST2.balanceOf(address(this)), amountOut);
166+
}
150167
}

0 commit comments

Comments
 (0)