Skip to content

Commit 8f0c306

Browse files
authored
Merge pull request #22 from euler-xyz/gas-improvements
Gas improvements
2 parents 1cd30ba + c1eb296 commit 8f0c306

File tree

4 files changed

+20
-29
lines changed

4 files changed

+20
-29
lines changed

remappings.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ evc/=lib/ethereum-vault-connector/src/
33
evk/=lib/euler-vault-kit/src/
44
ethereum-vault-connector/=lib/ethereum-vault-connector/src/
55
evk-test/=lib/euler-vault-kit/test/
6+
permit2/=lib/euler-vault-kit/lib/permit2/

src/EulerSwap.sol

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import {IEVC} from "evc/interfaces/IEthereumVaultConnector.sol";
55
import {IEVault, IERC20, IBorrowing, IERC4626, IRiskManager} from "evk/EVault/IEVault.sol";
66
import {IUniswapV2Callee} from "./interfaces/IUniswapV2Callee.sol";
77
import {IEulerSwap} from "./interfaces/IEulerSwap.sol";
8+
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
89
import {EVCUtil} from "evc/utils/EVCUtil.sol";
910

1011
contract EulerSwap is IEulerSwap, EVCUtil {
1112
struct Params {
12-
address evc;
1313
address vault0;
1414
address vault1;
1515
address myAccount;
@@ -74,14 +74,11 @@ contract EulerSwap is IEulerSwap, EVCUtil {
7474
status = 1;
7575
}
7676

77-
constructor(Params memory params, CurveParams memory curveParams) EVCUtil(params.evc) {
77+
constructor(Params memory params, CurveParams memory curveParams) EVCUtil(IEVault(params.vault0).EVC()) {
7878
// EulerSwap params
7979

8080
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());
8582

8683
address asset0Addr = IEVault(params.vault0).asset();
8784
address asset1Addr = IEVault(params.vault1).asset();
@@ -164,8 +161,21 @@ contract EulerSwap is IEulerSwap, EVCUtil {
164161
require(status != 2, Locked());
165162
status = 1;
166163

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+
}
169179

170180
IEVC(evc).enableCollateral(myAccount, vault0);
171181
IEVC(evc).enableCollateral(myAccount, vault1);
@@ -200,9 +210,7 @@ contract EulerSwap is IEulerSwap, EVCUtil {
200210
function depositAssets(address vault, uint256 amount) internal {
201211
IEVault(vault).deposit(amount, myAccount);
202212

203-
uint256 debt = myDebt(vault);
204-
205-
if (debt > 0) {
213+
if (IEVC(evc).isControllerEnabled(myAccount, vault)) {
206214
IEVC(evc).call(
207215
vault, myAccount, 0, abi.encodeCall(IBorrowing.repayWithShares, (type(uint256).max, myAccount))
208216
);

test/EulerSwapTest.t.sol

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,6 @@ contract EulerSwapTest is EulerSwapTestBase {
1212
eulerSwap = createEulerSwap(50e18, 50e18, 0, 1e18, 1e18, 0.4e18, 0.85e18);
1313
}
1414

15-
function test_different_EVC() public {
16-
vm.expectRevert(EulerSwap.DifferentEVC.selector);
17-
18-
new EulerSwap(
19-
EulerSwap.Params({
20-
evc: address(makeAddr("RANDOM_EVC")),
21-
vault0: address(eTST),
22-
vault1: address(eTST2),
23-
myAccount: holder,
24-
debtLimit0: 50e18,
25-
debtLimit1: 50e18,
26-
fee: 0
27-
}),
28-
EulerSwap.CurveParams({priceX: 1e18, priceY: 1e18, concentrationX: 4e18, concentrationY: 0.85e18})
29-
);
30-
}
31-
3215
function test_basicSwap_exactIn() public monotonicHolderNAV {
3316
uint256 amountIn = 1e18;
3417
uint256 amountOut =

test/EulerSwapTestBase.t.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ contract EulerSwapTestBase is EVaultTestBase {
147147
returns (EulerSwap.Params memory)
148148
{
149149
return EulerSwap.Params({
150-
evc: address(evc),
151150
vault0: address(eTST),
152151
vault1: address(eTST2),
153152
myAccount: holder,

0 commit comments

Comments
 (0)