diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 2d11ba890..c81be12e0 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -719,20 +719,6 @@ interface IPool { uint256 amount ) external; - /** - * @notice Rescue and transfer tokens locked in the AToken specified by the given underlying asset - * @param asset The address of the underlying asset of the AToken - * @param token the address of the token - * @param to the address of the recipient - * @param amount the amount of asset to redirect - */ - function rescueTokensFromAToken( - address asset, - address token, - address to, - uint256 amount - ) external; - /** * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. * - E.g. User supplies 100 USDC and gets in return 100 aUSDC diff --git a/contracts/protocol/pool/Pool.sol b/contracts/protocol/pool/Pool.sol index 450094609..0646b85b2 100644 --- a/contracts/protocol/pool/Pool.sol +++ b/contracts/protocol/pool/Pool.sol @@ -772,17 +772,6 @@ contract Pool is VersionedInitializable, IPool, PoolStorage { IERC20(token).safeTransfer(to, amount); } - /// @inheritdoc IPool - function rescueTokensFromAToken( - address asset, - address token, - address to, - uint256 amount - ) external override onlyPoolAdmin { - DataTypes.ReserveData storage reserve = _reserves[asset]; - IAToken(reserve.aTokenAddress).rescueTokens(token, to, amount); - } - /** * @notice Add an asset to the reserve list * @param asset The address of the underlying asset diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index 3d51139de..509f65538 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -327,7 +327,7 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken { address token, address to, uint256 amount - ) external override onlyPool { + ) external override onlyPoolAdmin { require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED); IERC20(token).safeTransfer(to, amount); } diff --git a/test-suites/rescue-tokens.spec.ts b/test-suites/rescue-tokens.spec.ts index 4d6ea2c2a..9ec565a59 100644 --- a/test-suites/rescue-tokens.spec.ts +++ b/test-suites/rescue-tokens.spec.ts @@ -20,7 +20,7 @@ makeSuite('Rescue tokens', (testEnv: TestEnv) => { await evmRevert(snap); }); - it.only('User tries to rescue tokens from Pool (revert expected)', async () => { + it('User tries to rescue tokens from Pool (revert expected)', async () => { const { pool, usdc, @@ -33,7 +33,7 @@ makeSuite('Rescue tokens', (testEnv: TestEnv) => { ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); }); - it.only('PoolAdmin rescue tokens from Pool', async () => { + it('PoolAdmin rescue tokens from Pool', async () => { const { poolAdmin, pool, @@ -60,23 +60,7 @@ makeSuite('Rescue tokens', (testEnv: TestEnv) => { expect(lockerBalanceBefore).to.be.eq(lockerBalanceAfter.sub(amountToLock)); }); - it.only('User tries to rescue tokens from AToken (revert expected)', async () => { - const { - pool, - usdc, - users: [rescuer], - } = testEnv; - - const amount = 1; - const mockATokenAddress = ONE_ADDRESS; - await expect( - pool - .connect(rescuer.signer) - .rescueTokensFromAToken(mockATokenAddress, usdc.address, rescuer.address, amount) - ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); - }); - - it.only('User tries to rescue tokens from AToken calling directly (revert expected)', async () => { + it('User tries to rescue tokens from AToken (revert expected)', async () => { const { usdc, aDai, @@ -86,29 +70,26 @@ makeSuite('Rescue tokens', (testEnv: TestEnv) => { const amount = 1; await expect( aDai.connect(rescuer.signer).rescueTokens(usdc.address, rescuer.address, amount) - ).to.be.revertedWith(CALLER_MUST_BE_POOL); + ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); }); - it.only('User tries to rescue tokens of underlying from AToken (revert expected)', async () => { + it('User tries to rescue tokens of underlying from AToken (revert expected)', async () => { const { poolAdmin, - pool, + aDai, dai, users: [rescuer], } = testEnv; const amount = 1; await expect( - pool - .connect(poolAdmin.signer) - .rescueTokensFromAToken(dai.address, dai.address, rescuer.address, amount) + aDai.connect(poolAdmin.signer).rescueTokens(dai.address, rescuer.address, amount) ).to.be.revertedWith(UNDERLYING_CANNOT_BE_RESCUED); }); - it.only('PoolAdmin rescue tokens from AToken', async () => { + it('PoolAdmin rescue tokens from AToken', async () => { const { poolAdmin, - pool, dai, usdc, aDai, @@ -122,17 +103,12 @@ makeSuite('Rescue tokens', (testEnv: TestEnv) => { await usdc.connect(locker.signer).transfer(aDai.address, amountToLock); const lockerBalanceBefore = await usdc.balanceOf(locker.address); - const poolBalanceBefore = await usdc.balanceOf(pool.address); const aTokenBalanceBefore = await usdc.balanceOf(aDai.address); expect( - await pool - .connect(poolAdmin.signer) - .rescueTokensFromAToken(dai.address, usdc.address, locker.address, amountToLock) + await aDai.connect(poolAdmin.signer).rescueTokens(usdc.address, locker.address, amountToLock) ); - const poolBalanceAfter = await usdc.balanceOf(pool.address); - expect(poolBalanceBefore).to.be.eq(poolBalanceAfter); const aTokenBalanceAfter = await usdc.balanceOf(aDai.address); expect(aTokenBalanceBefore).to.be.eq(aTokenBalanceAfter.add(amountToLock)); const lockerBalanceAfter = await usdc.balanceOf(locker.address);