Skip to content

Commit dfdfa99

Browse files
committed
Add ERC4626Adapter tests
1 parent 7845908 commit dfdfa99

File tree

3 files changed

+474
-12
lines changed

3 files changed

+474
-12
lines changed

contracts/ERC4626Adapter.sol

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ contract ERC4626Adapter is ILiquidityPoolBase, AccessControl {
4040
constructor(address assets, address targetVault, address admin) {
4141
require(assets != address(0), ZeroAddress());
4242
require(targetVault != address(0), ZeroAddress());
43+
require(admin != address(0), ZeroAddress());
4344
require(assets == IERC4626(targetVault).asset(), IncompatibleAssets());
4445
TARGET_VAULT = IERC4626(targetVault);
4546
ASSETS = IERC20(assets);
@@ -56,11 +57,11 @@ contract ERC4626Adapter is ILiquidityPoolBase, AccessControl {
5657
_;
5758
}
5859

59-
function deposit(uint256 amount) external override onlyRole(LIQUIDITY_ADMIN_ROLE) {
60+
function deposit(uint256 amount) external override onlyRole(LIQUIDITY_ADMIN_ROLE) whenNotPaused() {
6061
_deposit(_msgSender(), amount);
6162
}
6263

63-
function depositWithPull(uint256 amount) external override {
64+
function depositWithPull(uint256 amount) external override whenNotPaused() {
6465
ASSETS.safeTransferFrom(_msgSender(), address(this), amount);
6566
_deposit(_msgSender(), amount);
6667
}
@@ -114,14 +115,15 @@ contract ERC4626Adapter is ILiquidityPoolBase, AccessControl {
114115

115116
function _withdrawProfitLogic(IERC20 token) internal returns (uint256) {
116117
require(token != IERC20(TARGET_VAULT), InvalidToken());
118+
uint256 localBalance = token.balanceOf(address(this));
117119
if (token == ASSETS) {
118120
uint256 deposited = totalDeposited;
119-
uint256 totalBalance = TARGET_VAULT.maxWithdraw(address(this));
120-
if (totalBalance < deposited) return 0;
121-
uint256 profit = totalBalance - deposited;
121+
uint256 vaultBalance = TARGET_VAULT.maxWithdraw(address(this));
122+
if (vaultBalance < deposited) return localBalance;
123+
uint256 profit = vaultBalance - deposited;
122124
TARGET_VAULT.withdraw(profit, address(this), address(this));
123-
return profit;
125+
return profit + localBalance;
124126
}
125-
return token.balanceOf(address(this));
127+
return localBalance;
126128
}
127129
}

contracts/Rebalancer.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {BitMaps} from "@openzeppelin/contracts/utils/structs/BitMaps.sol";
66
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
77
import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
88
import {ERC7201Helper} from "./utils/ERC7201Helper.sol";
9-
import {ILiquidityPool} from "./interfaces/ILiquidityPool.sol";
9+
import {ILiquidityPoolBase} from "./interfaces/ILiquidityPoolBase.sol";
1010
import {IRebalancer} from "./interfaces/IRebalancer.sol";
1111
import {CCTPAdapter} from "./utils/CCTPAdapter.sol";
1212

@@ -105,7 +105,7 @@ contract Rebalancer is IRebalancer, AccessControlUpgradeable, CCTPAdapter {
105105
require(pool != address(0), ZeroAddress());
106106
if (domain == DOMAIN) {
107107
require(provider == Provider.LOCAL, UnsupportedProvider());
108-
require(ILiquidityPool(pool).ASSETS() == ASSETS, InvalidPoolAssets());
108+
require(ILiquidityPoolBase(pool).ASSETS() == ASSETS, InvalidPoolAssets());
109109
} else {
110110
require(provider != Provider.LOCAL, UnsupportedProvider());
111111
}
@@ -170,7 +170,7 @@ contract Rebalancer is IRebalancer, AccessControlUpgradeable, CCTPAdapter {
170170
require(isRouteAllowed(destinationPool, destinationDomain, provider), RouteDenied());
171171

172172
emit InitiateRebalance(amount, sourcePool, destinationPool, destinationDomain, provider);
173-
ILiquidityPool(sourcePool).withdraw(address(this), amount);
173+
ILiquidityPoolBase(sourcePool).withdraw(address(this), amount);
174174

175175
if (provider == Provider.LOCAL) {
176176
// This should always pass because isRouteAllowed check will fail earlier.
@@ -197,7 +197,7 @@ contract Rebalancer is IRebalancer, AccessControlUpgradeable, CCTPAdapter {
197197
uint256 depositAmount = 0;
198198
if (provider == Provider.CCTP) {
199199
depositAmount = processTransferCCTP(ASSETS, destinationPool, extraData);
200-
ILiquidityPool(destinationPool).deposit(depositAmount);
200+
ILiquidityPoolBase(destinationPool).deposit(depositAmount);
201201
} else {
202202
// Unreachable atm, but could become so when more providers are added to enum.
203203
revert UnsupportedProvider();
@@ -211,7 +211,7 @@ contract Rebalancer is IRebalancer, AccessControlUpgradeable, CCTPAdapter {
211211
address destinationPool
212212
) internal {
213213
ASSETS.safeTransfer(destinationPool, amount);
214-
ILiquidityPool(destinationPool).deposit(amount);
214+
ILiquidityPoolBase(destinationPool).deposit(amount);
215215

216216
emit ProcessRebalance(amount, destinationPool, Provider.LOCAL);
217217
}

0 commit comments

Comments
 (0)