Skip to content

Commit

Permalink
Merge c15be96 into 3b65f6a
Browse files Browse the repository at this point in the history
  • Loading branch information
PierrickGT committed Aug 10, 2022
2 parents 3b65f6a + c15be96 commit 7e00acb
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 8 deletions.
16 changes: 10 additions & 6 deletions contracts/GaugeReward.sol
Original file line number Diff line number Diff line change
Expand Up @@ -229,19 +229,23 @@ contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {
if (_token != _rewardToken.token) {
uint256 _currentTimestamp = block.timestamp;

gaugeRewardTokens[_gauge].push(
RewardToken({ token: _token, timestamp: uint64(_currentTimestamp) })
);
RewardToken memory _newRewardToken = RewardToken({
token: _token,
timestamp: uint64(_currentTimestamp)
});

gaugeRewardTokens[_gauge].push(_newRewardToken);

emit RewardTokenPushed(_gauge, _token, _currentTimestamp);

_rewardToken = _currentRewardToken(_gauge);
_rewardToken = _newRewardToken;
}

uint256 _gaugeRewards = (_tokenAmount * stakerCut) / 1e9;
uint256 _gaugeBalance = gaugeController.getGaugeBalance(_gauge);

// Exchange rate = amount / current staked amount on gauge
uint256 _exchangeRate = (_gaugeRewards * 1e18) / gaugeController.getGaugeBalance(_gauge);
uint256 _exchangeRate = _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0;

gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][
_rewardToken.timestamp
Expand Down Expand Up @@ -457,9 +461,9 @@ contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {

if (_rewards > 0) {
userRewardTokenBalances[_user][_rewardToken.token] += _rewards;
emit RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate);
}

emit RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate);
return _rewards;
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pooltogether/v4-core",
"version": "1.4.0-beta.5",
"version": "1.4.0-beta.6",
"description": "PoolTogether V4 Core Smart Contracts",
"main": "index.js",
"license": "GPL-3.0",
Expand Down
86 changes: 85 additions & 1 deletion test/GaugeReward.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,18 @@ describe('GaugeReward', () => {
);
});

it('exchangeRate should be 0 if gaugeBalance is equal to 0', async () => {
expect(await afterSwap(poolToken, swapAmount, Zero))
.to.emit(gaugeReward, 'RewardsAdded')
.withArgs(
gaugeAddress,
poolToken.address,
swapAmount,
gaugeRewardAmount(swapAmount),
Zero,
);
});

it('should fail if not liquidator', async () => {
await expect(afterSwap(poolToken, swapAmount, gaugeBalance, owner)).to.be.revertedWith(
'GReward/only-liquidator',
Expand Down Expand Up @@ -594,6 +606,28 @@ describe('GaugeReward', () => {
await gaugeReward.getRewards(gaugeAddress, lastPoolRewardToken, owner.address),
).to.equal(userRewardAmount(swapAmount, gaugeBalance, userStakeBalance));
});

it('should return 0 if gaugeBalance is equal to 0', async () => {
await gaugeController.call(
gaugeReward,
'afterIncreaseGauge',
gaugeAddress,
owner.address,
userStakeBalance,
);

await afterSwap(usdcToken, swapAmount, Zero);

await gaugeController.mock.getUserGaugeBalance
.withArgs(gaugeAddress, owner.address)
.returns(userStakeBalance);

const currentRewardToken = await gaugeReward.currentRewardToken(gaugeAddress);

expect(
await gaugeReward.getRewards(gaugeAddress, currentRewardToken, owner.address),
).to.equal(Zero);
});
});

describe('claim()', () => {
Expand Down Expand Up @@ -696,7 +730,7 @@ describe('GaugeReward', () => {
.returns(userStakeBalance);

expect(await gaugeReward.claimAll(gaugeAddress, owner.address))
.to.not.emit(gaugeReward, 'RewardsClaimed')
.to.emit(gaugeReward, 'RewardsClaimed')
.withArgs(
gaugeAddress,
poolToken.address,
Expand All @@ -705,6 +739,32 @@ describe('GaugeReward', () => {
exchangeRate(swapAmount, gaugeBalance),
);
});

it('should not claim any rewards if gaugeBalance is equal to 0', async () => {
await afterSwap(poolToken, swapAmount, Zero);

await gaugeController.call(
gaugeReward,
'afterIncreaseGauge',
gaugeAddress,
owner.address,
userStakeBalance,
);

await gaugeController.mock.getUserGaugeBalance
.withArgs(gaugeAddress, owner.address)
.returns(userStakeBalance);

expect(await gaugeReward.claimAll(gaugeAddress, owner.address))
.to.emit(gaugeReward, 'RewardsClaimed')
.withArgs(
gaugeAddress,
poolToken.address,
owner.address,
Zero,
Zero,
);
});
});

describe('redeem()', () => {
Expand Down Expand Up @@ -746,5 +806,29 @@ describe('GaugeReward', () => {
.to.emit(gaugeReward, 'RewardsRedeemed')
.withArgs(owner.address, owner.address, rewardToken.token, gaugeRewardAmount);
});

it('should not redeem any rewards if gauge balance is equal to 0', async () => {
await gaugeController.call(
gaugeReward,
'afterIncreaseGauge',
gaugeAddress,
owner.address,
userStakeBalance,
);

await afterSwap(poolToken, swapAmount, Zero);

await gaugeController.mock.getUserGaugeBalance
.withArgs(gaugeAddress, owner.address)
.returns(userStakeBalance);

const rewardToken = await gaugeReward.currentRewardToken(gaugeAddress);

await gaugeReward.claim(gaugeAddress, rewardToken, owner.address);

expect(await gaugeReward.redeem(owner.address, rewardToken.token))
.to.emit(gaugeReward, 'RewardsRedeemed')
.withArgs(owner.address, owner.address, rewardToken.token, Zero);
});
});
});

0 comments on commit 7e00acb

Please sign in to comment.