Skip to content

Commit

Permalink
fix: Remove rescueTokensFromAToken from Pool
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelmtzinf committed Jan 12, 2022
1 parent 4d526f6 commit 1a32301
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 59 deletions.
14 changes: 0 additions & 14 deletions contracts/interfaces/IPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 0 additions & 11 deletions contracts/protocol/pool/Pool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/tokenization/AToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
42 changes: 9 additions & 33 deletions test-suites/rescue-tokens.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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);
Expand Down

0 comments on commit 1a32301

Please sign in to comment.