Skip to content

Commit 9bbaa6a

Browse files
committed
Merge branch 'dev' into feat/custom-errors
2 parents 9fa1c6b + a690b5c commit 9bbaa6a

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

src/asset-management/EulerV2Manager.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ contract EulerV2Manager is IAssetManager, Owned(msg.sender), RGT {
206206
}
207207

208208
function _doInvest(IAssetManagedPair aPair, IERC20 aToken, IERC4626 aVault, uint256 aAmount) private {
209-
require(aToken.balanceOf(address(this)) == aAmount, "AM: TOKEN_AMOUNT_MISMATCH");
210209
SafeTransferLib.safeApprove(address(aToken), address(aVault), aAmount);
211210

212211
uint256 lSharesReceived = aVault.deposit(aAmount, address(this));

test/__fixtures/BaseTest.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,6 @@ abstract contract BaseTest is Test {
153153

154154
function _skip(uint256 aTime) internal {
155155
vm.roll(vm.getBlockNumber() + 1);
156-
vm.warp(vm.getBlockTimestamp() + aTime);
156+
skip(aTime);
157157
}
158158
}

test/integration/Euler.t.sol

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,6 +973,38 @@ contract EulerIntegrationTest is BaseTest {
973973
assertEq(_manager.shares(lPair3, USDC), 0, "pair3 shares");
974974
}
975975

976+
// The following two test cases show that even with a third party intentionally / accidentally
977+
// transfers the underlying tokens to the asset manager, it would still function (deposit/withdraw) as normal
978+
function testResilientEvenWithUnexpectedTokens_Deposit() external allNetworks allPairs {
979+
// arrange
980+
_deal(address(USDC), address(_manager), 1_000_000e6);
981+
982+
// act - adjustManagement should still succeed despite extra tokens
983+
int256 lAmtToManage = 2e6;
984+
_manager.adjustManagement(_pair, USDC == _pair.token0() ? lAmtToManage : int256(0), USDC == _pair.token1() ? lAmtToManage : int256(0));
985+
986+
// assert
987+
assertGt(USDC.balanceOf(address(_manager)), 0);
988+
assertApproxEqAbs(_manager.getBalance(_pair, USDC), uint256(lAmtToManage), 1);
989+
}
990+
991+
function testResilientEvenWithUnexpectedTokens_Withdraw() external allNetworks allPairs {
992+
// arrange
993+
int256 lAmtToManage = 2e6;
994+
_increaseManagementOneToken(lAmtToManage);
995+
uint256 lUnexpectedTokens = 33222;
996+
_deal(address(USDC), address(_manager), lUnexpectedTokens);
997+
998+
// act
999+
uint256 lBalance = _manager.getBalance(_pair, USDC);
1000+
_manager.adjustManagement(_pair, _pair.token0() == USDC ? -int256(lBalance) : int256(0), _pair.token1() == USDC ? -int256(lBalance) : int256(0));
1001+
1002+
// assert
1003+
assertEq(_manager.getBalance(_pair, USDC), 0);
1004+
assertEq(USDCVault.balanceOf(address(_manager)), 0);
1005+
assertEq(USDC.balanceOf(address(_manager)), lUnexpectedTokens);
1006+
}
1007+
9761008
// this test shows that the asset manager should still function properly with investing, divesting, showing balance
9771009
// even if an external party transfers unsolicited shares into it
9781010
function testResilientEvenInExternalShareTransfer() external allNetworks allPairs {

0 commit comments

Comments
 (0)