// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; import '@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol'; import '../interfaces/IRewarder.sol'; /// @dev Rewarder contract /// @author Alexandas contract Rewarder is IRewarder, Initializable { /// @dev return ERC20 token address IERC20 public override token; mapping(address => bool) internal auths; modifier isAuth() { require(auths[msg.sender], 'Rewarder: caller is not allowed to call'); _; } /// @dev proxy initialize function /// @param _token ERC20 token address /// @param _auths authorized addresses function initialize(IERC20 _token, address[] memory _auths) external initializer { _setToken(_token); for(uint256 i = 0; i < _auths.length; i++) { _auth(_auths[i]); } } /// @dev mint reward to receiver /// @param to receiver address /// @param amount token amount function mint(address to, uint256 amount) external override isAuth { token.transfer(to, amount); emit Minted(msg.sender, to, amount); } function _auth(address auth) internal { auths[auth] = true; emit AuthUpdated(auth); } function _setToken(IERC20 _token) internal { token = _token; emit TokenUpdated(token); } }