@@ -5,11 +5,11 @@ 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 {
11
12
struct Params {
12
- address evc;
13
13
address vault0;
14
14
address vault1;
15
15
address myAccount;
@@ -74,14 +74,11 @@ contract EulerSwap is IEulerSwap, EVCUtil {
74
74
status = 1 ;
75
75
}
76
76
77
- constructor (Params memory params , CurveParams memory curveParams ) EVCUtil (params.evc ) {
77
+ constructor (Params memory params , CurveParams memory curveParams ) EVCUtil (IEVault ( params.vault0). EVC () ) {
78
78
// EulerSwap params
79
79
80
80
require (params.fee < 1e18 , BadFee ());
81
-
82
- address vault0Evc = IEVault (params.vault0).EVC ();
83
- require (vault0Evc == IEVault (params.vault1).EVC (), DifferentEVC ());
84
- require (vault0Evc == params.evc, DifferentEVC ());
81
+ require (IEVault (params.vault0).EVC () == IEVault (params.vault1).EVC (), DifferentEVC ());
85
82
86
83
address asset0Addr = IEVault (params.vault0).asset ();
87
84
address asset1Addr = IEVault (params.vault1).asset ();
@@ -164,8 +161,21 @@ contract EulerSwap is IEulerSwap, EVCUtil {
164
161
require (status != 2 , Locked ());
165
162
status = 1 ;
166
163
167
- IERC20 (asset0).approve (vault0, type (uint256 ).max);
168
- IERC20 (asset1).approve (vault1, type (uint256 ).max);
164
+ address permit2 = IEVault (vault0).permit2Address ();
165
+ if (permit2 == address (0 )) {
166
+ IERC20 (asset0).approve (vault0, type (uint256 ).max);
167
+ } else {
168
+ IERC20 (asset0).approve (permit2, type (uint256 ).max);
169
+ IAllowanceTransfer (permit2).approve (asset0, vault0, type (uint160 ).max, type (uint48 ).max);
170
+ }
171
+
172
+ permit2 = IEVault (vault1).permit2Address ();
173
+ if (permit2 == address (0 )) {
174
+ IERC20 (asset1).approve (vault1, type (uint256 ).max);
175
+ } else {
176
+ IERC20 (asset1).approve (permit2, type (uint256 ).max);
177
+ IAllowanceTransfer (permit2).approve (asset1, vault1, type (uint160 ).max, type (uint48 ).max);
178
+ }
169
179
170
180
IEVC (evc).enableCollateral (myAccount, vault0);
171
181
IEVC (evc).enableCollateral (myAccount, vault1);
@@ -200,9 +210,7 @@ contract EulerSwap is IEulerSwap, EVCUtil {
200
210
function depositAssets (address vault , uint256 amount ) internal {
201
211
IEVault (vault).deposit (amount, myAccount);
202
212
203
- uint256 debt = myDebt (vault);
204
-
205
- if (debt > 0 ) {
213
+ if (IEVC (evc).isControllerEnabled (myAccount, vault)) {
206
214
IEVC (evc).call (
207
215
vault, myAccount, 0 , abi.encodeCall (IBorrowing.repayWithShares, (type (uint256 ).max, myAccount))
208
216
);
0 commit comments