@@ -5,42 +5,28 @@ import { FlywheelDynamicRewards } from "flywheel-v2/rewards/FlywheelDynamicRewar
5
5
import { FlywheelCore } from "flywheel-v2/FlywheelCore.sol " ;
6
6
import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol " ;
7
7
8
- contract IonicFlywheelDynamicRewards is FlywheelDynamicRewards {
9
- using SafeTransferLib for ERC20 ;
10
-
11
- address public owner;
12
- mapping (address => address ) public strategyVaults;
8
+ interface ICERC20 {
9
+ function plugin () external returns (address );
10
+ }
13
11
14
- modifier onlyOwner () {
15
- require (msg .sender == owner, "Only owner can call this function " );
16
- _;
17
- }
12
+ interface IPlugin {
13
+ function claimRewards () external ;
14
+ }
18
15
19
- constructor (
20
- FlywheelCore _flywheel ,
21
- uint32 _cycleLength
22
- ) FlywheelDynamicRewards (_flywheel, _cycleLength) {
23
- owner = msg .sender ;
24
- }
16
+ contract IonicFlywheelDynamicRewards is FlywheelDynamicRewards {
17
+ using SafeTransferLib for ERC20 ;
25
18
26
- function setVaults (address [] calldata _strategies , address [] calldata _vaults ) external onlyOwner {
27
- uint256 length = _strategies.length ;
28
- require (length == _vaults.length , "INVALID_ARGUMENTS " );
29
- for (uint256 i= 0 ; i< length; i++ ) {
30
- strategyVaults[_strategies[i]] = _vaults[i];
31
- }
32
- }
19
+ constructor (FlywheelCore _flywheel , uint32 _cycleLength ) FlywheelDynamicRewards (_flywheel, _cycleLength) {}
33
20
34
- function getNextCycleRewards (ERC20 strategy ) internal override returns (uint192 ) {
35
- address vault = strategyVaults[address (strategy)];
36
- uint256 rewardAmount = rewardToken.balanceOf (vault);
37
- if (rewardAmount != 0 ) {
38
- rewardToken.safeTransferFrom (
39
- vault,
40
- address (this ),
41
- rewardAmount
42
- );
43
- }
44
- return uint192 (rewardAmount);
21
+ function getNextCycleRewards (ERC20 strategy ) internal override returns (uint192 ) {
22
+ // make it work for both pulled (claimed) and pushed (transferred some other way) rewards
23
+ try ICERC20 (address (strategy)).plugin () returns (address plugin ) {
24
+ try IPlugin (plugin).claimRewards () {} catch {}
25
+ } catch {}
26
+ uint256 rewardAmount = rewardToken.balanceOf (address (strategy));
27
+ if (rewardAmount != 0 ) {
28
+ rewardToken.safeTransferFrom (address (strategy), address (this ), rewardAmount);
45
29
}
30
+ return uint192 (rewardAmount);
31
+ }
46
32
}
0 commit comments