@@ -167,21 +167,8 @@ contract EulerSwap is IEulerSwap, EVCUtil {
167
167
require (status != 2 , Locked ());
168
168
status = 1 ;
169
169
170
- address permit2 = IEVault (vault0).permit2Address ();
171
- if (permit2 == address (0 )) {
172
- IERC20 (asset0).forceApprove (vault0, type (uint256 ).max);
173
- } else {
174
- IERC20 (asset0).forceApprove (permit2, type (uint256 ).max);
175
- IAllowanceTransfer (permit2).approve (asset0, vault0, type (uint160 ).max, type (uint48 ).max);
176
- }
177
-
178
- permit2 = IEVault (vault1).permit2Address ();
179
- if (permit2 == address (0 )) {
180
- IERC20 (asset1).forceApprove (vault1, type (uint256 ).max);
181
- } else {
182
- IERC20 (asset1).forceApprove (permit2, type (uint256 ).max);
183
- IAllowanceTransfer (permit2).approve (asset1, vault1, type (uint160 ).max, type (uint48 ).max);
184
- }
170
+ approveVault (asset0, vault0);
171
+ approveVault (asset1, vault1);
185
172
186
173
IEVC (evc).enableCollateral (eulerAccount, vault0);
187
174
IEVC (evc).enableCollateral (eulerAccount, vault1);
@@ -237,6 +224,19 @@ contract EulerSwap is IEulerSwap, EVCUtil {
237
224
return amount;
238
225
}
239
226
227
+ /// @notice Approves tokens for a given vault, supporting both standard approvals and permit2
228
+ /// @param asset The address of the token to approve
229
+ /// @param vault The address of the vault to approve the token for
230
+ function approveVault (address asset , address vault ) internal {
231
+ address permit2 = IEVault (vault).permit2Address ();
232
+ if (permit2 == address (0 )) {
233
+ IERC20 (asset).forceApprove (vault, type (uint256 ).max);
234
+ } else {
235
+ IERC20 (asset).forceApprove (permit2, type (uint256 ).max);
236
+ IAllowanceTransfer (permit2).approve (asset, vault, type (uint160 ).max, type (uint48 ).max);
237
+ }
238
+ }
239
+
240
240
function myDebt (address vault ) internal view returns (uint256 ) {
241
241
return IEVault (vault).debtOf (eulerAccount);
242
242
}
0 commit comments