Skip to content

Commit 5613775

Browse files
authored
Merge pull request #12 from euler-xyz/check-evc-addr
Check EVC addr
2 parents 8c146b2 + 26e28eb commit 5613775

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

TODO

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
* ConstantSum: incorporate price multipliers in quote methods
99
* natspec
1010
* permit2 instead of regular approval: measure gas savings
11-
* in constructor, check the two vaults have the correct EVC() return value
12-
* maybe even that they were created by the EVK factory?
1311
? a really small swap could fail because deposit() results in 0 shares, which EVK fails on. call convertToShares() first? Seems like overkill
1412
? pause guardian
1513
? how should aggregators find instances

src/MaglevBase.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ abstract contract MaglevBase is IMaglevBase, EVCUtil {
2727
error BadFee();
2828
error InsufficientReserves();
2929
error InsufficientCash();
30+
error DifferentEVC();
3031

3132
modifier nonReentrant() {
3233
require(locked == 0, Locked());
@@ -48,6 +49,10 @@ abstract contract MaglevBase is IMaglevBase, EVCUtil {
4849
constructor(BaseParams memory params) EVCUtil(params.evc) {
4950
require(params.fee < 1e18, BadFee());
5051

52+
address vault0Evc = IEVault(params.vault0).EVC();
53+
require(vault0Evc == IEVault(params.vault1).EVC(), DifferentEVC());
54+
require(vault0Evc == params.evc, DifferentEVC());
55+
5156
vault0 = params.vault0;
5257
vault1 = params.vault1;
5358
asset0 = IEVault(vault0).asset();

test/EulerSwap.t.sol

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {TestERC20} from "evk-test/unit/evault/EVaultTestBase.t.sol";
88
import {IEVault} from "evk/EVault/IEVault.sol";
99
import {MaglevTestBase} from "./MaglevTestBase.t.sol";
1010

11-
import {MaglevEulerSwap as Maglev} from "../src/MaglevEulerSwap.sol";
11+
import {MaglevEulerSwap as Maglev, MaglevBase} from "../src/MaglevEulerSwap.sol";
1212

1313
contract EulerSwapTest is MaglevTestBase {
1414
Maglev public maglev;
@@ -41,6 +41,23 @@ contract EulerSwapTest is MaglevTestBase {
4141
maglev.configure();
4242
}
4343

44+
function test_different_EVC() public {
45+
vm.expectRevert(MaglevBase.DifferentEVC.selector);
46+
47+
new Maglev(
48+
MaglevBase.BaseParams({
49+
evc: address(makeAddr("RANDOM_EVC")),
50+
vault0: address(eTST),
51+
vault1: address(eTST2),
52+
myAccount: holder,
53+
debtLimit0: 50e18,
54+
debtLimit1: 50e18,
55+
fee: 0
56+
}),
57+
Maglev.EulerSwapParams({priceX: 1e18, priceY: 1e18, concentrationX: 4e18, concentrationY: 0.85e18})
58+
);
59+
}
60+
4461
function test_basicSwap_exactIn() public monotonicHolderNAV {
4562
uint256 amountIn = 1e18;
4663
uint256 amountOut = maglev.quoteExactInput(address(assetTST), address(assetTST2), amountIn);

0 commit comments

Comments
 (0)