Branch data Line data Source code
1 : : // SPDX-License-Identifier: BUSL-1.1
2 : : pragma solidity ^0.8.10;
3 : :
4 : : import {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';
5 : : import {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';
6 : : import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
7 : :
8 : : /**
9 : : * @title TransferStrategyStorage
10 : : * @author Aave
11 : : **/
12 : : abstract contract TransferStrategyBase is ITransferStrategyBase {
13 : : using GPv2SafeERC20 for IERC20;
14 : :
15 : : address internal immutable INCENTIVES_CONTROLLER;
16 : : address internal immutable REWARDS_ADMIN;
17 : :
18 : : constructor(address incentivesController, address rewardsAdmin) {
19 : 344 : INCENTIVES_CONTROLLER = incentivesController;
20 : 398 : REWARDS_ADMIN = rewardsAdmin;
21 : : }
22 : :
23 : : /**
24 : : * @dev Modifier for incentives controller only functions
25 : : */
26 : : modifier onlyIncentivesController() {
27 : 1903 : require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');
28 : : _;
29 : : }
30 : :
31 : : /**
32 : : * @dev Modifier for reward admin only functions
33 : : */
34 : : modifier onlyRewardsAdmin() {
35 : 1 : require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');
36 : : _;
37 : : }
38 : :
39 : : /// @inheritdoc ITransferStrategyBase
40 : : function getIncentivesController() external view override returns (address) {
41 : 1 : return INCENTIVES_CONTROLLER;
42 : : }
43 : :
44 : : /// @inheritdoc ITransferStrategyBase
45 : : function getRewardsAdmin() external view override returns (address) {
46 : 1 : return REWARDS_ADMIN;
47 : : }
48 : :
49 : : /// @inheritdoc ITransferStrategyBase
50 : : function performTransfer(
51 : : address to,
52 : : address reward,
53 : : uint256 amount
54 : : ) external virtual returns (bool);
55 : :
56 : : /// @inheritdoc ITransferStrategyBase
57 : : function emergencyWithdrawal(
58 : : address token,
59 : : address to,
60 : : uint256 amount
61 : : ) external onlyRewardsAdmin {
62 : 1 : IERC20(token).safeTransfer(to, amount);
63 : :
64 : 1 : emit EmergencyWithdrawal(msg.sender, token, to, amount);
65 : : }
66 : : }
|