LCOV - code coverage report
Current view: top level - rewards - EmissionManager.sol (source / functions) Coverage Total Hit
Test: lcov.info.p Lines: 100.0 % 18 18
Test Date: 2024-09-24 09:34:24 Functions: 100.0 % 12 12
Branches: - 0 0

             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                 :             : }
        

Generated by: LCOV version 2.1-1