@@ -167,21 +167,8 @@ contract EulerSwap is IEulerSwap, EVCUtil {
167167 require (status != 2 , Locked ());
168168 status = 1 ;
169169
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);
185172
186173 IEVC (evc).enableCollateral (eulerAccount, vault0);
187174 IEVC (evc).enableCollateral (eulerAccount, vault1);
@@ -237,6 +224,19 @@ contract EulerSwap is IEulerSwap, EVCUtil {
237224 return amount;
238225 }
239226
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+
240240 function myDebt (address vault ) internal view returns (uint256 ) {
241241 return IEVault (vault).debtOf (eulerAccount);
242242 }
0 commit comments