Skip to content

Commit a42faf6

Browse files
Merge pull request #44 from euler-xyz/refactor-approval
factor duplicated approval/permit2 code
2 parents 67a32cb + 1c07209 commit a42faf6

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

src/EulerSwap.sol

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)