@@ -5,6 +5,7 @@ import {IEVC} from "evc/interfaces/IEthereumVaultConnector.sol";
5
5
import {IEVault, IERC20 , IBorrowing, IERC4626 , IRiskManager} from "evk/EVault/IEVault.sol " ;
6
6
import {IUniswapV2Callee} from "./interfaces/IUniswapV2Callee.sol " ;
7
7
import {IEulerSwap} from "./interfaces/IEulerSwap.sol " ;
8
+ import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol " ;
8
9
import {EVCUtil} from "evc/utils/EVCUtil.sol " ;
9
10
10
11
contract EulerSwap is IEulerSwap , EVCUtil {
@@ -57,14 +58,11 @@ contract EulerSwap is IEulerSwap, EVCUtil {
57
58
status = 1 ;
58
59
}
59
60
60
- constructor (Params memory params , CurveParams memory curveParams ) EVCUtil (params.evc ) {
61
+ constructor (Params memory params , CurveParams memory curveParams ) EVCUtil (IEVault ( params.vault0). EVC () ) {
61
62
// EulerSwap params
62
63
63
64
require (params.fee < 1e18 , BadFee ());
64
-
65
- address vault0Evc = IEVault (params.vault0).EVC ();
66
- require (vault0Evc == IEVault (params.vault1).EVC (), DifferentEVC ());
67
- require (vault0Evc == params.evc, DifferentEVC ());
65
+ require (IEVault (params.vault0).EVC () == IEVault (params.vault1).EVC (), DifferentEVC ());
68
66
69
67
address asset0Addr = IEVault (params.vault0).asset ();
70
68
address asset1Addr = IEVault (params.vault1).asset ();
@@ -147,8 +145,21 @@ contract EulerSwap is IEulerSwap, EVCUtil {
147
145
require (status != 2 , Locked ());
148
146
status = 1 ;
149
147
150
- IERC20 (asset0).approve (vault0, type (uint256 ).max);
151
- IERC20 (asset1).approve (vault1, type (uint256 ).max);
148
+ address permit2 = IEVault (vault0).permit2Address ();
149
+ if (permit2 == address (0 )) {
150
+ IERC20 (asset0).approve (vault0, type (uint256 ).max);
151
+ } else {
152
+ IERC20 (asset0).approve (permit2, type (uint256 ).max);
153
+ IAllowanceTransfer (permit2).approve (asset0, vault0, type (uint160 ).max, type (uint48 ).max);
154
+ }
155
+
156
+ permit2 = IEVault (vault1).permit2Address ();
157
+ if (permit2 == address (0 )) {
158
+ IERC20 (asset1).approve (vault1, type (uint256 ).max);
159
+ } else {
160
+ IERC20 (asset1).approve (permit2, type (uint256 ).max);
161
+ IAllowanceTransfer (permit2).approve (asset1, vault1, type (uint160 ).max, type (uint48 ).max);
162
+ }
152
163
153
164
IEVC (evc).enableCollateral (myAccount, vault0);
154
165
IEVC (evc).enableCollateral (myAccount, vault1);
@@ -183,9 +194,7 @@ contract EulerSwap is IEulerSwap, EVCUtil {
183
194
function depositAssets (address vault , uint256 amount ) internal {
184
195
IEVault (vault).deposit (amount, myAccount);
185
196
186
- uint256 debt = myDebt (vault);
187
-
188
- if (debt > 0 ) {
197
+ if (IEVC (evc).isControllerEnabled (myAccount, vault)) {
189
198
IEVC (evc).call (
190
199
vault, myAccount, 0 , abi.encodeCall (IBorrowing.repayWithShares, (type (uint256 ).max, myAccount))
191
200
);
0 commit comments