@@ -5,7 +5,8 @@ import 'forge-std/Test.sol';
55
66import {Errors} from '../../src/contracts/protocol/libraries/helpers/Errors.sol ' ;
77import {UserConfiguration} from '../../src/contracts/protocol/libraries/configuration/UserConfiguration.sol ' ;
8- import {Testhelpers, IERC20 } from './Testhelpers.sol ' ;
8+ import {PullRewardsTransferStrategy} from '../../src/contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol ' ;
9+ import {Testhelpers, TestnetERC20, IERC20 } from './Testhelpers.sol ' ;
910import {StataTokenFactory} from '../../src/contracts/extensions/stata-token/StataTokenFactory.sol ' ;
1011import {StataTokenV2} from '../../src/contracts/extensions/stata-token/StataTokenV2.sol ' ;
1112import {DataTypes} from '../../src/contracts/protocol/libraries/types/DataTypes.sol ' ;
@@ -16,6 +17,11 @@ import {DataTypes} from '../../src/contracts/protocol/libraries/types/DataTypes.
1617contract StataToken_gas_Tests is Testhelpers {
1718 StataTokenV2 public stataToken;
1819
20+ address public rewardTokenOne;
21+ address public rewardTokenTwo;
22+ address public emissionAdmin;
23+ PullRewardsTransferStrategy strategy;
24+
1925 function setUp () public override {
2026 super .setUp ();
2127 StataTokenFactory (report.staticATokenFactoryProxy).createStataTokens (
@@ -24,6 +30,20 @@ contract StataToken_gas_Tests is Testhelpers {
2430 stataToken = StataTokenV2 (
2531 StataTokenFactory (report.staticATokenFactoryProxy).getStataToken (tokenList.usdx)
2632 );
33+
34+ emissionAdmin = vm.addr (1024 );
35+ rewardTokenOne = address (new TestnetERC20 ('LM Reward ERC20 One ' , 'RWD_1 ' , 18 , poolAdmin));
36+ rewardTokenTwo = address (new TestnetERC20 ('LM Reward ERC20 Two ' , 'RWD_2 ' , 18 , poolAdmin));
37+ strategy = new PullRewardsTransferStrategy (
38+ report.rewardsControllerProxy,
39+ emissionAdmin,
40+ emissionAdmin
41+ );
42+
43+ vm.startPrank (poolAdmin);
44+ contracts.emissionManager.setEmissionAdmin (rewardTokenOne, emissionAdmin);
45+ contracts.emissionManager.setEmissionAdmin (rewardTokenTwo, emissionAdmin);
46+ vm.stopPrank ();
2747 }
2848
2949 function test_deposit () external {
@@ -52,4 +72,41 @@ contract StataToken_gas_Tests is Testhelpers {
5272 stataToken.redeemATokens (shares, address (this ), address (this ));
5373 vm.snapshotGasLastCall ('StataTokenV2 ' , 'redeemAToken ' );
5474 }
75+
76+ function test_claimRewards () external {
77+ uint256 amountToDeposit = 1000e8 ;
78+ _supplyOnReserve (address (this ), amountToDeposit, tokenList.usdx);
79+ DataTypes.ReserveDataLegacy memory reserveData = contracts.poolProxy.getReserveData (
80+ tokenList.usdx
81+ );
82+ IERC20 (reserveData.aTokenAddress).approve (address (stataToken), amountToDeposit);
83+ stataToken.depositATokens (amountToDeposit, address (this ));
84+
85+ uint32 endTimestamp = uint32 (vm.getBlockTimestamp () + 15 days);
86+ _setupEmission (
87+ rewardTokenOne,
88+ reserveData.aTokenAddress,
89+ endTimestamp,
90+ 1e14 ,
91+ emissionAdmin,
92+ address (strategy)
93+ );
94+ _setupEmission (
95+ rewardTokenTwo,
96+ reserveData.aTokenAddress,
97+ endTimestamp,
98+ 1e14 ,
99+ emissionAdmin,
100+ address (strategy)
101+ );
102+ stataToken.refreshRewardTokens ();
103+ vm.warp (endTimestamp);
104+
105+ address [] memory rewardTokens = new address [](2 );
106+ rewardTokens[0 ] = rewardTokenOne;
107+ rewardTokens[1 ] = rewardTokenTwo;
108+
109+ stataToken.claimRewards (address (this ), rewardTokens);
110+ vm.snapshotGasLastCall ('StataTokenV2 ' , 'claimRewards ' );
111+ }
55112}
0 commit comments