Branch data Line data Source code
1 : : // SPDX-License-Identifier: BUSL-1.1
2 : : pragma solidity ^0.8.10;
3 : :
4 : : import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
5 : : import {IEACAggregatorProxy} from '../helpers/interfaces/IEACAggregatorProxy.sol';
6 : : import {IEmissionManager} from './interfaces/IEmissionManager.sol';
7 : : import {ITransferStrategyBase} from './interfaces/ITransferStrategyBase.sol';
8 : : import {IRewardsController} from './interfaces/IRewardsController.sol';
9 : : import {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';
10 : :
11 : : /**
12 : : * @title EmissionManager
13 : : * @author Aave
14 : : * @notice It manages the list of admins of reward emissions and provides functions to control reward emissions.
15 : : */
16 : : contract EmissionManager is Ownable, IEmissionManager {
17 : : // reward => emissionAdmin
18 : : mapping(address => address) internal _emissionAdmins;
19 : :
20 : : IRewardsController internal _rewardsController;
21 : :
22 : : /**
23 : : * @dev Only emission admin of the given reward can call functions marked by this modifier.
24 : : **/
25 : : modifier onlyEmissionAdmin(address reward) {
26 : 2 : require(msg.sender == _emissionAdmins[reward], 'ONLY_EMISSION_ADMIN');
27 : : _;
28 : : }
29 : :
30 : : /**
31 : : * Constructor.
32 : : * @param owner The address of the owner
33 : : */
34 : : constructor(address owner) {
35 : 91 : transferOwnership(owner);
36 : : }
37 : :
38 : : /// @inheritdoc IEmissionManager
39 : : function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external override {
40 : 9023 : for (uint256 i = 0; i < config.length; i++) {
41 : 9023 : require(_emissionAdmins[config[i].reward] == msg.sender, 'ONLY_EMISSION_ADMIN');
42 : : }
43 : 9023 : _rewardsController.configureAssets(config);
44 : : }
45 : :
46 : : /// @inheritdoc IEmissionManager
47 : : function setTransferStrategy(
48 : : address reward,
49 : : ITransferStrategyBase transferStrategy
50 : : ) external override onlyEmissionAdmin(reward) {
51 : 2 : _rewardsController.setTransferStrategy(reward, transferStrategy);
52 : : }
53 : :
54 : : /// @inheritdoc IEmissionManager
55 : : function setRewardOracle(
56 : : address reward,
57 : : IEACAggregatorProxy rewardOracle
58 : : ) external override onlyEmissionAdmin(reward) {
59 : 2 : _rewardsController.setRewardOracle(reward, rewardOracle);
60 : : }
61 : :
62 : : /// @inheritdoc IEmissionManager
63 : : function setDistributionEnd(
64 : : address asset,
65 : : address reward,
66 : : uint32 newDistributionEnd
67 : : ) external override onlyEmissionAdmin(reward) {
68 : 2 : _rewardsController.setDistributionEnd(asset, reward, newDistributionEnd);
69 : : }
70 : :
71 : : /// @inheritdoc IEmissionManager
72 : : function setEmissionPerSecond(
73 : : address asset,
74 : : address[] calldata rewards,
75 : : uint88[] calldata newEmissionsPerSecond
76 : : ) external override {
77 : 2 : for (uint256 i = 0; i < rewards.length; i++) {
78 : 2 : require(_emissionAdmins[rewards[i]] == msg.sender, 'ONLY_EMISSION_ADMIN');
79 : : }
80 : 2 : _rewardsController.setEmissionPerSecond(asset, rewards, newEmissionsPerSecond);
81 : : }
82 : :
83 : : /// @inheritdoc IEmissionManager
84 : : function setClaimer(address user, address claimer) external override onlyOwner {
85 : 1004 : _rewardsController.setClaimer(user, claimer);
86 : : }
87 : :
88 : : /// @inheritdoc IEmissionManager
89 : : function setEmissionAdmin(address reward, address admin) external override onlyOwner {
90 : 41 : address oldAdmin = _emissionAdmins[reward];
91 : 41 : _emissionAdmins[reward] = admin;
92 : 41 : emit EmissionAdminUpdated(reward, oldAdmin, admin);
93 : : }
94 : :
95 : : /// @inheritdoc IEmissionManager
96 : : function setRewardsController(address controller) external override onlyOwner {
97 : 680 : _rewardsController = IRewardsController(controller);
98 : : }
99 : :
100 : : /// @inheritdoc IEmissionManager
101 : : function getRewardsController() external view override returns (IRewardsController) {
102 : 2 : return _rewardsController;
103 : : }
104 : :
105 : : /// @inheritdoc IEmissionManager
106 : : function getEmissionAdmin(address reward) external view override returns (address) {
107 : 6 : return _emissionAdmins[reward];
108 : : }
109 : : }
|