From d12318591c3f7e1d9649184c076c672a4a9a5d3e Mon Sep 17 00:00:00 2001 From: Lasse Herskind <16536249+LHerskind@users.noreply.github.com> Date: Wed, 23 Jun 2021 15:09:24 +0200 Subject: [PATCH] fix: Add `claimRewardsToSelf()` to force `receiver = msg.sender` --- .../protocol/tokenization/StaticATokenLM.sol | 6 ++- ...ic-atoken-liquidity-mining-rewards.spec.ts | 40 +++++-------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/contracts/protocol/tokenization/StaticATokenLM.sol b/contracts/protocol/tokenization/StaticATokenLM.sol index 72310b67..a44a5bd3 100644 --- a/contracts/protocol/tokenization/StaticATokenLM.sol +++ b/contracts/protocol/tokenization/StaticATokenLM.sol @@ -493,7 +493,7 @@ contract StaticATokenLM is ERC20 { * @param receiver The address of the receiver of rewards * @param forceUpdate Flag to retrieve latest rewards from `INCENTIVES_CONTROLLER` */ - function claimRewards(address receiver, bool forceUpdate) external { + function claimRewards(address receiver, bool forceUpdate) public { if (forceUpdate) { collectAndUpdateRewards(); } @@ -512,6 +512,10 @@ contract StaticATokenLM is ERC20 { } } + function claimRewardsToSelf(bool forceUpdate) external { + claimRewards(msg.sender, forceUpdate); + } + /** * @dev Update the rewardDebt for a user with balance as his balance * @param user The user to update diff --git a/test-suites/test-aave/mainnet/static-atoken-lm/static-atoken-liquidity-mining-rewards.spec.ts b/test-suites/test-aave/mainnet/static-atoken-lm/static-atoken-liquidity-mining-rewards.spec.ts index 3bfd7182..d82b98d7 100644 --- a/test-suites/test-aave/mainnet/static-atoken-lm/static-atoken-liquidity-mining-rewards.spec.ts +++ b/test-suites/test-aave/mainnet/static-atoken-lm/static-atoken-liquidity-mining-rewards.spec.ts @@ -157,9 +157,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini const claimedRewards4 = await stkAave.balanceOf(userSigner._address); const stkAaveStatic4 = await stkAave.balanceOf(staticAToken.address); - await waitForTx( - await staticAToken.connect(userSigner).claimRewards(userSigner._address, false) - ); + await waitForTx(await staticAToken.connect(userSigner).claimRewardsToSelf(false)); const pendingRewards5 = await staticAToken.getClaimableRewards(userSigner._address); const totPendingRewards5 = await staticAToken.getTotalClaimableRewards(); @@ -315,9 +313,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini const pendingRewards3 = await staticAToken.getClaimableRewards(userSigner._address); const claimedRewards3 = await stkAave.balanceOf(userSigner._address); - await waitForTx( - await staticAToken.connect(userSigner).claimRewards(userSigner._address, true) - ); + await waitForTx(await staticAToken.connect(userSigner).claimRewardsToSelf(true)); const pendingRewards4 = await staticAToken.getClaimableRewards(userSigner._address); const claimedRewards4 = await stkAave.balanceOf(userSigner._address); @@ -394,9 +390,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini // How will my pending look now const pendingRewards3 = await staticAToken.getClaimableRewards(userSigner._address); - await waitForTx( - await staticAToken.connect(userSigner).claimRewards(userSigner._address, true) - ); + await waitForTx(await staticAToken.connect(userSigner).claimRewardsToSelf(true)); const pendingRewards4 = await staticAToken.getClaimableRewards(userSigner._address); const userBalance4 = await stkAave.balanceOf(userSigner._address); @@ -485,9 +479,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini const pendingRewards3 = await staticAToken.getClaimableRewards(userSigner._address); - await waitForTx( - await staticAToken.connect(userSigner).claimRewards(userSigner._address, true) - ); + await waitForTx(await staticAToken.connect(userSigner).claimRewardsToSelf(true)); const pendingRewards4 = await staticAToken.getClaimableRewards(userSigner._address); const userBalance4 = await stkAave.balanceOf(userSigner._address); @@ -530,9 +522,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini const pendingRewards3 = await staticAToken.getClaimableRewards(userSigner._address); const unclaimedRewards3 = await staticAToken.getUnclaimedRewards(userSigner._address); - await waitForTx( - await staticAToken.connect(userSigner).claimRewards(userSigner._address, false) - ); + await waitForTx(await staticAToken.connect(userSigner).claimRewardsToSelf(false)); const pendingRewards4 = await staticAToken.getClaimableRewards(userSigner._address); const userBalance4 = await stkAave.balanceOf(userSigner._address); @@ -606,9 +596,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini for (let i = 0; i < 5; i++) { // This will claim the first half of the collected tokens (those collected at `collectAndUpdateRewards`) - await waitForTx( - await staticAToken.connect(users[i]).claimRewards(await users[i].getAddress(), false) - ); + await waitForTx(await staticAToken.connect(users[i]).claimRewardsToSelf(false)); } let staticATokenTotClaimableAfterTransferAndClaim = await staticAToken.getTotalClaimableRewards(); @@ -748,9 +736,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini for (let i = 0; i < 5; i++) { // This will not do anything, hence there is no rewards in the current contract. - await waitForTx( - await staticAToken.connect(users[i]).claimRewards(await users[i].getAddress(), false) - ); + await waitForTx(await staticAToken.connect(users[i]).claimRewardsToSelf(false)); } let staticATokenTotClaimableAfterTransfer = await staticAToken.getTotalClaimableRewards(); @@ -859,9 +845,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini pendingRewards.push(pendingReward); } for (let i = 0; i < users.length; i++) { - await waitForTx( - await staticAToken.connect(users[i]).claimRewards(await users[i].getAddress(), false) - ); + await waitForTx(await staticAToken.connect(users[i]).claimRewardsToSelf(false)); expect(await stkAave.balanceOf(await users[i].getAddress())).to.be.eq(pendingRewards[i]); } expect(await stkAave.balanceOf(staticAToken.address)).to.be.lt(DUST); @@ -943,9 +927,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini ); const pendingReward = await staticAToken.getClaimableRewards(await users[i].getAddress()); - await waitForTx( - await staticAToken.connect(users[i]).claimRewards(await users[i].getAddress(), true) - ); + await waitForTx(await staticAToken.connect(users[i]).claimRewardsToSelf(true)); expect(await stkAave.balanceOf(await users[i].getAddress())).to.be.eq(pendingReward); } }); @@ -976,7 +958,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini await waitForTx(await staticAToken.connect(user).withdraw(user.address, MAX_UINT_AMOUNT, true)); await staticAToken.collectAndUpdateRewards(); - await staticAToken.connect(user).claimRewards(user.address, false); + await staticAToken.connect(user).claimRewardsToSelf(false); expect(await staticAToken.getLifetimeRewardsClaimed()).to.be.gt(0); expect(await staticAToken.getClaimableRewards(user.address)).to.be.eq(0); @@ -1011,7 +993,7 @@ describe('StaticATokenLM: aToken wrapper with static balances and liquidity mini await staticAToken.connect(user).withdraw(user.address, MAX_UINT_AMOUNT, true); await staticAToken.collectAndUpdateRewards(); - await staticAToken.connect(user).claimRewards(user.address, false); + await staticAToken.connect(user).claimRewardsToSelf(false); await DRE.network.provider.send('evm_mine', []); await DRE.network.provider.send('evm_setAutomine', [true]);